iubenda Cookie Solution for GDPR - Version 3.0.0

Version Description

  • New: Support Privacy Policy
  • New: Support Terms and Conditions
  • New: Generate your cookie solution with few clicks
  • New: Use Radar to scan current website
Download this release

Release Info

Developer iubenda
Plugin Icon 128x128 iubenda Cookie Solution for GDPR
Version 3.0.0
Comparing to
See all releases

Code changes from version 2.5.91 to 3.0.0

Files changed (95) hide show
  1. assets/css/admin.css +57 -0
  2. assets/css/style.css +2354 -0
  3. assets/fonts/HKGrotesk-Bold.eot +0 -0
  4. assets/fonts/HKGrotesk-Bold.woff +0 -0
  5. assets/fonts/HKGrotesk-Bold.woff2 +0 -0
  6. assets/fonts/HKGrotesk-Regular.eot +0 -0
  7. assets/fonts/HKGrotesk-Regular.woff +0 -0
  8. assets/fonts/HKGrotesk-Regular.woff2 +0 -0
  9. assets/images/banner_failure.svg +1 -0
  10. assets/images/banner_success.svg +1 -0
  11. assets/images/checkboxes/button_style_dark.svg +1 -0
  12. assets/images/checkboxes/button_style_light.svg +1 -0
  13. assets/images/checkboxes/cons_icon.svg +1 -0
  14. assets/images/checkboxes/cs_icon.svg +1 -0
  15. assets/images/checkboxes/eu_only_icon.svg +1 -0
  16. assets/images/checkboxes/pp_icon.svg +1 -0
  17. assets/images/checkboxes/tc_icon.svg +1 -0
  18. assets/images/checkboxes/worldwide.svg +1 -0
  19. assets/images/iubenda_logo.svg +1 -0
  20. assets/images/list_radar_cons.svg +1 -0
  21. assets/images/list_radar_cs.svg +1 -0
  22. assets/images/list_radar_pp.svg +1 -0
  23. assets/images/list_radar_tc.svg +1 -0
  24. assets/images/modals/modal_almost_there.svg +1 -0
  25. assets/images/modals/modal_no_website_found.svg +1 -0
  26. assets/images/modals/modal_pp_created.svg +1 -0
  27. assets/images/modals/modal_sync.svg +1 -0
  28. assets/images/pc_screen_icon.svg +1 -0
  29. assets/images/question_mark.svg +1 -0
  30. assets/images/question_mark_light.svg +1 -0
  31. assets/images/service_cards/cons_icon.svg +1 -0
  32. assets/images/service_cards/cs_icon.svg +1 -0
  33. assets/images/service_cards/pp_icon.svg +1 -0
  34. assets/images/service_cards/tc_icon.svg +1 -0
  35. assets/images/warning-icon.svg +1 -0
  36. assets/images/welcome_screen_bg.svg +1 -0
  37. assets/images/white_checkmark.svg +1 -0
  38. assets/images/white_x.svg +1 -0
  39. assets/js/admin.js +697 -0
  40. {js → assets/js}/frontend.js +1 -1
  41. assets/js/tabs.js +25 -0
  42. css/admin.css +0 -164
  43. includes/CookieSolutionGenerator.php +144 -0
  44. includes/PrivacyPolicyGenerator.php +31 -0
  45. includes/ProductHelper.php +102 -0
  46. includes/QuickGeneratorService.php +600 -0
  47. includes/RadarService.php +170 -0
  48. includes/ServiceRating.php +94 -0
  49. includes/forms-list-table.php +91 -18
  50. includes/forms.php +1 -3
  51. includes/settings.php +969 -1571
  52. includes/widget/IubendaLegalWidget.php +224 -0
  53. iubenda_cookie_solution.php +331 -53
  54. js/admin.js +0 -282
  55. languages/iubenda-cookie-law-solution-it_IT.mo +0 -0
  56. languages/iubenda-cookie-law-solution-it_IT.po +0 -863
  57. languages/iubenda-cookie-law-solution.pot +0 -647
  58. languages/iubenda-it_IT.mo +0 -0
  59. languages/iubenda-it_IT.po +1038 -0
  60. languages/iubenda.pot +875 -0
  61. readme.txt +212 -116
  62. views/cons-configuration.php +68 -0
  63. views/cons-single-form.php +285 -0
  64. views/cs-configuration.php +40 -0
  65. views/frontpage.php +42 -0
  66. views/integrate-setup.php +153 -0
  67. views/partials/alert.php +13 -0
  68. views/partials/auto_detect_forms.php +33 -0
  69. views/partials/bannerPosition.php +52 -0
  70. views/partials/bannerStyle.php +19 -0
  71. views/partials/breadcrumb.php +21 -0
  72. views/partials/buttonPosition.php +77 -0
  73. views/partials/buttonStyle.php +23 -0
  74. views/partials/csGeneralSettings.php +146 -0
  75. views/partials/csManualConfiguration.php +17 -0
  76. views/partials/csPluginSettings.php +135 -0
  77. views/partials/csSimplifiedConfiguration.php +97 -0
  78. views/partials/footer.php +5 -0
  79. views/partials/frontpage_main_box.php +59 -0
  80. views/partials/header.php +14 -0
  81. views/partials/header_scanned.php +5 -0
  82. views/partials/integrateFooter.php +5 -0
  83. views/partials/languagesTabs.php +29 -0
  84. views/partials/modals/modal_almost_there.php +75 -0
  85. views/partials/modals/modal_no_website_found.php +14 -0
  86. views/partials/modals/modal_ops_embed_invalid.php +13 -0
  87. views/partials/modals/modal_pp_created.php +11 -0
  88. views/partials/modals/modal_select_language.php +79 -0
  89. views/partials/modals/modal_sync.php +9 -0
  90. views/partials/product-card.php +48 -0
  91. views/partials/siteInfo.php +20 -0
  92. views/partials/welcomeScreenHeader.php +4 -0
  93. views/pp-configuration.php +41 -0
  94. views/products-page.php +34 -0
  95. views/tc-configuration.php +135 -0
assets/css/admin.css ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .iubenda-notice {
2
+ border-left-color: #1CC691;
3
+ padding-left: 0;
4
+ display: flex;
5
+ justify-content: flex-start;
6
+ align-items: center;
7
+ }
8
+ .iubenda-notice::before {
9
+ display: inline-block;
10
+ content: '';
11
+ height: 49px;
12
+ width: 22px;
13
+ margin: 1em 2em;
14
+ background-size: contain;
15
+ background-position: center center;
16
+ background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyMjFweCIgaGVpZ2h0PSI0OTBweCIgdmlld0JveD0iMCAwIDIyMSA0OTAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICAgICAgICA8dGl0bGU+aXViZW5kYSB2ZWN0b3IgbG9nb192M19vbmx5X2lfZ3JlZW48L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4gICAgICAgIDxnIGlkPSJpdWJlbmRhLXZlY3Rvci1sb2dvX3YzX29ubHlfaV9ncmVlbiIgZmlsbD0iIzFDQzY5MSIgZmlsbC1ydWxlPSJub256ZXJvIj4gICAgICAgICAgICA8cGF0aCBkPSJNMjIwLjYsMTA4LjQgQzIyMC42LDEzNSAyMTAuOCwxNTkuMyAxOTQuNSwxNzguMSBMMjE3LjksNDg5LjQgTDguNSw0ODkuNCBMMzEuMiwxODMuNSBDMTEuOSwxNjQuMiAwLDEzNy43IDAsMTA4LjQgQzAsNDguNyA0OS40LDAuNCAxMTAuMywwLjQgQzE3MS4yLDAuNCAyMjAuNiw0OC43IDIyMC42LDEwOC40IFogTTExMC4zLDEzMyBDMTI1LDEzMyAxMzYuOCwxMjEuMiAxMzYuOCwxMDYuNyBDMTM2LjgsOTIuMiAxMjQuOSw4MC41IDExMC4zLDgwLjUgQzk1LjYsODAuNSA4My44LDkyLjMgODMuOCwxMDYuNyBDODMuOCwxMjEuMyA5NS42LDEzMyAxMTAuMywxMzMgWiBNMTMxLjIsMjI3IEw5NC45LDI2My4zIEw5NC45LDQwMy44IEwxMzEuMiw0MDMuOCBMMTMxLjIsMjI3IFoiIGlkPSJTaGFwZSI+PC9wYXRoPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+);
17
+ }
18
+ .iubenda-notice .notice-question {
19
+ margin-bottom: 5px;
20
+ display: block;
21
+ }
22
+ .iubenda-notice .notice-reply {
23
+ margin-top: 0;
24
+ }
25
+ .iubenda-notice .step-2 {
26
+ display: none;
27
+ }
28
+ .iubenda-notice .reply-yes {
29
+ margin-right: 10px;
30
+ }
31
+ .iubenda-notice .reply-yes:before,
32
+ .iubenda-notice .reply-no:before {
33
+ font-family: dashicons;
34
+ display: inline-block;
35
+ line-height: 1;
36
+ font-weight: 400;
37
+ font-style: normal;
38
+ speak: none;
39
+ text-decoration: inherit;
40
+ text-transform: none;
41
+ text-rendering: auto;
42
+ -webkit-font-smoothing: antialiased;
43
+ -moz-osx-font-smoothing: grayscale;
44
+ width: 20px;
45
+ height: 20px;
46
+ font-size: 20px;
47
+ vertical-align: top;
48
+ text-align: center;
49
+ transition: color .1s ease-in;
50
+ text-decoration: none;
51
+ }
52
+ .iubenda-notice .reply-yes:before {
53
+ content: "\f147";
54
+ }
55
+ .iubenda-notice .reply-no:before {
56
+ content: "\f335";
57
+ }
assets/css/style.css ADDED
@@ -0,0 +1,2354 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @charset "UTF-8";
2
+ @font-face {
3
+ font-family: "hkgrotesk";
4
+ src: url("../fonts/HKGrotesk-Regular.eot");
5
+ src: url("../fonts/HKGrotesk-Regular.eot?#iefix") format("embedded-opentype"), url("../fonts/HKGrotesk-Regular.woff2") format("woff2"), url("../fonts/HKGrotesk-Regular.woff") format("woff");
6
+ font-weight: 400;
7
+ font-style: normal;
8
+ font-display: swap;
9
+ }
10
+ @font-face {
11
+ font-family: "hkgrotesk";
12
+ src: url("../fonts/HKGrotesk-Bold.eot");
13
+ src: url("../fonts/hk-grotesk/HKGrotesk-Bold.eot?#iefix") format("embedded-opentype"), url("../fonts/HKGrotesk-Bold.woff2") format("woff2"), url("../fonts/hk-grotesk/HKGrotesk-Bold.woff") format("woff");
14
+ font-weight: 700;
15
+ font-style: normal;
16
+ font-display: swap;
17
+ }
18
+ .text-xs, .link-helper {
19
+ font-size: 0.8rem;
20
+ }
21
+
22
+ .text-sm {
23
+ font-size: 0.9rem;
24
+ }
25
+
26
+ .text-regular {
27
+ font-size: 1rem;
28
+ }
29
+
30
+ .text-md {
31
+ font-size: 1.125rem;
32
+ }
33
+
34
+ .text-lg {
35
+ font-size: 1.5rem;
36
+ }
37
+
38
+ .text-xl {
39
+ font-size: 2rem;
40
+ }
41
+
42
+ .text-gray-lighter {
43
+ color: #808080;
44
+ }
45
+
46
+ .text-gray {
47
+ color: #595959;
48
+ }
49
+
50
+ .text-warning {
51
+ color: #804123;
52
+ }
53
+
54
+ .text-green {
55
+ color: #1cc691;
56
+ }
57
+
58
+ h1 {
59
+ line-height: 1.25;
60
+ }
61
+
62
+ h4 {
63
+ margin: 0;
64
+ margin-bottom: 1rem;
65
+ color: #585858;
66
+ font-size: 0.95rem;
67
+ }
68
+
69
+ .m-0 {
70
+ margin: 0 !important;
71
+ }
72
+
73
+ .mt-0,
74
+ .my-0 {
75
+ margin-top: 0 !important;
76
+ }
77
+
78
+ .mr-0,
79
+ .mx-0 {
80
+ margin-right: 0 !important;
81
+ }
82
+
83
+ .mb-0,
84
+ .my-0 {
85
+ margin-bottom: 0 !important;
86
+ }
87
+
88
+ .ml-0,
89
+ .mx-0 {
90
+ margin-left: 0 !important;
91
+ }
92
+
93
+ .m-1 {
94
+ margin: 0.25rem !important;
95
+ }
96
+
97
+ .mt-1,
98
+ .my-1 {
99
+ margin-top: 0.25rem !important;
100
+ }
101
+
102
+ .mr-1,
103
+ .mx-1 {
104
+ margin-right: 0.25rem !important;
105
+ }
106
+
107
+ .mb-1,
108
+ .my-1 {
109
+ margin-bottom: 0.25rem !important;
110
+ }
111
+
112
+ .ml-1,
113
+ .mx-1 {
114
+ margin-left: 0.25rem !important;
115
+ }
116
+
117
+ .m-2 {
118
+ margin: 0.5rem !important;
119
+ }
120
+
121
+ .mt-2,
122
+ .my-2 {
123
+ margin-top: 0.5rem !important;
124
+ }
125
+
126
+ .mr-2,
127
+ .mx-2 {
128
+ margin-right: 0.5rem !important;
129
+ }
130
+
131
+ .mb-2,
132
+ .my-2 {
133
+ margin-bottom: 0.5rem !important;
134
+ }
135
+
136
+ .ml-2,
137
+ .mx-2 {
138
+ margin-left: 0.5rem !important;
139
+ }
140
+
141
+ .m-3 {
142
+ margin: 1rem !important;
143
+ }
144
+
145
+ .mt-3,
146
+ .my-3 {
147
+ margin-top: 1rem !important;
148
+ }
149
+
150
+ .mr-3,
151
+ .mx-3 {
152
+ margin-right: 1rem !important;
153
+ }
154
+
155
+ .mb-3,
156
+ .my-3 {
157
+ margin-bottom: 1rem !important;
158
+ }
159
+
160
+ .ml-3,
161
+ .mx-3 {
162
+ margin-left: 1rem !important;
163
+ }
164
+
165
+ .m-4 {
166
+ margin: 1.5rem !important;
167
+ }
168
+
169
+ .mt-4,
170
+ .my-4 {
171
+ margin-top: 1.5rem !important;
172
+ }
173
+
174
+ .mr-4,
175
+ .mx-4 {
176
+ margin-right: 1.5rem !important;
177
+ }
178
+
179
+ .mb-4,
180
+ .my-4 {
181
+ margin-bottom: 1.5rem !important;
182
+ }
183
+
184
+ .ml-4,
185
+ .mx-4 {
186
+ margin-left: 1.5rem !important;
187
+ }
188
+
189
+ .m-5 {
190
+ margin: 3rem !important;
191
+ }
192
+
193
+ .mt-5,
194
+ .my-5 {
195
+ margin-top: 3rem !important;
196
+ }
197
+
198
+ .mr-5,
199
+ .mx-5 {
200
+ margin-right: 3rem !important;
201
+ }
202
+
203
+ .mb-5,
204
+ .my-5 {
205
+ margin-bottom: 3rem !important;
206
+ }
207
+
208
+ .ml-5,
209
+ .mx-5 {
210
+ margin-left: 3rem !important;
211
+ }
212
+
213
+ .p-0 {
214
+ padding: 0 !important;
215
+ }
216
+
217
+ .pt-0,
218
+ .py-0 {
219
+ padding-top: 0 !important;
220
+ }
221
+
222
+ .pr-0,
223
+ .px-0 {
224
+ padding-right: 0 !important;
225
+ }
226
+
227
+ .pb-0,
228
+ .py-0 {
229
+ padding-bottom: 0 !important;
230
+ }
231
+
232
+ .pl-0,
233
+ .px-0 {
234
+ padding-left: 0 !important;
235
+ }
236
+
237
+ .p-1 {
238
+ padding: 0.25rem !important;
239
+ }
240
+
241
+ .pt-1,
242
+ .py-1 {
243
+ padding-top: 0.25rem !important;
244
+ }
245
+
246
+ .pr-1,
247
+ .px-1 {
248
+ padding-right: 0.25rem !important;
249
+ }
250
+
251
+ .pb-1,
252
+ .py-1 {
253
+ padding-bottom: 0.25rem !important;
254
+ }
255
+
256
+ .pl-1,
257
+ .px-1 {
258
+ padding-left: 0.25rem !important;
259
+ }
260
+
261
+ .p-2 {
262
+ padding: 0.5rem !important;
263
+ }
264
+
265
+ .pt-2,
266
+ .py-2 {
267
+ padding-top: 0.5rem !important;
268
+ }
269
+
270
+ .pr-2,
271
+ .px-2 {
272
+ padding-right: 0.5rem !important;
273
+ }
274
+
275
+ .pb-2,
276
+ .py-2 {
277
+ padding-bottom: 0.5rem !important;
278
+ }
279
+
280
+ .pl-2,
281
+ .px-2 {
282
+ padding-left: 0.5rem !important;
283
+ }
284
+
285
+ .p-3 {
286
+ padding: 1rem !important;
287
+ }
288
+
289
+ .pt-3,
290
+ .py-3 {
291
+ padding-top: 1rem !important;
292
+ }
293
+
294
+ .pr-3,
295
+ .px-3 {
296
+ padding-right: 1rem !important;
297
+ }
298
+
299
+ .pb-3,
300
+ .py-3 {
301
+ padding-bottom: 1rem !important;
302
+ }
303
+
304
+ .pl-3,
305
+ .px-3 {
306
+ padding-left: 1rem !important;
307
+ }
308
+
309
+ .p-4 {
310
+ padding: 1.5rem !important;
311
+ }
312
+
313
+ .pt-4,
314
+ .py-4 {
315
+ padding-top: 1.5rem !important;
316
+ }
317
+
318
+ .pr-4,
319
+ .px-4 {
320
+ padding-right: 1.5rem !important;
321
+ }
322
+
323
+ .pb-4,
324
+ .py-4 {
325
+ padding-bottom: 1.5rem !important;
326
+ }
327
+
328
+ .pl-4,
329
+ .px-4 {
330
+ padding-left: 1.5rem !important;
331
+ }
332
+
333
+ .p-5 {
334
+ padding: 3rem !important;
335
+ }
336
+
337
+ .pt-5,
338
+ .py-5 {
339
+ padding-top: 3rem !important;
340
+ }
341
+
342
+ .pr-5,
343
+ .px-5 {
344
+ padding-right: 3rem !important;
345
+ }
346
+
347
+ .pb-5,
348
+ .py-5 {
349
+ padding-bottom: 3rem !important;
350
+ }
351
+
352
+ .pl-5,
353
+ .px-5 {
354
+ padding-left: 3rem !important;
355
+ }
356
+
357
+ @media (min-width: 768px) {
358
+ .m-lg-0 {
359
+ margin: 0 !important;
360
+ }
361
+
362
+ .mt-lg-0,
363
+ .my-lg-0 {
364
+ margin-top: 0 !important;
365
+ }
366
+
367
+ .mr-lg-0,
368
+ .mx-lg-0 {
369
+ margin-right: 0 !important;
370
+ }
371
+
372
+ .mb-lg-0,
373
+ .my-lg-0 {
374
+ margin-bottom: 0 !important;
375
+ }
376
+
377
+ .ml-lg-0,
378
+ .mx-lg-0 {
379
+ margin-left: 0 !important;
380
+ }
381
+
382
+ .m-lg-1 {
383
+ margin: 0.25rem !important;
384
+ }
385
+
386
+ .mt-lg-1,
387
+ .my-lg-1 {
388
+ margin-top: 0.25rem !important;
389
+ }
390
+
391
+ .mr-lg-1,
392
+ .mx-lg-1 {
393
+ margin-right: 0.25rem !important;
394
+ }
395
+
396
+ .mb-lg-1,
397
+ .my-lg-1 {
398
+ margin-bottom: 0.25rem !important;
399
+ }
400
+
401
+ .ml-lg-1,
402
+ .mx-lg-1 {
403
+ margin-left: 0.25rem !important;
404
+ }
405
+
406
+ .m-lg-2 {
407
+ margin: 0.5rem !important;
408
+ }
409
+
410
+ .mt-lg-2,
411
+ .my-lg-2 {
412
+ margin-top: 0.5rem !important;
413
+ }
414
+
415
+ .mr-lg-2,
416
+ .mx-lg-2 {
417
+ margin-right: 0.5rem !important;
418
+ }
419
+
420
+ .mb-lg-2,
421
+ .my-lg-2 {
422
+ margin-bottom: 0.5rem !important;
423
+ }
424
+
425
+ .ml-lg-2,
426
+ .mx-lg-2 {
427
+ margin-left: 0.5rem !important;
428
+ }
429
+
430
+ .m-lg-3 {
431
+ margin: 1rem !important;
432
+ }
433
+
434
+ .mt-lg-3,
435
+ .my-lg-3 {
436
+ margin-top: 1rem !important;
437
+ }
438
+
439
+ .mr-lg-3,
440
+ .mx-lg-3 {
441
+ margin-right: 1rem !important;
442
+ }
443
+
444
+ .mb-lg-3,
445
+ .my-lg-3 {
446
+ margin-bottom: 1rem !important;
447
+ }
448
+
449
+ .ml-lg-3,
450
+ .mx-lg-3 {
451
+ margin-left: 1rem !important;
452
+ }
453
+
454
+ .m-lg-4 {
455
+ margin: 1.5rem !important;
456
+ }
457
+
458
+ .mt-lg-4,
459
+ .my-lg-4 {
460
+ margin-top: 1.5rem !important;
461
+ }
462
+
463
+ .mr-lg-4,
464
+ .mx-lg-4 {
465
+ margin-right: 1.5rem !important;
466
+ }
467
+
468
+ .mb-lg-4,
469
+ .my-lg-4 {
470
+ margin-bottom: 1.5rem !important;
471
+ }
472
+
473
+ .ml-lg-4,
474
+ .mx-lg-4 {
475
+ margin-left: 1.5rem !important;
476
+ }
477
+
478
+ .m-lg-5 {
479
+ margin: 3rem !important;
480
+ }
481
+
482
+ .mt-lg-5,
483
+ .my-lg-5 {
484
+ margin-top: 3rem !important;
485
+ }
486
+
487
+ .mr-lg-5,
488
+ .mx-lg-5 {
489
+ margin-right: 3rem !important;
490
+ }
491
+
492
+ .mb-lg-5,
493
+ .my-lg-5 {
494
+ margin-bottom: 3rem !important;
495
+ }
496
+
497
+ .ml-lg-5,
498
+ .mx-lg-5 {
499
+ margin-left: 3rem !important;
500
+ }
501
+
502
+ .p-lg-0 {
503
+ padding: 0 !important;
504
+ }
505
+
506
+ .pt-lg-0,
507
+ .py-lg-0 {
508
+ padding-top: 0 !important;
509
+ }
510
+
511
+ .pr-lg-0,
512
+ .px-lg-0 {
513
+ padding-right: 0 !important;
514
+ }
515
+
516
+ .pb-lg-0,
517
+ .py-lg-0 {
518
+ padding-bottom: 0 !important;
519
+ }
520
+
521
+ .pl-lg-0,
522
+ .px-lg-0 {
523
+ padding-left: 0 !important;
524
+ }
525
+
526
+ .p-lg-1 {
527
+ padding: 0.25rem !important;
528
+ }
529
+
530
+ .pt-lg-1,
531
+ .py-lg-1 {
532
+ padding-top: 0.25rem !important;
533
+ }
534
+
535
+ .pr-lg-1,
536
+ .px-lg-1 {
537
+ padding-right: 0.25rem !important;
538
+ }
539
+
540
+ .pb-lg-1,
541
+ .py-lg-1 {
542
+ padding-bottom: 0.25rem !important;
543
+ }
544
+
545
+ .pl-lg-1,
546
+ .px-lg-1 {
547
+ padding-left: 0.25rem !important;
548
+ }
549
+
550
+ .p-lg-2 {
551
+ padding: 0.5rem !important;
552
+ }
553
+
554
+ .pt-lg-2,
555
+ .py-lg-2 {
556
+ padding-top: 0.5rem !important;
557
+ }
558
+
559
+ .pr-lg-2,
560
+ .px-lg-2 {
561
+ padding-right: 0.5rem !important;
562
+ }
563
+
564
+ .pb-lg-2,
565
+ .py-lg-2 {
566
+ padding-bottom: 0.5rem !important;
567
+ }
568
+
569
+ .pl-lg-2,
570
+ .px-lg-2 {
571
+ padding-left: 0.5rem !important;
572
+ }
573
+
574
+ .p-lg-3 {
575
+ padding: 1rem !important;
576
+ }
577
+
578
+ .pt-lg-3,
579
+ .py-lg-3 {
580
+ padding-top: 1rem !important;
581
+ }
582
+
583
+ .pr-lg-3,
584
+ .px-lg-3 {
585
+ padding-right: 1rem !important;
586
+ }
587
+
588
+ .pb-lg-3,
589
+ .py-lg-3 {
590
+ padding-bottom: 1rem !important;
591
+ }
592
+
593
+ .pl-lg-3,
594
+ .px-lg-3 {
595
+ padding-left: 1rem !important;
596
+ }
597
+
598
+ .p-lg-4 {
599
+ padding: 1.5rem !important;
600
+ }
601
+
602
+ .pt-lg-4,
603
+ .py-lg-4 {
604
+ padding-top: 1.5rem !important;
605
+ }
606
+
607
+ .pr-lg-4,
608
+ .px-lg-4 {
609
+ padding-right: 1.5rem !important;
610
+ }
611
+
612
+ .pb-lg-4,
613
+ .py-lg-4 {
614
+ padding-bottom: 1.5rem !important;
615
+ }
616
+
617
+ .pl-lg-4,
618
+ .px-lg-4 {
619
+ padding-left: 1.5rem !important;
620
+ }
621
+
622
+ .p-lg-5 {
623
+ padding: 3rem !important;
624
+ }
625
+
626
+ .pt-lg-5,
627
+ .py-lg-5 {
628
+ padding-top: 3rem !important;
629
+ }
630
+
631
+ .pr-lg-5,
632
+ .px-lg-5 {
633
+ padding-right: 3rem !important;
634
+ }
635
+
636
+ .pb-lg-5,
637
+ .py-lg-5 {
638
+ padding-bottom: 3rem !important;
639
+ }
640
+
641
+ .pl-lg-5,
642
+ .px-lg-5 {
643
+ padding-left: 3rem !important;
644
+ }
645
+ }
646
+ html,
647
+ body {
648
+ font-family: "hkgrotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
649
+ font-weight: 400;
650
+ margin: 0;
651
+ height: 100vh;
652
+ background: #f0f0f1;
653
+ color: #333;
654
+ }
655
+
656
+ * {
657
+ -webkit-box-sizing: border-box;
658
+ box-sizing: border-box;
659
+ }
660
+
661
+ header {
662
+ padding: 1.5rem 0 1.5rem 0;
663
+ }
664
+
665
+ a {
666
+ text-decoration: none;
667
+ color: #333;
668
+ }
669
+ a:hover, a:focus {
670
+ color: currentColor;
671
+ -webkit-box-shadow: none;
672
+ box-shadow: none;
673
+ }
674
+
675
+ ul {
676
+ list-style: none;
677
+ }
678
+
679
+ hr {
680
+ margin: 0;
681
+ border: 0;
682
+ border-top: 1px solid rgba(151, 151, 151, 0.28);
683
+ }
684
+
685
+ .d-block {
686
+ display: block !important;
687
+ }
688
+
689
+ .d-flex {
690
+ display: -webkit-box !important;
691
+ display: -ms-flexbox !important;
692
+ display: flex !important;
693
+ }
694
+
695
+ .d-inline {
696
+ display: inline !important;
697
+ }
698
+
699
+ .d-inline-block {
700
+ display: inline-block !important;
701
+ }
702
+
703
+ .d-none {
704
+ display: none !important;
705
+ }
706
+
707
+ .text-left {
708
+ text-align: left !important;
709
+ }
710
+
711
+ .text-center, .modalSync {
712
+ text-align: center !important;
713
+ }
714
+
715
+ .text-right {
716
+ text-align: right !important;
717
+ }
718
+
719
+ .text-light {
720
+ font-weight: light !important;
721
+ }
722
+
723
+ .text-normal {
724
+ font-weight: normal !important;
725
+ }
726
+
727
+ .text-bold {
728
+ font-weight: bold !important;
729
+ }
730
+
731
+ @media (min-width: 768px) {
732
+ .d-lg-block {
733
+ display: block !important;
734
+ }
735
+
736
+ .d-lg-flex {
737
+ display: -webkit-box !important;
738
+ display: -ms-flexbox !important;
739
+ display: flex !important;
740
+ }
741
+
742
+ .d-lg-inline {
743
+ display: inline !important;
744
+ }
745
+
746
+ .d-lg-inline-block {
747
+ display: inline-block !important;
748
+ }
749
+
750
+ .d-lg-none {
751
+ display: none !important;
752
+ }
753
+
754
+ .text-lg-left {
755
+ text-align: left !important;
756
+ }
757
+
758
+ .text-lg-center {
759
+ text-align: center !important;
760
+ }
761
+
762
+ .text-lg-right {
763
+ text-align: right !important;
764
+ }
765
+
766
+ .text-lg-light {
767
+ font-weight: light !important;
768
+ }
769
+
770
+ .text-lg-normal {
771
+ font-weight: normal !important;
772
+ }
773
+
774
+ .text-lg-bold {
775
+ font-weight: bold !important;
776
+ }
777
+ }
778
+ .flex-fill {
779
+ -webkit-box-flex: 1;
780
+ -ms-flex: 1;
781
+ flex: 1;
782
+ }
783
+
784
+ .flex-wrap {
785
+ -ms-flex-wrap: wrap;
786
+ flex-wrap: wrap;
787
+ }
788
+
789
+ .flex-shrink {
790
+ -ms-flex-negative: 0;
791
+ flex-shrink: 0;
792
+ }
793
+
794
+ .flex-direction-column {
795
+ -webkit-box-orient: vertical;
796
+ -webkit-box-direction: normal;
797
+ -ms-flex-direction: column;
798
+ flex-direction: column;
799
+ }
800
+
801
+ .justify-content-center {
802
+ -webkit-box-pack: center;
803
+ -ms-flex-pack: center;
804
+ justify-content: center;
805
+ }
806
+
807
+ .justify-content-between {
808
+ -webkit-box-pack: justify;
809
+ -ms-flex-pack: justify;
810
+ justify-content: space-between;
811
+ }
812
+
813
+ .justify-content-end {
814
+ -webkit-box-pack: end;
815
+ -ms-flex-pack: end;
816
+ justify-content: flex-end;
817
+ }
818
+
819
+ .align-items-center {
820
+ -webkit-box-align: center;
821
+ -ms-flex-align: center;
822
+ align-items: center;
823
+ }
824
+
825
+ .btn {
826
+ text-align: center;
827
+ cursor: pointer;
828
+ text-decoration: none;
829
+ border-radius: 3rem;
830
+ font-weight: bold;
831
+ -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
832
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
833
+ -ms-flex-negative: 0;
834
+ flex-shrink: 0;
835
+ display: inline-block;
836
+ border: 1px solid transparent;
837
+ }
838
+
839
+ .btn-xs {
840
+ padding: 0.45rem 1.3rem !important;
841
+ font-size: 0.75rem;
842
+ }
843
+
844
+ .btn-sm {
845
+ padding: 0.5rem 1.7rem !important;
846
+ font-size: 1rem;
847
+ }
848
+
849
+ .btn-regular {
850
+ padding: 1rem 2.5rem !important;
851
+ font-size: 1rem;
852
+ }
853
+
854
+ .btn-lg {
855
+ padding: 1rem 3rem !important;
856
+ font-size: 1.125rem;
857
+ }
858
+
859
+ .btn-green-primary {
860
+ background-color: #1cc691;
861
+ color: #fff;
862
+ }
863
+ .btn-green-primary:hover, .btn-green-primary:focus {
864
+ background-color: #18ab7d;
865
+ color: #f0f0f0;
866
+ }
867
+
868
+ .btn-blue-primary {
869
+ background-color: #0073ce;
870
+ color: #fff;
871
+ }
872
+ .btn-blue-primary:hover, .btn-blue-primary:focus {
873
+ background-color: #0062af;
874
+ color: #f0f0f0;
875
+ }
876
+
877
+ .btn-gray-lighter {
878
+ background-color: #e7e7e7;
879
+ color: #585858;
880
+ }
881
+ .btn-gray-lighter:hover, .btn-gray-lighter:focus {
882
+ background-color: #d8d8d8;
883
+ color: #494949;
884
+ }
885
+
886
+ .btn-gray-darker {
887
+ background-color: #c8c8c8;
888
+ color: #585858;
889
+ }
890
+ .btn-gray-darker:hover, .btn-gray-darker:focus {
891
+ background-color: #b9b9b9;
892
+ color: #494949;
893
+ }
894
+
895
+ .btn-green-secondary {
896
+ background-color: #d2f4e9;
897
+ color: #009248;
898
+ }
899
+ .btn-green-secondary:hover, .btn-green-secondary:focus {
900
+ background-color: #b9eedd;
901
+ color: #007339;
902
+ }
903
+
904
+ .btn-gray-outline {
905
+ border-color: #595959;
906
+ background-color: transparent;
907
+ color: #595959;
908
+ }
909
+ .btn-gray-outline:hover, .btn-gray-outline:focus {
910
+ background-color: #595959;
911
+ color: #fff;
912
+ }
913
+
914
+ .btn-block {
915
+ display: block;
916
+ width: 75%;
917
+ margin: 0 auto;
918
+ }
919
+
920
+ .alert {
921
+ border: 1px solid rgba(151, 151, 151, 0.28);
922
+ border-radius: 0.4rem;
923
+ position: relative;
924
+ overflow: hidden;
925
+ }
926
+ .alert p {
927
+ padding: 1rem;
928
+ margin: auto;
929
+ }
930
+ @media (min-width: 768px) {
931
+ .alert {
932
+ display: -webkit-box;
933
+ display: -ms-flexbox;
934
+ display: flex;
935
+ }
936
+ .alert p {
937
+ padding: 0 4rem 0 2rem;
938
+ }
939
+ }
940
+ .alert--success .alert__icon {
941
+ background-color: #e8f9f4;
942
+ }
943
+ .alert--failure .alert__icon {
944
+ background-color: #f9eaea;
945
+ }
946
+ @media (max-width: 767px) {
947
+ .alert p {
948
+ text-align: center;
949
+ }
950
+ .alert img {
951
+ margin: 0 auto !important;
952
+ display: block;
953
+ }
954
+ }
955
+ .alert .btn-close {
956
+ background-color: #c8c8c8;
957
+ font-size: 1.25rem;
958
+ color: #fff;
959
+ cursor: pointer;
960
+ -ms-flex-negative: 0;
961
+ flex-shrink: 0;
962
+ height: 1.5rem;
963
+ width: 1.5rem;
964
+ line-height: 1.5rem;
965
+ border-radius: 50%;
966
+ border: 0;
967
+ padding: 0px;
968
+ margin-bottom: 2.5rem;
969
+ position: absolute;
970
+ top: 1rem;
971
+ right: 0.2rem;
972
+ }
973
+ .alert .btn-close:before {
974
+ display: none;
975
+ }
976
+
977
+ .notice {
978
+ border-radius: 0.25rem;
979
+ display: -webkit-inline-box;
980
+ display: -ms-inline-flexbox;
981
+ display: inline-flex;
982
+ margin: 0;
983
+ border: 0;
984
+ }
985
+ .notice p {
986
+ margin: 0;
987
+ }
988
+ .notice--warning {
989
+ background-color: #fff4e6;
990
+ }
991
+ .notice--general {
992
+ background-color: #f5f5f5;
993
+ }
994
+
995
+ /* SWITCH TOOGGLE*/
996
+ .switch {
997
+ display: -webkit-inline-box;
998
+ display: -ms-inline-flexbox;
999
+ display: inline-flex;
1000
+ margin: 0 10px 0 0;
1001
+ position: relative;
1002
+ }
1003
+ .switch input {
1004
+ position: absolute;
1005
+ top: 0;
1006
+ left: 0;
1007
+ }
1008
+ .switch .selected:before {
1009
+ content: " off";
1010
+ }
1011
+ .switch label {
1012
+ cursor: pointer;
1013
+ width: 48px;
1014
+ height: 24px;
1015
+ background: #c8c8c8;
1016
+ display: block;
1017
+ border-radius: 24px;
1018
+ position: relative;
1019
+ }
1020
+ .switch label:after {
1021
+ content: "";
1022
+ position: absolute;
1023
+ top: 4px;
1024
+ left: 4px;
1025
+ width: 16px;
1026
+ height: 16px;
1027
+ background: white;
1028
+ border-radius: 16px;
1029
+ -webkit-transition: 0.3s;
1030
+ transition: 0.3s;
1031
+ }
1032
+ .switch input[type=checkbox] {
1033
+ height: 0;
1034
+ width: 0;
1035
+ visibility: hidden;
1036
+ }
1037
+ .switch input[type=checkbox]:checked ~ .notification > .selected:before {
1038
+ content: " on";
1039
+ }
1040
+ .switch input[type=checkbox]:checked .selected {
1041
+ content: "on";
1042
+ }
1043
+ .switch input[type=checkbox]:checked + label {
1044
+ background: #1cc691;
1045
+ }
1046
+ .switch input[type=checkbox]:checked + label:after {
1047
+ left: calc(100% - 4px);
1048
+ -webkit-transform: translateX(-100%);
1049
+ transform: translateX(-100%);
1050
+ }
1051
+
1052
+ /* Regular checkbox*/
1053
+ .checkbox-regular {
1054
+ display: -webkit-box;
1055
+ display: -ms-flexbox;
1056
+ display: flex;
1057
+ -webkit-box-align: start;
1058
+ -ms-flex-align: start;
1059
+ align-items: flex-start;
1060
+ margin-bottom: 0.75rem;
1061
+ }
1062
+ .checkbox-regular span {
1063
+ -webkit-box-flex: 1;
1064
+ -ms-flex: 1 1 auto;
1065
+ flex: 1 1 auto;
1066
+ font-size: 0.9rem;
1067
+ padding: 0.25rem;
1068
+ }
1069
+ .checkbox-regular input[type=checkbox] {
1070
+ margin: 0;
1071
+ -webkit-box-shadow: none;
1072
+ box-shadow: none;
1073
+ -ms-flex-negative: 0;
1074
+ flex-shrink: 0;
1075
+ -webkit-appearance: none;
1076
+ -moz-appearance: none;
1077
+ appearance: none;
1078
+ min-width: 1.75rem;
1079
+ min-height: 1.75rem;
1080
+ border-radius: 0.25rem;
1081
+ border: 1px solid #ced4da;
1082
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
1083
+ margin-right: 0.5rem;
1084
+ }
1085
+ .checkbox-regular input[type=checkbox]:before {
1086
+ display: none;
1087
+ }
1088
+ .checkbox-regular input[type=checkbox]:checked {
1089
+ background-size: 1.125rem auto;
1090
+ background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8' standalone='no'%3F%3E%3Csvg width='34px' height='24px' viewBox='0 0 34 24' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3ERectangle 13%3C/title%3E%3Cdesc%3ECreated with Sketch.%3C/desc%3E%3Cdefs%3E%3C/defs%3E%3Cg id='spec' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='elements' transform='translate(-2505.000000, -3840.000000)' fill-rule='nonzero' fill='%231CC691'%3E%3Cpath d='M2515,3858.6 C2513.89543,3858.6 2513,3859.49543 2513,3860.6 C2513,3861.70457 2513.89543,3862.6 2515,3862.6 L2529,3862.6 C2530.10457,3862.6 2531,3861.70457 2531,3860.6 L2531,3834 C2531,3832.89543 2530.10457,3832 2529,3832 C2527.89543,3832 2527,3832.89543 2527,3834 L2527,3858.6 L2515,3858.6 Z' id='Rectangle-13' transform='translate(2522.000000, 3847.300000) rotate(-315.000000) translate(-2522.000000, -3847.300000) '%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
1091
+ background-repeat: no-repeat;
1092
+ background-position: center;
1093
+ }
1094
+ .checkbox-regular input[type=checkbox]:focus {
1095
+ border-color: #1cc691;
1096
+ -webkit-box-shadow: 0 0 0 0.25rem rgba(28, 198, 145, 0.25);
1097
+ box-shadow: 0 0 0 0.25rem rgba(28, 198, 145, 0.25);
1098
+ }
1099
+
1100
+ /*RADIO LARGE*/
1101
+ .radio-large input[type=radio] {
1102
+ -webkit-appearance: none;
1103
+ -moz-appearance: none;
1104
+ appearance: none;
1105
+ width: 0;
1106
+ height: 0;
1107
+ opacity: 0;
1108
+ }
1109
+ .radio-large input[type=radio]:before {
1110
+ display: none;
1111
+ }
1112
+ .radio-large input[type=radio]:checked + label {
1113
+ border-color: #1cc691;
1114
+ -webkit-box-shadow: 0 0 0 0.25rem rgba(28, 198, 145, 0.25);
1115
+ box-shadow: 0 0 0 0.25rem rgba(28, 198, 145, 0.25);
1116
+ font-weight: bold;
1117
+ color: #1cc691;
1118
+ }
1119
+ .radio-large label {
1120
+ display: inline-block;
1121
+ padding: 1rem 2rem;
1122
+ white-space: nowrap;
1123
+ min-width: 12rem;
1124
+ display: -webkit-box;
1125
+ display: -ms-flexbox;
1126
+ display: flex;
1127
+ -webkit-box-align: center;
1128
+ -ms-flex-align: center;
1129
+ align-items: center;
1130
+ -webkit-box-pack: center;
1131
+ -ms-flex-pack: center;
1132
+ justify-content: center;
1133
+ font-size: 1rem;
1134
+ border: 1px solid #ced4da;
1135
+ -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
1136
+ transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
1137
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1138
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
1139
+ border-radius: 0.25rem;
1140
+ }
1141
+
1142
+ /*RADIO BUTTON REGULAR*/
1143
+ .radio-regular {
1144
+ display: -webkit-box;
1145
+ display: -ms-flexbox;
1146
+ display: flex;
1147
+ -webkit-box-align: start;
1148
+ -ms-flex-align: start;
1149
+ align-items: flex-start;
1150
+ }
1151
+ .radio-regular span {
1152
+ -webkit-box-flex: 1;
1153
+ -ms-flex: 1 1 auto;
1154
+ flex: 1 1 auto;
1155
+ font-size: 0.9rem;
1156
+ }
1157
+ .radio-regular input[type=radio] {
1158
+ -webkit-box-shadow: none;
1159
+ box-shadow: none;
1160
+ -webkit-appearance: none;
1161
+ -moz-appearance: none;
1162
+ appearance: none;
1163
+ min-width: 1.75rem;
1164
+ min-height: 1.75rem;
1165
+ border-radius: 1.75rem;
1166
+ border: 1px solid #ced4da;
1167
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
1168
+ }
1169
+ .radio-regular input[type=radio]:before {
1170
+ display: none;
1171
+ }
1172
+ .radio-regular input[type=radio]:checked {
1173
+ background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iOHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDggOCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT5PdmFsIDEyPC90aXRsZT4gICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+ICAgIDxkZWZzPjwvZGVmcz4gICAgPGcgaWQ9InNwZWMiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPiAgICAgICAgPGcgaWQ9ImVsZW1lbnRzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjQ2Ny4wMDAwMDAsIC0zNzk1LjAwMDAwMCkiIGZpbGw9IiMxQ0M2OTEiPiAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwtMTIiIGN4PSIyNDcxIiBjeT0iMzc5OSIgcj0iNCI+PC9jaXJjbGU+ICAgICAgICA8L2c+ICAgIDwvZz48L3N2Zz4=);
1174
+ background-size: 6px 6px;
1175
+ background-repeat: no-repeat;
1176
+ background-position: center;
1177
+ }
1178
+ .radio-regular input[type=radio]:focus {
1179
+ border-color: #1cc691;
1180
+ -webkit-box-shadow: 0 0 0 0.25rem rgba(28, 198, 145, 0.25);
1181
+ box-shadow: 0 0 0 0.25rem rgba(28, 198, 145, 0.25);
1182
+ }
1183
+
1184
+ .radio-controller {
1185
+ position: relative;
1186
+ margin: 0.25rem;
1187
+ }
1188
+ .radio-controller input {
1189
+ position: absolute;
1190
+ top: 0;
1191
+ left: 0;
1192
+ }
1193
+
1194
+ .radio-toggle {
1195
+ display: -webkit-box;
1196
+ display: -ms-flexbox;
1197
+ display: flex;
1198
+ -webkit-box-align: start;
1199
+ -ms-flex-align: start;
1200
+ align-items: flex-start;
1201
+ padding: 1.5rem 0;
1202
+ margin-top: 2rem;
1203
+ }
1204
+ .radio-toggle .switch {
1205
+ margin-right: 1rem;
1206
+ }
1207
+ .radio-toggle span {
1208
+ margin: 0.125rem 0;
1209
+ font-size: 1.5rem;
1210
+ font-weight: bold;
1211
+ }
1212
+
1213
+ /*RADIO THEME*/
1214
+ .radio-theme input[type=radio] {
1215
+ -webkit-box-shadow: none;
1216
+ box-shadow: none;
1217
+ -webkit-appearance: none;
1218
+ -moz-appearance: none;
1219
+ appearance: none;
1220
+ width: 163px;
1221
+ height: 86px;
1222
+ border-radius: 0.25rem;
1223
+ border: 1px solid #ced4da;
1224
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
1225
+ background-size: 132px auto;
1226
+ background-repeat: no-repeat;
1227
+ background-position: 30px 6px;
1228
+ }
1229
+ .radio-theme input[type=radio]:before {
1230
+ display: none;
1231
+ }
1232
+ .radio-theme input[type=radio]:checked {
1233
+ border-color: #1cc691;
1234
+ -webkit-box-shadow: 0 0 0 0.25rem rgba(28, 198, 145, 0.25);
1235
+ box-shadow: 0 0 0 0.25rem rgba(28, 198, 145, 0.25);
1236
+ }
1237
+ .radio-theme input[type=radio]:disabled {
1238
+ border: 1px solid #ced4da;
1239
+ }
1240
+
1241
+ .radio-theme-dark input[type=radio] {
1242
+ background-image: url("data:image/svg+xml,%3Csvg height='86' viewBox='0 0 138 86' width='138' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect fill='%23373737' height='86' rx='4' width='192'/%3E%3Cg transform='translate(18 15)'%3E%3Cpath d='m5.09179202 3.53571429v-3.39452802h-5.09179202v3.39452802zm4.8375 0v-3.39452802h-5.09179202v3.39452802zm4.83749998 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802zm14.6433594 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802z' fill='%23fff' fill-rule='nonzero'/%3E%3Cpath d='m5.09179202 19.4785714v-3.394528h-5.09179202v3.394528zm4.8375 0v-3.394528h-5.09179202v3.394528zm4.83749998 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm14.6433594 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm14.6433594 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm-82.49921878 11.3v-3.394528h-5.09179202v3.394528zm4.8375 0v-3.394528h-5.09179202v3.394528zm4.83749998 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528z' fill='%23afafaf' fill-rule='nonzero'/%3E%3Cg fill='%230073ce'%3E%3Crect height='10.857143' rx='5' width='35.413793' x='51.362069' y='46.142857'/%3E%3Crect height='10.857143' rx='5' width='35.413793' x='93.586207' y='46.142857'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
1243
+ }
1244
+
1245
+ .radio-theme-light input[type=radio] {
1246
+ background-image: url("data:image/svg+xml,%3Csvg height='86' viewBox='0 0 138 86' width='138' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect fill='%23f9f9f9' height='86' rx='4' width='192'/%3E%3Cg transform='translate(18 11)'%3E%3Cpath d='m5.09179202 7.53571429v-3.39452802h-5.09179202v3.39452802zm4.8375 0v-3.39452802h-5.09179202v3.39452802zm4.83749998 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802zm14.6433594 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802zm4.8375 0v-3.39452802h-5.091792v3.39452802z' fill='%23565656' fill-rule='nonzero'/%3E%3Cpath d='m5.09179202 23.4785714v-3.394528h-5.09179202v3.394528zm4.8375 0v-3.394528h-5.09179202v3.394528zm4.83749998 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm14.6433594 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm14.6433594 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm-82.49921878 11.3v-3.394528h-5.09179202v3.394528zm4.8375 0v-3.394528h-5.09179202v3.394528zm4.83749998 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528zm4.8375 0v-3.394528h-5.091792v3.394528z' fill='%23afafaf' fill-rule='nonzero'/%3E%3Cg fill='%230073ce'%3E%3Crect height='10.857143' rx='5' width='35.413793' x='51.362069' y='50.142857'/%3E%3Crect height='10.857143' rx='5' width='35.413793' x='93.586207' y='50.142857'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
1247
+ }
1248
+
1249
+ .radio-theme-custom input[type=radio] {
1250
+ background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='15px' height='15px' viewBox='0 0 15 15' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E+%3C/title%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' font-family='HelveticaNeue, Helvetica Neue' font-size='28' font-weight='normal'%3E%3Cg id='wizard_configurator' transform='translate(-972.000000, -622.000000)' fill='%23333333'%3E%3Ctext id='+'%3E%3Ctspan x='971.6' y='637'%3E+%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
1251
+ background-size: 16px 16px;
1252
+ background-repeat: no-repeat;
1253
+ background-position: center;
1254
+ }
1255
+
1256
+ .radio-cards {
1257
+ display: -webkit-box;
1258
+ display: -ms-flexbox;
1259
+ display: flex;
1260
+ grid-gap: 0.625rem;
1261
+ grid-auto-flow: column;
1262
+ -ms-grid-rows: auto;
1263
+ grid-template-rows: auto;
1264
+ overflow-x: auto;
1265
+ padding: 0.5rem;
1266
+ margin: 0 -0.5rem;
1267
+ }
1268
+ .radio-cards .radio-card {
1269
+ text-align: center;
1270
+ position: relative;
1271
+ min-width: 7rem;
1272
+ -webkit-box-flex: 1;
1273
+ -ms-flex: 1;
1274
+ flex: 1;
1275
+ display: -webkit-box;
1276
+ display: -ms-flexbox;
1277
+ display: flex;
1278
+ }
1279
+ .radio-cards .radio-card input {
1280
+ position: absolute;
1281
+ top: 0;
1282
+ left: 0;
1283
+ opacity: 0;
1284
+ }
1285
+ .radio-cards .radio-card input:checked ~ div {
1286
+ -webkit-box-shadow: 0 0 0 0.35rem rgba(28, 198, 145, 0.15), 0 0 0 1px #1cc691;
1287
+ box-shadow: 0 0 0 0.35rem rgba(28, 198, 145, 0.15), 0 0 0 1px #1cc691;
1288
+ }
1289
+ .radio-cards .radio-card input:checked ~ .check-icon {
1290
+ display: block;
1291
+ }
1292
+ .radio-cards .radio-card .check-icon {
1293
+ position: absolute;
1294
+ display: none;
1295
+ top: 0.5rem;
1296
+ right: 0.5rem;
1297
+ }
1298
+ .radio-cards .radio-card > div {
1299
+ -webkit-box-flex: 1;
1300
+ -ms-flex: 1;
1301
+ flex: 1;
1302
+ padding: 1.5rem 1rem;
1303
+ border: 1px solid rgba(0, 0, 0, 0.2);
1304
+ border-radius: 0.35rem;
1305
+ display: -webkit-box;
1306
+ display: -ms-flexbox;
1307
+ display: flex;
1308
+ -webkit-box-align: center;
1309
+ -ms-flex-align: center;
1310
+ align-items: center;
1311
+ -webkit-box-pack: center;
1312
+ -ms-flex-pack: center;
1313
+ justify-content: center;
1314
+ -webkit-box-orient: vertical;
1315
+ -webkit-box-direction: normal;
1316
+ -ms-flex-direction: column;
1317
+ flex-direction: column;
1318
+ cursor: pointer;
1319
+ }
1320
+ .radio-cards .radio-card > div img {
1321
+ width: 45%;
1322
+ margin-bottom: 0.35rem;
1323
+ }
1324
+ .radio-cards .radio-card > div span {
1325
+ font-weight: bold;
1326
+ font-size: 0.85rem;
1327
+ line-height: 1;
1328
+ display: inline-block;
1329
+ }
1330
+
1331
+ .check-icon {
1332
+ display: inline-block;
1333
+ width: 2rem;
1334
+ height: 2rem;
1335
+ background-image: url("data:image/svg+xml,%3Csvg height='7' viewBox='0 0 8 7' width='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m14.8113573 11.5935296h-5.33333337l.03831907-1.99999999' fill='none' stroke='%23fff' stroke-linecap='round' stroke-width='2' transform='matrix(.64278761 -.76604444 .76604444 .64278761 -11.776881 5.087513)'/%3E%3C/svg%3E");
1336
+ background-repeat: no-repeat;
1337
+ background-position: center;
1338
+ background-size: 0.75rem;
1339
+ border-radius: 50%;
1340
+ background-color: #1cc691;
1341
+ }
1342
+
1343
+ /*RADIO BUTTON STYLE*/
1344
+ .radio-btn-style {
1345
+ position: relative;
1346
+ }
1347
+ .radio-btn-style > div {
1348
+ border-radius: 0.25rem;
1349
+ border: 1px solid #ced4da;
1350
+ padding: 1.5rem 2rem;
1351
+ overflow: hidden;
1352
+ }
1353
+ .radio-btn-style input {
1354
+ -webkit-appearance: none;
1355
+ -moz-appearance: none;
1356
+ appearance: none;
1357
+ opacity: 0;
1358
+ position: absolute;
1359
+ top: 0;
1360
+ left: 0;
1361
+ }
1362
+ .radio-btn-style input:checked + div {
1363
+ border-color: #1cc691;
1364
+ -webkit-box-shadow: 0 0 0 0.25rem rgba(28, 198, 145, 0.25);
1365
+ box-shadow: 0 0 0 0.25rem rgba(28, 198, 145, 0.25);
1366
+ }
1367
+ .radio-btn-style .btn-fake {
1368
+ background-image: url("data:image/svg+xml,%3Csvg height='21' viewBox='0 0 11 21' width='11' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m5.328 0c2.94257315 0 5.328 2.38542685 5.328 5.328 0 1.8242202-.91678202 3.43431448-2.31474111 4.39467789l1.28526555 10.92332211h-8.59704888l1.28526555-10.92332211c-1.39795909-.96036341-2.31474111-2.57045769-2.31474111-4.39467789 0-2.94257315 2.38542685-5.328 5.328-5.328z' fill='%231cc691' fill-rule='evenodd'/%3E%3C/svg%3E");
1369
+ background-position: left 1rem center;
1370
+ background-repeat: no-repeat;
1371
+ border: 2px solid rgba(0, 0, 0, 0.2);
1372
+ padding: 1rem 1.5rem 1rem 3rem;
1373
+ border-radius: 0.35rem;
1374
+ display: -webkit-box;
1375
+ display: -ms-flexbox;
1376
+ display: flex;
1377
+ margin-right: -4rem;
1378
+ color: #444;
1379
+ }
1380
+ .radio-btn-style .btn-fake:before, .radio-btn-style .btn-fake:after {
1381
+ content: "";
1382
+ display: inline-block;
1383
+ height: 0.5rem;
1384
+ background-color: currentColor;
1385
+ white-space: nowrap;
1386
+ margin-right: 0.5rem;
1387
+ }
1388
+ .radio-btn-style .btn-fake:before {
1389
+ width: 4rem;
1390
+ }
1391
+ .radio-btn-style .btn-fake:after {
1392
+ width: 2rem;
1393
+ }
1394
+
1395
+ .radio-btn-style-dark .btn-fake {
1396
+ color: white;
1397
+ background-color: #444;
1398
+ }
1399
+
1400
+ .paste_embed_code {
1401
+ min-inline-size: auto;
1402
+ }
1403
+ .paste_embed_code textarea {
1404
+ -webkit-appearance: none;
1405
+ -moz-appearance: none;
1406
+ appearance: none;
1407
+ width: 100%;
1408
+ background: transparent;
1409
+ padding: 1rem;
1410
+ font-family: monospace;
1411
+ border: 0;
1412
+ resize: none;
1413
+ outline: 0;
1414
+ }
1415
+ .paste_embed_code textarea:focus {
1416
+ -webkit-box-shadow: none;
1417
+ box-shadow: none;
1418
+ }
1419
+ .paste_embed_code input[type=text] {
1420
+ width: 100% !important;
1421
+ display: block !important;
1422
+ border: 1px solid rgba(0, 0, 0, 0.2) !important;
1423
+ padding: 1rem !important;
1424
+ font-family: monospace !important;
1425
+ }
1426
+ .paste_embed_code input[type=text]:focus {
1427
+ -webkit-box-shadow: none !important;
1428
+ box-shadow: none !important;
1429
+ }
1430
+
1431
+ .paste-api-form {
1432
+ border: 1px solid #979797;
1433
+ border-radius: 0.25rem;
1434
+ position: relative;
1435
+ -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
1436
+ transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
1437
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1438
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
1439
+ display: -webkit-box;
1440
+ display: -ms-flexbox;
1441
+ display: flex;
1442
+ }
1443
+ @media (max-width: 767px) {
1444
+ .paste-api-form {
1445
+ -webkit-box-orient: vertical;
1446
+ -webkit-box-direction: normal;
1447
+ -ms-flex-direction: column;
1448
+ flex-direction: column;
1449
+ }
1450
+ }
1451
+ .paste-api-form:focus-within {
1452
+ border-color: #1cc691;
1453
+ -webkit-box-shadow: 0 0 0 0.25rem rgba(28, 198, 145, 0.25);
1454
+ box-shadow: 0 0 0 0.25rem rgba(28, 198, 145, 0.25);
1455
+ outline: none;
1456
+ }
1457
+ .paste-api-form button {
1458
+ margin: 1rem;
1459
+ -ms-flex-item-align: end;
1460
+ align-self: flex-end;
1461
+ }
1462
+ .paste-api-form input[type=text],
1463
+ .paste-api-form button {
1464
+ padding: 1rem;
1465
+ }
1466
+ .paste-api-form input[type=text] {
1467
+ -webkit-box-flex: 2;
1468
+ -ms-flex-positive: 2;
1469
+ flex-grow: 2;
1470
+ outline: none;
1471
+ border: none;
1472
+ border-radius: 0.25rem;
1473
+ font-family: "hkgrotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
1474
+ }
1475
+ .paste-api-form input[type=text]:focus {
1476
+ -webkit-box-shadow: none;
1477
+ box-shadow: none;
1478
+ }
1479
+
1480
+ fieldset {
1481
+ border: none;
1482
+ margin: 0;
1483
+ padding: 0;
1484
+ }
1485
+
1486
+ label,
1487
+ input {
1488
+ cursor: pointer;
1489
+ }
1490
+
1491
+ .custom-iframe-field,
1492
+ .custom-script-field {
1493
+ margin-bottom: 0.5rem;
1494
+ }
1495
+ .custom-iframe-field.shown,
1496
+ .custom-script-field.shown {
1497
+ display: -webkit-box;
1498
+ display: -ms-flexbox;
1499
+ display: flex;
1500
+ }
1501
+
1502
+ .tabs .tabs__target:not(.active) {
1503
+ display: none;
1504
+ }
1505
+ .tabs .tabs__nav__item {
1506
+ margin: 0;
1507
+ cursor: pointer;
1508
+ }
1509
+ .tabs--style2 {
1510
+ border: 1px solid rgba(0, 0, 0, 0.2);
1511
+ border-radius: 0.35rem;
1512
+ }
1513
+ .tabs--style2 > .tabs__nav {
1514
+ display: -webkit-box;
1515
+ display: -ms-flexbox;
1516
+ display: flex;
1517
+ overflow-x: auto;
1518
+ overflow-y: hidden;
1519
+ margin: 0;
1520
+ padding: 0;
1521
+ list-style: none;
1522
+ font-size: 0.95rem;
1523
+ }
1524
+ .tabs--style2 > .tabs__nav li {
1525
+ -webkit-box-flex: 1;
1526
+ -ms-flex: 1;
1527
+ flex: 1;
1528
+ text-align: center;
1529
+ padding: 0.75rem 1rem;
1530
+ white-space: nowrap;
1531
+ border: 1px solid transparent;
1532
+ border-bottom-color: rgba(0, 0, 0, 0.2);
1533
+ border-right-color: rgba(0, 0, 0, 0.05);
1534
+ }
1535
+ .tabs--style2 > .tabs__nav li:last-of-type {
1536
+ border-right-color: transparent;
1537
+ }
1538
+ .tabs--style2 > .tabs__nav li.active {
1539
+ margin: 0 0 0 -1px;
1540
+ font-weight: bold;
1541
+ border-bottom-color: transparent;
1542
+ border-left-color: rgba(0, 0, 0, 0.2);
1543
+ border-right-color: rgba(0, 0, 0, 0.2);
1544
+ }
1545
+ .tabs--style2 > .tabs__nav li.active:first-of-type {
1546
+ border-left-color: transparent;
1547
+ }
1548
+ .tabs--style2 > .tabs__nav li.active:last-of-type {
1549
+ border-right-color: transparent;
1550
+ }
1551
+ .tabs--style1 > .tabs__nav {
1552
+ display: -webkit-box;
1553
+ display: -ms-flexbox;
1554
+ display: flex;
1555
+ list-style: none;
1556
+ margin: 0;
1557
+ padding: 0;
1558
+ text-transform: uppercase;
1559
+ overflow-x: auto;
1560
+ }
1561
+ .tabs--style1 > .tabs__nav .tabs__nav__item {
1562
+ font-size: 0.85rem;
1563
+ padding: 0 0 0.5rem;
1564
+ border-bottom: 2px solid rgba(0, 0, 0, 0.1);
1565
+ font-weight: bold;
1566
+ white-space: nowrap;
1567
+ color: #777;
1568
+ }
1569
+ .tabs--style1 > .tabs__nav .tabs__nav__item:not(:last-of-type) {
1570
+ margin-right: 3rem;
1571
+ }
1572
+ .tabs--style1 > .tabs__nav .tabs__nav__item.active {
1573
+ border-bottom-color: #1cc691;
1574
+ color: #333;
1575
+ }
1576
+
1577
+ .modal {
1578
+ position: fixed;
1579
+ top: 0;
1580
+ left: 0;
1581
+ width: 100%;
1582
+ height: 100%;
1583
+ padding: 1rem;
1584
+ background: rgba(0, 0, 0, 0.5);
1585
+ display: none;
1586
+ overflow-y: auto;
1587
+ z-index: 99999;
1588
+ }
1589
+ .modal.shown {
1590
+ display: -webkit-box;
1591
+ display: -ms-flexbox;
1592
+ display: flex;
1593
+ }
1594
+ .modal__window {
1595
+ margin: auto;
1596
+ background: white;
1597
+ border-radius: 0.5rem;
1598
+ -webkit-box-shadow: 0 0 2rem rgba(0, 0, 0, 0.1);
1599
+ box-shadow: 0 0 2rem rgba(0, 0, 0, 0.1);
1600
+ max-width: 320px;
1601
+ }
1602
+ .modal__window--md {
1603
+ max-width: 640px;
1604
+ }
1605
+ @media (max-width: 767px) {
1606
+ .modal__window--md {
1607
+ max-width: 100%;
1608
+ }
1609
+ }
1610
+
1611
+ .breadcrumb {
1612
+ background-color: rgba(0, 0, 0, 0.035);
1613
+ padding: 1.5rem;
1614
+ margin: 0;
1615
+ display: -webkit-box;
1616
+ display: -ms-flexbox;
1617
+ display: flex;
1618
+ }
1619
+ .breadcrumb li {
1620
+ margin: 0;
1621
+ }
1622
+ .breadcrumb li:not(:last-of-type) {
1623
+ margin-right: 1rem;
1624
+ }
1625
+ .breadcrumb li:not(:last-of-type):after {
1626
+ content: "→";
1627
+ margin-left: 1rem;
1628
+ }
1629
+
1630
+ @-webkit-keyframes spin {
1631
+ from {
1632
+ -webkit-transform: rotate(0);
1633
+ transform: rotate(0);
1634
+ }
1635
+ to {
1636
+ -webkit-transform: rotate(359deg);
1637
+ transform: rotate(359deg);
1638
+ }
1639
+ }
1640
+
1641
+ @keyframes spin {
1642
+ from {
1643
+ -webkit-transform: rotate(0);
1644
+ transform: rotate(0);
1645
+ }
1646
+ to {
1647
+ -webkit-transform: rotate(359deg);
1648
+ transform: rotate(359deg);
1649
+ }
1650
+ }
1651
+ @-webkit-keyframes spin_button {
1652
+ from {
1653
+ -webkit-transform: translate(-50%, -50%) rotate(0);
1654
+ transform: translate(-50%, -50%) rotate(0);
1655
+ }
1656
+ to {
1657
+ -webkit-transform: translate(-50%, -50%) rotate(359deg);
1658
+ transform: translate(-50%, -50%) rotate(359deg);
1659
+ }
1660
+ }
1661
+ @keyframes spin_button {
1662
+ from {
1663
+ -webkit-transform: translate(-50%, -50%) rotate(0);
1664
+ transform: translate(-50%, -50%) rotate(0);
1665
+ }
1666
+ to {
1667
+ -webkit-transform: translate(-50%, -50%) rotate(359deg);
1668
+ transform: translate(-50%, -50%) rotate(359deg);
1669
+ }
1670
+ }
1671
+ .btn-loading {
1672
+ position: relative;
1673
+ }
1674
+ .btn-loading, .btn-loading:hover {
1675
+ color: transparent;
1676
+ }
1677
+ .btn-loading:before {
1678
+ content: "";
1679
+ border: solid 2px transparent;
1680
+ border-top-color: white;
1681
+ border-left-color: white;
1682
+ -webkit-animation: spin_button 0.8s linear infinite;
1683
+ animation: spin_button 0.8s linear infinite;
1684
+ width: 1rem;
1685
+ height: 1rem;
1686
+ border-radius: 50%;
1687
+ display: inline-block;
1688
+ vertical-align: middle;
1689
+ position: absolute;
1690
+ top: 50%;
1691
+ left: 50%;
1692
+ }
1693
+
1694
+ .inline-spinner {
1695
+ border: solid 2px transparent;
1696
+ border-top-color: currentColor;
1697
+ border-left-color: currentColor;
1698
+ -webkit-animation: spin 0.8s linear infinite;
1699
+ animation: spin 0.8s linear infinite;
1700
+ width: 1.5rem;
1701
+ height: 1.5rem;
1702
+ border-radius: 50%;
1703
+ display: inline-block;
1704
+ }
1705
+ .inline-spinner.lg {
1706
+ width: 5rem;
1707
+ height: 5rem;
1708
+ }
1709
+
1710
+ .position-select {
1711
+ position: relative;
1712
+ }
1713
+ .position-select .form-control {
1714
+ overflow: auto;
1715
+ height: auto;
1716
+ resize: vertical;
1717
+ padding: 1rem;
1718
+ border: 1px solid #ddd;
1719
+ border-radius: 0.25rem;
1720
+ position: relative;
1721
+ width: 100%;
1722
+ -webkit-box-sizing: border-box;
1723
+ box-sizing: border-box;
1724
+ -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
1725
+ transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
1726
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
1727
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
1728
+ }
1729
+ .position-select .form-control.form-control:focus {
1730
+ color: #495057;
1731
+ background-color: #fff;
1732
+ border-color: #76ecc7;
1733
+ outline: 0;
1734
+ border-radius: 0.25rem;
1735
+ outline: 0;
1736
+ -webkit-box-shadow: 0 0 0 0.2rem rgba(28, 198, 145, 0.25);
1737
+ box-shadow: 0 0 0 0.2rem rgba(28, 198, 145, 0.25);
1738
+ }
1739
+ .position-select .overlaybox {
1740
+ display: none;
1741
+ -webkit-box-flex: 0;
1742
+ -ms-flex: 0 0 100%;
1743
+ flex: 0 0 100%;
1744
+ width: 100%;
1745
+ padding: 1rem;
1746
+ }
1747
+ .position-select .position-select-radio {
1748
+ -webkit-appearance: none;
1749
+ -moz-appearance: none;
1750
+ appearance: none;
1751
+ margin: 0;
1752
+ border: 0;
1753
+ padding: 0;
1754
+ outline: 0;
1755
+ background: none;
1756
+ width: 0;
1757
+ height: 0;
1758
+ opacity: 0;
1759
+ visibility: 0;
1760
+ position: absolute;
1761
+ }
1762
+ .position-select .position-select-radio + label {
1763
+ display: block;
1764
+ cursor: pointer;
1765
+ margin: 0;
1766
+ }
1767
+ .position-select:before {
1768
+ content: "";
1769
+ display: block;
1770
+ width: 150px;
1771
+ height: 90px;
1772
+ }
1773
+ .position-select > div {
1774
+ border: 1px solid rgba(0, 0, 0, 0.1);
1775
+ -webkit-box-shadow: 0 2px 1px rgba(0, 0, 0, 0.025);
1776
+ box-shadow: 0 2px 1px rgba(0, 0, 0, 0.025);
1777
+ border-radius: 0.25rem;
1778
+ background-color: white;
1779
+ position: absolute;
1780
+ top: 0;
1781
+ left: 0;
1782
+ display: -webkit-box;
1783
+ display: -ms-flexbox;
1784
+ display: flex;
1785
+ -ms-flex-wrap: wrap;
1786
+ flex-wrap: wrap;
1787
+ }
1788
+ .position-select > div.open {
1789
+ width: 456px;
1790
+ z-index: 2;
1791
+ -webkit-box-shadow: 0 2px 1px rgba(0, 0, 0, 0.025), 0 0 32px rgba(0, 0, 0, 0.05);
1792
+ box-shadow: 0 2px 1px rgba(0, 0, 0, 0.025), 0 0 32px rgba(0, 0, 0, 0.05);
1793
+ }
1794
+ .position-select > div.open .overlaybox {
1795
+ display: block;
1796
+ }
1797
+ @media (max-width: 767px) {
1798
+ .position-select > div.open {
1799
+ width: 300px;
1800
+ display: -webkit-box;
1801
+ display: -ms-flexbox;
1802
+ display: flex;
1803
+ -ms-flex-wrap: wrap;
1804
+ flex-wrap: wrap;
1805
+ }
1806
+ }
1807
+ .position-select > div.open > label {
1808
+ -webkit-box-flex: 0;
1809
+ -ms-flex: 0 0 33.3333333%;
1810
+ flex: 0 0 33.3333333%;
1811
+ max-width: 33.333333%;
1812
+ display: block !important;
1813
+ }
1814
+ .position-select > div.open > label:hover {
1815
+ background-color: rgba(0, 0, 0, 0.025);
1816
+ }
1817
+ .position-select > div.open > label:not(:last-of-type) {
1818
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
1819
+ }
1820
+ .position-select > div.open > .position-select-radio:checked + label {
1821
+ -webkit-box-shadow: inset 0 0 0 1px #1cc691, inset 0 0 0 4px #c9f1e5;
1822
+ box-shadow: inset 0 0 0 1px #1cc691, inset 0 0 0 4px #c9f1e5;
1823
+ }
1824
+ .position-select > div:not(.open) {
1825
+ width: 148px;
1826
+ }
1827
+ .position-select > div:not(.open) .position-select-radio + label {
1828
+ padding-right: 1.5rem;
1829
+ }
1830
+ .position-select > div:not(.open) .position-select-radio + label:after {
1831
+ pointer-events: none;
1832
+ display: inline-block;
1833
+ width: 0;
1834
+ height: 0;
1835
+ margin-left: 0.25em;
1836
+ vertical-align: 0.25em;
1837
+ content: "";
1838
+ border-top: 0.25rem solid;
1839
+ border-right: 0.25rem solid transparent;
1840
+ border-bottom: 0;
1841
+ border-left: 0.25rem solid transparent;
1842
+ position: absolute;
1843
+ top: 50%;
1844
+ right: 0.75rem;
1845
+ -webkit-transform: translateY(-50%);
1846
+ transform: translateY(-50%);
1847
+ opacity: 0.5;
1848
+ }
1849
+ .position-select > div:not(.open) > .position-select-radio:checked + label {
1850
+ -webkit-box-ordinal-group: 0;
1851
+ -ms-flex-order: -1;
1852
+ order: -1;
1853
+ }
1854
+ .position-select > div:not(.open):hover {
1855
+ background-color: rgba(0, 0, 0, 0.025);
1856
+ }
1857
+ .position-select > div > .position-select-radio:not(:checked) + label {
1858
+ display: none;
1859
+ }
1860
+ .position-select > div > .position-select-radio + label {
1861
+ width: 100%;
1862
+ -webkit-transition: display 0.4s ease 0.1s;
1863
+ transition: display 0.4s ease 0.1s;
1864
+ }
1865
+ .position-select > div > .position-select-radio + label > div {
1866
+ display: -webkit-box;
1867
+ display: -ms-flexbox;
1868
+ display: flex;
1869
+ -webkit-box-align: center;
1870
+ -ms-flex-align: center;
1871
+ align-items: center;
1872
+ padding: 0.5rem;
1873
+ position: relative;
1874
+ }
1875
+ .position-select > div > .position-select-radio + label > div > div {
1876
+ -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05);
1877
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05);
1878
+ border-radius: 0.25rem;
1879
+ overflow: hidden;
1880
+ background-color: rgba(0, 0, 0, 0.05);
1881
+ position: relative;
1882
+ display: -webkit-box;
1883
+ display: -ms-flexbox;
1884
+ display: flex;
1885
+ width: 100%;
1886
+ }
1887
+ .position-select > div > .position-select-radio + label > div > div:after {
1888
+ padding-bottom: 65%;
1889
+ content: "";
1890
+ }
1891
+ .position-select > div > .position-select-radio + label > div > div > span {
1892
+ background-color: rgba(0, 0, 0, 0.45);
1893
+ height: 20px;
1894
+ }
1895
+ .position-select > div > .position-select-radio + label > div > div.center {
1896
+ -webkit-box-align: center !important;
1897
+ -ms-flex-align: center !important;
1898
+ align-items: center !important;
1899
+ -webkit-box-pack: center !important;
1900
+ -ms-flex-pack: center !important;
1901
+ justify-content: center !important;
1902
+ }
1903
+ .position-select > div > .position-select-radio + label > div > div.top {
1904
+ -webkit-box-align: start !important;
1905
+ -ms-flex-align: start !important;
1906
+ align-items: flex-start !important;
1907
+ }
1908
+ .position-select > div > .position-select-radio + label > div > div.bottom {
1909
+ -webkit-box-align: end !important;
1910
+ -ms-flex-align: end !important;
1911
+ align-items: flex-end !important;
1912
+ }
1913
+ .position-select > div > .position-select-radio + label > div > div.left {
1914
+ -webkit-box-pack: start !important;
1915
+ -ms-flex-pack: start !important;
1916
+ justify-content: flex-start !important;
1917
+ }
1918
+ .position-select > div > .position-select-radio + label > div > div.right {
1919
+ -webkit-box-pack: end !important;
1920
+ -ms-flex-pack: end !important;
1921
+ justify-content: flex-end !important;
1922
+ }
1923
+ .position-select > div > .position-select-radio + label > div > div.full span {
1924
+ width: 100%;
1925
+ }
1926
+ .position-select > div > .position-select-radio + label > div > div.float span {
1927
+ width: 30px;
1928
+ margin: 0.5rem;
1929
+ border-radius: 0.25rem;
1930
+ }
1931
+ .position-select > div > .position-select-radio + label > div > div.top.center span, .position-select > div > .position-select-radio + label > div > div.bottom.center span {
1932
+ width: 60px;
1933
+ }
1934
+
1935
+ .list_radar {
1936
+ display: -webkit-box;
1937
+ display: -ms-flexbox;
1938
+ display: flex;
1939
+ -webkit-box-align: center;
1940
+ -ms-flex-align: center;
1941
+ align-items: center;
1942
+ -webkit-box-pack: justify;
1943
+ -ms-flex-pack: justify;
1944
+ justify-content: space-between;
1945
+ list-style: none;
1946
+ text-align: center;
1947
+ padding: 0;
1948
+ }
1949
+ @media (max-width: 768px) {
1950
+ .list_radar {
1951
+ display: block;
1952
+ }
1953
+ }
1954
+ .list_radar__item {
1955
+ display: -webkit-box;
1956
+ display: -ms-flexbox;
1957
+ display: flex;
1958
+ -webkit-box-orient: vertical;
1959
+ -webkit-box-direction: normal;
1960
+ -ms-flex-direction: column;
1961
+ flex-direction: column;
1962
+ -webkit-box-align: center;
1963
+ -ms-flex-align: center;
1964
+ align-items: center;
1965
+ }
1966
+ .list_radar__item figure {
1967
+ position: relative;
1968
+ margin: 0;
1969
+ }
1970
+ .list_radar__item figure:after {
1971
+ content: "";
1972
+ position: absolute;
1973
+ width: 2rem;
1974
+ height: 2rem;
1975
+ border-radius: 2rem;
1976
+ top: 0;
1977
+ right: 0;
1978
+ }
1979
+ .list_radar__item--on figure:after {
1980
+ background: #1cc691;
1981
+ background-image: url("../images/white_checkmark.svg");
1982
+ background-position: center;
1983
+ background-repeat: no-repeat;
1984
+ background-size: 0.7rem;
1985
+ }
1986
+ .list_radar__item--off figure:after {
1987
+ background: #cf7463;
1988
+ background-image: url("../images/white_x.svg");
1989
+ background-position: center;
1990
+ background-repeat: no-repeat;
1991
+ background-size: 0.7rem;
1992
+ }
1993
+
1994
+ .circularBar {
1995
+ --progress-bar-stroke-width: 2;
1996
+ --progress-bar-size: 125px;
1997
+ --progress-bar-color: #78bec7;
1998
+ --progress-bar-stroke-dash: 85;
1999
+ --progress-bar-font-size: 2rem;
2000
+ display: inline-block;
2001
+ font-family: sans-serif;
2002
+ position: relative;
2003
+ -webkit-user-select: none;
2004
+ -moz-user-select: none;
2005
+ -ms-user-select: none;
2006
+ user-select: none;
2007
+ }
2008
+ .circularBar.lg {
2009
+ --progress-bar-stroke-width: 1;
2010
+ --progress-bar-size: 150px;
2011
+ --progress-bar-stroke-dash: 84;
2012
+ }
2013
+ .circularBar.sm {
2014
+ --progress-bar-stroke-width: 3;
2015
+ --progress-bar-size: 75px;
2016
+ --progress-bar-stroke-dash: 84;
2017
+ --progress-bar-font-size: 1.25rem;
2018
+ }
2019
+ .circularBar span {
2020
+ position: absolute;
2021
+ top: calc(50% - 2px);
2022
+ left: 50%;
2023
+ -webkit-transform: translate(-50%, -50%);
2024
+ transform: translate(-50%, -50%);
2025
+ font-size: var(--progress-bar-font-size);
2026
+ font-weight: bold;
2027
+ line-height: 0;
2028
+ }
2029
+ .circularBar span b {
2030
+ font-size: 0.65em;
2031
+ }
2032
+ .circularBar svg {
2033
+ height: var(--progress-bar-size);
2034
+ width: var(--progress-bar-size);
2035
+ -webkit-transform: rotate(-90deg);
2036
+ transform: rotate(-90deg);
2037
+ }
2038
+ .circularBar circle {
2039
+ fill: none;
2040
+ stroke-width: var(--progress-bar-stroke-width);
2041
+ }
2042
+ .circularBar .circle1 {
2043
+ stroke: #e2eff0;
2044
+ }
2045
+ .circularBar .circle2 {
2046
+ stroke: currentColor;
2047
+ stroke-dasharray: var(--progress-bar-stroke-dash);
2048
+ stroke-dashoffset: var(--progress-bar-stroke-dash);
2049
+ stroke-linecap: round;
2050
+ -webkit-transition: stroke-dashoffset 1s ease-in-out;
2051
+ transition: stroke-dashoffset 1s ease-in-out;
2052
+ }
2053
+
2054
+ .siteinfo--icon {
2055
+ background-color: rgba(0, 0, 0, 0.05);
2056
+ height: 5rem;
2057
+ width: 5rem;
2058
+ border-radius: 0.25rem;
2059
+ display: -webkit-box;
2060
+ display: -ms-flexbox;
2061
+ display: flex;
2062
+ -webkit-box-pack: center;
2063
+ -ms-flex-pack: center;
2064
+ justify-content: center;
2065
+ margin-right: 1rem;
2066
+ }
2067
+ .siteinfo--icon img {
2068
+ width: 50%;
2069
+ }
2070
+ @media (max-width: 767px) {
2071
+ .siteinfo--icon {
2072
+ margin: 0 auto 1rem auto;
2073
+ }
2074
+ }
2075
+
2076
+ .sitenav {
2077
+ background-color: rgba(0, 0, 0, 0.025);
2078
+ }
2079
+
2080
+ @media (min-width: 768px) {
2081
+ .configure-services-cards {
2082
+ display: -webkit-box;
2083
+ display: -ms-flexbox;
2084
+ display: flex;
2085
+ -ms-flex-wrap: wrap;
2086
+ flex-wrap: wrap;
2087
+ -webkit-box-pack: center;
2088
+ -ms-flex-pack: center;
2089
+ justify-content: center;
2090
+ max-width: 800px;
2091
+ margin: 0 auto;
2092
+ }
2093
+ }
2094
+ .configure-services-cards .service-card {
2095
+ display: -webkit-box;
2096
+ display: -ms-flexbox;
2097
+ display: flex;
2098
+ -webkit-box-orient: vertical;
2099
+ -webkit-box-direction: normal;
2100
+ -ms-flex-direction: column;
2101
+ flex-direction: column;
2102
+ border: 1px solid rgba(151, 151, 151, 0.28);
2103
+ border-radius: 0.35rem;
2104
+ margin: 0.5rem;
2105
+ -ms-flex-negative: 0;
2106
+ flex-shrink: 0;
2107
+ -webkit-box-shadow: 0 0 16px rgba(0, 0, 0, 0.06);
2108
+ box-shadow: 0 0 16px rgba(0, 0, 0, 0.06);
2109
+ }
2110
+ @media (min-width: 768px) {
2111
+ .configure-services-cards .service-card {
2112
+ max-width: calc(50% - 1rem);
2113
+ -webkit-box-flex: 0;
2114
+ -ms-flex: 0 0 calc(50% - 1rem);
2115
+ flex: 0 0 calc(50% - 1rem);
2116
+ }
2117
+ }
2118
+
2119
+ .service-on {
2120
+ background-color: rgba(0, 0, 0, 0.04);
2121
+ border-radius: 0.25rem;
2122
+ text-align: center;
2123
+ margin: 1rem;
2124
+ padding: 1rem;
2125
+ white-space: nowrap;
2126
+ overflow: hidden;
2127
+ text-overflow: ellipsis;
2128
+ }
2129
+ .service-on li {
2130
+ display: inline;
2131
+ margin: 0;
2132
+ }
2133
+
2134
+ .iubenda-consent-forms table {
2135
+ border: 1px solid #c3c4c7;
2136
+ }
2137
+
2138
+ .consent-forms-tabs {
2139
+ display: -webkit-box;
2140
+ display: -ms-flexbox;
2141
+ display: flex;
2142
+ }
2143
+ .consent-forms-tabs li {
2144
+ margin-right: 0.5rem;
2145
+ }
2146
+ .consent-forms-tabs--current {
2147
+ font-weight: bold;
2148
+ }
2149
+
2150
+ /* CUSTOME SETTINGS TABS*/
2151
+ .custom-scripts {
2152
+ border: 1px solid rgba(0, 0, 0, 0.2);
2153
+ border-radius: 0.35rem;
2154
+ }
2155
+ .custom-scripts .tabs__nav {
2156
+ display: -webkit-box;
2157
+ display: -ms-flexbox;
2158
+ display: flex;
2159
+ overflow-x: auto;
2160
+ overflow-y: hidden;
2161
+ margin: 0;
2162
+ padding: 0;
2163
+ list-style: none;
2164
+ font-size: 0.95rem;
2165
+ }
2166
+ .custom-scripts .tabs__nav li {
2167
+ -webkit-box-flex: 1;
2168
+ -ms-flex: 1;
2169
+ flex: 1;
2170
+ text-align: center;
2171
+ padding: 0.75rem 1rem;
2172
+ white-space: nowrap;
2173
+ border: 1px solid transparent;
2174
+ border-bottom-color: rgba(0, 0, 0, 0.2);
2175
+ border-right-color: rgba(0, 0, 0, 0.05);
2176
+ }
2177
+ .custom-scripts .tabs__nav li:last-of-type {
2178
+ border-right-color: transparent;
2179
+ }
2180
+ .custom-scripts .tabs__nav li.active {
2181
+ margin: 0 -1px;
2182
+ font-weight: bold;
2183
+ border-bottom-color: transparent;
2184
+ border-left-color: rgba(0, 0, 0, 0.2);
2185
+ border-right-color: rgba(0, 0, 0, 0.2);
2186
+ }
2187
+ .custom-scripts .tabs__nav li.active:first-of-type {
2188
+ border-left-color: transparent;
2189
+ }
2190
+ .custom-scripts .tabs__nav li.active:last-of-type {
2191
+ border-right-color: transparent;
2192
+ }
2193
+
2194
+ .modalSync img {
2195
+ width: 13rem;
2196
+ height: auto;
2197
+ }
2198
+
2199
+ .modalAlmostThere img {
2200
+ width: 90%;
2201
+ height: auto;
2202
+ margin-right: auto;
2203
+ margin-left: auto;
2204
+ }
2205
+
2206
+ .tooltip-icon {
2207
+ width: 1.25rem;
2208
+ height: 1.25rem;
2209
+ display: -webkit-box;
2210
+ display: -ms-flexbox;
2211
+ display: flex;
2212
+ place-items: center;
2213
+ line-height: 0.25rem;
2214
+ background-color: #c8c8c8;
2215
+ color: #fff;
2216
+ border-radius: 50%;
2217
+ font-size: 0.75rem;
2218
+ display: -webkit-inline-box;
2219
+ display: -ms-inline-flexbox;
2220
+ display: inline-flex;
2221
+ -webkit-box-pack: center;
2222
+ -ms-flex-pack: center;
2223
+ justify-content: center;
2224
+ font-weight: bold;
2225
+ }
2226
+
2227
+ .steps {
2228
+ border-radius: 50%;
2229
+ border: 1px solid #979797;
2230
+ margin: 0;
2231
+ width: 2rem;
2232
+ height: 2rem;
2233
+ display: -webkit-box;
2234
+ display: -ms-flexbox;
2235
+ display: flex;
2236
+ -webkit-box-pack: center;
2237
+ -ms-flex-pack: center;
2238
+ justify-content: center;
2239
+ -webkit-box-align: center;
2240
+ -ms-flex-align: center;
2241
+ align-items: center;
2242
+ }
2243
+
2244
+ .main-box {
2245
+ width: 90%;
2246
+ max-width: 1140px;
2247
+ margin: 0 auto;
2248
+ border: 1px solid rgba(151, 151, 151, 0.28);
2249
+ border-radius: 0.4rem;
2250
+ background: #fff;
2251
+ }
2252
+ .main-box__bg {
2253
+ background: #fff;
2254
+ background-image: url("../images/welcome_screen_bg.svg");
2255
+ background-position: 97% -14%;
2256
+ background-repeat: no-repeat;
2257
+ }
2258
+
2259
+ .subOptions {
2260
+ border-left: 1px solid rgba(0, 0, 0, 0.1);
2261
+ padding: 0.5rem 0 0.5rem 1.5rem;
2262
+ margin-left: 1rem;
2263
+ }
2264
+
2265
+ .link-helper {
2266
+ display: -webkit-inline-box;
2267
+ display: -ms-inline-flexbox;
2268
+ display: inline-flex;
2269
+ -webkit-box-align: center;
2270
+ -ms-flex-align: center;
2271
+ align-items: center;
2272
+ }
2273
+
2274
+ .link:hover {
2275
+ text-decoration: underline;
2276
+ }
2277
+
2278
+ .link-underline {
2279
+ text-decoration: underline;
2280
+ }
2281
+
2282
+ .hidden {
2283
+ display: none;
2284
+ }
2285
+
2286
+ @media (max-width: 767px) {
2287
+ .scrollable {
2288
+ overflow-x: auto;
2289
+ }
2290
+ }
2291
+ .inactive {
2292
+ pointer-events: none;
2293
+ opacity: 0.6;
2294
+ }
2295
+ #iubenda-header {
2296
+ margin-bottom: 30px;
2297
+ }
2298
+ .iubenda-notice {
2299
+ border-left-color: #1CC691;
2300
+ padding-left: 0;
2301
+ display: flex;
2302
+ justify-content: flex-start;
2303
+ align-items: center;
2304
+ }
2305
+ .iubenda-notice::before {
2306
+ display: inline-block;
2307
+ content: '';
2308
+ height: 49px;
2309
+ width: 22px;
2310
+ margin: 1em 2em;
2311
+ background-size: contain;
2312
+ background-position: center center;
2313
+ background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyMjFweCIgaGVpZ2h0PSI0OTBweCIgdmlld0JveD0iMCAwIDIyMSA0OTAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICAgICAgICA8dGl0bGU+aXViZW5kYSB2ZWN0b3IgbG9nb192M19vbmx5X2lfZ3JlZW48L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4gICAgICAgIDxnIGlkPSJpdWJlbmRhLXZlY3Rvci1sb2dvX3YzX29ubHlfaV9ncmVlbiIgZmlsbD0iIzFDQzY5MSIgZmlsbC1ydWxlPSJub256ZXJvIj4gICAgICAgICAgICA8cGF0aCBkPSJNMjIwLjYsMTA4LjQgQzIyMC42LDEzNSAyMTAuOCwxNTkuMyAxOTQuNSwxNzguMSBMMjE3LjksNDg5LjQgTDguNSw0ODkuNCBMMzEuMiwxODMuNSBDMTEuOSwxNjQuMiAwLDEzNy43IDAsMTA4LjQgQzAsNDguNyA0OS40LDAuNCAxMTAuMywwLjQgQzE3MS4yLDAuNCAyMjAuNiw0OC43IDIyMC42LDEwOC40IFogTTExMC4zLDEzMyBDMTI1LDEzMyAxMzYuOCwxMjEuMiAxMzYuOCwxMDYuNyBDMTM2LjgsOTIuMiAxMjQuOSw4MC41IDExMC4zLDgwLjUgQzk1LjYsODAuNSA4My44LDkyLjMgODMuOCwxMDYuNyBDODMuOCwxMjEuMyA5NS42LDEzMyAxMTAuMywxMzMgWiBNMTMxLjIsMjI3IEw5NC45LDI2My4zIEw5NC45LDQwMy44IEwxMzEuMiw0MDMuOCBMMTMxLjIsMjI3IFoiIGlkPSJTaGFwZSI+PC9wYXRoPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+);
2314
+ }
2315
+ .iubenda-notice .notice-question {
2316
+ margin-bottom: 5px;
2317
+ display: block;
2318
+ }
2319
+ .iubenda-notice .notice-reply {
2320
+ margin-top: 0;
2321
+ }
2322
+ .iubenda-notice .step-2 {
2323
+ display: none;
2324
+ }
2325
+ .iubenda-notice .reply-yes {
2326
+ margin-right: 10px;
2327
+ }
2328
+ .iubenda-notice .reply-yes:before,
2329
+ .iubenda-notice .reply-no:before {
2330
+ font-family: dashicons;
2331
+ display: inline-block;
2332
+ line-height: 1;
2333
+ font-weight: 400;
2334
+ font-style: normal;
2335
+ speak: none;
2336
+ text-decoration: inherit;
2337
+ text-transform: none;
2338
+ text-rendering: auto;
2339
+ -webkit-font-smoothing: antialiased;
2340
+ -moz-osx-font-smoothing: grayscale;
2341
+ width: 20px;
2342
+ height: 20px;
2343
+ font-size: 20px;
2344
+ vertical-align: top;
2345
+ text-align: center;
2346
+ transition: color .1s ease-in;
2347
+ text-decoration: none;
2348
+ }
2349
+ .iubenda-notice .reply-yes:before {
2350
+ content: "\f147";
2351
+ }
2352
+ .iubenda-notice .reply-no:before {
2353
+ content: "\f335";
2354
+ }
assets/fonts/HKGrotesk-Bold.eot ADDED
Binary file
assets/fonts/HKGrotesk-Bold.woff ADDED
Binary file
assets/fonts/HKGrotesk-Bold.woff2 ADDED
Binary file
assets/fonts/HKGrotesk-Regular.eot ADDED
Binary file
assets/fonts/HKGrotesk-Regular.woff ADDED
Binary file
assets/fonts/HKGrotesk-Regular.woff2 ADDED
Binary file
assets/images/banner_failure.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="45" viewBox="0 0 45 45" width="45" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" stroke="#cf7463"><circle cx="22.5" cy="22.5" r="21.5"/><g stroke-linecap="round" stroke-linejoin="round"><path d="m22.5 13.5v11"/><path d="m22.5 28.5v2"/></g></g></svg>
assets/images/banner_success.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="45" viewBox="0 0 45 45" width="45" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" stroke="#1cc691" transform="translate(1 1)"><circle cx="21.5" cy="21.5" r="21.5"/><path d="m11 21.1543779 7.8986384 7.8456221 15.1013616-15"/></g></svg>
assets/images/checkboxes/button_style_dark.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="38" viewBox="0 0 194 38" width="194" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="#454141" height="36" rx="6" stroke="#000" stroke-opacity=".233894" stroke-width="1.5" width="192" x=".75" y=".75"/><g fill="#1cc691" transform="translate(15 8)"><circle cx="5.328" cy="5.328" r="5.328"/><path d="m3.33 1.11h3.996l2.30052444 19.536h-8.59704888z"/></g><text fill="#fff" font-family="HelveticaNeue-Bold, Helvetica Neue" font-size="19.5" font-weight="bold"><tspan x="37.5" y="25">Privacy policy</tspan></text></g></svg>
assets/images/checkboxes/button_style_light.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="38" viewBox="0 0 194 38" width="194" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="#fff" height="36" rx="6" stroke="#979797" stroke-width="1.5" width="192" x=".75" y=".75"/><g fill="#1cc691" transform="translate(15 8)"><circle cx="5.328" cy="5.328" r="5.328"/><path d="m3.33 1.11h3.996l2.30052444 19.536h-8.59704888z"/></g><text fill="#3f3e3e" font-family="HelveticaNeue-Bold, Helvetica Neue" font-size="19.5" font-weight="bold"><tspan x="38.5" y="25">Privacy policy</tspan></text></g></svg>
assets/images/checkboxes/cons_icon.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="35" viewBox="0 0 34 35" width="34" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" stroke="#7e818d" stroke-width=".94" transform="translate(1.3008 1)"><path d="m0 25.563551v2.1463524c0 2.677675 5.23114681 4.8491035 12.3464727 4.8491035 2.8181842 0 5.3407908-.3406392 7.3598622-.9184546.4732992-.1354482.9189291-.2839292 1.3342109-.4441104"/><path d="m0 18.5826026v3.1113008c0 2.677675 5.23114681 4.8491035 12.3464727 4.8491035 1.8738531 0 3.6170278-.1506007 5.1683914-.4213874" fill="#fff"/><path d="m0 12.6738342v2.5865796c0 2.5989198 5.23114681 4.7064828 12.3464727 4.7064828 7.1153259 0 12.3464728-2.107563 12.3464728-4.7064828v-2.5865796"/><path d="m0 4.56386207v4.70648276c0 2.59891977 5.23114681 4.70648277 12.3464727 4.70648277 7.1153259 0 12.3464728-2.107563 12.3464728-4.70648277v-4.70648276" fill="#ededed"/><path d="m12.3464727 9.41296552c7.1153259 0 12.3464728-2.10756298 12.3464728-4.70648276s-5.2311469-4.70648276-12.3464728-4.70648276c-7.11532589 0-12.3464727 2.10756298-12.3464727 4.70648276s5.23114681 4.70648276 12.3464727 4.70648276z" fill="#ededed"/><circle cx="25.574543" cy="24.972943" fill="#d2ecfe" r="5.721743"/><circle cx="25.574543" cy="24.972943" r="5.721743"/><path d="m27.8577432 25.5710401h-4.3752727l.0314356-2.4064" stroke-linecap="round" transform="matrix(.64278761 -.76604444 .76604444 .64278761 -9.497168 28.368937)"/></g></svg>
assets/images/checkboxes/cs_icon.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="36" viewBox="0 0 40 36" width="40" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(1.3008 1)"><g stroke="#7e818d"><path d="m6.24843636 27.2700267h-6.24843636v-27.2700267h36.6976v27.2700267h-6.6176" fill="#fff" stroke-linejoin="round" stroke-width=".94"/><path d="m0 4.8128h36.6976" stroke-linejoin="round" stroke-width=".94"/><path d="m2.4064 2.4064h1.668073" stroke-linejoin="round" stroke-width=".94"/><path d="m5.4144 2.4064h1.668073" stroke-linejoin="round" stroke-width=".94"/><path d="m8.4224 2.4064h1.668073" stroke-linejoin="round" stroke-width=".94"/></g><path d="m1.8048 6.6176h33.088v7.2192h-33.088z" fill="#efefef"/><g stroke="#bdbdbd" stroke-linecap="square" stroke-width=".94" transform="translate(29.4784 9.024)"><path d="m.3008.3008 1.8048 1.8048"/><path d="m.3008.3008 1.8048 1.8048" transform="matrix(1 0 0 -1 0 2.4064)"/></g><g stroke="#7e818d" stroke-width=".94" transform="translate(9.6256 16.8448)"><path d="m16.116112 4.099904c-.152656-.261696-.43616-.45804069-.7415447-.50165669-.3270473-.04354331-.6323593.04368869-.8722473.23996069-.3926167.34885531-.894128.523392-1.41752.523392-1.19944 0-2.1808-.98136-2.1808-2.1808 0-.21815269.0436887-.45804069.10904-.65424.0873047-.305312.0436887-.63250469-.10904-.89420069-.1745367-.283504-.4580407-.4580407-.7632073-.523392-.4580407-.065424-.93788939-.10896731-1.4175927-.10896731-4.81964069 0-8.7232 3.90355931-8.7232 8.7232 0 4.8194953 3.90355931 8.7232 8.7232 8.7232 4.8196407 0 8.7232-3.9037047 8.7232-8.7232 0-1.6356-.4580407-3.22765669-1.330288-4.623296z" fill="#d2ecfe" fill-rule="nonzero"/><path d="m16.116112 4.099904c-.152656-.261696-.43616-.45804069-.7415447-.50165669-.3270473-.04354331-.6323593.04368869-.8722473.23996069-.3926167.34885531-.894128.523392-1.41752.523392-1.19944 0-2.1808-.98136-2.1808-2.1808 0-.21815269.0436887-.45804069.10904-.65424.0873047-.305312.0436887-.63250469-.10904-.89420069-.1745367-.283504-.4580407-.4580407-.7632073-.523392-.4580407-.065424-.93788939-.10896731-1.4175927-.10896731-4.81964069 0-8.7232 3.90355931-8.7232 8.7232 0 4.8194953 3.90355931 8.7232 8.7232 8.7232 4.8196407 0 8.7232-3.9037047 8.7232-8.7232 0-1.6356-.4580407-3.22765669-1.330288-4.623296z" fill-rule="nonzero"/><path d="m11.4304 9.6256h-4.8128l.03457912-1.8048" stroke-linecap="round" transform="matrix(.64278761 -.76604444 .76604444 .64278761 -3.458874 10.02882)"/></g></g></svg>
assets/images/checkboxes/eu_only_icon.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="28" viewBox="0 0 30 28" width="30" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="m4.5 5.5h25.5v18h-25.5z" fill="#bcbcbc" fill-opacity=".1"/><path d="m13.5 7a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5zm0 10.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5zm4.5-6a.75.75 0 1 0 1.5 0 .75.75 0 0 0 -1.5 0zm-10.5 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0 -1.5 0zm9.182 3.182a.75.75 0 1 0 1.06 1.06.75.75 0 0 0 -1.06-1.06zm-7.425-7.425a.75.75 0 1 0 1.061 1.061.75.75 0 0 0 -1.06-1.06zm1.061 7.425a.75.75 0 1 0 -1.06 1.06.75.75 0 0 0 1.06-1.06zm7.425-7.425a.75.75 0 1 0 -1.061 1.061.75.75 0 0 0 1.06-1.06z" fill="#333"/><g stroke="#333" stroke-linecap="round" stroke-linejoin="round"><path d="m.75 2.5h25.391v18h-25.391z"/><path d="m.75 1v26.027" fill="#d8d8d8"/></g></g></svg>
assets/images/checkboxes/pp_icon.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="41" viewBox="0 0 35 41" width="35" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="a" d="m19.0034824 25.2672v-3.9895579c0-2.4478154 1.9962574-4.4328421 4.4589176-4.4328421s4.4589176 1.9850267 4.4589176 4.4328421v3.9895579"/><filter id="b" height="158.7%" width="155.4%" x="-27.7%" y="-29.3%"><feMorphology in="SourceAlpha" operator="dilate" radius="1.47" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feMorphology in="SourceAlpha" operator="erode" radius="2" result="shadowInner"/><feOffset dx="0" dy="0" in="shadowInner" result="shadowInner"/><feComposite in="shadowOffsetOuter1" in2="shadowInner" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter></defs><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><path d="m28.8459487 4.22139661h4.2420513v-.84427932c0-1.86501302-1.5195028-3.37711729-3.393641-3.37711729h-9.3325128" fill="#d8d8d8" stroke="#7e818d" stroke-width=".94"/><path d="m11.9132253 32.0826142h-11.9132253v-28.70549691c0-1.86501302 1.51950277-3.37711729 3.39364103-3.37711729h26.75546587c-2.0404267 0-3.848389 1.45553755-3.848389 3.4826522v10.5300274m0 18.0699346h-5.0904615" fill="#fff" stroke="#7e818d" stroke-width=".94"/><g stroke-linejoin="round"><use fill="#000" filter="url(#b)" xlink:href="#a"/><use stroke="#7e818d" stroke-width=".94" xlink:href="#a"/></g><g stroke="#7e818d" stroke-width=".94"><path d="m31.8848 38.0054261c0 .6064128-.4851302 1.0985739-1.08288 1.0985739h-14.07744c-.5977498 0-1.08288-.4921611-1.08288-1.0985739v-10.4364522c0-.6064128.4851302-1.0985739 1.08288-1.0985739h14.07744c.5977498 0 1.08288.4921611 1.08288 1.0985739z" fill="#d2ecfe" stroke-linejoin="round"/><path d="m31.8848 38.0054261c0 .6064128-.4851302 1.0985739-1.08288 1.0985739h-14.07744c-.5977498 0-1.08288-.4921611-1.08288-1.0985739v-10.4364522c0-.6064128.4851302-1.0985739 1.08288-1.0985739h14.07744c.5977498 0 1.08288.4921611 1.08288 1.0985739z" stroke-linejoin="round"/><path d="m23.2580881 29.5403052c-.7465194.1832499-1.3540535.8174054-1.535682 1.6020479-.2432242 1.0484113.2226923 2.0007552.9876378 2.4705412v1.9741006c0 .613054.4717076 1.1106051 1.0529187 1.1106051.5817376 0 1.0529187-.4975511 1.0529187-1.1106051v-1.9741006c.6270131-.3848247 1.0529187-1.0933908 1.0529187-1.9130174 0-1.4004731-1.2287561-2.4983062-2.6107119-2.1595717z" fill="#fff" stroke-linejoin="round"/><path d="m4.242051 8.442793h17.816616"/><path d="m4.242051 11.819911h17.816616"/><path d="m4.242051 15.197028h11.029334"/><path d="m6.787282 25.32838h4.242051"/><path d="m4.242051 25.32838h1.696821"/></g></g></svg>
assets/images/checkboxes/tc_icon.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="40" viewBox="0 0 35 40" width="35" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" stroke="#7e818d" stroke-width=".94" transform="translate(1 1)"><path d="m28.8459487 4.22139661h4.2420513v-.84427932c0-1.86501302-1.5195028-3.37711729-3.393641-3.37711729h-9.3325128" fill="#d8d8d8"/><path d="m11.9985445 32.0826142h-11.9985445v-28.70549691c0-1.86501302 1.51950277-3.37711729 3.39364103-3.37711729h26.75546587c-2.0404267 0-3.848389 1.45553755-3.848389 3.4826522v10.5300274m0 18.0699346h-5.0904615" fill="#fff"/><path d="m4.242051 8.442793h17.816616"/><path d="m4.242051 11.819911h17.816616"/><path d="m4.242051 15.197028h11.029334"/><path d="m6.787282 25.32838h4.242051"/><path d="m4.242051 25.32838h1.696821"/><g stroke-linejoin="round"><path d="m23.4672761 17.4464-8.4272761 3.5583699v8.4511286c0 3.9733649 7.9547352 8.3199138 8.4224 8.4449015.4681081-.1249877 8.4224-4.7753325 8.4224-8.0001052v-8.8959249z" fill="#d2ecfe"/><path d="m23.4672761 17.4464-8.4272761 3.5583699v8.4511286c0 3.9733649 7.9547352 8.3199138 8.4224 8.4449015.4681081-.1249877 8.4224-4.7753325 8.4224-8.0001052v-8.8959249z"/><path d="m19.8528 28.0680483 2.4691351 2.6135517 5.9532649-7.2192"/></g></g></svg>
assets/images/checkboxes/worldwide.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="30" viewBox="0 0 32 30" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(1 1.632)"><circle cx="18" cy="14.368" fill="#bcbcbc" fill-opacity=".1" r="13"/><g stroke="#333"><circle cx="13" cy="13.368" r="13"/><path d="m17.545 4.368h-3.409l-2.045 1.715v1.143h-2.046l-2.045 1.142v1.143h3.409l.682.572h1.364l1.363 1.143h2.727l1.364 1.142 1.364-1.142h2.727m-7.5 4.017h-1.25l-1.875-1.875h-2.5l-1.875 1.875 1.25 3.125h1.875l1.25 1.25v3.125l.625.625h1.25l1.875-1.875v-1.875l1.875-1.875z"/></g></g></svg>
assets/images/iubenda_logo.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="170" height="62" viewBox="0 0 170 62"><title>Group 56</title><g fill="none" fill-rule="evenodd"><path fill="#1CC691" d="M13.665 0c7.55 0 13.666 6.093 13.666 13.615 0 3.35-1.213 6.416-3.233 8.79L27 61.64H1.055l2.813-38.55A13.509 13.509 0 0 1 0 13.616C0 6.093 6.116 0 13.665 0zm2.595 28.552l-4.497 4.498v17.795h4.497V28.552zM13.665 10.1c-1.815 0-3.286 1.481-3.286 3.309 0 1.827 1.471 3.308 3.286 3.308s3.287-1.481 3.287-3.308c0-1.828-1.472-3.309-3.287-3.309z"/><g fill="#5A5A5A" transform="translate(43.238 18.109)"><path d="M23.293 24.622c-1.754 1.903-3.474 3.101-4.395 3.593a6.13 6.13 0 01-2.926.738c-1.146 0-2.14-.332-2.98-.996a5.148 5.148 0 01-1.754-2.561c-.327-1.044-.491-2.521-.491-4.43v-7.494c0-.013 0-.025.002-.038v-1.103c0-.217 0-1.164-.588-1.455-.089-.045-.248-.08-.478-.106a.347.347 0 01-.307-.344l-.007-1a.347.347 0 01.344-.35h3.764c.541 0 .98.442.98.987v5.134h-.003v6.35c0 1.91.331 3.163.994 3.76.662.596 1.462.894 2.4.894.64 0 1.366-.201 2.177-.604.81-.402 2.157-1.17 3.273-2.301l.003-.968h.002l.012-9.115v-.882c0-.217 0-1.164-.58-1.455-.088-.044-.242-.08-.463-.105a.347.347 0 01-.306-.344l-.007-1a.347.347 0 01.344-.351H26.012c.536 0 .97.437.97.976v3.307a.55.55 0 01.004.068v6.823c0 1.58-.001 3.035-.004 4.363h-.004l.004.513c0 .217-.025 1.256.557 1.548.088.045.243.08.466.106.174.02.305.167.306.343l.007 1.004a.347.347 0 01-.344.35H24.253a.972.972 0 01-.968-.975V27.5l.006-1.859h-.004l.006-1.018zM30.778 5.88h-.002V3.31c0-.208 0-1.118-.565-1.399a1.13 1.13 0 00-.226-.08.348.348 0 01-.261-.335L29.717.53a.347.347 0 01.344-.35H33.403c.521 0 .943.424.943.949v.001L34.34 6.07v6.344c1.913-2.642 3.977-3.963 6.192-3.963 2.028 0 3.797.86 5.307 2.581 1.51 1.721 2.266 4.074 2.266 7.06 0 3.484-1.165 6.29-3.495 8.419-2 1.828-4.229 2.742-6.688 2.742-1.151 0-2.32-.207-3.506-.621-1.015-.355-2.047-.86-3.099-1.517a1.145 1.145 0 01-.536-.971V7.234l-.002-1.354zm3.894 19.956c.63.562 1.278.997 1.943 1.307a5.654 5.654 0 002.406.546c1.309 0 2.528-.714 3.657-2.142 1.129-1.429 1.693-3.507 1.693-6.235 0-2.513-.564-4.445-1.693-5.795-1.13-1.35-2.413-2.024-3.851-2.024-.763 0-1.525.193-2.287.578-.505.251-1.132.722-1.88 1.413a.996.996 0 00-.32.732V25.09c0 .285.12.556.332.745zM73.484 22.502V13.96c1.692-1.827 4.132-2.74 5.84-2.74 1.104 0 1.89.396 2.356 1.19.466.795.699 2.07.699 3.826v6.268h-.006v4.992c0 .524.421.948.941.948h2.62c.217 0 .493-.003.826-.009a.347.347 0 00.34-.35l-.006-.962a.348.348 0 00-.294-.342c-.13-.02-.23-.048-.303-.084-.564-.283-.564-1.202-.564-1.412V22.69h-.003v-6.793c0-1.742-.158-3.035-.474-3.879-.459-1.208-1.076-2.076-1.85-2.603-.775-.527-1.7-.79-2.777-.79-1.969 0-4.772 1.204-6.931 3.614l-.02.022a.225.225 0 01-.394-.152v-.761s0 .002-.002.003v-1.39a.936.936 0 00-.932-.939H69.266a.347.347 0 00-.343.35l.006.966a.348.348 0 00.257.334c.08.022.151.048.212.078.558.28.558 1.19.558 1.397v.045c-.005.193-.004.405 0 .62v1.9h.003c-.01.704-.026 1.483-.026 2.26v8.304c0 .209 0 1.126-.563 1.408a1.412 1.412 0 01-.418.1.347.347 0 00-.303.343l-.006.949a.347.347 0 00.343.35h3.559c.518 0 .939-.423.939-.945v-4.98zM123.322 23.683v1.296a17.107 17.107 0 00.01.27c.04.594.225.974.553 1.138.067.034.154.063.259.086a.348.348 0 01.273.338l.006.968a.347.347 0 01-.344.35H120.71a.942.942 0 01-.94-.945v-1.846c-2.028 1.585-3.301 2.501-3.819 2.749a5.785 5.785 0 01-2.482.545c-1.367 0-2.493-.473-3.378-1.418-.884-.945-1.327-2.189-1.327-3.73 0-.975.216-1.819.648-2.532.59-.988 1.475-2.118 3.075-2.792 1.6-.674 2.968-.828 7.283-1.815v-1.757c-.017-1.866-.314-3.77-3.388-3.582-2.154.132-4.134.817-5.94 2.056a.345.345 0 01-.542-.287v-1.14c0-.6.115-.994.344-1.18 1.271-1.03 4.41-2.26 7.47-2.052 3.397.23 4.618 1.656 5.23 3.831.186.664.388 1.15.388 3.084v5.962c0 .837-.003 1.638-.01 2.403zm-3.552-5.838c-2.672.552-4.21.895-4.612 1.03-1.49.503-2.671 1.076-2.768 3.583-.04 1.046.31 1.916.928 2.607.619.69 1.33 1.036 2.137 1.036 1 0 2.29-.76 3.868-1.979a1.15 1.15 0 00.447-.91v-5.367zM105.585 25.185v.009c0 .203 0 1.092.546 1.366.06.03.133.056.217.078a.348.348 0 01.263.335l.005.927a.347.347 0 01-.343.35h-3.222a.914.914 0 01-.91-.917v-.899l-.01.004c-.935 1.003-1.849 1.722-2.742 2.16a6.486 6.486 0 01-2.89.655c-2.093 0-3.921-.9-5.484-2.697-1.563-1.798-2.345-4.108-2.345-6.93 0-2.823.865-5.405 2.596-7.747 1.73-2.343 3.957-3.514 6.678-3.514 1.689 0 3.085.552 4.187 1.655V3.14c0-.209 0-1.122-.547-1.404a1.097 1.097 0 00-.19-.075.348.348 0 01-.25-.332L101.14.35a.347.347 0 01.343-.35h3.19c.505 0 .914.412.914.92v24.265zm-5.872-13.75c-.69-.408-1.364-.613-2.02-.613-1.228 0-2.347.531-3.35 1.566-1.103 1.14-1.842 2.674-1.842 5.54 0 2.894.614 5.11 1.843 6.65 1.228 1.541 2.595 2.311 4.103 2.311 1.076 0 2.121-.468 3.137-1.403a1.7 1.7 0 00.547-1.25v-8.55c0-1.748-.92-3.366-2.418-4.251zM52.081 26.673c-1.562-1.785-2.374-4.639-2.374-7.47 0-2.99.923-5.725 2.599-7.7 1.745-2.057 4.132-3.145 6.901-3.145 2.348 0 4.138.807 5.32 2.398 1.102 1.484 1.66 3.608 1.66 6.313 0 .327-.019.783-.058 1.368a.694.694 0 01-.69.65H53.413a.2.2 0 00-.2.203c.042 2.222.743 4.1 2.03 5.432 1.264 1.309 2.998 2 5.014 2 1.504 0 3.476-.396 4.998-.862a.405.405 0 01.51.494l-.205.792c-.075.29-.272.531-.54.662-1.502.738-3.753 1.445-6.065 1.445-2.809 0-5.218-.689-6.874-2.58zm.998-10.159a.173.173 0 00.054.142c.038.038.09.06.146.06h9.658c.103 0 .19-.074.2-.17.11-1.018.153-2.863-1.352-4.431-.743-.774-1.64-1.166-3.365-1.166-3.008 0-5.007 2.991-5.341 5.565z"/><path d="M82.386 22.618v2.619c0 .212 0 1.14-.56 1.426a.533.533 0 01-.065.028.982.982 0 00-.655.92.812.812 0 00.813.817h3.068a.935.935 0 00.935-.935v-5.066l-3.536.19zM73.486 22.618v2.619c0 .212 0 1.14.56 1.426.019.01.04.019.064.028.39.138.652.505.655.92a.812.812 0 01-.812.817h-3.069a.935.935 0 01-.935-.936v-5.065l3.537.19zM5.062 10.612v15.2c0 .397.226.76.582.934.357.175.583.537.583.934v.294c0 .321-.26.582-.583.582H.577A.577.577 0 010 27.98v-.306c0-.393.223-.753.577-.928.353-.174.576-.534.576-.928V11.144a.374.374 0 00-.374-.374.374.374 0 01-.374-.374v-.484c0-.473.384-.858.858-.858h2.24c.861 0 1.559.698 1.559 1.558z"/><ellipse cx="3.114" cy="2.786" rx="2.422" ry="2.438"/></g></g></svg>
assets/images/list_radar_cons.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="89" viewBox="0 0 89 89" width="89" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="a" d="m59 25h18"/><filter id="b" height="100%" width="105.6%" x="-2.8%" y="-50%"><feMorphology in="SourceAlpha" operator="dilate" radius="0.5" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feMorphology in="SourceAlpha" operator="erode" radius="1" result="shadowInner"/><feOffset dx="0" dy="0" in="shadowInner" result="shadowInner"/><feComposite in="shadowOffsetOuter1" in2="shadowInner" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0"/></filter><path id="c" d="m77 32h-18"/><filter id="d" height="100%" width="105.6%" x="-2.8%" y="-50%"><feMorphology in="SourceAlpha" operator="dilate" radius="0.5" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feMorphology in="SourceAlpha" operator="erode" radius="1" result="shadowInner"/><feOffset dx="0" dy="0" in="shadowInner" result="shadowInner"/><feComposite in="shadowOffsetOuter1" in2="shadowInner" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0"/></filter></defs><g fill="none" fill-rule="evenodd" transform="translate(1 16)"><path d="m65 47v-39.80729931c0-.56033171-.2128492-1.12009801-.6329609-1.54868674-.426257-.42858874-.9798883-.64401395-1.5340782-.64401395-22.3509384 0-39.1141422 0-50.2896114 0" stroke="#7e818d"/><path d="m14 47h47v-37h-47" fill="#e7e7e7"/><path d="m18.8838533 47h41.1161467v-37h-47.0250335m-2.5263518 0h-5.4486147" stroke="#7e818d"/><path d="m70 47v3.5009062c0 .896522-.3195867 1.793648-.96046 2.4757055-.6386067.6790369-1.4789383 1.0233883-2.3243698 1.0233883-18.4816432 0-36.1908559 0-48.4812095 0m-3.8044798 0c-1.606173 0-3.0874112 0-4.4294809 0" stroke="#7e818d"/><use fill="#000" filter="url(#b)" xlink:href="#a"/><use stroke="#7e818d" xlink:href="#a"/><path d="m81 25h4" stroke="#7e818d"/><use fill="#000" filter="url(#d)" xlink:href="#c"/><use stroke="#7e818d" xlink:href="#c"/><path d="m81 32h4" stroke="#7e818d"/><path d="m78.6403901 6.65260873.7192198.69478254-9.807648 10.15260873h-14.5519619v-1h14.127589z" fill="#7e818d" fill-rule="nonzero"/><path d="m87 4.50038399c0 2.484427-2.0140773 4.49961601-4.4988482 4.49961601-2.4855388 0-4.5011518-2.01518901-4.5011518-4.49961601 0-2.48519498 2.015613-4.50038399 4.5011518-4.50038399 2.4847709 0 4.4988482 2.01518901 4.4988482 4.50038399z" stroke="#7e818d"/><path d="m55 39.5v-1h14.5519619l9.807648 10.1526087-.7192198.6947826-9.5128011-9.8473913z" fill="#7e818d" fill-rule="nonzero"/><g stroke="#7e818d"><path d="m87 52.4992321c0-2.4834471-2.0140773-4.4992321-4.4988482-4.4992321-2.4855388 0-4.5011518 2.015785-4.5011518 4.4992321 0 2.4849829 2.015613 4.5007679 4.5011518 4.5007679 2.4847709 0 4.4988482-2.015785 4.4988482-4.5007679z"/><circle cx="36.5" cy="28.5" fill="#fff" r="9.5"/><path d="m41 29h-8l.0574786-4" stroke-linecap="round" transform="matrix(.64278761 -.76604444 .76604444 .64278761 -7.466342 37.988379)"/></g></g></svg>
assets/images/list_radar_cs.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="89" viewBox="0 0 89 89" width="89" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(14 16)"><g stroke="#7e818d"><path d="m10.3863636 45.3291667h-10.3863636v-45.3291667h61v45.3291667h-11" fill="#fff" stroke-linejoin="round"/><path d="m0 8h61" stroke-linejoin="round"/><path d="m4 4h2.772727" stroke-linejoin="round"/><path d="m9 4h2.772727" stroke-linejoin="round"/><path d="m14 4h2.772727" stroke-linejoin="round"/></g><path d="m3 11h55v12h-55z" fill="#efefef"/><g stroke="#bdbdbd" stroke-linecap="square" transform="translate(49 15)"><path d="m.5.5 3 3"/><path d="m.5.5 3 3" transform="matrix(1 0 0 -1 0 4)"/></g><g fill-rule="nonzero" transform="translate(16 28)"><path d="m26.78875 6.815c-.25375-.435-.725-.76137083-1.2326208-.83387083-.5436292-.07237917-1.0511292.07262083-1.4498792.39887083-.6526208.57987917-1.48625.87-2.35625.87-1.99375 0-3.625-1.63125-3.625-3.625 0-.36262083.0726208-.76137083.18125-1.0875.1451208-.5075.0726208-1.05137083-.18125-1.48637083-.2901208-.47125-.7613708-.76137084-1.2686292-.87-.7613708-.10875-1.5589916-.18112917-2.3563708-.18112917-8.01137083 0-14.5 6.48862917-14.5 14.5 0 8.0111292 6.48862917 14.5 14.5 14.5 8.0113708 0 14.5-6.4888708 14.5-14.5 0-2.71875-.7613708-5.36512083-2.21125-7.685z" fill="#e7e7e7"/><path d="m26.78875 6.815c-.25375-.435-.725-.76137083-1.2326208-.83387083-.5436292-.07237917-1.0511292.07262083-1.4498792.39887083-.6526208.57987917-1.48625.87-2.35625.87-1.99375 0-3.625-1.63125-3.625-3.625 0-.36262083.0726208-.76137083.18125-1.0875.1451208-.5075.0726208-1.05137083-.18125-1.48637083-.2901208-.47125-.7613708-.76137084-1.2686292-.87-.7613708-.10875-1.5589916-.18112917-2.3563708-.18112917-8.01137083 0-14.5 6.48862917-14.5 14.5 0 8.0111292 6.48862917 14.5 14.5 14.5 8.0113708 0 14.5-6.4888708 14.5-14.5 0-2.71875-.7613708-5.36512083-2.21125-7.685z" stroke="#7e818d"/></g><path d="m35 44h-8l.0574786-3" stroke="#7e818d" stroke-linecap="round" transform="matrix(.64278761 -.76604444 .76604444 .64278761 -21.483305 38.928904)"/></g></svg>
assets/images/list_radar_pp.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="89" viewBox="0 0 89 89" width="89" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="a" d="m31.5882353 42v-6.6315789c0-4.0688422 3.3182471-7.3684211 7.4117647-7.3684211s7.4117647 3.2995789 7.4117647 7.3684211v6.6315789"/><filter id="b" height="150%" width="147.2%" x="-23.6%" y="-25%"><feMorphology in="SourceAlpha" operator="dilate" radius="2" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feMorphology in="SourceAlpha" operator="erode" radius="2.5" result="shadowInner"/><feOffset dx="0" dy="0" in="shadowInner" result="shadowInner"/><feComposite in="shadowOffsetOuter1" in2="shadowInner" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter></defs><g fill="none" fill-rule="evenodd" transform="translate(17 12)"><path d="m47.9487179 7.01694915h7.0512821v-1.40338983c0-3.10008813-2.5257692-5.61355932-5.6410256-5.61355932h-15.5128206" fill="#d8d8d8" stroke="#7e818d"/><path d="m19.8025686 53.3288136h-19.8025686v-47.71525428c0-3.10008813 2.52576923-5.61355932 5.64102564-5.61355932h44.47384616c-3.3916667 0-6.3969231 2.41944407-6.3969231 5.78898305v17.50337005m0 30.0364605h-8.4615384" fill="#fff" stroke="#7e818d"/><g stroke-linejoin="round"><use fill="#000" filter="url(#b)" xlink:href="#a"/><use stroke="#7e818d" xlink:href="#a"/></g><path d="m53 63.173913c0 1.008-.8064 1.826087-1.8 1.826087h-23.4c-.9936 0-1.8-.818087-1.8-1.826087v-17.347826c0-1.008.8064-1.826087 1.8-1.826087h23.4c.9936 0 1.8.818087 1.8 1.826087z" fill="#e7e7e7"/><g stroke="#7e818d"><path d="m53 63.173913c0 1.008-.8064 1.826087-1.8 1.826087h-23.4c-.9936 0-1.8-.818087-1.8-1.826087v-17.347826c0-1.008.8064-1.826087 1.8-1.826087h23.4c.9936 0 1.8.818087 1.8 1.826087z" stroke-linejoin="round"/><path d="m38.6603857 49.102901c-1.2408899.3046041-2.2507537 1.358719-2.5526627 2.6629786-.4042956 1.7427048.3701667 3.3257233 1.641685 4.1066175v3.2814172c0 1.0190393.7840884 1.8460857 1.7501974 1.8460857.966984 0 1.7501973-.8270464 1.7501973-1.8460857v-3.2814172c1.0422425-.6396687 1.7501973-1.8174713 1.7501973-3.1798825 0-2.3279141-2.0424803-4.1527697-4.3396143-3.5897136z" fill="#fff" stroke-linejoin="round"/><path d="m7.051282 14.033898h29.615385"/><path d="m7.051282 19.647458h29.615385"/><path d="m7.051282 25.261017h18.333333"/><path d="m11.282051 42.101695h7.051282"/><path d="m7.051282 42.101695h2.820513"/></g></g></svg>
assets/images/list_radar_tc.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="89" viewBox="0 0 89 89" width="89" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(17 13)"><g stroke="#7e818d"><path d="m47.9487179 7.01694915h7.0512821v-1.40338983c0-3.10008813-2.5257692-5.61355932-5.6410256-5.61355932h-15.5128206" fill="#d8d8d8"/><path d="m19.9443891 53.3288136h-19.9443891v-47.71525428c0-3.10008813 2.52576923-5.61355932 5.64102564-5.61355932h44.47384616c-3.3916667 0-6.3969231 2.41944407-6.3969231 5.78898305v17.50337005m0 30.0364605h-8.4615384" fill="#fff"/><path d="m7.051282 14.033898h29.615385"/><path d="m7.051282 19.647458h29.615385"/><path d="m7.051282 25.261017h18.333333"/><path d="m11.282051 42.101695h7.051282"/><path d="m7.051282 42.101695h2.820513"/></g><path d="m39.0081053 29-14.0081053 5.9148436v14.0477537c0 6.6046623 13.2226316 13.8296438 14 14.0374027.7781053-.2077589 14-7.9377202 14-13.2980472v-14.7871092z" fill="#e7e7e7"/><path d="m39.0081053 29-14.0081053 5.9148436v14.0477537c0 6.6046623 13.2226316 13.8296438 14 14.0374027.7781053-.2077589 14-7.9377202 14-13.2980472v-14.7871092z" stroke="#7e818d" stroke-linejoin="round"/><path d="m33 46.6556654 4.1042805 4.3443346 9.8957195-12" stroke="#7e818d" stroke-linejoin="round"/></g></svg>
assets/images/modals/modal_almost_there.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="124" viewBox="0 0 371 124" width="371" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="a" d="m23.5995742 40.9132972-6.5269404 6.5531046v25.3627558h6.5269404zm-3.764931-16.9684197c2.6348039 0 4.7696192-2.123861 4.7696192-4.7402544 0-2.6169847-2.1348153-4.7384806-4.7696192-4.7384806-2.6365706 0-4.7713859 2.1214959-4.7713859 4.7384806 0 2.6163934 2.1348153 4.7402544 4.7713859 4.7402544zm19.8328765-4.4434342c0 4.8005645-1.7596768 9.1919664-4.6918825 12.5912084l4.212506 56.1989473h-37.65637636l4.0823559-55.216839c-3.47518497-3.5092191-5.61412274-8.2914541-5.61412274-13.5733167 0-10.77244544 8.87788737-19.5014433 19.8346432-19.5014433 10.9567559 0 19.8328765 8.72899786 19.8328765 19.5014433z"/><filter id="b" height="107.9%" width="117.6%" x="-8.8%" y="-4%"><feMorphology in="SourceAlpha" operator="dilate" radius="1.5" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feComposite in="shadowOffsetOuter1" in2="SourceAlpha" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter></defs><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><g stroke="#7e818d"><path d="m151 60.6575186v58.3424814c0 1.656854-1.343146 3-3 3h-145c-1.65685425 0-3-1.343146-3-3v-116c0-1.65685425 1.34314575-3 3-3h145c1.656854 0 3 1.34314575 3 3v27.0786124" stroke-linecap="round" stroke-linejoin="round"/><path d="m12.5 13.5h5" stroke-linecap="round" stroke-linejoin="round"/><path d="m21.5 13.5h5" stroke-linecap="round" stroke-linejoin="round"/><path d="m30.5 13.5h5" stroke-linecap="round" stroke-linejoin="round"/><path d="m.5 26.5h45" stroke-linecap="square"/><path d="m105.5 26.5h45" stroke-linecap="round" stroke-linejoin="round"/></g><g transform="translate(53 14)"><use fill="#000" filter="url(#b)" xlink:href="#a"/><use fill="#1cc691" fill-rule="evenodd" stroke="#7e818d" xlink:href="#a"/></g><rect height="122" rx="3" stroke="#7e818d" width="151" x="218"/><path d="m218.5 26.5h45" stroke="#7e818d" stroke-linecap="round" stroke-linejoin="round"/><path d="m323.5 26.5h45" stroke="#7e818d" stroke-linecap="round" stroke-linejoin="round"/><rect fill="#fff" height="50" rx="3" stroke="#7e818d" width="136" x="107" y="50"/><g stroke="#7e818d" stroke-linecap="round" stroke-linejoin="round"><path d="m153.5 64.5h27" opacity=".468442"/><g transform="translate(136 30.5)"><path d="m10.5 7h29"/><path d="m38.1502072 2.5v9h-9" transform="matrix(.70710678 -.70710678 .70710678 .70710678 4.90617 25.844542)"/><path d="m.5 7h6"/></g><g transform="translate(181 107.795455)"><path d="m7.266667 4.704545h15.466666"/><path d="m22.1855545 1.56818182v6.27272727h-6.2727273" transform="matrix(.70710678 -.70710678 .70710678 .70710678 2.252763 14.847741)"/><path d="m.277778 4.704545h4.444444"/></g><path d="m206.5 64.5h15"/><path d="m185.5 64.5h15"/><path d="m153.5 74.5h33"/><path d="m190.5 74.5h19" opacity=".468442"/><path d="m153.5 79.5h19" opacity=".468442"/><path d="m153.5 84.5h24"/><path d="m181.5 84.5h16" opacity=".648597"/><path d="m153.5 69.5h14"/><path d="m172.5 69.5h14"/></g><g stroke="#7e818d"><circle cx="132" cy="75" fill="#d2ecfe" r="14"/><g stroke-linecap="round" stroke-linejoin="round" transform="translate(123 67)"><path d="m10.719983.803419-3.428571 15.111111"/><path d="m1.76638796 11.9192344.08689792-5.61626249c.01671576-1.0803492.88847004-1.95210348 1.96881924-1.96881924l5.61626251-.08689792" transform="matrix(.70710678 -.70710678 .70710678 .70710678 -4.074819 6.329007)"/><path d="m8.56995939 11.9192344.08689792-5.61626249c.01671576-1.0803492.88847004-1.95210348 1.96881929-1.96881924l5.6162625-.08689792" transform="matrix(-.70710678 -.70710678 -.70710678 .70710678 26.893997 11.139858)"/></g></g><g fill-rule="nonzero" transform="translate(258 25)"><g fill="#676767"><path d="m33 0c-18.1959228 0-33 14.8040772-33 33s14.8040772 33 33 33 33-14.8040772 33-33-14.8040772-33-33-33zm0 63.25c-16.6799317 0-30.25-13.5700683-30.25-30.25s13.5700683-30.25 30.25-30.25 30.25 13.5700683 30.25 30.25-13.5700683 30.25-30.25 30.25z"/><path d="m8.2830858 22c-1.46012055 3.3678858-2.2830858 7.0797686-2.2830858 10.9864491 0 11.1210638 6.5805715 20.6981643 16 25.0135509l-12.53260687-36z"/><path d="m21.8849214 20.9687708c0 .7521595-.6200711 1.3607973-1.3863598 1.3607973h-.7997968l7.7735658 23.6704319c1.4168218-3.9656147 2.8745982-8.086711 4.0059233-11.3775749l-4.409545-12.292857h-1.0247081c-.7662888 0-1.3863598-.6086378-1.3863598-1.3607973s.620071-1.3607974 1.3863598-1.3607974h12.4772381c.7662887 0 1.3863598.6086379 1.3863598 1.3607974s-.6200711 1.3607973-1.3863598 1.3607973h-.5425622l7.7735659 23.6704319c1.6111017-4.5076412 3.2858352-9.2451829 4.4582841-12.7003322.5320696-2.6112958-1.5325775-5.8923589-3.3657134-8.8039868-1.425622-2.2657807-2.6576411-4.2232558-2.6576411-5.8936876 0-5.0963455 3.0218312-5.8578075 4.8224741-5.8578075 1.0854629 0 2.0781858.2850498 2.9903537.7249169-4.9705532-4.61611279-11.6574714-7.4691028-19.0242003-7.4691028-10.236419 0-19.1727872 5.486877-23.9757997 13.6079734h11.4985616c.7662887 0 1.3863598.6086379 1.3863598 1.3607974z"/><path d="m25 59.9702579c2.3921697.6531429 4.9003193 1.0297421 7.5011153 1.0297421 2.6001098 0 5.1074015-.3764303 7.4988847-1.0292359l-7.5078062-20.9707641c-2.6850359 7.6877168-6.2562194 17.5621376-7.4921938 20.9702579z"/><path d="m54.9005596 17c1.1103833 3.5154217-.2520206 9.4992717-1.6958342 14.1146991-.2347773.7529093-.5265908 1.6547898-.8595235 2.6680633-.0318343.1382347-.0676475.2764692-.1087669.414704-.0305079.1060246-.0742799.2066809-.1273368.2992847-2.3136166 6.980683-6.3058238 18.3781651-8.1090982 23.5032489 9.4197723-4.3196655 16-13.9019787 16-25.0291984 0-5.9581826-1.9035854-11.4635795-5.0994404-15.9708016z"/></g><path d="m33 0c-18.1959228 0-33 14.8040772-33 33s14.8040772 33 33 33 33-14.8040772 33-33-14.8040772-33-33-33z"/></g><path d="m227.5 13.5h5" stroke="#7e818d" stroke-linecap="round" stroke-linejoin="round"/><path d="m236.5 13.5h5" stroke="#7e818d" stroke-linecap="round" stroke-linejoin="round"/><path d="m245.5 13.5h5" stroke="#7e818d" stroke-linecap="round" stroke-linejoin="round"/></g></svg>
assets/images/modals/modal_no_website_found.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="124" viewBox="0 0 176 124" width="176" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="a" d="m23.6 40.913-6.527 6.553v25.364h6.527zm-3.765-16.968c2.634 0 4.77-2.124 4.77-4.74 0-2.617-2.136-4.739-4.77-4.739-2.637 0-4.772 2.122-4.772 4.739 0 2.616 2.135 4.74 4.772 4.74zm19.833-4.445c0 4.801-1.76 9.192-4.692 12.592l4.212 56.199h-37.656l4.082-55.217c-3.474-3.509-5.614-8.291-5.614-13.574 0-10.77 8.878-19.5 19.835-19.5 10.955 0 19.833 8.729 19.833 19.501z"/><filter id="b" height="107.9%" width="117.6%" x="-8.8%" y="-4%"><feMorphology in="SourceAlpha" operator="dilate" radius="1.5" result="shadowSpreadOuter1"/><feOffset in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feComposite in="shadowOffsetOuter1" in2="SourceAlpha" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter></defs><g fill="none" fill-rule="evenodd"><g stroke="#7e818d"><path d="m152 92.634v27.366a3 3 0 0 1 -3 3h-145a3 3 0 0 1 -3-3v-116a3 3 0 0 1 3-3h145a3 3 0 0 1 3 3v27.079" stroke-linecap="round" stroke-linejoin="round"/><g stroke-linecap="round" stroke-linejoin="round"><path d="m169.496 50.386c-4.31-5.126-10.773-8.386-17.996-8.386-12.979 0-23.5 10.521-23.5 23.5s10.521 23.5 23.5 23.5c12.061 0 22-9.087 23.345-20.788.102-.89.155-1.795.155-2.712m-.945-6.617a23.376 23.376 0 0 0 -2.508-5.652" fill="#fff"/><path d="m142.528 56.5 17.944 18m0-18-17.944 18"/></g><path d="m13.5 14.5h5m4 0h5m4 0h5" stroke-linecap="round" stroke-linejoin="round"/><path d="m1.5 27.5h45" stroke-linecap="square"/><path d="m106.5 27.5h45" stroke-linecap="round" stroke-linejoin="round"/></g><g transform="translate(54 15)"><use fill="#000" filter="url(#b)" xlink:href="#a"/><use fill="#1cc691" stroke="#7e818d" xlink:href="#a"/></g></g></svg>
assets/images/modals/modal_pp_created.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="132" viewBox="0 0 133 132" width="133" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="a" d="m63.1764706 84v-13.2631579c0-8.1376842 6.6364941-14.7368421 14.8235294-14.7368421s14.8235294 6.5991579 14.8235294 14.7368421v13.2631579"/><filter id="b" height="148.2%" width="145.5%" x="-22.8%" y="-24.1%"><feMorphology in="SourceAlpha" operator="dilate" radius="3.75" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feMorphology in="SourceAlpha" operator="erode" radius="4" result="shadowInner"/><feOffset dx="0" dy="0" in="shadowInner" result="shadowInner"/><feComposite in="shadowOffsetOuter1" in2="shadowInner" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter></defs><g fill="none" fill-rule="evenodd"><g transform="translate(22 1)"><path d="m95.8974359 14.0338983h14.1025641v-2.8067797c0-6.20017623-5.051538-11.2271186-11.2820513-11.2271186h-31.025641" fill="#d8d8d8" stroke="#7e818d" stroke-width="1.5"/><path d="m39.6051373 106.657627h-39.6051373v-95.4305084c0-6.20017623 5.05153846-11.2271186 11.2820513-11.2271186h88.9476927c-6.7833337 0-12.7938466 4.83888814-12.7938466 11.5779661v35.00674m0 60.0729209h-16.9230769" fill="#fff" stroke="#7e818d" stroke-width="1.5"/><g stroke-linejoin="round"><use fill="#000" filter="url(#b)" xlink:href="#a"/><use stroke="#7e818d" stroke-width="1.5" xlink:href="#a"/></g><g stroke="#7e818d" stroke-width="1.5"><path d="m106 126.347826c0 2.016-1.6128 3.652174-3.6 3.652174h-46.8c-1.9872 0-3.6-1.636174-3.6-3.652174v-34.6956521c0-2.016 1.6128-3.6521739 3.6-3.6521739h46.8c1.9872 0 3.6 1.6361739 3.6 3.6521739z" fill="#e7e7e7" stroke-linejoin="round"/><path d="m106 126.347826c0 2.016-1.6128 3.652174-3.6 3.652174h-46.8c-1.9872 0-3.6-1.636174-3.6-3.652174v-34.6956521c0-2.016 1.6128-3.6521739 3.6-3.6521739h46.8c1.9872 0 3.6 1.6361739 3.6 3.6521739z" stroke-linejoin="round"/><path d="m77.3207715 98.205802c-2.4817798.6092083-4.5015075 2.717438-5.1053256 5.325957-.8085911 3.48541.7403335 6.651447 3.2833702 8.213235v6.562835c0 2.038078 1.5681768 3.692171 3.5003946 3.692171 1.9339681 0 3.5003947-1.654093 3.5003947-3.692171v-6.562835c2.084485-1.279337 3.5003946-3.634942 3.5003946-6.359765 0-4.655828-4.0849605-8.3055393-8.6792285-7.179427z" fill="#fff" stroke-linejoin="round"/><path d="m14.102564 28.067797h59.230769"/><path d="m14.102564 39.294915h59.230769"/><path d="m14.102564 50.522034h36.666667"/><path d="m22.564103 84.20339h14.102564"/><path d="m14.102564 84.20339h5.641026"/></g></g><g transform="translate(0 32)"><circle cx="21" cy="21" fill="#1cc691" r="21"/><path d="m26.1451613 21.1818028-9.7550986-.0190301.0629524-3.6605419" stroke="#fff" stroke-linecap="round" stroke-width="2" transform="matrix(.64278761 -.76604444 .76604444 .64278761 -7.21979 23.201144)"/></g></g></svg>
assets/images/modals/modal_sync.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="166" viewBox="0 0 176 166" width="176" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="a" d="m25.896543 38.0427092v-6.9475588c0-4.2627133 3.4884248-7.7195098 7.7918802-7.7195098 4.3034555 0 7.7918802 3.4567965 7.7918802 7.7195098v6.9475588"/><filter id="b" height="120.5%" width="119.3%" x="-9.6%" y="-10.2%"><feMorphology in="SourceAlpha" operator="dilate" radius="1" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feMorphology in="SourceAlpha" operator="erode" radius="1.5" result="shadowInner"/><feOffset dx="0" dy="0" in="shadowInner" result="shadowInner"/><feComposite in="shadowOffsetOuter1" in2="shadowInner" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><path id="c" d="m45.8345894 54.5730535c0 .8690239-.6981524 1.5743186-1.558376 1.5743186h-20.2588885c-.8602236 0-1.5583761-.7052947-1.5583761-1.5743186v-14.9560258c0-.8690238.6981525-1.5743185 1.5583761-1.5743185h20.2588885c.8602236 0 1.558376.7052947 1.558376 1.5743185z"/><filter id="d" height="155.2%" width="142.8%" x="-21.4%" y="-27.6%"><feMorphology in="SourceAlpha" operator="dilate" radius="2" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feComposite in="shadowOffsetOuter1" in2="SourceAlpha" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><circle id="e" cx="9.515358" cy="9.515358" r="9.515358"/><filter id="f" height="136.8%" width="136.8%" x="-18.4%" y="-18.4%"><feMorphology in="SourceAlpha" operator="dilate" radius="1.5" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feComposite in="shadowOffsetOuter1" in2="SourceAlpha" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><path id="g" d="m25.0275937 6.36696564c-.2370679-.40640206-.6773368-.7113165-1.1515854-.77905018-.5078897-.06762078-.9820255.06784657-1.3545607.37264812-.609716.54175652-1.3885404.81280412-2.2013445.81280412-1.8626761 0-3.3866839-1.52400773-3.3866839-3.38668385 0-.33878127.0678466-.7113165.1693342-1.01600516.1355803-.47413573.0678466-.9822512-.1693342-1.38865326-.2710475-.4402689-.7113164-.7113165-1.1852264-.81280413-.7113165-.10160051-1.4564998-.1692213-2.2014574-.1692213-7.4846842 0-13.5467354 6.0620512-13.5467354 13.5467354 0 7.4844584 6.0620512 13.5467354 13.5467354 13.5467354s13.5467354-6.062277 13.5467354-13.5467354c0-2.5400129-.7113165-5.01240499-2.0658771-7.17976976z"/><filter id="h" height="125.8%" width="125.8%" x="-12.9%" y="-12.9%"><feMorphology in="SourceAlpha" operator="dilate" radius="1.5" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feComposite in="shadowOffsetOuter1" in2="SourceAlpha" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><path id="i" d="m39.8242814 68.7655317-11.0142118 11.0142118v42.6287665h11.0142118zm-6.353321-28.5198819c4.4462315 0 8.0487325-3.5697058 8.0487325-7.9672414 0-4.3985294-3.602501-7.96426-8.0487325-7.96426-4.4492128 0-8.0517138 3.5657306-8.0517138 7.96426 0 4.3975356 3.602501 7.9672414 8.0517138 7.9672414zm33.4679791-7.4683571c0 8.0686083-2.9694546 15.4495116-7.9175517 21.1628296l7.1086039 94.4570777h-63.54513517l6.88897559-92.8063869c-5.86437463-5.8981636-9.47383212-13.9359643-9.47383212-22.8135204 0-18.1059213 14.9814349-32.7772927 33.4709604-32.7772927s33.4679791 14.6713714 33.4679791 32.7772927z"/><filter id="j" height="108.8%" width="119.4%" x="-9.7%" y="-4.4%"><feMorphology in="SourceAlpha" operator="dilate" radius="2.5" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feComposite in="shadowOffsetOuter1" in2="SourceAlpha" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter></defs><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><g transform="matrix(.96592583 .25881905 -.25881905 .96592583 122.94563 9.8)"><g stroke="#7e818d"><path d="m41.3275215 5.95849663h6.1112786v-1.19169933c0-2.63246381-2.18906-4.7667973-4.8890229-4.7667973h-13.4448129"/><path d="m6.18767 12.146166h25.438197"/><path d="m6.18767 16.958798h25.438197"/><path d="m6.18767 21.77143h15.812933"/><path d="m9.625264 36.438499h6.187669"/><path d="m6.18767 36.438499h2.520902"/><path d="m23.1584887 45.962452h-23.1584887v-41.12429916c0-2.67186991 2.18299227-4.83815284 4.8754713-4.83815284h38.4382157c-2.9313771 0-5.5287844 2.08524387-5.5287844 4.98934511v15.08561229m0 25.8874946h-7.313207"/></g><g stroke-linejoin="round"><use fill="#000" filter="url(#b)" xlink:href="#a"/><use stroke="#7e818d" xlink:href="#a"/></g><g stroke-linejoin="round"><use fill="#000" filter="url(#d)" xlink:href="#c"/><use fill="#d2ecfe" fill-rule="evenodd" stroke="#7e818d" xlink:href="#c"/></g><path d="m33.2029049 42.4854282c-1.0562626.2617763-1.9158726 1.1676812-2.1728618 2.2885599-.3441419 1.497678.3150911 2.8581218 1.397425 3.5292212v2.8200452c0 .8757609.6674269 1.5865233 1.4897922 1.5865233.8231101 0 1.4897921-.7107624 1.4897921-1.5865233v-2.8200452c.8871712-.5497304 1.4897921-1.5619322 1.4897921-2.7327865 0-2.0006059-1.7385874-3.5688842-3.6939396-3.0849946z" fill="#fff" stroke="#7e818d" stroke-linejoin="round"/></g><g transform="matrix(.96592583 -.25881905 .25881905 .96592583 108.307092 94.439528)"><g stroke="#7e818d"><path d="m0 42.4191436v8.0220107c0 4.4297542 8.66615643 8.0220106 20.4537299 8.0220106 11.7875735 0 20.4537299-3.5922564 20.4537299-8.0220106v-8.0220107" fill="#ededed"/><path d="m20.4537299 51.4964562c11.7875735 0 20.4537299-3.5922564 20.4537299-8.0220107 0-4.4297542-8.6661564-8.0220106-20.4537299-8.0220106-11.78757347 0-20.4537299 3.5922564-20.4537299 8.0220106 0 4.4297543 8.66615643 8.0220107 20.4537299 8.0220107z" fill="#ededed"/><path d="m0 31.546729v8.0220107c0 4.4297543 8.66615643 8.0220106 20.4537299 8.0220106 11.7875735 0 20.4537299-3.5922563 20.4537299-8.0220106v-8.0220107" fill="#fff"/><path d="m20.4537299 39.6287975c11.7875735 0 20.4537299-3.5922564 20.4537299-8.0220106 0-4.4297543-8.6661564-8.0220107-20.4537299-8.0220107-11.78757347 0-20.4537299 3.5922564-20.4537299 8.0220107 0 4.4297542 8.66615643 8.0220106 20.4537299 8.0220106z" fill="#fff"/><path d="m0 19.7596041v7.7860692c0 4.2994674 8.66615643 7.7860691 20.4537299 7.7860691 11.7875735 0 20.4537299-3.4866017 20.4537299-7.7860691v-7.7860692" fill="#ededed"/><path d="m20.4537299 27.7816148c11.7875735 0 20.4537299-3.4866018 20.4537299-7.7860692s-8.6661564-7.7860692-20.4537299-7.7860692c-11.78757347 0-20.4537299 3.4866018-20.4537299 7.7860692s8.66615643 7.7860692 20.4537299 7.7860692z" fill="#ededed"/><path d="m0 7.55012767v7.78606913c0 4.2994674 8.66615643 7.7860692 20.4537299 7.7860692 11.7875735 0 20.4537299-3.4866018 20.4537299-7.7860692v-7.78606913" fill="#fff"/><path d="m20.4537299 15.5721383c11.7875735 0 20.4537299-3.4866017 20.4537299-7.78606914 0-4.29946739-8.6661564-7.78606916-20.4537299-7.78606916-11.78757347 0-20.4537299 3.48660177-20.4537299 7.78606916 0 4.29946744 8.66615643 7.78606914 20.4537299 7.78606914z" fill="#fff"/></g><ellipse cx="20.45373" cy="6.606362" fill="#d9d9d9" rx="11.416035" ry="3.775064"/><g stroke="#7e818d" transform="translate(15.697049 18.403436)"><path d="m3.16174717.5v1.32809192h-2.66174717v-1.32809192z"/><path d="m7.9004788.5v1.32809192h-2.66174717v-1.32809192z" fill="#d2ecfe"/></g><g stroke="#7e818d" transform="translate(17.124053 42.374298)"><path d="m.5 12.367659h2.649033v1.241978h-2.649033z"/><path d="m.5.5h2.649033v1.241978h-2.649033z"/></g><g stroke="#7e818d" transform="matrix(-1 0 0 1 27.113084 30.14103)"><path d="m3.16174717.5v1.30395962h-2.66174717v-1.30395962z"/><path d="m5.23873163.5h2.66174717v1.30395962h-2.66174717z" fill="#fff"/></g><g transform="translate(30.819114 35.418981)"><use fill="#000" filter="url(#f)" xlink:href="#e"/><g stroke="#7e818d"><use fill="#d2ecfe" fill-rule="evenodd" xlink:href="#e"/><path d="m12.2075195 9.89144617h-5.39785947l.03878267-2.9688227" stroke-linecap="round" transform="matrix(.64278761 -.76604444 .76604444 .64278761 -3.043576 10.2871)"/></g></g></g><g transform="matrix(.95105652 .30901699 -.30901699 .95105652 17.501508 93.6)"><g stroke="#7e818d"><path d="m14.1857324 42.1737989h-14.1857324v-42.1737989h56.7429294v42.1737989h-14.2002528" stroke-linejoin="round"/><path d="m0 7.412365h56.742929" stroke-linejoin="round"/><path d="m3.833982 3.833982h2.555988" stroke-linejoin="round"/><path d="m8.43476 3.833982h2.555988" stroke-linejoin="round"/><path d="m14.057933 3.833982h2.555988" stroke-linejoin="round"/><path d="m53.4313428 10.7239512v8.2015562h-50.11975621v-8.2015562z" fill="#7c7c7c"/><path d="m46.998226 13.514786 2.875486 2.875486" stroke-linecap="square"/><path d="m.479248.479248 2.875486 2.875486" stroke-linecap="square" transform="matrix(1 0 0 -1 46.518978 16.86952)"/></g><g transform="translate(14.824729 26.071076)"><g fill-rule="nonzero"><use fill="#000" filter="url(#h)" xlink:href="#g"/><use fill="#d2ecfe" stroke="#7e818d" xlink:href="#g"/></g><path d="m17.1802608 15.133532h-7.47406096l.05369982-2.8027728" stroke="#7e818d" stroke-linecap="round" transform="matrix(.64278761 -.76604444 .76604444 .64278761 -5.717346 15.203404)"/></g></g><g stroke="#7e818d" stroke-linejoin="round" transform="matrix(.96592583 -.25881905 .25881905 .96592583 11.6 11.129219)"><path d="m36.9245662 61.8321006v-3.316566c0-2.3174769-1.9761481-4.1957939-4.2422224-4.1957939h-1.2280837v-2.797196c0-2.3174768-.6085716-2.7971959-2.8746459-2.7971959h-1.2280837v-8.3915879l6.8378826-5.5943919v-15.3845777h-6.8378826v5.5943919h-5.4703061v-5.5943919h-6.8378826v5.5943919h-5.47030613v-5.5943919h-6.83788262v15.3845777l6.83788262 5.5943919v8.3915879h-1.22808372c-2.2660743 0-2.87464585.4797191-2.87464585 2.7971959v2.797196h-1.22808372c-2.2660743 0-4.24222238 1.878317-4.24222238 4.1957939v6.9929899h30.9092968" fill="#fff"/><path d="m5.169439 53.597884h13.292844"/><path d="m25.108705 53.597884h5.169439"/><path d="m2.215474 33.498677h16.246809"/><path d="m25.108705 33.498677h8.123405"/><path d="m29.0965581 10.4218107h-10.634275v-8.18856555h13.2928438v4.09428278" fill="#d2ecfe"/><path d="m29.5396529 13.3994709h13.2928439v-6.69973544h-13.2928439z" fill="#d2ecfe"/><path d="m18.462283 16.377131v-16.377131"/></g><g transform="translate(53 12)"><use fill="#000" filter="url(#j)" xlink:href="#i"/><use fill="#1cc691" fill-rule="evenodd" stroke="#7e818d" xlink:href="#i"/></g></g></svg>
assets/images/pc_screen_icon.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="29" viewBox="0 0 36 29" width="36" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" stroke="#7e818d" stroke-width="1.5"><path d="m.75.75h34.14v21.18h-34.14z"/><path d="m17.91 22.68v4.32" stroke-linecap="round" stroke-linejoin="round"/><path d="m9.672353 27.27h15.755294"/></g></svg>
assets/images/question_mark.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><circle cx="7" cy="7" fill="#6e6e6e" r="7"/><text fill="#fff" font-family="HelveticaNeue-Bold, Helvetica Neue" font-size="11" font-weight="bold"><tspan x="4" y="11">?</tspan></text></g></svg>
assets/images/question_mark_light.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" opacity=".43347"><circle cx="8" cy="8" fill="#6e6e6e" r="8"/><text fill="#fff" font-family="HelveticaNeue-Bold, Helvetica Neue" font-size="11" font-weight="bold"><tspan x="5" y="12">?</tspan></text></g></svg>
assets/images/service_cards/cons_icon.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="72" viewBox="0 0 68 72" width="68" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(8 8)"><g stroke="#7e818d"><path d="m0 42.4926047v3.5677401c0 4.4509224 8.69539032 8.0603449 20.5227273 8.0603449 4.6844816 0 8.8776442-.5662222 12.2338134-1.5266866.786734-.2251466 1.5274752-.4719568 2.2177708-.7382153"/><path d="m0 30.8886346v5.1717102c0 4.4509224 8.69539032 8.0603449 20.5227273 8.0603449 3.1147823 0 6.0123466-.2503337 8.591076-.7004445" fill="#fff"/><path d="m0 21.0668787v4.2995006c0 4.3200129 8.69539032 7.8232759 20.5227273 7.8232759 11.8273369 0 20.5227272-3.503263 20.5227272-7.8232759v-4.2995006"/><path d="m0 7.5862069v7.8232759c0 4.3200129 8.69539032 7.8232758 20.5227273 7.8232758 11.8273369 0 20.5227272-3.5032629 20.5227272-7.8232758v-7.8232759" fill="#ededed"/><path d="m20.5227273 15.6465517c11.8273369 0 20.5227272-3.5032629 20.5227272-7.82327584 0-4.32001293-8.6953903-7.82327586-20.5227272-7.82327586-11.82733698 0-20.5227273 3.50326293-20.5227273 7.82327586 0 4.32001294 8.69539032 7.82327584 20.5227273 7.82327584z" fill="#ededed"/></g><circle cx="42.510876" cy="41.510876" fill="#d2ecfe" r="9.510876"/><circle cx="42.510876" cy="41.510876" r="9.510876" stroke="#7e818d"/><path d="m46.3060892 42.5050534h-7.2727273l.0522533-4" stroke="#7e818d" stroke-linecap="round" transform="matrix(.64278761 -.76604444 .76604444 .64278761 -15.786516 47.155813)"/></g></svg>
assets/images/service_cards/cs_icon.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="72" viewBox="0 0 68 72" width="68" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(3 8)"><g stroke="#7e818d" stroke-linejoin="round"><path d="m10.3863636 45.3291667h-10.3863636v-45.3291667h61v45.3291667h-11" fill="#fff"/><path d="m0 8h61"/><path d="m4 4h2.772727"/><path d="m9 4h2.772727"/><path d="m14 4h2.772727"/></g><path d="m3 11h55v12h-55z" fill="#efefef"/><g stroke="#bdbdbd" stroke-linecap="square" transform="translate(49 15)"><path d="m.5.5 3 3"/><path d="m.5.5 3 3" transform="matrix(1 0 0 -1 0 4)"/></g><g transform="translate(16 28)"><path d="m26.78875 6.815c-.25375-.435-.725-.76137083-1.2326208-.83387083-.5436292-.07237917-1.0511292.07262083-1.4498792.39887083-.6526208.57987917-1.48625.87-2.35625.87-1.99375 0-3.625-1.63125-3.625-3.625 0-.36262083.0726208-.76137083.18125-1.0875.1451208-.5075.0726208-1.05137083-.18125-1.48637083-.2901208-.47125-.7613708-.76137084-1.2686292-.87-.7613708-.10875-1.5589916-.18112917-2.3563708-.18112917-8.01137083 0-14.5 6.48862917-14.5 14.5 0 8.0111292 6.48862917 14.5 14.5 14.5 8.0113708 0 14.5-6.4888708 14.5-14.5 0-2.71875-.7613708-5.36512083-2.21125-7.685z" fill="#d2ecfe" fill-rule="nonzero"/><g stroke="#7e818d"><path d="m26.78875 6.815c-.25375-.435-.725-.76137083-1.2326208-.83387083-.5436292-.07237917-1.0511292.07262083-1.4498792.39887083-.6526208.57987917-1.48625.87-2.35625.87-1.99375 0-3.625-1.63125-3.625-3.625 0-.36262083.0726208-.76137083.18125-1.0875.1451208-.5075.0726208-1.05137083-.18125-1.48637083-.2901208-.47125-.7613708-.76137084-1.2686292-.87-.7613708-.10875-1.5589916-.18112917-2.3563708-.18112917-8.01137083 0-14.5 6.48862917-14.5 14.5 0 8.0111292 6.48862917 14.5 14.5 14.5 8.0113708 0 14.5-6.4888708 14.5-14.5 0-2.71875-.7613708-5.36512083-2.21125-7.685z" fill-rule="nonzero"/><path d="m19 16h-8l.0574786-3" stroke-linecap="round" transform="matrix(.64278761 -.76604444 .76604444 .64278761 -5.749459 16.670246)"/></g></g></g></svg>
assets/images/service_cards/pp_icon.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="72" viewBox="0 0 68 72" width="68" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="a" d="m31.5882353 42v-6.6315789c0-4.0688422 3.3182471-7.3684211 7.4117647-7.3684211s7.4117647 3.2995789 7.4117647 7.3684211v6.6315789"/><filter id="b" height="150%" width="147.2%" x="-23.6%" y="-25%"><feMorphology in="SourceAlpha" operator="dilate" radius="2" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feMorphology in="SourceAlpha" operator="erode" radius="2.5" result="shadowInner"/><feOffset dx="0" dy="0" in="shadowInner" result="shadowInner"/><feComposite in="shadowOffsetOuter1" in2="shadowInner" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter></defs><g fill="none" fill-rule="evenodd" transform="translate(6 3)"><path d="m47.9487179 7.01694915h7.0512821v-1.40338983c0-3.10008813-2.5257692-5.61355932-5.6410256-5.61355932h-15.5128206" fill="#d8d8d8" stroke="#7e818d"/><path d="m19.8025686 53.3288136h-19.8025686v-47.71525428c0-3.10008813 2.52576923-5.61355932 5.64102564-5.61355932h44.47384616c-3.3916667 0-6.3969231 2.41944407-6.3969231 5.78898305v17.50337005m0 30.0364605h-8.4615384" fill="#fff" stroke="#7e818d"/><g stroke-linejoin="round"><use fill="#000" filter="url(#b)" xlink:href="#a"/><use stroke="#7e818d" xlink:href="#a"/></g><path d="m53 63.173913c0 1.008-.8064 1.826087-1.8 1.826087h-23.4c-.9936 0-1.8-.818087-1.8-1.826087v-17.347826c0-1.008.8064-1.826087 1.8-1.826087h23.4c.9936 0 1.8.818087 1.8 1.826087z" fill="#d2ecfe"/><g stroke="#7e818d"><path d="m53 63.173913c0 1.008-.8064 1.826087-1.8 1.826087h-23.4c-.9936 0-1.8-.818087-1.8-1.826087v-17.347826c0-1.008.8064-1.826087 1.8-1.826087h23.4c.9936 0 1.8.818087 1.8 1.826087z" stroke-linejoin="round"/><path d="m38.6603857 49.102901c-1.2408899.3046041-2.2507537 1.358719-2.5526627 2.6629786-.4042956 1.7427048.3701667 3.3257233 1.641685 4.1066175v3.2814172c0 1.0190393.7840884 1.8460857 1.7501974 1.8460857.966984 0 1.7501973-.8270464 1.7501973-1.8460857v-3.2814172c1.0422425-.6396687 1.7501973-1.8174713 1.7501973-3.1798825 0-2.3279141-2.0424803-4.1527697-4.3396143-3.5897136z" fill="#fff" stroke-linejoin="round"/><path d="m7.051282 14.033898h29.615385"/><path d="m7.051282 19.647458h29.615385"/><path d="m7.051282 25.261017h18.333333"/><path d="m11.282051 42.101695h7.051282"/><path d="m7.051282 42.101695h2.820513"/></g></g></svg>
assets/images/service_cards/tc_icon.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="72" viewBox="0 0 68 72" width="68" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(6 4)"><g stroke="#7e818d"><path d="m47.9487179 7.01694915h7.0512821v-1.40338983c0-3.10008813-2.5257692-5.61355932-5.6410256-5.61355932h-15.5128206" fill="#d8d8d8"/><path d="m19.9443891 53.3288136h-19.9443891v-47.71525428c0-3.10008813 2.52576923-5.61355932 5.64102564-5.61355932h44.47384616c-3.3916667 0-6.3969231 2.41944407-6.3969231 5.78898305v17.50337005m0 30.0364605h-8.4615384" fill="#fff"/><path d="m7.051282 14.033898h29.615385"/><path d="m7.051282 19.647458h29.615385"/><path d="m7.051282 25.261017h18.333333"/><path d="m11.282051 42.101695h7.051282"/><path d="m7.051282 42.101695h2.820513"/></g><path d="m39.0081053 29-14.0081053 5.9148436v14.0477537c0 6.6046623 13.2226316 13.8296438 14 14.0374027.7781053-.2077589 14-7.9377202 14-13.2980472v-14.7871092z" fill="#d2ecfe"/><path d="m39.0081053 29-14.0081053 5.9148436v14.0477537c0 6.6046623 13.2226316 13.8296438 14 14.0374027.7781053-.2077589 14-7.9377202 14-13.2980472v-14.7871092z" stroke="#7e818d" stroke-linejoin="round"/><path d="m33 46.6556654 4.1042805 4.3443346 9.8957195-12" stroke="#7e818d" stroke-linejoin="round"/></g></svg>
assets/images/warning-icon.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="28" viewBox="0 0 29 28" width="29" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(1 .5)"><text fill="#804123" font-family="HiraMaruProN-W4, Hiragino Maru Gothic ProN" font-size="13"><tspan x="12" y="17.5">!</tspan></text><circle cx="13.5" cy="13.5" r="13.5" stroke="#804123"/></g></svg>
assets/images/welcome_screen_bg.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="246" viewBox="0 0 260 246" width="260" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="a" d="m38.5014035 56.6240933v-10.3409885c0-6.344771 5.1863776-11.4899872 11.5844931-11.4899872s11.5844931 5.1452162 11.5844931 11.4899872v10.3409885"/><filter id="b" height="113.7%" width="112.9%" x="-6.5%" y="-6.9%"><feMorphology in="SourceAlpha" operator="dilate" radius="1" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feMorphology in="SourceAlpha" operator="erode" radius="1.5" result="shadowInner"/><feOffset dx="0" dy="0" in="shadowInner" result="shadowInner"/><feComposite in="shadowOffsetOuter1" in2="shadowInner" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><path id="c" d="m68.144077 81.2284334c0 1.2934854-1.0379706 2.3432705-2.3168986 2.3432705h-30.1196821c-1.278928 0-2.3168986-1.0497851-2.3168986-2.3432705v-22.2610696c0-1.2934853 1.0379706-2.3432705 2.3168986-2.3432705h30.1196821c1.278928 0 2.3168986 1.0497852 2.3168986 2.3432705z"/><filter id="d" height="148.2%" width="137.4%" x="-18.7%" y="-24.1%"><feMorphology in="SourceAlpha" operator="dilate" radius="2.5" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feComposite in="shadowOffsetOuter1" in2="SourceAlpha" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><ellipse id="e" cx="14.146855" cy="14.162991" rx="14.146855" ry="14.162991"/><filter id="f" height="124.7%" width="124.7%" x="-12.4%" y="-12.4%"><feMorphology in="SourceAlpha" operator="dilate" radius="1.5" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feComposite in="shadowOffsetOuter1" in2="SourceAlpha" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><path id="g" d="m37.2095025 9.47681339c-.3524581-.60490298-1.0070231-1.05874825-1.7121071-1.15956541-.7550995-.10064914-1.4600156.10098519-2.0138783.55466243-.9064886.80636928-2.0643973 1.20980599-3.272825 1.20980599-2.7693134 0-5.0351153-2.26838621-5.0351153-5.04085821 0-.50425385.1008701-1.05874825.2517557-1.51225746.2015725-.70572015.1008702-1.4620169-.2517557-2.06691988-.4029771-.65531157-1.0575421-1.05874825-1.7621226-1.20980597-1.057542-.15122574-2.1654352-.25187488-3.2729928-.25187488-11.12777275 0-20.1404614 9.02296812-20.1404614 20.1634327 0 11.1401286 9.01268865 20.1634328 20.1404614 20.1634328 11.1277728 0 20.1404614-9.0233042 20.1404614-20.1634328 0-3.7806436-1.057542-7.4606381-3.0714203-10.68661931z"/><filter id="h" height="117.4%" width="117.4%" x="-8.7%" y="-8.7%"><feMorphology in="SourceAlpha" operator="dilate" radius="1.5" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feComposite in="shadowOffsetOuter1" in2="SourceAlpha" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><path id="i" d="m58.9989354 102.283243-16.3173509 16.382762v63.406889h16.3173509zm-9.4123273-42.4210493c6.5870096 0 11.924048-5.3096526 11.924048-11.850636 0-6.5424617-5.3370384-11.8462015-11.924048-11.8462015-6.5914265 0-11.928465 5.3037398-11.928465 11.8462015 0 6.5409834 5.3370385 11.850636 11.928465 11.850636zm49.5821911-11.1085855c0 12.0014113-4.3991919 22.9799162-11.7297062 31.478021l10.5312651 140.4973678h-94.14094101l10.20588971-138.042097c-8.68796237-8.7730478-14.0353068-20.7286352-14.0353068-33.9332918 0-26.9311136 22.1947184-48.7536082 49.5866081-48.7536082 27.3918896 0 49.5821911 21.8224946 49.5821911 48.7536082z"/><filter id="j" height="107.2%" width="116.1%" x="-8.1%" y="-3.6%"><feMorphology in="SourceAlpha" operator="dilate" radius="3" result="shadowSpreadOuter1"/><feOffset dx="0" dy="0" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feComposite in="shadowOffsetOuter1" in2="SourceAlpha" operator="out" result="shadowOffsetOuter1"/><feColorMatrix in="shadowOffsetOuter1" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter></defs><g fill="none" fill-rule="evenodd" opacity=".304256" transform="translate(1.855204 .193051)"><g transform="matrix(.96592583 .25881905 -.25881905 .96592583 181.925426 14.961569)"><g stroke="#7e818d"><path d="m61.4432428 8.86883389h9.0858769v-1.77376678c0-3.91825081-3.2545611-7.09506711-7.2687016-7.09506711h-19.9889292"/><path d="m9.19945 18.078777h37.819963"/><path d="m9.19945 25.242066h37.819963"/><path d="m9.19945 32.405355h23.509707"/><path d="m14.310256 54.23633h9.199451"/><path d="m9.19945 54.23633h3.747925"/><path d="m34.430631 68.4121142h-34.430631v-61.21083903c0-3.97690421 3.24554-7.20127517 7.24855389-7.20127517h57.14759891c-4.3581931 0-8.2198602 3.1037496-8.2198602 7.42631502v22.45395068m0 38.5318485h-10.8728308"/></g><g stroke-linejoin="round"><use fill="#000" filter="url(#b)" xlink:href="#a"/><use stroke="#7e818d" xlink:href="#a"/></g><g stroke-linejoin="round"><use fill="#000" filter="url(#d)" xlink:href="#c"/><use fill="#fff" fill-rule="evenodd" stroke="#7e818d" xlink:href="#c"/></g><path d="m49.3640575 63.2367909c-1.5703869.389637-2.8484028 1.7380173-3.2304786 3.4063723-.5116493 2.2291961.4684582 4.254128 2.0776064 5.2530157v4.1974535c0 1.303513.9922897 2.3614366 2.2149322 2.3614366 1.2237501 0 2.2149323-1.0579236 2.2149323-2.3614366v-4.1974535c1.3189921-.8182378 2.2149322-2.3248343 2.2149322-4.0675745 0-2.9777716-2.5848259-5.3120517-5.4919245-4.5918135z" fill="#fff" stroke="#7e818d" stroke-linejoin="round"/></g><g transform="matrix(.96592583 -.25881905 .25881905 .96592583 160.136501 140.92058)"><g stroke="#7e818d"><path d="m0 63.1381306v11.94024c0 6.5934006 12.8843138 11.9402401 30.4093603 11.9402401 17.5250466 0 30.4093603-5.3468395 30.4093603-11.9402401v-11.94024" fill="#ededed"/><path d="m30.4093603 76.6491188c17.5250466 0 30.4093603-5.3468395 30.4093603-11.94024 0-6.5934006-12.8843137-11.9402401-30.4093603-11.9402401-17.5250465 0-30.4093603 5.3468395-30.4093603 11.9402401 0 6.5934005 12.8843138 11.94024 30.4093603 11.94024z" fill="#ededed"/><path d="m0 46.9552501v11.9402401c0 6.5934005 12.8843138 11.94024 30.4093603 11.94024 17.5250466 0 30.4093603-5.3468395 30.4093603-11.94024v-11.9402401" fill="#fff"/><path d="m30.4093603 58.9848823c17.5250466 0 30.4093603-5.3468395 30.4093603-11.94024s-12.8843137-11.94024-30.4093603-11.94024c-17.5250465 0-30.4093603 5.3468395-30.4093603 11.94024s12.8843138 11.94024 30.4093603 11.94024z" fill="#fff"/><path d="m0 29.4108829v11.5890565c0 6.399477 12.8843138 11.5890565 30.4093603 11.5890565 17.5250466 0 30.4093603-5.1895795 30.4093603-11.5890565v-11.5890565" fill="#ededed"/><path d="m30.4093603 41.3511229c17.5250466 0 30.4093603-5.1895795 30.4093603-11.5890565s-12.8843137-11.5890565-30.4093603-11.5890565c-17.5250465 0-30.4093603 5.1895795-30.4093603 11.5890565s12.8843138 11.5890565 30.4093603 11.5890565z" fill="#ededed"/><path d="m0 11.237873v11.5890565c0 6.399477 12.8843138 11.5890565 30.4093603 11.5890565 17.5250466 0 30.4093603-5.1895795 30.4093603-11.5890565v-11.5890565" fill="#fff"/><path d="m30.4093603 23.178113c17.5250466 0 30.4093603-5.1895795 30.4093603-11.5890565s-12.8843137-11.5890565-30.4093603-11.5890565c-17.5250465 0-30.4093603 5.1895795-30.4093603 11.5890565s12.8843138 11.5890565 30.4093603 11.5890565z" fill="#fff"/></g><ellipse cx="30.40936" cy="9.833139" fill="#d9d9d9" opacity=".428484" rx="16.972666" ry="5.618936"/><g stroke="#7e818d" transform="translate(23.337416 27.392315)"><path d="m4.94406275.5v2.4652131h-4.44406275v-2.4652131z"/><path d="m11.9893204.5v2.4652131h-4.44406272v-2.4652131z" fill="#d2ecfe"/></g><g stroke="#7e818d" transform="translate(25.458999 63.071382)"><path d="m.5 18.164237h4.42516v2.337038h-4.42516z"/><path d="m.5.5h4.42516v2.337038h-4.42516z"/></g><g stroke="#7e818d" transform="matrix(-1 0 0 1 40.310082 44.862958)"><path d="m4.94406275.5v2.42929374h-4.44406275v-2.42929374z"/><path d="m11.9893204.5v2.42929374h-4.44406272v-2.42929374z" fill="#fff"/></g><g transform="translate(45.819982 52.718845)"><use fill="#000" filter="url(#f)" xlink:href="#e"/><g stroke="#7e818d"><use fill="#fff" fill-rule="evenodd" xlink:href="#e"/><path d="m18.1529996 14.7191926-8.0305801.004507.0601772-4.4159772" stroke-linecap="round" transform="matrix(.64278761 -.76604444 .76604444 .64278761 -4.537426 15.300881)"/></g></g></g><g transform="matrix(.95105652 .30901699 -.30901699 .95105652 25.158661 139.696541)"><g stroke="#7e818d"><path d="m21.0904832 62.772951h-21.0904832v-62.772951h84.3619327v62.772951h-21.1120713" stroke-linejoin="round"/><path d="m0 11.032822h84.361933" stroke-linejoin="round"/><path d="m5.700131 5.706632h3.800087" stroke-linejoin="round"/><path d="m12.540287 5.706632h3.800087" stroke-linejoin="round"/><path d="m20.900479 5.706632h3.800087" stroke-linejoin="round"/><path d="m79.681837 15.7176851v12.6959166h-75.00174123v-12.6959166z" fill="#7e818d" opacity=".121525"/><path d="m69.874101 20.115878 4.275098 4.279973" stroke-linecap="square"/><path d="m.712516.713329 4.275098 4.279974" stroke-linecap="square" transform="matrix(1 0 0 -1 69.161584 25.10918)"/></g><g transform="translate(22.040505 38.805097)"><g fill-rule="nonzero"><use fill="#000" filter="url(#h)" xlink:href="#g"/><use fill="#fff" stroke="#7e818d" xlink:href="#g"/></g><path d="m25.5479053 22.520551-11.119416.0062407.0822313-4.1690006" stroke="#7e818d" stroke-linecap="round" transform="matrix(.64278761 -.76604444 .76604444 .64278761 -8.519672 22.614087)"/></g></g><g stroke="#7e818d" stroke-linejoin="round" transform="matrix(.96592583 -.25881905 .25881905 .96592583 16.356964 16.919922)"><path d="m54.8971969 92.0330519v-4.9364924c0-3.4494132-2.9380167-6.2451658-6.307078-6.2451658h-1.8258401v-4.1634438c0-3.4494133-.9047871-4.1634439-4.2738484-4.1634439h-1.8258401v-12.4903316l10.1661476-8.3268877v-22.8989413h-10.1661476v8.3268878h-8.1329181v-8.3268878h-10.1661475v8.3268878h-8.1329181v-8.3268878h-10.16614757v22.8989413l10.16614757 8.3268877v12.4903316h-1.8258401c-3.36906131 0-4.27384844.7140306-4.27384844 4.1634439v4.1634438h-1.82584011c-3.3690613 0-6.30707795 2.7957526-6.30707795 6.2451658v10.4086097h45.9540606" fill="#fff"/><path d="m7.685608 79.776957h19.76299"/><path d="m37.330094 79.776957h7.685607"/><path d="m3.293832 49.860598h24.154766"/><path d="m37.330094 49.860598h12.077383"/><path d="m43.2589911 15.512186h-15.8103927v-12.18814614h19.7629909v6.09407307" fill="#fff"/><path d="m43.9177575 19.9442391h19.7629909v-9.97211953h-19.7629909z" fill="#fff"/><path d="m27.448598 24.376292v-24.376292"/></g><g transform="translate(77.104615 17.844224)"><use fill="#000" filter="url(#j)" xlink:href="#i"/><use fill="#fff" fill-rule="evenodd" stroke="#7e818d" xlink:href="#i"/></g></g></svg>
assets/images/white_checkmark.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="7" viewBox="0 0 8 7" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m14.8113573 11.5935296h-5.33333337l.03831907-1.99999999" fill="none" stroke="#fff" stroke-linecap="round" stroke-width="2" transform="matrix(.64278761 -.76604444 .76604444 .64278761 -12.276881 5.087513)"/></svg>
assets/images/white_x.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="7" viewBox="0 0 7 7" width="7" xmlns="http://www.w3.org/2000/svg"><g style="stroke:#fff;stroke-width:2;fill:none;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round" transform="translate(1 1)"><path d="m.5.5 4 4"/><path d="m.5.5 4 4" transform="matrix(-1 0 0 1 5 0)"/></g></svg>
assets/js/admin.js ADDED
@@ -0,0 +1,697 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // main function
2
+ var _iub = _iub || [];
3
+
4
+
5
+ function circularBar(el) {
6
+ el.innerHTML = `
7
+ <svg xmlns="http://www.w3.org/2000/svg"
8
+ viewBox="0 0 32 32" >
9
+ <circle class="circle1" cy="16" cx="16" r="13" />
10
+ <circle class="circle2" cy="16" cx="16" r="13" />
11
+ </svg>
12
+ <span></span>
13
+ `;
14
+
15
+ var perc = parseInt(el.dataset.perc);
16
+ var circle = el.querySelector('.circle2');
17
+ var color = '#CF7463';
18
+
19
+ el.querySelector('span').innerHTML = perc + '<b>%</b>';
20
+
21
+ if (perc >= 50)
22
+ color = '#F5B350';
23
+ if (perc > 80)
24
+ color = '#1CC691';
25
+
26
+ var strokeDashArray = parseInt(getComputedStyle(circle, null).getPropertyValue("stroke-dasharray"));
27
+ var strokeDashOffset = strokeDashArray - ((strokeDashArray * perc) / 100);
28
+
29
+ circle.style.strokeDashoffset = strokeDashOffset;
30
+ el.style.color = color;
31
+
32
+ }
33
+ document.addEventListener("DOMContentLoaded", function () {
34
+ // search all .circularBar and initialize them
35
+ document.querySelectorAll(".circularBar").forEach(function (el) {
36
+ circularBar(el);
37
+ });
38
+ });
39
+
40
+ ;(function (global, $) {
41
+ //es5 strict mode
42
+ "use strict";
43
+
44
+ var IUB = global.IUB = global.IUB || {};
45
+
46
+ $(document).ready(function () {
47
+ IUB.ELEMS = {body: $('body')};
48
+ IUB.ELEMS.body.on('click', '.show-modal', showModal);
49
+ IUB.ELEMS.body.on('click', '.hide-modal', hideModal);
50
+ IUB.ELEMS.body.on('click', hideAllModals);
51
+ IUB.ELEMS.body.on('click', '.section-checkbox-control', sectionCheckboxShowAndHide);
52
+ IUB.ELEMS.body.on('click', '.section-radio-control', sectionRadioControl);
53
+ IUB.ELEMS.body.on('click', '.active-class-control', activeClassControl);
54
+ IUB.ELEMS.body.on('click', '.show-class-control', showClassControl);
55
+ IUB.ELEMS.body.on('submit', '.ajax-form', submitAjaxForm);
56
+ IUB.ELEMS.body.on('submit', '.ajax-form-to-options', submitAjaxFormToOptions);
57
+ IUB.ELEMS.body.on('click', '.service-checkbox', toggleServiceSetting);
58
+ IUB.ELEMS.body.on('click', '#alert-close', hideAlertDiv);
59
+ IUB.ELEMS.body.on('click', '#public_api_button', savePublicApiKey);
60
+ IUB.ELEMS.body.on('click', '.auto-detect-forms', reloadAutoDetectForms);
61
+ IUB.ELEMS.body.on('click', '.add-custom-section', addCustomSection);
62
+ IUB.ELEMS.body.on('click', '.remove-custom-section', removeCustomSection);
63
+ IUB.ELEMS.body.on('click', '.required-control', requiredControl);
64
+ IUB.ELEMS.body.on('click', '.update-button-style', updateButtonStyle);
65
+ IUB.ELEMS.body.on('change keyup past', '.iub-embed-code-tc', syncEmbedCode);
66
+ IUB.ELEMS.body.on('change click', '.iub-toggle-elements-status', toggleCheckboxes);
67
+ });
68
+
69
+ function showModal(evt) {
70
+ $(".modal").removeClass('shown');
71
+ var elId = $(evt.target).data('modal-name');
72
+ $(elId).addClass('shown');
73
+ }
74
+
75
+ function hideModal(evt) {
76
+ var elId = $(evt.target).data('modal-name');
77
+ $(elId).removeClass('shown');
78
+ }
79
+
80
+ function hideAllModals(evt) {
81
+ if (
82
+ !evt.target.matches(".show-modal") &&
83
+ !evt.target.closest(".modal__window")
84
+ ) {
85
+ $(".modal").removeClass('shown');
86
+ }
87
+ }
88
+
89
+ function sectionCheckboxShowAndHide(evt) {
90
+ if ($(evt.target).is(':checked')) {
91
+ $($(evt.target).data('section-name')).show();
92
+ } else {
93
+ $($(evt.target).data('section-name')).hide();
94
+ }
95
+ }
96
+
97
+ function sectionRadioControl(evt) {
98
+ if ($(evt.target).is(':checked')) {
99
+ $($(evt.target).data('section-group')).hide();
100
+ $($(evt.target).data('section-name')).show();
101
+ }
102
+ }
103
+
104
+ function activeClassControl(evt) {
105
+ $($(evt.target).data('element-name')).removeClass('inactive');
106
+ }
107
+
108
+ function showClassControl(evt) {
109
+ $($(evt.target).data('section-name')).show();
110
+ }
111
+
112
+
113
+ function submitAjaxForm(evt){
114
+ evt.stopImmediatePropagation();
115
+ evt.preventDefault();
116
+
117
+ var formData= $($(evt.target)).serialize();
118
+ var formButton= $($(evt.target)).find('button[type=submit]');
119
+
120
+ var redirect= $($(evt.target)).find('input[name="_redirect"]').val();
121
+ var showModal= $($(evt.target)).find('input[name="show_modal"]').val();
122
+
123
+ $.ajax({
124
+ type: "POST",
125
+ dataType: "json",
126
+ url: iub_js_vars['site_url'] + "/wp-admin/admin-ajax.php",
127
+ data : formData,
128
+ beforeSend: function() {
129
+ formButton.addClass("btn-loading");
130
+ formButton.prop('disabled', true);
131
+ },
132
+ success: function(response){
133
+ formButton.removeClass("btn-loading");
134
+ formButton.prop('disabled', false);
135
+ if (response.status === 'done') {
136
+ if(typeof(showModal) != "undefined" && showModal !== null) {
137
+ $(".modal").removeClass('shown');
138
+ $(showModal).addClass('shown');
139
+ } else {
140
+ window.location = redirect
141
+ }
142
+ }else{
143
+ if(response.focus && $(response.focus).length){
144
+ $(response.focus).trigger('click');
145
+ $([document.documentElement, document.body]).animate({
146
+ scrollTop: $(response.focus).offset().top
147
+ }, 500);
148
+ }
149
+ $('#modal-no-website-found').addClass('shown')
150
+ }
151
+ },
152
+ error: function(response) { // if error occured
153
+
154
+ $("#alert-div").addClass("alert--failure");
155
+ $("#alert-image").attr('src',iub_js_vars['site_url'] + '/wp-content/plugins/iubenda-cookie-wp-solution/assets/images/banner_failure.svg');
156
+ $("#alert-message").text(response.responseText);
157
+
158
+
159
+ $("#alert-div").removeClass("hidden");
160
+ formButton.removeClass("btn-loading");
161
+ formButton.prop('disabled', false);
162
+ },
163
+ complete: function() {
164
+ formButton.removeClass("btn-loading");
165
+ formButton.prop('disabled', false);
166
+ },
167
+
168
+ });
169
+ return false;
170
+ }
171
+
172
+ function submitAjaxFormToOptions(evt){
173
+ evt.preventDefault();
174
+ var formData= $($(evt.target)).serialize();
175
+ var formButton= $($(evt.target)).find('button[type=submit]');
176
+
177
+ var redirect= $($(evt.target)).find('input[name="_redirect"]').val();
178
+
179
+ $.ajax({
180
+ type: "POST",
181
+ dataType: "json",
182
+ url: iub_js_vars['site_url'] + "/wp-admin/admin-ajax.php",
183
+ data : formData,
184
+ beforeSend: function() {
185
+ formButton.addClass("btn-loading");
186
+ formButton.prop('disabled', true);
187
+ },
188
+ success: function(response){
189
+ formButton.removeClass("btn-loading");
190
+ formButton.prop('disabled', false);
191
+ if (response.status === 'done') {
192
+ window.location = redirect
193
+ }else{
194
+ if(response.focus){
195
+ $(response.focus).trigger('click');
196
+ $([document.documentElement, document.body]).animate({
197
+ scrollTop: $(response.focus).offset().top
198
+ }, 500);
199
+ }
200
+ $('#modal-no-website-found').addClass('shown')
201
+ }
202
+ },
203
+ error: function(response) { // if error occured
204
+
205
+ console.log(response.responseText)
206
+ $("#alert-div").addClass("alert--failure");
207
+ $("#alert-image").attr('src',iub_js_vars['site_url'] + '/wp-content/plugins/iubenda-cookie-wp-solution/assets/images/banner_failure.svg');
208
+ $("#alert-message").text(response.responseText);
209
+
210
+
211
+ $("#alert-div").removeClass("hidden");
212
+ formButton.removeClass("btn-loading");
213
+ formButton.prop('disabled', false);
214
+ },
215
+ complete: function() {
216
+ formButton.removeClass("btn-loading");
217
+ formButton.prop('disabled', false);
218
+ },
219
+
220
+ });
221
+ return false;
222
+ }
223
+
224
+ function toggleServiceSetting(evt){
225
+ const serviceName = $(evt.target).data('service-name')
226
+ const serviceKey = $(evt.target).data('service-key')
227
+ const status = $(evt.target).is(":checked")
228
+ if(status === true){
229
+ evt.stopImmediatePropagation();
230
+ evt.preventDefault();
231
+ window.location = $(evt.target).data('redirect')
232
+ return
233
+ }
234
+ jQuery.ajax({
235
+ type: "post",
236
+ dataType: "json",
237
+ url: iub_js_vars['site_url'] + "/wp-admin/admin-ajax.php",
238
+ data : {action: "toggle_services", name: serviceName, status: status},
239
+ success: function(response){
240
+ if (response.status === 'done') {
241
+ console.log('#configiration-'+serviceKey)
242
+ $('#configiration-'+serviceKey).toggle();
243
+
244
+ // Update rating circular bar if rating percentage is not equal undefined
245
+ if(response.rating_percentage != undefined){
246
+ document.querySelectorAll(".circularBar").forEach(function (el) {
247
+ $(el).attr('data-perc', response.rating_percentage);
248
+ circularBar(el);
249
+ });
250
+ }
251
+ }
252
+ },
253
+ error: function (jqXHR, exception) {
254
+ var msg = '';
255
+ if (jqXHR.status === 0) {
256
+ msg = 'Not connect.\n Verify Network.';
257
+ } else if (jqXHR.status == 404) {
258
+ msg = 'Requested page not found. [404]';
259
+ } else if (jqXHR.status == 500) {
260
+ msg = 'Internal Server Error [500].';
261
+ } else if (exception === 'parsererror') {
262
+ msg = 'Requested JSON parse failed.';
263
+ } else if (exception === 'timeout') {
264
+ msg = 'Time out error.';
265
+ } else if (exception === 'abort') {
266
+ msg = 'Ajax request aborted.';
267
+ } else {
268
+ msg = 'Uncaught Error.\n' + jqXHR.responseText;
269
+ }
270
+ console.log(msg);
271
+ },
272
+ });
273
+ }
274
+
275
+ function hideAlertDiv(evt){
276
+ $(evt.target).parents('#alert-div').fadeOut();
277
+ }
278
+
279
+ function savePublicApiKey(evt){
280
+ evt.preventDefault();
281
+ document.querySelector('#public_api_key').reportValidity();
282
+ var public_api_key = $('#public_api_key').val();
283
+
284
+ var formButton= $('#public_api_button');
285
+
286
+ $.ajax({
287
+ type: "post",
288
+ dataType: "json",
289
+ url: iub_js_vars['site_url'] + "/wp-admin/admin-ajax.php",
290
+ data : {action: "save_public_api_key", public_api_key: public_api_key},
291
+ beforeSend: function() {
292
+ formButton.addClass("btn-loading");
293
+ formButton.prop('disabled', true);
294
+ },
295
+ success: function(response){
296
+ formButton.removeClass("btn-loading");
297
+ formButton.prop('disabled', false);
298
+ if (response.status === 'done') {
299
+ $.ajax({
300
+ type: "post",
301
+ url: iub_js_vars['site_url'] + "/wp-admin/admin-ajax.php",
302
+ data : {action: "auto_detect_forms", public_api_key: public_api_key},
303
+ success: function(response) {
304
+ $("#auto-detect-forms").html(response);
305
+ $("#public-api-key-div").show();
306
+ },
307
+ });
308
+
309
+ }else{
310
+ $('#modal-no-website-found').addClass('shown')
311
+ }
312
+ },
313
+ error: function (jqXHR, exception) {
314
+ var msg = '';
315
+ if (jqXHR.status === 0) {
316
+ msg = 'Not connect.\n Verify Network.';
317
+ } else if (jqXHR.status == 404) {
318
+ msg = 'Requested page not found. [404]';
319
+ } else if (jqXHR.status == 500) {
320
+ msg = 'Internal Server Error [500].';
321
+ } else if (exception === 'parsererror') {
322
+ msg = 'Requested JSON parse failed.';
323
+ } else if (exception === 'timeout') {
324
+ msg = 'Time out error.';
325
+ } else if (exception === 'abort') {
326
+ msg = 'Ajax request aborted.';
327
+ } else {
328
+ msg = 'Uncaught Error.\n' + jqXHR.responseText;
329
+ }
330
+ console.log(msg);
331
+ },
332
+ });
333
+ }
334
+
335
+
336
+ function reloadAutoDetectForms(evt){
337
+ evt.preventDefault();
338
+ var auto_detect_forms = $("#auto-detect-forms")
339
+ var auto_detect_parent_div = $("#auto-detect-parent-div")
340
+ auto_detect_parent_div.addClass("loader");
341
+ auto_detect_forms.css('visibility', 'hidden');
342
+
343
+
344
+ var public_api_key = $('input[name="public_api_key"]').val();
345
+
346
+ $.ajax({
347
+ type: "post",
348
+ url: iub_js_vars['site_url'] + "/wp-admin/admin-ajax.php",
349
+ data : {action: "auto_detect_forms", public_api_key: public_api_key},
350
+ success: function(result) {
351
+ auto_detect_parent_div.removeClass("loader");
352
+ $("#auto-detect-forms").html(result);
353
+ $("#auto-detect-forms").css('visibility', 'visible');
354
+ },
355
+ error: function (jqXHR, exception) {
356
+ var msg = '';
357
+ if (jqXHR.status === 0) {
358
+ msg = 'Not connect.\n Verify Network.';
359
+ } else if (jqXHR.status == 404) {
360
+ msg = 'Requested page not found. [404]';
361
+ } else if (jqXHR.status == 500) {
362
+ msg = 'Internal Server Error [500].';
363
+ } else if (exception === 'parsererror') {
364
+ msg = 'Requested JSON parse failed.';
365
+ } else if (exception === 'timeout') {
366
+ msg = 'Time out error.';
367
+ } else if (exception === 'abort') {
368
+ msg = 'Ajax request aborted.';
369
+ } else {
370
+ msg = 'Uncaught Error.\n' + jqXHR.responseText;
371
+ }
372
+ console.log(msg);
373
+ },
374
+ });
375
+ }
376
+
377
+ function addCustomSection(evt){
378
+ evt.preventDefault();
379
+ const append_section = $($(evt.target).data('append-section'));
380
+ const cloned_section = $($(evt.target).data('clone-section'));
381
+
382
+ cloned_section.clone().each(function(){
383
+ this.id = Math.random(); // to keep it unique
384
+ $(this).find('input, textarea, button, select').prop('disabled', false);
385
+ }).appendTo(append_section).hide().fadeIn(300);
386
+ }
387
+
388
+ function removeCustomSection(evt){
389
+ evt.preventDefault();
390
+ $($(evt.target)).closest($(evt.target).data('remove-section')).remove();
391
+ $("#parent-selector :input").attr("disabled", true);
392
+ }
393
+
394
+ function requiredControl(evt){
395
+ if ($(evt.target).is(':checked')) {
396
+ $($(evt.target).data('required-control')).show();
397
+ } else {
398
+ $($(evt.target).data('required-control')).hide();
399
+ }
400
+ }
401
+
402
+ function updateButtonStyle(evt){
403
+ $('.iub-pp-code, .iub-tc-code').each(function() {
404
+ var text = $(this).html();
405
+ $(this).html(text.replace('white', $(evt.target).val()).replace('black', $(evt.target).val()));
406
+ });
407
+ }
408
+
409
+ // Sync embed code between TC live code and Readonly code
410
+ function syncEmbedCode(evt){
411
+ var ele = $($(evt.target));
412
+
413
+ if($('#iub-tc-code-'+ele.data('language')).length > 0){
414
+ $('#iub-tc-code-'+ele.data('language')).text(ele.val())
415
+ }
416
+ }
417
+
418
+ // Toggle elements status
419
+ function toggleCheckboxes(evt){
420
+ $($($(evt.target)).data('group')).each(function() {
421
+ // Prevent uncheck if they already checked
422
+ if($(evt.target).is(':checked')){
423
+ $(this).prop('checked', $(evt.target).is(':checked'));
424
+ }
425
+ $(this).attr('disabled', $(evt.target).is(':checked'));
426
+ });
427
+ }
428
+
429
+ // Start banner position script
430
+ $( document ).on( 'click', '.position-select > div > label', function ( e ) {
431
+ if (!$(this).closest('.position-select > div').hasClass('open')) {
432
+ $(this).closest('.position-select > div').addClass('open');
433
+ }
434
+ })
435
+
436
+ $(document).on('mousedown', function (e) {
437
+ var positionDropdown = $('.position-select > div.open');
438
+
439
+ if (positionDropdown.length &&
440
+ !positionDropdown.is(e.target) &&
441
+ positionDropdown.has(e.target).length === 0 &&
442
+ $('.pcr-app').has(e.target).length === 0
443
+ ) {
444
+ positionDropdown.removeClass('open');
445
+ }
446
+ });
447
+ // End banner position script
448
+
449
+ // Preferences fields
450
+ // Add new preferences field
451
+ $( document ).on( 'click', '.add-preferences-field', function ( e ) {
452
+ e.preventDefault();
453
+
454
+ $( '#postbox-container-2' ).change();
455
+
456
+ var html = $( '#preferences-field-template' ).html();
457
+ html = html.replace( /__PREFERENCE_ID__/g, $( '.preferences-field' ).length++ );
458
+
459
+ $( '.preferences-table .add-preferences-field' ).closest( 'tr' ).before( '<tr class="preferences-field options-field" style="display: none;">' + html + '</tr>' );
460
+
461
+ var last = $( '.preferences-field' ).last();
462
+
463
+ last.find('.preferences-inputs').prop('disabled',false)
464
+ last.fadeIn( 300 );
465
+ } );
466
+
467
+ // Remove preferences field
468
+ $( document ).on( 'click', '.remove-preferences-field', function ( e ) {
469
+ e.preventDefault();
470
+
471
+ $( '#postbox-container-2' ).change();
472
+
473
+ $( this ).closest( '.preferences-field' ).fadeOut( 300, function () {
474
+ $( this ).remove();
475
+ } );
476
+ } );
477
+
478
+ // Exclude fields
479
+ var excludeID = $( '.exclude-field' ).length;
480
+
481
+ // Add new preferences field
482
+ $( document ).on( 'click', '.add-exclude-field', function ( e ) {
483
+ e.preventDefault();
484
+
485
+ $( '#postbox-container-2' ).change();
486
+
487
+ var html = $( '#exclude-field-template' ).html();
488
+ html = html.replace( /__EXCLUDE_ID__/g, excludeID++ ).replace( 'disabled', '' );
489
+
490
+ $( '.exclude-table .add-exclude-field' ).closest( 'tr' ).before( '<tr class="exclude-field options-field" style="display: none;">' + html + '</tr>' );
491
+
492
+ var last = $( '.exclude-field' ).last();
493
+
494
+ last.fadeIn( 300 );
495
+ } );
496
+
497
+ // Remove exclude field
498
+ $( document ).on( 'click', '.remove-exclude-field', function ( e ) {
499
+ e.preventDefault();
500
+
501
+ $( '#postbox-container-2' ).change();
502
+
503
+ $( this ).closest( '.exclude-field' ).fadeOut( 300, function () {
504
+ $( this ).remove();
505
+ } );
506
+ } );
507
+
508
+ $( function () {
509
+ $('.cs-configuration-type').on('change', function() {
510
+ if($("input[name='iubenda_cookie_law_solution[configuration_type]']:checked").val() == 'simplified'){
511
+ $('.iub-language-code').attr("disabled", true)
512
+ } else {
513
+ $('.iub-language-code').attr("disabled", false)
514
+ }
515
+ }).trigger('change');
516
+
517
+ } );
518
+
519
+ // Legal notices fields
520
+ var legalNoticesID = $( '.legal_notices-field' ).length;
521
+
522
+ // Add new preferences field
523
+ $( document ).on( 'click', '.add-legal_notices-field', function ( e ) {
524
+ e.preventDefault();
525
+
526
+ $( '#postbox-container-2' ).change();
527
+
528
+ var html = $( '#legal_notices-field-template' ).html();
529
+ html = html.replace( /__LEGAL_NOTICE_ID__/g, legalNoticesID++ );
530
+
531
+ console.log( html );
532
+
533
+ $( '.legal_notices-table .add-legal_notices-field' ).closest( 'tr' ).before( '<tr class="legal_notices-field options-field" style="display: none;">' + html + '</tr>' );
534
+
535
+ var last = $( '.legal_notices-field' ).last();
536
+
537
+ last.find('.legal-notices-inputs').prop('disabled',false)
538
+ last.fadeIn( 300 );
539
+ } );
540
+
541
+ // Remove legal notices field
542
+ $( document ).on( 'click', '.remove-legal_notices-field', function ( e ) {
543
+ e.preventDefault();
544
+
545
+ $( '#postbox-container-2' ).change();
546
+
547
+ $( this ).closest( '.legal_notices-field' ).fadeOut( 300, function () {
548
+ $( this ).remove();
549
+ } );
550
+ } );
551
+
552
+ // Handle form fields data
553
+ $( document ).on( 'change', '#postbox-container-2', function() {
554
+ var fields = {},
555
+ fieldsTypes = [ 'subject', 'preferences', 'exclude' ];
556
+
557
+ if ( iub_js_vars['form_id'] > 0 ) {
558
+ // get all fields
559
+ fields.all = $( '.subject-fields-select.select-id option:not([value=""])' ).map( function() { return $( this ).val(); } ).get();
560
+
561
+ // get specific fields
562
+ $.each( fieldsTypes, function( index, fieldType ) {
563
+ fields[fieldType] = [];
564
+
565
+ var fieldItems = $( '.' + fieldType + '-field select' );
566
+
567
+ // get selected values
568
+ $.each( fieldItems, function( index, item ) {
569
+ if ( $( item ).val() != '' )
570
+ fields[fieldType].push( $( item ).val() );
571
+ } );
572
+
573
+ fields.fieldType = $.unique( fields[fieldType] );
574
+
575
+ // remove available fields if needed
576
+ if ( fields[fieldType].length > 0 ) {
577
+
578
+ // get options count
579
+ var templateItemsCount = $( '.template-field .' + fieldType + '-fields-select option:disabled' ).length;
580
+
581
+ // update if options count changed
582
+ if ( templateItemsCount !== 0 && fields[fieldType].length != templateItemsCount ) {
583
+ // console.log( fields[fieldType] );
584
+ }
585
+
586
+ // disable add button if needed
587
+ if ( fields.all.length == fields[fieldType].length ) {
588
+ $( '.add-' + fieldType + '-field' ).attr( 'disabled', 'disabled' );
589
+ } else {
590
+ $( '.add-' + fieldType + '-field' ).attr( 'disabled', false );
591
+ }
592
+
593
+ // adjust disabled options
594
+ $.each( fields.all, function( index, fieldName ) {
595
+ if ( $.inArray( fieldName, fields[fieldType] ) < 0 ) {
596
+ // options field
597
+ $( '.' + fieldType + '-fields-select option:not(:checked)[value="' + fieldName + '"]' ).attr( 'disabled', false );
598
+ // template field
599
+ $( '.template-field .' + fieldType + '-fields-select option[value="' + fieldName + '"]' ).attr( 'disabled', false );
600
+ } else {
601
+ $( '.' + fieldType + '-fields-select option:not(:checked)[value="' + fieldName + '"]' ).attr( 'disabled', 'disabled' );
602
+ $( '.template-field .' + fieldType + '-fields-select option[value="' + fieldName + '"]' ).attr( 'disabled', 'disabled' );
603
+ }
604
+ } );
605
+ }
606
+ } );
607
+
608
+ // console.log( fields );
609
+ }
610
+
611
+ } );
612
+
613
+ // Force trigger change on document ready
614
+ $( function() {
615
+ $( '#postbox-container-2' ).change();
616
+ } );
617
+
618
+ $( document ).on( 'mouseenter mouseleave', '#postbox-container-2 .options-field, #postbox-container-2 .submit-field', function() {
619
+ $( '#postbox-container-2' ).change();
620
+ } );
621
+
622
+ // Update _iub.quick_generator selected language
623
+ $(function($) {
624
+ $('#iub-website-language').on('change', function() {
625
+ try {
626
+ _iub.quick_generator.input.privacy_policy.langs = [$(this).val()]
627
+ }
628
+ catch(err) {
629
+ console.log(err)
630
+ }
631
+ }).trigger('change');
632
+ });
633
+
634
+ $( document ).on( 'click', '.notice-dismiss', function ( e ) {
635
+ e.preventDefault();
636
+ $(this).closest('div.is-dismissible').slideUp();
637
+ });
638
+ }(window, jQuery));
639
+
640
+ jQuery(document).ready(function($){
641
+ let activeRequest = false;
642
+ let completed = false;
643
+ setTimeout(ajax, 10);
644
+
645
+ function ajax(){
646
+ if((activeRequest) || (iub_js_vars['radar_status'] == 'completed'))
647
+ {
648
+ return;
649
+ }
650
+ activeRequest = true;
651
+ jQuery.ajax({
652
+ type: "post",
653
+ dataType: "json",
654
+ url: iub_js_vars['site_url'] + "/wp-admin/admin-ajax.php",
655
+ data : {action: "radar_percentage_reload"},
656
+ success: function(result){
657
+ if (result.status === 'timeout'){
658
+ activeRequest = false;
659
+ setTimeout(ajax, (parseInt(result.data) * 1000));
660
+ return
661
+ }
662
+
663
+ if (result.status === 'progress'){
664
+ activeRequest = false;
665
+ completed = true;
666
+ setTimeout(ajax, 10000);
667
+ return
668
+ }
669
+
670
+ if (result.status === 'error'){
671
+ $("#alert-div").addClass("alert--failure");
672
+ $("#alert-image").attr('src',iub_js_vars['site_url'] + '/wp-content/plugins/iubenda-cookie-wp-solution/assets/images/banner_failure.svg');
673
+ $("#alert-message").html(result.message);
674
+ $("#alert-div-container").fadeIn( 300 );
675
+ }
676
+
677
+ if (result.status === 'complete' && completed){
678
+ if($('#frontpage-main-box').length){
679
+ $.ajax({
680
+ type: "post",
681
+ url: iub_js_vars['site_url'] + "/wp-admin/admin-ajax.php",
682
+ data : {action: "frontpage_main_box"},
683
+ success: function(response) {
684
+ $('#frontpage-main-box').html(response)
685
+ document.querySelectorAll(".circularBar").forEach(function (el) {
686
+ $(el).attr('data-perc', result.data.percentage);
687
+ circularBar(el);
688
+ });
689
+ },
690
+ });
691
+ }
692
+ }
693
+ }
694
+ })
695
+ setTimeout(ajax, 10000);
696
+ }
697
+ });
{js → assets/js}/frontend.js RENAMED
@@ -111,7 +111,7 @@
111
  };
112
 
113
  // send only if specific form has been submitted
114
- if ( (selector.parentElement.id == e.target.parentElement.id) || (selector.parentElement.id == e.target.id) ) {
115
  _this.submitForm( form, formArgs );
116
 
117
  _iub.cons.sendData();
111
  };
112
 
113
  // send only if specific form has been submitted
114
+ if ( selector.parentElement.id == e.target.parentElement.id ) {
115
  _this.submitForm( form, formArgs );
116
 
117
  _iub.cons.sendData();
assets/js/tabs.js ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ;(function (global, $) {
2
+
3
+ $(document).on('click','.tabs__nav__item', function(e){
4
+
5
+ var navItem = $(this);
6
+ var parent = navItem.closest('.tabs');
7
+ var target = parent.find('.tabs__target[data-target="'+navItem.data('target')+'"]');
8
+ var groupNavs = parent.find('.tabs__nav__item[data-group="'+navItem.data('group')+'"]');
9
+ var groupTargets = parent.find('.tabs__target[data-group="'+navItem.data('group')+'"]');
10
+
11
+ groupNavs.removeClass('active');
12
+ groupTargets.removeClass('active');
13
+ navItem.addClass('active');
14
+
15
+ groupTargets.hide();
16
+ target.show();
17
+
18
+ // target.find('.tabs__nav__item:first-of-type').click();
19
+
20
+ });
21
+
22
+ $(document).ready(function(){
23
+ // $('.tabs__nav__item:first-of-type').click();
24
+ });
25
+ }(window, jQuery));
css/admin.css DELETED
@@ -1,164 +0,0 @@
1
- #iubenda-header {
2
- margin-bottom: 30px;
3
- }
4
- .iubenda-title {
5
- margin-top: 10px;
6
- font-weight: bold;
7
- }
8
- .iubenda-link {
9
- display: table;
10
- margin: 0 auto 10px;
11
- }
12
- .iubenda-text {
13
- margin: 10px auto;
14
- color: #434149
15
- }
16
- .button.button-primary.iub-autodetect-forms {
17
- background: #1CC691;
18
- border-color: #169970;
19
- box-shadow: 0 1px 0 #138461;
20
- text-shadow: 0 -1px 1px #138461,1px 0 1px #138461,0 1px 1px #138461,-1px 0 1px #138461;
21
- display: inline-block;
22
- margin-bottom: 30px;
23
- }
24
- .button.button-primary.iub-autodetect-forms:hover {
25
- background: #1ACC94;
26
- }
27
- .button.button-primary.iub-autodetect-forms:focus {
28
- box-shadow: 0 1px 0 #138461,0 0 2px 1px #1CC691;
29
- }
30
- #iubenda-consent-forms .tablenav.bottom {
31
- display: none;
32
- }
33
- #iubenda-tabs .submit.submit-cons {
34
- padding-top: 0;
35
- }
36
- #iubenda-tabs {
37
- margin: 30px auto 20px;
38
- }
39
- #iub_parser_engine_container {
40
- margin-top: 10px;
41
- }
42
- #iub_parser_engine_container > div:not(:last-child) {
43
- margin-bottom: 10px;
44
- }
45
- #iub_amp_options_container {
46
- margin-top: 10px;
47
- }
48
- #iub_amp_options_container > div:not(:last-child) {
49
- margin-bottom: 10px;
50
- }
51
- #iubenda-tabs .contextual-help-wrap {
52
- overflow: auto;
53
- margin: 0;
54
- position: relative;
55
- }
56
- #iubenda-tabs .contextual-help-back {
57
- position: absolute;
58
- top: 0;
59
- bottom: 0;
60
- left: 150px;
61
- right: 0;
62
- border: 1px solid #e1e1e1;
63
- background: #f6fbfd;
64
- }
65
- #iubenda-tabs .contextual-help-columns {
66
- position: relative;
67
- }
68
- #iubenda-tabs .help-tab-content {
69
- margin-right: 0;
70
- }
71
- #iubenda-tabs .help-tab-content .description {
72
- margin-bottom: 10px;
73
- }
74
- #iubenda-tabs .help-tab-content .custom-script-field, #iubenda-tabs .help-tab-content .custom-iframe-field {
75
- padding-bottom: 10px;
76
- }
77
- #iubenda-tabs .help-tab-content .custom-script-field input, #iubenda-tabs .help-tab-content .custom-iframe-field input {
78
- vertical-align: middle;
79
- }
80
- #tab-panel-scripts, #tab-panel-iframes {
81
- margin-top: 16px;
82
- margin-bottom: 18px;
83
- }
84
- #iubenda-tabs .postbox-container .widefat {
85
- border: none;
86
- box-shadow: none;
87
- }
88
- #iubenda-tabs .postbox-container .widefat h4 {
89
- margin: 8px 0;
90
- }
91
- #iubenda-tabs .postbox-container .widefat select {
92
- min-width: 50%;
93
- }
94
- #iubenda-tabs .postbox-container .widefat thead .label {
95
- font-weight: bold;
96
- }
97
- #iubenda-tabs .postbox-container .widefat .table-label {
98
- width: 25%;
99
- }
100
- #iubenda-tabs .postbox-container .widefat thead td {
101
- border: none;
102
- width: 50%;
103
- }
104
- #iubenda-tabs .postbox-container .widefat .widefat tbody td {
105
- padding-top: 5px;
106
- padding-bottom: 5px;
107
- }
108
- .iubenda-notice {
109
- border-left-color: #1CC691;
110
- padding-left: 0;
111
- display: flex;
112
- justify-content: flex-start;
113
- align-items: center;
114
- }
115
- .iubenda-notice::before {
116
- display: inline-block;
117
- content: '';
118
- height: 49px;
119
- width: 22px;
120
- margin: 1em 2em;
121
- background-size: contain;
122
- background-position: center center;
123
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyMjFweCIgaGVpZ2h0PSI0OTBweCIgdmlld0JveD0iMCAwIDIyMSA0OTAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICAgICAgICA8dGl0bGU+aXViZW5kYSB2ZWN0b3IgbG9nb192M19vbmx5X2lfZ3JlZW48L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4gICAgICAgIDxnIGlkPSJpdWJlbmRhLXZlY3Rvci1sb2dvX3YzX29ubHlfaV9ncmVlbiIgZmlsbD0iIzFDQzY5MSIgZmlsbC1ydWxlPSJub256ZXJvIj4gICAgICAgICAgICA8cGF0aCBkPSJNMjIwLjYsMTA4LjQgQzIyMC42LDEzNSAyMTAuOCwxNTkuMyAxOTQuNSwxNzguMSBMMjE3LjksNDg5LjQgTDguNSw0ODkuNCBMMzEuMiwxODMuNSBDMTEuOSwxNjQuMiAwLDEzNy43IDAsMTA4LjQgQzAsNDguNyA0OS40LDAuNCAxMTAuMywwLjQgQzE3MS4yLDAuNCAyMjAuNiw0OC43IDIyMC42LDEwOC40IFogTTExMC4zLDEzMyBDMTI1LDEzMyAxMzYuOCwxMjEuMiAxMzYuOCwxMDYuNyBDMTM2LjgsOTIuMiAxMjQuOSw4MC41IDExMC4zLDgwLjUgQzk1LjYsODAuNSA4My44LDkyLjMgODMuOCwxMDYuNyBDODMuOCwxMjEuMyA5NS42LDEzMyAxMTAuMywxMzMgWiBNMTMxLjIsMjI3IEw5NC45LDI2My4zIEw5NC45LDQwMy44IEwxMzEuMiw0MDMuOCBMMTMxLjIsMjI3IFoiIGlkPSJTaGFwZSI+PC9wYXRoPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+);
124
- }
125
- .iubenda-notice .notice-question {
126
- margin-bottom: 5px;
127
- display: block;
128
- }
129
- .iubenda-notice .notice-reply {
130
- margin-top: 0;
131
- }
132
- .iubenda-notice .step-2 {
133
- display: none;
134
- }
135
- .iubenda-notice .reply-yes {
136
- margin-right: 10px;
137
- }
138
- .iubenda-notice .reply-yes:before,
139
- .iubenda-notice .reply-no:before {
140
- font-family: dashicons;
141
- display: inline-block;
142
- line-height: 1;
143
- font-weight: 400;
144
- font-style: normal;
145
- speak: none;
146
- text-decoration: inherit;
147
- text-transform: none;
148
- text-rendering: auto;
149
- -webkit-font-smoothing: antialiased;
150
- -moz-osx-font-smoothing: grayscale;
151
- width: 20px;
152
- height: 20px;
153
- font-size: 20px;
154
- vertical-align: top;
155
- text-align: center;
156
- transition: color .1s ease-in;
157
- text-decoration: none;
158
- }
159
- .iubenda-notice .reply-yes:before {
160
- content: "\f147";
161
- }
162
- .iubenda-notice .reply-no:before {
163
- content: "\f335";
164
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/CookieSolutionGenerator.php ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // exit if accessed directly
3
+ if ( ! defined( 'ABSPATH' ) )
4
+ exit;
5
+
6
+ /**
7
+ * Class CookieSolutionGenerator
8
+ */
9
+ class CookieSolutionGenerator {
10
+
11
+ /**
12
+ * @param $language
13
+ * @param $siteId
14
+ * @param $cookiePolicyId
15
+ * @param array $args
16
+ * @return string
17
+ */
18
+ public function handle($language, $siteId, $cookiePolicyId, $args = []) {
19
+ // Return if there is no public ID or site ID
20
+ if(!$cookiePolicyId || !$siteId){
21
+ return null;
22
+ }
23
+
24
+ // Handle if the website is single language
25
+ if($language == 'default'){
26
+ $language = iubenda()->lang_current;
27
+ }
28
+
29
+ // Workaround to solve return languages if has 'pt' language
30
+ // polylang or wpml
31
+ if($language == 'pt' || $language == 'pt-br'){
32
+ $language = 'pt-BR';
33
+ }
34
+
35
+ $beforeConfiguration = '
36
+ <script type="text/javascript">
37
+ var _iub = _iub || [];
38
+ _iub.csConfiguration =';
39
+ $afterConfiguration = '</script>';
40
+
41
+ $csConfiguration = [
42
+ 'floatingPreferencesButtonDisplay' => 'bottom-right',
43
+ 'lang' => $language,
44
+ 'siteId' => $siteId,
45
+ 'cookiePolicyId' => $cookiePolicyId,
46
+ 'whitelabel' => false,
47
+ 'invalidateConsentWithoutLog' => true,
48
+ ];
49
+ $csConfiguration['banner']['closeButtonDisplay'] = false;
50
+
51
+ $legislation = array_get($args, 'legislation');
52
+
53
+ // If legislation is GDPR or Both
54
+ if ($legislation == 'gdpr' || $legislation == 'both'){
55
+ $csConfiguration['consentOnContinuedBrowsing'] = false;
56
+ $csConfiguration['perPurposeConsent'] = true;
57
+ $csConfiguration['purposes'] = '1,2,3,4,5';
58
+ $csConfiguration['banner']['listPurposes'] = true;
59
+ $csConfiguration['banner']['explicitWithdrawal'] = true;
60
+
61
+ $explicit_reject = array_get($args, 'explicit_reject');
62
+ if ($explicit_reject || true == array_get($args, 'tcf')) {
63
+ $csConfiguration['banner']['rejectButtonDisplay'] = true;
64
+ }
65
+
66
+ $explicit_accept = array_get($args, 'explicit_accept');
67
+ if ($explicit_accept || true == array_get($args, 'tcf')) {
68
+ $csConfiguration['banner']['acceptButtonDisplay'] = true;
69
+ $csConfiguration['banner']['customizeButtonDisplay'] = true;
70
+ }
71
+
72
+ // If Require Consent is EU Only
73
+ if(array_get($args, 'require_consent') == 'eu_only'){
74
+ $csConfiguration['countryDetection'] = true;
75
+ $csConfiguration['gdprAppliesGlobally'] = false;
76
+ }
77
+ }
78
+
79
+ // If legislation is CCPA or Both
80
+ if ($legislation == 'ccpa' || $legislation == 'both'){
81
+ $csConfiguration['enableCcpa'] = true;
82
+
83
+ // If Require Consent is Worldwide
84
+ if(array_get($args, 'require_consent') == 'worldwide'){
85
+ $csConfiguration['ccpaApplies'] = true;
86
+ }
87
+ $afterConfiguration .= '
88
+ <script type="text/javascript" src="//cdn.iubenda.com/cs/ccpa/stub.js"></script>
89
+ ';
90
+ }
91
+
92
+ // If legislation is CCPA
93
+ if ($legislation == 'ccpa'){
94
+ // If Require Consent is Worldwide
95
+ if(array_get($args, 'require_consent') == 'worldwide'){
96
+ $csConfiguration['enableGdpr'] = false;
97
+ }
98
+ }
99
+
100
+ // conditions on TCF is enabled
101
+ if (($legislation == 'gdpr' || $legislation == 'both') && true == array_get($args, 'tcf')){
102
+ $csConfiguration['enableTcf'] = true;
103
+ $csConfiguration['banner']['closeButtonRejects'] = true;
104
+ $csConfiguration['tcfPurposes']['1'] = true;
105
+ $csConfiguration['tcfPurposes']['2'] = 'consent_only';
106
+ $csConfiguration['tcfPurposes']['3'] = 'consent_only';
107
+ $csConfiguration['tcfPurposes']['4'] = 'consent_only';
108
+ $csConfiguration['tcfPurposes']['5'] = 'consent_only';
109
+ $csConfiguration['tcfPurposes']['6'] = 'consent_only';
110
+ $csConfiguration['tcfPurposes']['7'] = 'consent_only';
111
+ $csConfiguration['tcfPurposes']['8'] = 'consent_only';
112
+ $csConfiguration['tcfPurposes']['9'] = 'consent_only';
113
+ $csConfiguration['tcfPurposes']['10'] = 'consent_only';
114
+
115
+ $afterConfiguration .= '
116
+ <script type="text/javascript" src="//cdn.iubenda.com/cs/tcf/stub-v2.js"></script>
117
+ <script type="text/javascript" src="//cdn.iubenda.com/cs/tcf/safe-tcf-v2.js"></script>
118
+ ';
119
+ }
120
+ $csConfiguration['banner']['position'] = str_replace('full-', '', array_get($args, 'position'));
121
+
122
+ $bannerStyle = array_get($args, 'banner_style');
123
+ if ('light' == $bannerStyle) {
124
+ $csConfiguration['banner']['style'] = 'light';
125
+ $csConfiguration['banner']['textColor'] = '#000000';
126
+ $csConfiguration['banner']['backgroundColor'] = '#FFFFFF';
127
+ $csConfiguration['banner']['customizeButtonCaptionColor'] = '#4D4D4D';
128
+ $csConfiguration['banner']['customizeButtonColor'] = '#DADADA';
129
+ }else{
130
+ $csConfiguration['banner']['style'] = 'dark';
131
+ }
132
+
133
+ $background_overlay = array_get($args, 'background_overlay');
134
+ if ($background_overlay) {
135
+ $csConfiguration['banner']['backgroundOverlay'] = true;
136
+ }
137
+
138
+ $afterConfiguration .= '
139
+ <script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>
140
+ ';
141
+
142
+ return $beforeConfiguration.json_encode($csConfiguration)."; ".$afterConfiguration;
143
+ }
144
+ }
includes/PrivacyPolicyGenerator.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // exit if accessed directly
3
+ if ( ! defined( 'ABSPATH' ) )
4
+ exit;
5
+
6
+ /**
7
+ * Class PrivacyPolicyGenerator
8
+ */
9
+ class PrivacyPolicyGenerator {
10
+
11
+ /**
12
+ * @param $language
13
+ * @param $cookiePolicyId
14
+ * @param $buttonStyle
15
+ * @return string
16
+ */
17
+ public function handle($language, $cookiePolicyId, $buttonStyle) {
18
+ // Return if there is no public id
19
+ if(!$cookiePolicyId){
20
+ return null;
21
+ }
22
+
23
+ $privacyTitle = $language == 'default' ? __2('Privacy Policy', 'iubenda', $language) : __('Privacy Policy', 'iubenda');
24
+
25
+ $ppConfiguration = '
26
+ <a href="https://www.iubenda.com/privacy-policy/'.$cookiePolicyId.'" class="iubenda-'.$buttonStyle.' no-brand iubenda-noiframe iubenda-embed iubenda-noiframe " title="'.$privacyTitle.'">'.$privacyTitle.'</a><script type="text/javascript">(function (w,d) {var loader = function () {var s = d.createElement("script"), tag = d.getElementsByTagName("script")[0]; s.src="https://cdn.iubenda.com/iubenda.js"; tag.parentNode.insertBefore(s,tag);}; if(w.addEventListener){w.addEventListener("load", loader, false);}else if(w.attachEvent){w.attachEvent("onload", loader);}else{w.onload = loader;}})(window, document);</script>
27
+ ';
28
+
29
+ return $ppConfiguration;
30
+ }
31
+ }
includes/ProductHelper.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // exit if accessed directly
3
+ if (!defined('ABSPATH')) exit;
4
+
5
+ /**
6
+ * Class ProductHelper
7
+ */
8
+ class ProductHelper
9
+ {
10
+
11
+ /**
12
+ * @param $lang_id
13
+ * @return string
14
+ */
15
+ public function get_cs_embed_code_by_lang($lang_id): string
16
+ {
17
+ $code = array_get(iubenda()->options['cs'], "manual_code_{$lang_id}");
18
+ if (!$code) {
19
+ $code = array_get(iubenda()->options['cs'], "code_{$lang_id}");
20
+ }
21
+
22
+ return html_entity_decode(iubenda()->parse_code($code));
23
+ }
24
+
25
+ /**
26
+ * @param $lang_id
27
+ * @return string
28
+ */
29
+ public function get_pp_embed_code_by_lang($lang_id): string
30
+ {
31
+ return $this->get_embed_code('pp', $lang_id);
32
+ }
33
+
34
+ /**
35
+ * @param $lang_id
36
+ * @return string
37
+ */
38
+ public function get_tc_embed_code_by_lang($lang_id): string
39
+ {
40
+ return $this->get_embed_code('tc', $lang_id);
41
+ }
42
+
43
+ /**
44
+ * Get all languages if website is multilingual and return default if website is single language
45
+ *
46
+ * @return array|string[]
47
+ */
48
+ public function get_languages(): array
49
+ {
50
+ if (iubenda()->multilang && !empty(iubenda()->languages)) {
51
+ return iubenda()->languages;
52
+ }
53
+
54
+ return ['default' => 'default_language'];
55
+ }
56
+
57
+
58
+ /**
59
+ * @param $key
60
+ * @param $lang_id
61
+ * @return string
62
+ */
63
+ private function get_embed_code($key, $lang_id): string
64
+ {
65
+ $code = array_get(iubenda()->options[$key], "code_{$lang_id}");
66
+
67
+ return html_entity_decode(iubenda()->parse_code($code));
68
+ }
69
+
70
+ /**
71
+ * Check Iubenda CS code exists on current lang or not
72
+ *
73
+ * @return bool
74
+ */
75
+ public function check_iub_cs_code_exists_current_lang(): bool
76
+ {
77
+ return $this->check_iub_code_exists_current_lang('cs');
78
+ }
79
+
80
+ /**
81
+ * Check Iubenda $key code exists on current lang or not
82
+ *
83
+ * @param $key
84
+ * @return bool
85
+ */
86
+ private function check_iub_code_exists_current_lang($key): bool
87
+ {
88
+ // Check if there is multi language plugin installed and activated
89
+ if ( iubenda()->multilang === true && defined( 'ICL_LANGUAGE_CODE' ) && isset( iubenda()->options['cs']['code_' . ICL_LANGUAGE_CODE] ) ) {
90
+ $iubenda_code = iubenda()->options[$key]['code_' . ICL_LANGUAGE_CODE];
91
+
92
+ // no code for current language, use default
93
+ if ( ! $iubenda_code ){
94
+ $iubenda_code = iubenda()->options[$key]['code_default'];
95
+ }
96
+ } else{
97
+ $iubenda_code = iubenda()->options[$key]['code_default'];
98
+ }
99
+
100
+ return boolval(trim($iubenda_code));
101
+ }
102
+ }
includes/QuickGeneratorService.php ADDED
@@ -0,0 +1,600 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // exit if accessed directly
3
+ if (!defined('ABSPATH'))
4
+ exit;
5
+
6
+ /**
7
+ * Class QuickGeneratorService
8
+ */
9
+ class QuickGeneratorService
10
+ {
11
+ private $apiKey = '66f95ff033e00b0a6bb38d34665eab80e39b7ef7';
12
+
13
+ private $url = [
14
+ 'create_privacy_policy' => 'https://www.iubenda.com/api/transactions',
15
+ ];
16
+ public $QG_Response = [];
17
+
18
+ public function __construct(){
19
+ $this->QG_Response = get_option(iubenda_Settings::IUB_QG_Response, []) ?: [];
20
+ }
21
+
22
+ protected function get_mapped_language_on_local($iub_lang_code)
23
+ {
24
+ $result = [];
25
+ $iub_lang_code = strtolower(str_replace('-', '_', $iub_lang_code));
26
+
27
+ foreach (iubenda()->languages_locale as $wordpress_locale => $lang_code) {
28
+ // lower case and replace - with underscore
29
+ $lower_wordpress_locale = strtolower(str_replace('-', '_', $wordpress_locale));
30
+ // Map after all both codes becomes lower case and underscore
31
+
32
+ // Map en iubenda language to wordpress languages en_us
33
+ if ($iub_lang_code == 'en' && $lower_wordpress_locale == 'en_us') {
34
+ $result[] = $lang_code;
35
+ continue;
36
+ }
37
+
38
+ // Map iubenda language to wordpress languages
39
+ if ($iub_lang_code == $lower_wordpress_locale) {
40
+ $result[] = $lang_code;
41
+ continue;
42
+ }
43
+
44
+ // Map any pt iubenda language to any wordpress languages starts with pt
45
+ if (strpos($iub_lang_code, 'pt_') === 0 && strpos($lower_wordpress_locale, 'pt') === 0) {
46
+ $result[] = $lang_code;
47
+ continue;
48
+ }
49
+
50
+ // Cases iubenda languages without _ mapped to
51
+ if ($iub_lang_code == strstr($lower_wordpress_locale, '_', true)) {
52
+ $result[] = $lang_code;
53
+ continue;
54
+ }
55
+ // Map any XX_ iubenda language to any wordpress languages starts with XX_
56
+ if ((strpos($iub_lang_code, '_') === 0 && strstr($iub_lang_code, '_', true)) && (strpos($lower_wordpress_locale, '_') === 0 && strstr($lower_wordpress_locale, '_', true))) {
57
+ $result[] = $lang_code;
58
+ continue;
59
+ }
60
+
61
+ if ($lower_wordpress_locale == $iub_lang_code) {
62
+ $result[] = $lang_code;
63
+ continue;
64
+ }
65
+ }
66
+
67
+ return $result;
68
+ }
69
+
70
+ public function quick_generator_api()
71
+ {
72
+ $public_ids = [];
73
+ $privacy_policies = [];
74
+ $site_id = null;
75
+
76
+ $body = array_get($_POST, 'payload');
77
+ $user = array_get($body, 'user');
78
+
79
+ $multi_lang = boolval(iubenda()->multilang && !empty(iubenda()->languages));
80
+
81
+ foreach (array_get($body, 'privacy_policies', []) ?? [] as $key => $privacy_policy) {
82
+ //getting site id to save it into Iubenda global option
83
+ if(!$site_id){
84
+ $site_id = array_get($privacy_policy, 'site_id');
85
+ }
86
+
87
+ if($multi_lang){
88
+ if($local_lang_codes = $this->get_mapped_language_on_local($privacy_policy['lang'])){
89
+ foreach ($local_lang_codes as $local_lang_code){
90
+ $privacy_policies[$local_lang_code] = $privacy_policy;
91
+
92
+ //getting public id to save it into Iubenda global option default lang
93
+ $public_ids[$local_lang_code] = array_get($privacy_policy, 'public_id');
94
+ }
95
+ }
96
+ }else{
97
+ $privacy_policies['default'] = $privacy_policy;
98
+
99
+ //getting public id to save it into Iubenda global option default lang
100
+ $public_ids['default'] = array_get($privacy_policy, 'public_id');
101
+ }
102
+ }
103
+
104
+ $configuration = [
105
+ 'website' => array_get($_POST, 'website'),
106
+ 'user' => [
107
+ 'id' => array_get($user, 'id'),
108
+ 'email' => array_get($user, 'email'),
109
+ ],
110
+ 'privacy_policies' => $privacy_policies,
111
+ ];
112
+
113
+ update_option(iubenda_Settings::IUB_QG_Response, $configuration);
114
+ update_option( 'iubenda_global_options', ['site_id' => $site_id, 'public_ids' => $public_ids] );
115
+
116
+ iubenda()->settings->add_notice( 'iub_integrated_success', __( 'Your website has been created and your legal documents have been generated. Setup your cookie banner and privacy policy button to complete the integration.', 'iubenda' ), 'success' );
117
+
118
+ echo json_encode([
119
+ 'status' => 'done',
120
+ 'redirect' => admin_url( 'admin.php?page=iubenda&view=integrate-setup') ,
121
+ ]);
122
+ wp_die();
123
+ }
124
+
125
+ public function integrate_setup()
126
+ {
127
+ if(array_get($_POST, 'cookie_law') == 'on'){
128
+ // Saving CS data with CS function
129
+ $this->cs_save_options();
130
+ }
131
+
132
+ if(array_get($_POST, 'privacy_policy') == 'on'){
133
+ // Saving PP data with PP function
134
+ $this->pp_save_options();
135
+ }
136
+
137
+ if (array_get($_POST, 'cookie_law') == 'on' || array_get($_POST, 'privacy_policy') == 'on') {
138
+ //add notice that`s notice user the integrate has been done successfully
139
+ iubenda()->settings->add_notice('iub_integrated_success', __('Our products has been integrated successfully, now customize all products to increase the compliance rating and make your website fully compliant.', 'iubenda'), 'success');
140
+ }
141
+
142
+ echo json_encode(['status' => 'done']);
143
+ wp_die();
144
+ }
145
+
146
+ public function save_public_api_key()
147
+ {
148
+ if(empty(array_get($_POST, 'public_api_key'))){
149
+ echo json_encode(['status' => 'error', 'responseText' => "invalid public API key" ]);
150
+ wp_die();
151
+ }
152
+ update_option('iubenda_consent_solution', ['public_api_key' => array_get($_POST, 'public_api_key')]);
153
+
154
+ $iubenda_activated_products = get_option('iubenda_activated_products');
155
+ $iubenda_activated_products['iubenda_consent_solution'] = 'true';
156
+ update_option('iubenda_activated_products', $iubenda_activated_products);
157
+
158
+ echo json_encode(['status' => 'done']);
159
+ wp_die();
160
+ }
161
+
162
+ public function auto_detect_forms()
163
+ {
164
+ iubenda()->forms->autodetect_forms();
165
+
166
+ require_once IUBENDA_PLUGIN_PATH . 'views/partials/auto_detect_forms.php';
167
+ wp_die();
168
+
169
+ }
170
+
171
+ public function add_footer()
172
+ {
173
+ if(array_get(iubenda()->settings->services, 'pp.status') == 'true' && array_get(iubenda()->options['pp'], 'button_position') == 'automatic'){
174
+ echo $this->pp_button();
175
+ }
176
+ if(array_get(iubenda()->settings->services, 'tc.status') == 'true' && array_get(iubenda()->options['tc'], 'button_position') == 'automatic'){
177
+ echo $this->tc_button();
178
+ }
179
+ }
180
+
181
+ public function tc_button_shortcode(){
182
+ if ((array_get(iubenda()->settings->services, 'tc.status') == 'true') && (array_get(iubenda()->options['tc'], 'button_position') == 'manual')) {
183
+ return $this->tc_button();
184
+ }
185
+ return "[iub-tc-button]";
186
+ }
187
+
188
+ public function tc_button(){
189
+ if ( iubenda()->multilang && ! empty( iubenda()->lang_current ) ) {
190
+ $code = array_get(iubenda()->options, 'tc.code_'.iubenda()->lang_current) ?? null;
191
+ } else {
192
+ $code = array_get(iubenda()->options, 'tc.code_default') ?? null;
193
+ }
194
+
195
+ return $code;
196
+ }
197
+
198
+ public function pp_button_shortcode(){
199
+ if (array_get(iubenda()->settings->services, 'pp.status') == 'true' && array_get(iubenda()->options['pp'], 'button_position') != 'automatic') {
200
+ return $this->pp_button();
201
+ }
202
+ return "[iub-pp-button]";
203
+ }
204
+
205
+ public function pp_button(){
206
+ $privacy_policy_generator = new PrivacyPolicyGenerator();
207
+
208
+ if ( iubenda()->multilang && ! empty( iubenda()->lang_current ) ) {
209
+ $code = array_get(iubenda()->options, 'pp.code_'.iubenda()->lang_current) ?? null;
210
+ } else {
211
+ $code = array_get(iubenda()->options, 'pp.code_default') ?? null;
212
+ }
213
+
214
+ if (!$code){
215
+ if ( iubenda()->multilang && ! empty( iubenda()->lang_current ) ) {
216
+ $public_id = array_get(iubenda()->options['global_options'], 'public_ids.'.iubenda()->lang_current);
217
+ } else {
218
+ $public_id = array_get(iubenda()->options['global_options'], 'public_ids.default');
219
+ }
220
+
221
+ $code = $privacy_policy_generator->handle('default', $public_id, array_get(iubenda()->options, 'pp.button_style'));
222
+ }
223
+
224
+ return $code;
225
+ }
226
+
227
+ public function ajax_save_options()
228
+ {
229
+ $iubenda_section_name = array_get($_POST, 'iubenda_section_name');
230
+ $iubenda_section_key = array_get($_POST, 'iubenda_section_key');
231
+
232
+ // If section == CS save by CS function
233
+ if($iubenda_section_key == 'cs'){
234
+ $this->cs_save_options(false);
235
+ }
236
+ else{
237
+ $codes_statues = [];
238
+ $global_options = iubenda()->options['global_options'];
239
+
240
+ $section_new_option = array_get($_POST, $iubenda_section_name);
241
+ $old_section_options = iubenda()->options[$iubenda_section_key];
242
+
243
+ if($iubenda_section_name == 'iubenda_terms_conditions_solution') {
244
+ foreach($section_new_option as $index => $option) {
245
+ if(substr( $index, 0, 5 ) === "code_"){
246
+ $parsed_code = iubenda()->parse_tc_pp_configuration(stripslashes_deep($option));
247
+
248
+ if ($parsed_code) {
249
+ $codes_statues["{$iubenda_section_name}_codes"][] = true;
250
+ $global_options['public_ids'][substr($index, 5)] = array_get($parsed_code, 'cookie_policy_id');
251
+ }else{
252
+ $codes_statues["{$iubenda_section_name}_codes"][] = false;
253
+ }
254
+ }
255
+ }
256
+
257
+ // validating Embed Codes of TC contains at least one valid code
258
+ if(count(array_filter($codes_statues["{$iubenda_section_name}_codes"])) == 0){
259
+ echo json_encode(['status' => 'error', 'responseText' => "( {$iubenda_section_name} ) At least one code must be valid."]);
260
+ wp_die();
261
+ }
262
+ }
263
+
264
+ // Update buttons style & position
265
+ // Privacy policy Button
266
+ if($iubenda_section_name == 'iubenda_privacy_policy_solution') {
267
+ // Add a widget in the sidebar if the button is positioned automatically
268
+ if('automatic' === array_get($section_new_option, 'button_position')){
269
+ do_action('iubenda_assign_widget_to_first_sidebar');
270
+ }
271
+
272
+ // Merge old old PP options with new options to update codes with new style
273
+ $old_section_options = $old_section_options ? $this->stripslashes_deep($old_section_options) : [];
274
+ $section_new_option = array_merge($old_section_options, $section_new_option);
275
+
276
+ // Update PP codes with new button style
277
+ $section_new_option = $this->update_button_style($section_new_option, 'pp');
278
+ }
279
+
280
+ // Terms and conditions Button
281
+ if($iubenda_section_name == 'iubenda_terms_conditions_solution') {
282
+ // Add a widget in the sidebar if the button is positioned automatically
283
+ if('automatic' === array_get($section_new_option, 'button_position')){
284
+ do_action('iubenda_assign_widget_to_first_sidebar');
285
+ }
286
+
287
+ // Update TC codes with new button style
288
+ $section_new_option = $this->update_button_style($section_new_option, 'tc');
289
+ }
290
+
291
+ //set the product configured option true
292
+ $section_new_option['configured'] = 'true';
293
+
294
+ $iubenda_activated_products = get_option('iubenda_activated_products');
295
+ $iubenda_activated_products[$iubenda_section_name] = 'true';
296
+ update_option('iubenda_activated_products', $iubenda_activated_products);
297
+
298
+ $section_new_option = $this->stripslashes_deep($section_new_option);
299
+ if($old_section_options){
300
+ $old_section_options = $this->stripslashes_deep($old_section_options);
301
+ $section_new_option = array_merge($old_section_options, $section_new_option);
302
+ }
303
+ update_option($iubenda_section_name, $section_new_option);
304
+
305
+ //update iubenda global options (public_ids)
306
+ update_option( 'iubenda_global_options', $global_options );
307
+ }
308
+
309
+ echo json_encode(['status' => 'done']);
310
+ wp_die();
311
+ }
312
+
313
+ private function prepare_custom_scripts_iframes($data, $flag ) {
314
+ return array_combine(
315
+ array_get($data, $flag),
316
+ array_get($data, 'type')
317
+ );
318
+ }
319
+
320
+ private function stripslashes_deep($value)
321
+ {
322
+ $value = is_array($value) ?
323
+ array_map('stripslashes_deep', $value) :
324
+ stripslashes($value);
325
+
326
+ return $value;
327
+ }
328
+
329
+ /**.
330
+ * Update button style in options
331
+ *
332
+ * @param $options
333
+ * @param $service
334
+ * @return array
335
+ */
336
+ public function update_button_style($options, $service): array
337
+ {
338
+ if($service == 'pp'){
339
+ $privacy_policy_generator = new PrivacyPolicyGenerator();
340
+ }
341
+
342
+ $new_options = [];
343
+ $button_style = array_get($options, 'button_style');
344
+
345
+ foreach($options as $key => $index){
346
+ $new_options[$key] = $index;
347
+
348
+ if(substr( $key, 0, 5 ) === "code_"){
349
+ if($service == 'pp'){
350
+ // Get public_id for this language
351
+ $public_id = array_get(iubenda()->options['global_options'], "public_ids.".substr( $key, 5 ), false) ?: false;
352
+
353
+ if ((!$index || empty($index)) && $public_id) {
354
+ $index = $privacy_policy_generator->handle(substr( $key, 5 ), $public_id, iubenda()->options['pp']);
355
+ }
356
+ }
357
+
358
+ $new_code = str_replace(['iubenda-black', 'iubenda-white'], "iubenda-{$button_style}",$index);
359
+ $new_options[$key] = $new_code;
360
+ }
361
+ }
362
+ return $new_options;
363
+ }
364
+
365
+ /**
366
+ * saving Iubenda cookie law solution options
367
+ * @param bool $default_options
368
+ */
369
+ private function cs_save_options($default_options = true)
370
+ {
371
+ $iubenda_cookie_solution_generator = new CookieSolutionGenerator;
372
+ $global_options = iubenda()->options['global_options'];
373
+
374
+ $codes_statues = [];
375
+ $site_id = null;
376
+ $new_cs_option = array_get($_POST, 'iubenda_cookie_law_solution');
377
+
378
+ if (!$default_options) {
379
+ //CS plugin general options
380
+ $new_cs_option['parse'] = (bool)isset($new_cs_option['parse']);
381
+ $new_cs_option['parser_engine'] = isset($new_cs_option['parser_engine']) && in_array($new_cs_option['parser_engine'], ['default', 'new']) ? $new_cs_option['parser_engine'] : iubenda()->defaults['cs']['parser_engine'];
382
+ $new_cs_option['skip_parsing'] = (bool)isset($new_cs_option['skip_parsing']);
383
+ $new_cs_option['ctype'] = (bool)isset($new_cs_option['ctype']);
384
+ $new_cs_option['output_feed'] = (bool)isset($new_cs_option['output_feed']);
385
+ $new_cs_option['output_post'] = (bool)isset($new_cs_option['output_post']);
386
+ $new_cs_option['menu_position'] = isset($new_cs_option['menu_position']) && in_array($new_cs_option['menu_position'], ['topmenu', 'submenu']) ? $new_cs_option['menu_position'] : iubenda()->defaults['cs']['menu_position'];
387
+ $new_cs_option['amp_support'] = array_get($new_cs_option, 'amp_support', false) ?: false;
388
+ $new_cs_option['deactivation'] = (bool)isset($new_cs_option['deactivation']);
389
+ }
390
+
391
+ if(isset($new_cs_option['custom_scripts'])){
392
+ $new_cs_option['custom_scripts'] = $this->prepare_custom_scripts_iframes( array_get($new_cs_option, 'custom_scripts'), 'script');
393
+
394
+ // Set all selected values Int to not break compatibility with old version
395
+ $new_cs_option['custom_scripts'] = array_map('intval' , $new_cs_option['custom_scripts']);
396
+ }else{
397
+ $new_cs_option['custom_scripts'] = [];
398
+ }
399
+
400
+ if(isset($new_cs_option['custom_iframes'])){
401
+ $new_cs_option['custom_iframes'] = $this->prepare_custom_scripts_iframes( array_get($new_cs_option, 'custom_iframes'), 'iframe');
402
+
403
+ // Set all selected values Int to not break compatibility with old version
404
+ $new_cs_option['custom_iframes'] = array_map('intval' , $new_cs_option['custom_iframes']);
405
+ }else{
406
+ $new_cs_option['custom_iframes'] = [];
407
+ }
408
+
409
+ if ('simplified' === array_get($new_cs_option, 'configuration_type')) {
410
+ // Check explicit accept & reject forced on if TCF is on
411
+ if(true == array_get($new_cs_option, 'simplified.tcf')){
412
+ $new_cs_option['simplified']['explicit_accept'] = 'on';
413
+ $new_cs_option['simplified']['explicit_reject'] = 'on';
414
+ }
415
+ $languages = (new ProductHelper())->get_languages();
416
+ // loop on iubenda->>language
417
+ foreach ($languages as $lang_id => $lang_name) {
418
+ $privacy_policy_id = array_get($global_options, "public_ids.{$lang_id}");
419
+
420
+ if(!$privacy_policy_id){
421
+ continue;
422
+ }
423
+
424
+ $site_id = array_get(iubenda()->options, 'global_options.site_id') ?: null;
425
+
426
+ // Generating CS Simplified code
427
+ $cs_embed_code = $iubenda_cookie_solution_generator->handle($lang_id, $site_id, $privacy_policy_id, array_get($new_cs_option, 'simplified'));
428
+
429
+ $new_cs_option["code_{$lang_id}"] = $this->stripslashes_deep($cs_embed_code);
430
+
431
+ // generate amp template file if the code is valid
432
+ if($cs_embed_code){
433
+ // generate amp template file
434
+ if ($new_cs_option['amp_support']) {
435
+ $template_done[$lang_id] = false;
436
+
437
+ $template_done[$lang_id] = (bool)iubenda()->AMP->generate_amp_template($cs_embed_code, $lang_id);
438
+
439
+ // Check if AMP is checked and the auto generated option is selected
440
+ if ("1" == $new_cs_option['amp_support'] && 'local' == $new_cs_option['amp_source']) {
441
+
442
+ if (is_bool($template_done[$lang_id]) && false === $template_done[$lang_id]) {
443
+ $message = "Currently, you do not have write permission for <i>%s</i>. For instructions on how to fix this, please read <a target=\"_blank\" href=\"%s\">our guide</a>.";
444
+ $our_guide_URL = 'https://www.iubenda.com/en/help/1215-cookie-solution-wordpress-plugin-installation-guide#amp-permissions';
445
+ $file_path = IUBENDA_PLUGIN_PATH . 'templates' . DIRECTORY_SEPARATOR;
446
+ add_settings_error('cs_settings_errors', 'iub_cs_settings_updated', __(sprintf($message, $file_path, $our_guide_URL), 'iubenda'), 'error');
447
+ }
448
+ }
449
+
450
+ $new_cs_option['amp_template_done'] = $template_done;
451
+
452
+ // TODO need to checked with AMP files url
453
+ if (is_array($new_cs_option['amp_template'])) {
454
+ foreach ($new_cs_option['amp_template'] as $lang => $template) {
455
+ $new_cs_option['amp_template'][$lang] = esc_url($template);
456
+ }
457
+ } else {
458
+ $new_cs_option['amp_template'] = esc_url($new_cs_option['amp_template']);
459
+ }
460
+ }
461
+ }
462
+ }
463
+ }
464
+ elseif('manual' === array_get($new_cs_option, 'configuration_type')){
465
+ foreach($new_cs_option as $index => $option) {
466
+ //check code if valid or not
467
+ if (substr($index, 0, 5) === "code_" && !empty($option)) {
468
+ // Getting data from embed code
469
+ $parsed_code = iubenda()->parse_configuration(stripslashes_deep($option));
470
+
471
+ // if code parsed correctly
472
+ if(!$parsed_code){
473
+ $codes_statues[substr($index, 5)] = false;
474
+ continue;
475
+ }
476
+ $new_cs_option['manual_'."$index"] = $option;
477
+ $codes_statues[substr($index, 5)] = true;
478
+
479
+ //getting cookiePolicyId to save it into Iubenda global option
480
+ $global_options['public_ids'][substr($index, 5)] = array_get($parsed_code, 'cookiePolicyId');
481
+
482
+ //getting site id to save it into Iubenda global option
483
+ if(!$site_id){
484
+ $site_id = array_get($parsed_code, 'siteId');
485
+ }
486
+
487
+ // generate amp template file
488
+ if ($new_cs_option['amp_support']) {
489
+ $lang_id = substr($index, 5);
490
+ $template_done[$lang_id] = false;
491
+
492
+ $template_done[$lang_id] = (bool)iubenda()->AMP->generate_amp_template(stripslashes_deep($option), $lang_id);
493
+
494
+ // Check if AMP is checked and the auto generated option is selected
495
+ if ("1" == $new_cs_option['amp_support'] && 'local' == $new_cs_option['amp_source']) {
496
+
497
+ if (is_bool($template_done[$lang_id]) && false === $template_done[$lang_id]) {
498
+ $message = "Currently, you do not have write permission for <i>%s</i>. For instructions on how to fix this, please read <a target=\"_blank\" href=\"%s\">our guide</a>.";
499
+ $our_guide_URL = 'https://www.iubenda.com/en/help/1215-cookie-solution-wordpress-plugin-installation-guide#amp-permissions';
500
+ $file_path = IUBENDA_PLUGIN_PATH . 'templates' . DIRECTORY_SEPARATOR;
501
+ add_settings_error('cs_settings_errors', 'iub_cs_settings_updated', __(sprintf($message, $file_path, $our_guide_URL), 'iubenda'), 'error');
502
+ }
503
+ }
504
+
505
+ $new_cs_option['amp_template_done'] = $template_done;
506
+
507
+ // TODO need to checked with AMP files url
508
+ if (is_array($new_cs_option['amp_template'])) {
509
+ foreach ($new_cs_option['amp_template'] as $lang => $template) {
510
+ $new_cs_option['amp_template'][$lang] = esc_url($template);
511
+ }
512
+ } else {
513
+ $new_cs_option['amp_template'] = esc_url($new_cs_option['amp_template']);
514
+ }
515
+ }
516
+ }
517
+ }
518
+ // validating Embed Codes of CS contains at least one valid code
519
+ if(count(array_filter($codes_statues)) == 0){
520
+ echo json_encode(['status' => 'error', 'responseText' => "( Iubenda cookie law solution ) At least one code must be valid."]);
521
+ wp_die();
522
+ }
523
+ }
524
+
525
+ //set the product configured option true
526
+ $new_cs_option['configured'] = 'true';
527
+
528
+ // update only cs make it activated service
529
+ iubenda()->options['activated_products']['iubenda_cookie_law_solution'] = 'true';
530
+ update_option('iubenda_activated_products', iubenda()->options['activated_products']);
531
+
532
+ // saving new options merged by old options
533
+ $new_cs_option = $this->stripslashes_deep($new_cs_option);
534
+ $old_cs_options = $this->stripslashes_deep(iubenda()->options['cs']);
535
+
536
+ $new_cs_option = array_merge($old_cs_options, $new_cs_option);
537
+ update_option('iubenda_cookie_law_solution', $new_cs_option);
538
+
539
+ // save site ID into Iubenda global option
540
+ if($site_id){
541
+ $global_options['site_id'] = $site_id;
542
+ }
543
+
544
+ //update iubenda global options (site_id & public_ids)
545
+ iubenda()->options['global_options'] = $global_options;
546
+ update_option( 'iubenda_global_options', $global_options );
547
+ }
548
+
549
+ /**
550
+ * saving Iubenda privacy policy solution options
551
+ */
552
+ private function pp_save_options()
553
+ {
554
+ // TODO enhance more
555
+ $privacy_policy_generator = new PrivacyPolicyGenerator();
556
+ $global_options = iubenda()->options['global_options'];
557
+
558
+ $languages = (new ProductHelper())->get_languages();
559
+ // loop on iubenda->>language
560
+ foreach ($languages as $lang_id => $v) {
561
+ $privacy_policy_id = null;
562
+
563
+ // getting privacy policy id from saved QG response
564
+ $privacy_policy_id = array_get($global_options, "public_ids.{$lang_id}");
565
+
566
+ if(!$privacy_policy_id){
567
+ continue;
568
+ }
569
+
570
+ // Insert PP Simplified code into options
571
+ $pp_embed_code = $privacy_policy_generator->handle($lang_id, $privacy_policy_id, array_get($_POST, 'iubenda_privacy_policy_solution.button_style'));
572
+
573
+ $pp_data["code_{$lang_id}"] = $pp_embed_code;
574
+
575
+ //getting public id to save it into Iubenda global option for each lang
576
+ $global_options['public_ids'][$lang_id] = $privacy_policy_id;
577
+ }
578
+
579
+ // Add a widget in the sidebar if the button is positioned automatically
580
+ if('automatic' === array_get($_POST, 'iubenda_privacy_policy_solution.button_position')){
581
+ do_action('iubenda_assign_widget_to_first_sidebar');
582
+ }
583
+
584
+ // Set the version of PP service as Simplified
585
+ $pp_data["version"] = 'Simplified';
586
+
587
+ // Set the configured status as true
588
+ $pp_data["configured"] = 'true';
589
+
590
+ update_option("iubenda_privacy_policy_solution", array_merge($pp_data, array_get($_POST, 'iubenda_privacy_policy_solution')));
591
+
592
+ // update only pp make it activated service
593
+ iubenda()->options['activated_products']['iubenda_privacy_policy_solution'] = 'true';
594
+ update_option('iubenda_activated_products', iubenda()->options['activated_products']);
595
+
596
+ //update iubenda global options (site_id & public_ids)
597
+ iubenda()->options['global_options'] = $global_options;
598
+ update_option( 'iubenda_global_options', $global_options );
599
+ }
600
+ }
includes/RadarService.php ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // exit if accessed directly
3
+ if ( ! defined( 'ABSPATH' ) )
4
+ exit;
5
+
6
+
7
+ /**
8
+ * Class Radar_API
9
+ */
10
+ class RadarService {
11
+
12
+ private $authorization = [
13
+ 'username' => 'devops',
14
+ 'password' => 'orIDiVvPVdHvwyjM4',
15
+ ];
16
+ private $serviceRating = '';
17
+
18
+ private $url = [
19
+ 'match-async' => 'https://radar.iubenda.com/api/match-async',
20
+ 'match-progress' => 'https://radar.iubenda.com/api/match-progress',
21
+ ];
22
+
23
+ public $apiConfiguration = [];
24
+
25
+ private $updateMessage = "Please, make also sure the plugin is updated to the <a target='_blank' href='https://wordpress.org/plugins/iubenda-cookie-law-solution/'><u> latest version.</u></a>";
26
+
27
+ public function __construct(){
28
+ $this->serviceRating = new ServiceRating();
29
+ $this->apiConfiguration = get_option('iubenda_radar_api_configuration', []) ?: [];
30
+ }
31
+
32
+ public function askRadarToSendRequest(){
33
+ if (!empty($this->apiConfiguration)) {
34
+ return $this->send_radar_progress_request();
35
+ }
36
+
37
+ return $this->send_radar_sync_request();
38
+ }
39
+
40
+ public function forceDeleteRadarConfiguration(){
41
+ delete_option('iubenda_radar_api_configuration');
42
+ return true;
43
+ }
44
+
45
+ public function calculate_radar_percentage(){
46
+ $services['pp'] = $this->serviceRating->isPrivacyPolicyActivated();
47
+ $services['cs'] = $this->serviceRating->isCookieSolutionActivated();
48
+ $services['cons'] = $this->serviceRating->isCookieSolutionConfigured();
49
+ $services['tc'] = $this->serviceRating->isTermsConditionsActivated();
50
+
51
+ return [
52
+ 'percentage' => (count(array_filter($services)) / count($services)) * 100,
53
+ 'services' => $services
54
+ ];
55
+ }
56
+
57
+ private function send_radar_sync_request()
58
+ {
59
+ $website = get_site_url();
60
+ $data = ['timeout' => 30,
61
+ 'redirection' => 5,
62
+ 'httpversion' => '1.0',
63
+ 'headers' => ['Authorization' => 'Basic ' . base64_encode($this->authorization['username'] . ':' . $this->authorization['password'])],
64
+ 'body' => ['url' => $website, 'detectLegalDocuments' => 'true'],
65
+ ];
66
+
67
+ $response = wp_remote_get(array_get($this->url, 'match-async'), $data);
68
+ $responseCode = wp_remote_retrieve_response_code($response);
69
+
70
+ //check response code
71
+ $this->checkResponse($response, $responseCode);
72
+
73
+ $body = json_decode(array_get($response, 'body'), true);
74
+
75
+ $body['trial_num'] = 1;
76
+ $body['next_trial'] = time();
77
+
78
+ update_option('iubenda_radar_api_configuration', $body);
79
+
80
+ if (defined('DOING_AJAX') && DOING_AJAX) {
81
+ wp_send_json(['code' => $responseCode, 'status' => 'progress',]);
82
+ wp_die();
83
+ }
84
+
85
+ return true;
86
+ }
87
+
88
+ private function send_radar_progress_request()
89
+ {
90
+ $iubendaRadarApiConfiguration = $this->apiConfiguration;
91
+
92
+
93
+ if (array_get($iubendaRadarApiConfiguration, 'status') == 'completed') {
94
+ if (defined('DOING_AJAX') && DOING_AJAX) {
95
+ wp_send_json(['code' => '200', 'status' => 'complete', 'data' => $this->calculate_radar_percentage(),]);
96
+ wp_die();
97
+ }
98
+
99
+ return true;
100
+ }
101
+
102
+ // Check if the next trial is not now
103
+ if(intval(array_get($iubendaRadarApiConfiguration, 'next_trial')) > time()){
104
+ $nextRequestInSec = intval(array_get($iubendaRadarApiConfiguration, 'next_trial')) - (time());
105
+
106
+ wp_send_json(['code' => '200', 'status' => 'timeout', 'data' => $nextRequestInSec,]);
107
+ wp_die();
108
+ }
109
+
110
+ $nextTrial = time();
111
+ $trialNum = intval(array_get($iubendaRadarApiConfiguration, 'trial_num', 1) ?? 1);
112
+
113
+ // Check if 3 trials were made in this round
114
+ if(is_int($trialNum / 3)){
115
+ $rounds = $trialNum / 3 ;
116
+ $nextTrial = time() + (pow(30, $rounds));
117
+ }
118
+ $trialNum++;
119
+
120
+ $id = array_get($iubendaRadarApiConfiguration, 'id');
121
+
122
+ $data = [
123
+ 'timeout' => 30,
124
+ 'redirection' => 5,
125
+ 'httpversion' => '1.0',
126
+ 'headers' => ['Authorization' => 'Basic ' . base64_encode($this->authorization['username'] . ':' . $this->authorization['password'])],
127
+ 'body' => ['id' => $id],
128
+ ];
129
+
130
+ $response = wp_remote_get(array_get($this->url, 'match-progress'), $data);
131
+ $responseCode = wp_remote_retrieve_response_code($response);
132
+
133
+ //check response code
134
+ $this->checkResponse($response, $responseCode);
135
+
136
+ $body = json_decode(array_get($response, 'body'), true);
137
+ $body['trial_num'] = $trialNum;
138
+ $body['next_trial'] = $nextTrial;
139
+
140
+ update_option('iubenda_radar_api_configuration', $body);
141
+
142
+ if (defined('DOING_AJAX') && DOING_AJAX) {
143
+ wp_send_json(['code' => $responseCode, 'status' => 'progress',]);
144
+ wp_die();
145
+ }
146
+
147
+ return true;
148
+ }
149
+
150
+ private function checkResponse($response, $responseCode)
151
+ {
152
+ if (is_wp_error($response) || $responseCode != 200) {
153
+ if (!is_numeric($responseCode)) {
154
+ $message = $this->updateMessage;
155
+ } elseif ($responseCode == 408) {
156
+ //408 error code it`s mean request timeout
157
+ $message = $this->updateMessage;
158
+ } elseif (is_numeric(substr($responseCode, 0, 1)) == 4) {
159
+ //4xx error codes
160
+ $message = $this->updateMessage;
161
+ } else {
162
+ $message = "Something went wrong: " . $response->get_error_message();
163
+ }
164
+
165
+ wp_send_json(['code' => $responseCode, 'status' => 'error', 'message' => $message]);
166
+ wp_die();
167
+ }
168
+ }
169
+
170
+ }
includes/ServiceRating.php ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // exit if accessed directly
3
+ if ( ! defined( 'ABSPATH' ) )
4
+ exit;
5
+
6
+
7
+ /**
8
+ * Class ServiceRating
9
+ */
10
+ class ServiceRating {
11
+ public $radarApiConfiguration = [];
12
+
13
+ public function __construct(){
14
+ $this->radarApiConfiguration = get_option('iubenda_radar_api_configuration', []) ?: [];
15
+ }
16
+
17
+ public function isCookieSolutionActivated(){
18
+ if(array_get(iubenda()->settings->services, 'cs.status') == 'true'){
19
+ return true;
20
+ }
21
+
22
+ if($this->isServiceInstalledByRadar('cp') == true){
23
+ return true;
24
+ }
25
+ return false;
26
+ }
27
+
28
+ public function isCookieSolutionConfigured(){
29
+ if(array_get(iubenda()->settings->services, 'cs.configured') == 'true'){
30
+ return true;
31
+ }
32
+
33
+ if($this->isServiceInstalledByRadar('cp') == true){
34
+ return true;
35
+ }
36
+ return false;
37
+ }
38
+
39
+ public function isPrivacyPolicyActivated(){
40
+ if(array_get(iubenda()->settings->services, 'pp.status') == 'true'){
41
+ return true;
42
+ }
43
+
44
+ if($this->isServiceInstalledByRadar('pp') == true){
45
+ return true;
46
+ }
47
+ return false;
48
+ }
49
+
50
+ public function isTermsConditionsActivated(){
51
+ if(array_get(iubenda()->settings->services, 'tc.status') == 'true'){
52
+ return true;
53
+ }
54
+
55
+ if($this->isServiceInstalledByRadar('tc') == true){
56
+ return true;
57
+ }
58
+ return false;
59
+ }
60
+
61
+ private function isServiceInstalledByRadar($service){
62
+ if(array_get($this->radarApiConfiguration, 'status') == 'completed'){
63
+ return array_get($this->radarApiConfiguration, 'result.meta.'.$service.'_installed');
64
+ }
65
+ return false;
66
+ }
67
+
68
+ public function checkServiceStatus($service){
69
+ if($service == 'cs'){
70
+ return $this->isCookieSolutionActivated();
71
+ }
72
+ if($service == 'cons'){
73
+ return $this->isCookieSolutionConfigured();
74
+ }
75
+ if($service == 'pp'){
76
+ return $this->isPrivacyPolicyActivated();
77
+ }
78
+ if($service == 'tc'){
79
+ return $this->isTermsConditionsActivated();
80
+ }
81
+
82
+ return false;
83
+ }
84
+
85
+ public function servicesPercentage(){
86
+ $services['pp'] = $this->isPrivacyPolicyActivated();
87
+ $services['cs'] = $this->isCookieSolutionActivated();
88
+ $services['cons'] = $this->isCookieSolutionActivated() ? $this->isCookieSolutionConfigured() : false;
89
+ $services['tc'] = $this->isTermsConditionsActivated();
90
+
91
+ return (count(array_filter($services)) / count($services)) * 100;
92
+ }
93
+
94
+ }
includes/forms-list-table.php CHANGED
@@ -25,7 +25,7 @@ class iubenda_List_Table_Forms extends WP_List_Table {
25
  'ajax' => false
26
  ) );
27
 
28
- $this->base_url = esc_url_raw( add_query_arg( array( 'tab' => 'cons' ), iubenda()->base_url ) );
29
  }
30
 
31
 
@@ -83,7 +83,6 @@ class iubenda_List_Table_Forms extends WP_List_Table {
83
  */
84
  public function get_columns() {
85
  $columns = array(
86
- 'cb' => '<input type="checkbox"/>',
87
  'title' => __( 'Form Title', 'iubenda' ),
88
  'ID' => __( 'Form ID', 'iubenda' ),
89
  'source' => __( 'Form Source', 'iubenda' ),
@@ -148,8 +147,8 @@ class iubenda_List_Table_Forms extends WP_List_Table {
148
 
149
  $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-form_{$item->ID}" ) );
150
  $url = add_query_arg( array( 'form_id' => $item->ID ), $this->base_url );
151
- $edit_url = add_query_arg( array( 'action' => 'edit' ), $url );
152
- $delete_url = add_query_arg( array( 'action' => 'delete' ), $url ) . "&$del_nonce";
153
 
154
  // preorder it: View | Approve | Unapprove | Delete
155
  $actions = array(
@@ -157,7 +156,7 @@ class iubenda_List_Table_Forms extends WP_List_Table {
157
  'delete' => ''
158
  );
159
 
160
- $actions['view'] = "<a href='$edit_url' aria-label='" . esc_attr__( 'Edit this form', 'iubenda' ) . "'>" . __( 'Edit' ) . '</a>';
161
  $actions['delete'] = "<a href='$delete_url' aria-label='" . esc_attr__( 'Delete this form', 'iubenda' ) . "'>" . __( 'Delete', 'iubenda' ) . '</a>';
162
 
163
  $i = 0;
@@ -223,17 +222,6 @@ class iubenda_List_Table_Forms extends WP_List_Table {
223
  return $output;
224
  }
225
 
226
- /**
227
- * Display checkboxex callback.
228
- *
229
- * @return string
230
- */
231
- public function column_cb( $item ) {
232
- return sprintf(
233
- '<input type="checkbox" name="%1$s[]" value="%2$s" />', 'form', $item->ID
234
- );
235
- }
236
-
237
  /**
238
  * Generate the table navigation above or below the table
239
  *
@@ -269,7 +257,7 @@ class iubenda_List_Table_Forms extends WP_List_Table {
269
 
270
  if ( ! empty( $output ) ) {
271
  echo $output;
272
- submit_button( __( 'Filter' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
273
  }
274
  }
275
  ?>
@@ -339,7 +327,7 @@ class iubenda_List_Table_Forms extends WP_List_Table {
339
  }
340
 
341
  $views = $items_total > 0 ? array(
342
- 'all' => '<a href="' . $this->base_url . '"' . ($status === '' ? ' class="current"' : '') . '>' . esc_html__( 'All' ) . ' <span class="count">(' . $items_total . ')</span></a>'
343
  ) : '';
344
 
345
  foreach ( iubenda()->forms->statuses as $key => $view ) {
@@ -359,4 +347,89 @@ class iubenda_List_Table_Forms extends WP_List_Table {
359
  echo __( 'No forms found.', 'iubenda' );
360
  }
361
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
362
  }
25
  'ajax' => false
26
  ) );
27
 
28
+ $this->base_url = esc_url_raw( add_query_arg( array( 'view' => 'cons-configuration' ), iubenda()->base_url ) );
29
  }
30
 
31
 
83
  */
84
  public function get_columns() {
85
  $columns = array(
 
86
  'title' => __( 'Form Title', 'iubenda' ),
87
  'ID' => __( 'Form ID', 'iubenda' ),
88
  'source' => __( 'Form Source', 'iubenda' ),
147
 
148
  $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-form_{$item->ID}" ) );
149
  $url = add_query_arg( array( 'form_id' => $item->ID ), $this->base_url );
150
+ $edit_url = add_query_arg( array( 'view' => 'cons-form-edit' ), $url );
151
+ $delete_url = add_query_arg( ['view' => 'cons-configuration', 'action' => 'delete'], $url ) . "&$del_nonce";
152
 
153
  // preorder it: View | Approve | Unapprove | Delete
154
  $actions = array(
156
  'delete' => ''
157
  );
158
 
159
+ $actions['view'] = "<a href='$edit_url' aria-label='" . esc_attr__( 'Edit this form', 'iubenda' ) . "'>" . __( 'Edit', 'iubenda' ) . '</a>';
160
  $actions['delete'] = "<a href='$delete_url' aria-label='" . esc_attr__( 'Delete this form', 'iubenda' ) . "'>" . __( 'Delete', 'iubenda' ) . '</a>';
161
 
162
  $i = 0;
222
  return $output;
223
  }
224
 
 
 
 
 
 
 
 
 
 
 
 
225
  /**
226
  * Generate the table navigation above or below the table
227
  *
257
 
258
  if ( ! empty( $output ) ) {
259
  echo $output;
260
+ submit_button( __( 'Filter', 'iubenda' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
261
  }
262
  }
263
  ?>
327
  }
328
 
329
  $views = $items_total > 0 ? array(
330
+ 'all' => '<a href="' . $this->base_url . '"' . ($status === '' ? ' class="current"' : '') . '>' . esc_html__( 'All', 'iubenda' ) . ' <span class="count">(' . $items_total . ')</span></a>'
331
  ) : '';
332
 
333
  foreach ( iubenda()->forms->statuses as $key => $view ) {
347
  echo __( 'No forms found.', 'iubenda' );
348
  }
349
 
350
+ /**
351
+ * Prints column headers, accounting for hidden and sortable columns.
352
+ *
353
+ * @since 3.1.0
354
+ *
355
+ * @param bool $with_id Whether to set the ID attribute or not
356
+ */
357
+ public function print_column_headers( $with_id = true ) {
358
+ list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info();
359
+
360
+ $current_url = remove_query_arg( 'paged', $this->base_url );
361
+
362
+ if ( isset( $_GET['orderby'] ) ) {
363
+ $current_orderby = $_GET['orderby'];
364
+ } else {
365
+ $current_orderby = '';
366
+ }
367
+
368
+ if ( isset( $_GET['order'] ) && 'desc' === $_GET['order'] ) {
369
+ $current_order = 'desc';
370
+ } else {
371
+ $current_order = 'asc';
372
+ }
373
+
374
+ if ( ! empty( $columns['cb'] ) ) {
375
+ static $cb_counter = 1;
376
+ $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __( 'Select All', 'iubenda' ) . '</label>'
377
+ . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" />';
378
+ $cb_counter++;
379
+ }
380
+
381
+ foreach ( $columns as $column_key => $column_display_name ) {
382
+ $class = array( 'manage-column', "column-$column_key" );
383
+
384
+ if ( in_array( $column_key, $hidden, true ) ) {
385
+ $class[] = 'hidden';
386
+ }
387
+
388
+ if ( 'cb' === $column_key ) {
389
+ $class[] = 'check-column';
390
+ } elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ), true ) ) {
391
+ $class[] = 'num';
392
+ }
393
+
394
+ if ( $column_key === $primary ) {
395
+ $class[] = 'column-primary';
396
+ }
397
+
398
+ if ( isset( $sortable[ $column_key ] ) ) {
399
+ list( $orderby, $desc_first ) = $sortable[ $column_key ];
400
+
401
+ if ( $current_orderby === $orderby ) {
402
+ $order = 'asc' === $current_order ? 'desc' : 'asc';
403
+
404
+ $class[] = 'sorted';
405
+ $class[] = $current_order;
406
+ } else {
407
+ $order = strtolower( $desc_first );
408
+
409
+ if ( ! in_array( $order, array( 'desc', 'asc' ), true ) ) {
410
+ $order = $desc_first ? 'desc' : 'asc';
411
+ }
412
+
413
+ $class[] = 'sortable';
414
+ $class[] = 'desc' === $order ? 'asc' : 'desc';
415
+ }
416
+
417
+ $column_display_name = sprintf(
418
+ '<a href="%s"><span>%s</span><span class="sorting-indicator"></span></a>',
419
+ esc_url( add_query_arg( compact( 'orderby', 'order' ), $current_url ) ),
420
+ $column_display_name
421
+ );
422
+ }
423
+
424
+ $tag = ( 'cb' === $column_key ) ? 'td' : 'th';
425
+ $scope = ( 'th' === $tag ) ? 'scope="col"' : '';
426
+ $id = $with_id ? "id='$column_key'" : '';
427
+
428
+ if ( ! empty( $class ) ) {
429
+ $class = "class='" . implode( ' ', $class ) . "'";
430
+ }
431
+
432
+ echo "<$tag $scope $id $class>$column_display_name</$tag>";
433
+ }
434
+ }
435
  }
includes/forms.php CHANGED
@@ -115,7 +115,7 @@ class iubenda_Forms {
115
  */
116
  public function wp_enqueue_scripts() {
117
  if ( ! empty( iubenda()->options['cons']['public_api_key'] ) ) {
118
- wp_register_script( 'iubenda-forms', IUBENDA_PLUGIN_URL . '/js/frontend.js', array( 'jquery' ), iubenda()->version, true );
119
 
120
  $args = array();
121
 
@@ -982,8 +982,6 @@ class iubenda_Forms {
982
  break;
983
  }
984
 
985
- $forms = apply_filters("iub_after_call_{$source}_forms", $forms);
986
-
987
  return $forms;
988
  }
989
 
115
  */
116
  public function wp_enqueue_scripts() {
117
  if ( ! empty( iubenda()->options['cons']['public_api_key'] ) ) {
118
+ wp_register_script( 'iubenda-forms', IUBENDA_PLUGIN_URL . '/assets/js/frontend.js', array( 'jquery' ), iubenda()->version, true );
119
 
120
  $args = array();
121
 
982
  break;
983
  }
984
 
 
 
985
  return $forms;
986
  }
987
 
includes/settings.php CHANGED
@@ -9,37 +9,65 @@ if ( ! defined( 'ABSPATH' ) )
9
  * @class Post_Views_Counter_Settings
10
  */
11
  class iubenda_Settings {
12
-
13
- public $tabs = array();
14
  public $action = '';
15
- public $links = array();
16
- public $notice_types = array( 'error', 'success', 'notice' );
17
- public $subject_fields = array();
 
 
 
18
 
19
  public function __construct() {
 
 
 
 
20
  // actions
21
  add_action( 'after_setup_theme', array( $this, 'load_defaults' ) );
22
- add_action( 'admin_init', array( $this, 'register_options' ) );
23
  add_action( 'admin_init', array( $this, 'update_plugin' ), 9 );
24
- add_action( 'admin_init', array( $this, 'admin_page_redirect' ), 20 );
25
- add_action( 'admin_init', array( $this, 'process_actions' ), 20 );
26
- add_action( 'admin_init', array( $this, 'maybe_show_notice' ) );
27
  add_action( 'admin_menu', array( $this, 'admin_menu_options' ) );
28
- add_action( 'admin_notices', array( $this, 'settings_errors' ) );
29
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
30
- add_action( 'admin_print_styles', array( $this, 'admin_print_styles' ) );
31
- // add_action( 'admin_footer-options-discussion.php', array( $this, 'admin_footer' ) );
32
- add_action( 'wp_ajax_iubenda_dismiss_notice', array( $this, 'dismiss_notice' ) );
33
-
34
- // filters
35
- add_filter( 'submenu_file', array( $this, 'submenu_file' ), 10, 2 );
36
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
  /**
39
  * Load default settings.
40
  */
41
  public function load_defaults() {
42
- $this->subject_fields = array(
 
 
43
  'id' => __( 'string', 'iubenda' ),
44
  'email' => __( 'string', 'iubenda' ),
45
  'first_name' => __( 'string', 'iubenda' ),
@@ -77,26 +105,156 @@ class iubenda_Settings {
77
  4 => __( 'Analytics', 'iubenda' ),
78
  5 => __( 'Targeting & Advertising', 'iubenda' )
79
  );
 
 
 
80
 
81
  $links = array(
82
  'en' => array(
83
  'iab' => 'https://www.iubenda.com/en/help/7440-enable-preference-management-iab-framework',
84
- 'guide' => 'https://www.iubenda.com/en/cookie-solution',
 
85
  'plugin_page' => 'https://www.iubenda.com/en/help/posts/1215',
86
- 'generating_code' => 'https://www.iubenda.com/en/help/1177-cookie-solution-getting-started',
87
  'support_forum' => 'https://support.iubenda.com/support/home',
88
- 'documentation' => 'https://www.iubenda.com/en/help/posts/1215'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  ),
90
- 'it' => array(
91
- 'iab' => 'https://www.iubenda.com/en/help/7440-enable-preference-management-iab-framework',
92
- 'guide' => 'https://www.iubenda.com/it/cookie-solution',
93
- 'plugin_page' => 'https://www.iubenda.com/it/help/posts/810',
94
- 'generating_code' => 'https://www.iubenda.com/it/help/680-introduzione-cookie-solution',
95
- 'support_forum' => 'https://support.iubenda.com/support/home',
96
- 'documentation' => 'https://www.iubenda.com/it/help/posts/810',
97
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  );
99
 
 
 
 
 
 
100
  $locale = explode( '_', get_locale() );
101
  $locale_code = $locale[0];
102
 
@@ -108,62 +266,11 @@ class iubenda_Settings {
108
  // update item action
109
  $this->action = 'save';
110
  } else {
111
- $this->action = isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] ? esc_attr( $_REQUEST['action'] ) : '';
112
- $this->action = isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] ? esc_attr( $_REQUEST['action2'] ) : $this->action;
113
- }
114
- }
115
-
116
- /**
117
- * Register plugin options.
118
- *
119
- * @return void
120
- */
121
- public function register_options() {
122
- register_setting( 'iubenda_cookie_law_solution', 'iubenda_cookie_law_solution', array( $this, 'save_cookie_law_options' ) );
123
-
124
- add_settings_section( 'iubenda_cookie_law_solution', '', '', 'iubenda_cookie_law_solution' );
125
- add_settings_field( 'iub_code', __( 'Code', 'iubenda' ), array( $this, 'iub_code' ), 'iubenda_cookie_law_solution', 'iubenda_cookie_law_solution' );
126
- add_settings_field( 'iub_amp_support', __( 'Google AMP', 'iubenda' ), array( $this, 'iub_amp_support' ), 'iubenda_cookie_law_solution', 'iubenda_cookie_law_solution' );
127
- add_settings_field( 'iub_parse', __( 'Script blocking', 'iubenda' ), array( $this, 'iub_parse' ), 'iubenda_cookie_law_solution', 'iubenda_cookie_law_solution' );
128
- add_settings_field( 'iub_custom_scripts', __( 'Custom scripts', 'iubenda' ), array( $this, 'iub_custom_scripts' ), 'iubenda_cookie_law_solution', 'iubenda_cookie_law_solution' );
129
- add_settings_field( 'iub_ctype', __( 'Content type', 'iubenda' ), array( $this, 'iub_ctype' ), 'iubenda_cookie_law_solution', 'iubenda_cookie_law_solution' );
130
- add_settings_field( 'iub_output_feed', __( 'RSS feed', 'iubenda' ), array( $this, 'iub_output_feed' ), 'iubenda_cookie_law_solution', 'iubenda_cookie_law_solution' );
131
- add_settings_field( 'iub_output_post', __( 'POST requests', 'iubenda' ), array( $this, 'iub_output_post' ), 'iubenda_cookie_law_solution', 'iubenda_cookie_law_solution' );
132
- add_settings_field( 'iub_menu_position', __( 'Menu position', 'iubenda' ), array( $this, 'iub_menu_position' ), 'iubenda_cookie_law_solution', 'iubenda_cookie_law_solution' );
133
- add_settings_field( 'iub_deactivation', __( 'Deactivation', 'iubenda' ), array( $this, 'iub_deactivation' ), 'iubenda_cookie_law_solution', 'iubenda_cookie_law_solution' );
134
-
135
- // forms list
136
- if ( ! in_array( $this->action, array( 'save', 'edit' ) ) ) {
137
- register_setting( 'iubenda_consent_solution', 'iubenda_consent_solution', array( $this, 'save_consent_options' ) );
138
- add_settings_section( 'iubenda_consent_solution', __( 'Forms', 'iubenda' ), '', 'iubenda_consent_solution' );
139
- add_settings_field( 'iub_public_api_key', __( 'Public Api Key', 'iubenda' ), array( $this, 'iub_public_api_key' ), 'iubenda_consent_solution', 'iubenda_consent_solution' );
140
- // only if api key is given
141
- if ( ! empty( iubenda()->options['cons']['public_api_key'] ) )
142
- add_settings_section( 'iubenda_consent_forms', __( 'Field Mapping', 'iubenda' ), array( $this, 'iubenda_consent_forms' ), 'iubenda_consent_solution' );
143
- // single form
144
- } else {
145
- register_setting( 'iubenda_consent_solution', 'iubenda_consent_forms' );
146
- add_settings_section( 'iubenda_consent_form', __( 'Field Mapping', 'iubenda' ), array( $this, 'iubenda_consent_form' ), 'iubenda_consent_solution' );
147
  }
148
  }
149
 
150
- /**
151
- * Display errors and notices.
152
- *
153
- * @global string $pagenow
154
- */
155
- public function settings_errors() {
156
- global $pagenow;
157
-
158
- // force display notices in top menu settings page
159
- if ( $pagenow == 'options-general.php' )
160
- return;
161
-
162
- $tab_key = ! empty( $_GET['tab'] ) ? esc_attr( $_GET['tab'] ) : 'cs';
163
-
164
- settings_errors( "{$tab_key}_settings_errors" );
165
- }
166
-
167
  /**
168
  * Add submenu.
169
  *
@@ -180,297 +287,122 @@ class iubenda_Settings {
180
  add_menu_page(
181
  'iubenda', 'iubenda', apply_filters( 'iubenda_cookie_law_cap', 'manage_options' ), 'iubenda', array( $this, 'options_page' ), 'none'
182
  );
183
- add_submenu_page( 'iubenda', __( 'Cookie Solution', 'iubenda' ), __( 'Cookie Solution', 'iubenda' ), apply_filters( 'iubenda_cookie_law_cap', 'manage_options' ), 'iubenda', array( $this, 'options_page' ) );
184
- add_submenu_page( 'iubenda', __( 'Consent Solution', 'iubenda' ), __( 'Consent Solution', 'iubenda' ), apply_filters( 'iubenda_cookie_law_cap', 'manage_options' ), 'iubenda&tab=cons', array( $this, 'options_page' ) );
185
  }
186
  }
187
 
188
- /**
189
- * Load admin scripts and styles.
190
- *
191
- * @param string $page
192
- * @return void
193
- */
194
- public function admin_enqueue_scripts( $page ) {
195
- wp_enqueue_style( 'iubenda-admin', IUBENDA_PLUGIN_URL . '/css/admin.css' );
196
-
197
- if ( ! in_array( $page, array( 'toplevel_page_iubenda', 'settings_page_iubenda' ) ) )
198
- return;
199
-
200
- wp_enqueue_script(
201
- 'iubenda-admin', IUBENDA_PLUGIN_URL . '/js/admin.js', array( 'jquery' )
202
- );
203
 
204
- $args = array(
205
- 'formId' => 0,
206
- 'deleteForm' => __( 'Are you sure you want to delete this form?', 'iubenda' )
207
- );
208
-
209
- // get form data on edit screen
210
- if ( in_array( $this->action, array( 'edit' ) ) ) {
211
- $form_id = ! empty( $_GET['form_id'] ) ? absint( $_GET['form_id'] ) : 0;
212
- $form = ! empty( $form_id ) ? iubenda()->forms->get_form( $form_id ) : array();
213
 
214
- $args['formId'] = $form_id;
215
- }
216
 
217
- wp_localize_script(
218
- 'iubenda-admin',
219
- 'iubAdminArgs',
220
- $args
221
- );
222
- }
223
 
224
- /**
225
- * Load admin style inline, for menu icon only.
226
- *
227
- * @return mixed
228
- */
229
- public function admin_print_styles() {
230
- echo '
231
- <style>
232
- a.toplevel_page_iubenda .wp-menu-image {
233
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCAyMzIgNTAzIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MS40MTQyMTsiPiAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLDEzNi4yNDcsMjY4LjgzMSkiPiAgICAgICAgPHBhdGggZD0iTTAsLTM1LjgxTC0zNi4zLDAuNDg5TC0zNi4zLDE0MC45NzhMMCwxNDAuOTc4TDAsLTM1LjgxWk0tMjAuOTM4LC0xMjkuODAyQy02LjI4NywtMTI5LjgwMiA1LjU4NywtMTQxLjU2NSA1LjU4NywtMTU2LjA2QzUuNTg3LC0xNzAuNTU2IC02LjI4NywtMTgyLjMwOCAtMjAuOTM4LC0xODIuMzA4Qy0zNS42LC0xODIuMzA4IC00Ny40NzQsLTE3MC41NTYgLTQ3LjQ3NCwtMTU2LjA2Qy00Ny40NzQsLTE0MS41NjUgLTM1LjYsLTEyOS44MDIgLTIwLjkzOCwtMTI5LjgwMk04OS4zNiwtMTU0LjQxNkM4OS4zNiwtMTI3LjgyNSA3OS41NzUsLTEwMy40OTkgNjMuMjY5LC04NC42NzJMODYuNjk0LDIyNi42MjhMLTEyMi43MjgsMjI2LjYyOEwtMTAwLjAyNCwtNzkuMjI5Qy0xMTkuMzUxLC05OC42NjggLTEzMS4yNDcsLTEyNS4xNTkgLTEzMS4yNDcsLTE1NC40MTZDLTEzMS4yNDcsLTIxNC4wODYgLTgxLjg3NCwtMjYyLjQzOCAtMjAuOTM4LC0yNjIuNDM4QzM5Ljk5OSwtMjYyLjQzOCA4OS4zNiwtMjE0LjA4NiA4OS4zNiwtMTU0LjQxNiIgc3R5bGU9ImZpbGw6d2hpdGU7ZmlsbC1ydWxlOm5vbnplcm87Ii8+ICAgIDwvZz48L3N2Zz4=);
234
- background-position: center center;
235
- background-repeat: no-repeat;
236
- background-size: 7px auto;
237
- }
238
- </style>
239
- ';
240
- }
241
-
242
- /**
243
- * Highlight comments cookies opt-in checkbox option.
244
- *
245
- * @return mixed
246
- */
247
- public function admin_footer() {
248
- if ( ! empty( $_GET['iub-highlight'] ) ) {
249
- echo '
250
- <style>
251
- label[for=show_comments_cookies_opt_in] {
252
- border: 1px dashed red;
253
- }
254
- </style>
255
- ';
256
- }
257
- }
258
 
259
- /**
260
- * Redirect to the correct urle after switching menu position.
261
- *
262
- * @global string $pagenow
263
- * @return void
264
- */
265
- public function admin_page_redirect() {
266
- if ( ! empty( $_GET['settings-updated'] ) && ! empty( $_GET['page'] ) && in_array( $_GET['page'], array( 'iubenda' ) ) ) {
267
- global $pagenow;
268
-
269
- // no redirect by default
270
- $redirect_to = false;
271
-
272
- if ( iubenda()->options['cs']['menu_position'] === 'submenu' && $pagenow === 'admin.php' ) {
273
- // sub menu
274
- $redirect_to = admin_url( 'options-general.php?page=iubenda' );
275
- } elseif ( iubenda()->options['cs']['menu_position'] === 'topmenu' && $pagenow === 'options-general.php' ) {
276
- // top menu
277
- $redirect_to = admin_url( 'admin.php?page=iubenda' );
278
- }
279
 
280
- if ( $redirect_to ) {
281
- // make sure it's current host location
282
- wp_safe_redirect( add_query_arg( 'settings-updated', true, $redirect_to ) );
283
- exit;
284
- }
285
- }
286
- }
287
-
288
- /**
289
- * Perform show notice on plugin installation/upgrade.
290
- *
291
- * @return void
292
- */
293
- public function maybe_show_notice() {
294
- if ( ! current_user_can( 'install_plugins' ) )
295
- return;
296
-
297
- $current_update = 1;
298
- $activation = (array) get_option( 'iubenda_activation_data', iubenda()->activation );
299
-
300
- // delete_option( 'iubenda_activation_data' );
301
- // echo '<pre>'; print_r( $activation ); echo '</pre>'; exit;
302
-
303
- // get current time
304
- $current_time = time();
305
-
306
- if ( $activation['update_version'] < $current_update ) {
307
- // check version, if update ver is lower than plugin ver, set update notice to true
308
- $activation = array_merge( $activation, array( 'update_version' => $current_update, 'update_notice' => true ) );
309
-
310
- // set activation date if not set
311
- if ( $activation['update_date'] == false )
312
- $activation = array_merge( $activation, array( 'update_date' => $current_time ) );
313
-
314
- update_option( 'iubenda_activation_data', $activation );
315
- }
316
 
317
- // display current version notice
318
- if ( $activation['update_notice'] === true ) {
319
- // include notice js, only if needed
320
- add_action( 'admin_print_scripts', array( $this, 'admin_inline_js' ), 999 );
321
 
322
- // get activation date
323
- $activation_date = $activation['update_date'];
324
-
325
- // set delay in seconds
326
- $delay = WEEK_IN_SECONDS * 2;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
327
 
328
- if ( (int) $activation['update_delay_date'] === 0 ) {
329
- if ( $activation_date + $delay > $current_time )
330
- $activation['update_delay_date'] = $activation_date + $delay;
331
- else
332
- $activation['update_delay_date'] = $current_time;
 
 
333
 
334
- update_option( 'iubenda_activation_data', $activation );
335
- }
336
 
337
- if ( ( ! empty( $activation['update_delay_date'] ) ? (int) $activation['update_delay_date'] : $current_time ) <= $current_time ) {
338
- // add notice
339
- add_action( 'admin_notices', array( $this, 'show_notice' ) );
340
- }
341
- }
342
- }
343
-
344
- /**
345
- * Display admin notices at iubenda settings.
346
- */
347
- public function show_notice() {
348
- global $pagenow;
349
 
350
- $display = true;
351
- /*
352
- $page = isset( $_GET['page'] ) ? esc_attr( $_GET['page'] ) : '';
353
-
354
- if ( iubenda()->options['cs']['menu_position'] === 'submenu' && $page === 'iubenda' ) {
355
- $display = true;
356
- } elseif ( iubenda()->options['cs']['menu_position'] === 'topmenu' && $page === 'iubenda' ) {
357
- $display = true;
358
- }
359
- */
360
- ?>
361
- <?php if ( $display ) { ?>
362
- <div class="iubenda-notice notice is-dismissible">
363
- <div>
364
- <p class="step-1">
365
- <span class="notice-question"><?php _e( 'Enjoying the iubenda Cookie & Consent Solution Plugin?', 'iubenda' ); ?></span>
366
- <span class="notice-reply">
367
- <a href="#" class="reply-yes"><?php _e( 'Yes', 'iubenda' ); ?></a>
368
- <a href="#" class="reply-no"><?php _e( 'No', 'iubenda' ); ?></a>
369
- </span>
370
- </p>
371
- <p class="step-2 step-yes">
372
- <span class="notice-question"><?php _e( "Whew, what a relief!? We've worked countless hours to make this plugin as useful as possible - so we're pretty happy that you're enjoying it. While you here, would you mind leaving us a 5 star rating? It would really help us out.", 'iubenda' ); ?></span>
373
- <span class="notice-reply">
374
- <a href="https://wordpress.org/support/plugin/iubenda-cookie-law-solution/reviews/?filter=5" target="_blank" class="reply-yes"><?php _e( 'Sure!', 'iubenda' ); ?></a>
375
- <a href="javascript:void(0)" class="reply-no"><?php _e( 'No thanks', 'iubenda' ); ?></a>
376
- </span>
377
- </p>
378
- <p class="step-2 step-no">
379
- <span class="notice-question"><?php _e( "We're sorry to hear that. Would you mind giving us some feedback?", 'iubenda' ); ?></span>
380
- <span class="notice-reply">
381
- <a href="https://iubenda.typeform.com/to/BXuSMZ" target="_blank" class="reply-yes"><?php _e( 'Ok sure!', 'iubenda' ); ?></a>
382
- <a href="javascript:void(0)" class="reply-no"><?php _e( 'No thanks', 'iubenda' ); ?></a>
383
- </span>
384
- </p>
385
- </div>
386
- </div>
387
- <?php } ?>
388
- <?php
389
- }
390
-
391
- /**
392
- * Print admin scripts.
393
- *
394
- * @return void
395
- */
396
- public function admin_inline_js() {
397
- if ( ! current_user_can( 'install_plugins' ) )
398
- return;
399
-
400
- $delay = MONTH_IN_SECONDS * 6;
401
- ?>
402
- <script type="text/javascript">
403
- ( function ( $ ) {
404
- $( document ).ready( function () {
405
- // step 1
406
- $( '.iubenda-notice .step-1 a' ).on( 'click', function ( e ) {
407
- e.preventDefault();
408
-
409
- $( '.iubenda-notice .step-1' ).slideUp( 'fast' );
410
-
411
- if ( $( e.target ).hasClass( 'reply-yes' ) ) {
412
- $( '.iubenda-notice .step-2.step-yes' ).slideDown( 'fast' );
413
- } else {
414
- $( '.iubenda-notice .step-2.step-no' ).slideDown( 'fast' );
415
- };
416
- } );
417
- // step 2
418
- $( '.iubenda-notice.is-dismissible' ).on( 'click', '.notice-dismiss, .step-2 a', function ( e ) {
419
- // console.log( $( e ) );
420
-
421
- var delay = <?php echo $delay; ?>;
422
-
423
- if ( $( e.target ).hasClass( 'reply-yes' ) ) {
424
- delay = 0;
425
- }
426
-
427
- $.post( ajaxurl, {
428
- action: 'iubenda_dismiss_notice',
429
- delay: delay,
430
- url: '<?php echo admin_url( 'admin-ajax.php' ); ?>',
431
- iubenda_nonce: '<?php echo wp_create_nonce( 'iubenda_dismiss_notice' ); ?>'
432
- } );
433
-
434
- $( e.delegateTarget ).slideUp( 'fast' );
435
- } );
436
- } );
437
- } )( jQuery );
438
- </script>
439
- <?php
440
- }
441
-
442
- /**
443
- * Dismiss notice.
444
- *
445
- * @return void
446
- */
447
- public function dismiss_notice() {
448
- $result = false;
449
-
450
- if ( ! current_user_can( 'install_plugins' ) )
451
- return $result;
452
-
453
- $nonce = wp_verify_nonce( $_REQUEST['iubenda_nonce'], 'iubenda_dismiss_notice' );
454
-
455
- if ( $nonce ) {
456
- $delay = ! empty( $_REQUEST['delay'] ) ? absint( $_REQUEST['delay'] ) : 0;
457
- $activation = (array) get_option( 'iubenda_activation_data', iubenda()->activation );
458
-
459
- // delay notice
460
- if ( $delay > 0 ) {
461
- $activation = array_merge( $activation, array( 'update_delay_date' => time() + $delay ) );
462
- // hide notice permanently
463
- } else {
464
- $activation = array_merge( $activation, array( 'update_delay_date' => 0, 'update_notice' => false ) );
465
- }
466
-
467
- // update activation options
468
- $result = update_option( 'iubenda_activation_data', $activation );
469
- }
470
-
471
- echo json_encode( $result );
472
- exit;
473
- }
474
 
475
  /**
476
  * Plugin options migration for versions < 1.14.0
@@ -486,13 +418,12 @@ class iubenda_Settings {
486
 
487
  if ( $db_version != false ) {
488
  if ( version_compare( $db_version, '1.14.0', '<' ) ) {
489
- $options = array();
490
 
491
  $old_new = array(
492
  'iubenda_parse' => 'parse',
493
  'skip_parsing' => 'skip_parsing',
494
  'iubenda_ctype' => 'ctype',
495
- 'iubenda_parse' => 'parse',
496
  'parser_engine' => 'parser_engine',
497
  'iubenda_output_feed' => 'output_feed',
498
  'iubenda-code-default' => 'code_default',
@@ -525,1316 +456,783 @@ class iubenda_Settings {
525
 
526
  add_option( 'iubenda_cookie_law_solution', $options, '', 'no' );
527
  add_option( 'iubenda_cookie_law_version', iubenda()->version, '', 'no' );
528
- }
529
  }
530
- }
531
 
532
- /**
533
- * Load admin options page.
534
- *
535
- * @return void
536
- */
537
- public function options_page() {
538
- global $pagenow;
539
-
540
- if ( ! current_user_can( apply_filters( 'iubenda_cookie_law_cap', 'manage_options' ) ) ) {
541
- wp_die( __( "You don't have permission to access this page.", 'iubenda' ) );
542
- }
543
 
544
- $tab_key = ! empty( $_GET['tab'] ) ? esc_attr( $_GET['tab'] ) : 'cs';
545
-
546
- // get redirect url
547
- if ( iubenda()->options['cs']['menu_position'] === 'submenu' && $pagenow === 'admin.php' ) {
548
- // sub menu
549
- $redirect_to = admin_url( 'options-general.php?page=iubenda&tab=' . $tab_key );
550
- } else {
551
- // top menu
552
- $redirect_to = admin_url( 'admin.php?page=iubenda&tab=' . $tab_key );
553
- }
554
- ?>
555
- <div class="wrap">
556
-
557
- <div id="iubenda-header">
558
- <?php
559
- echo '
560
- <a class="iubenda-link" href="http://iubenda.com" title="iubenda" title="_blank">
561
- <img id="iubenda-logo" alt="iubenda logo" width="300" height="90" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgNjM3LjggMjgzLjUiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDYzNy44IDI4My41OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4uc3Qwe2ZpbGw6IzFDQzY5MTt9LnN0MXtmaWxsOiM1MTUyNTQ7fTwvc3R5bGU+PHBhdGggY2xhc3M9InN0MCIgZD0iTTE3OC45LDk5LjljMCw4LjItMywxNS42LTgsMjEuNGw3LjIsOTUuNGgtNjQuMmw3LTkzLjhjLTUuOS02LTkuNi0xNC4xLTkuNi0yMy4xYzAtMTguMywxNS4xLTMzLjEsMzMuOC0zMy4xUzE3OC45LDgxLjYsMTc4LjksOTkuOSBNMTQ1LjEsMTA3LjRjNC41LDAsOC4xLTMuNiw4LjEtOC4xcy0zLjYtOC04LjEtOGMtNC41LDAtOC4xLDMuNi04LjEsOFMxNDAuNiwxMDcuNCwxNDUuMSwxMDcuNCBNMTUxLjUsMTM2LjJsLTExLjEsMTEuMXY0My4xaDExLjFWMTM2LjJ6Ii8+PHBhdGggY2xhc3M9InN0MSIgZD0iTTI2NS40LDE3OC42Yy0yLjMsMS4yLTQuNywxLjgtNy4yLDEuOGMtMi44LDAtNS4zLTAuOC03LjQtMi40Yy0yLjEtMS42LTMuNS0zLjctNC4zLTYuMmMtMC44LTIuNS0xLjItNi4xLTEuMi0xMC44di0xOC4yYzAsMCwwLTAuOSwwLTIuOGMwLTAuNSwwLTIuOC0xLjUtMy41Yy0wLjItMC4xLTAuNi0wLjItMS4yLTAuM2MtMC40LDAtMC44LTAuNC0wLjgtMC44bDAtMi40YzAtMC41LDAuNC0wLjksMC44LTAuOWg5LjNjMS4zLDAsMi40LDEuMSwyLjQsMi40VjE0N2wwLDE1LjVjMCw0LjYsMC44LDcuNywyLjUsOS4xYzEuNiwxLjUsMy42LDIuMiw1LjksMi4yYzEuNiwwLDMuNC0wLjUsNS40LTEuNWMyLTEsNS4zLTIuOCw4LjEtNS42bDAtMi40bDAtMjIuMlYxNDBjMC0wLjUsMC0yLjgtMS40LTMuNWMtMC4yLTAuMS0wLjYtMC4yLTEuMS0wLjNjLTAuNC0wLjEtMC44LTAuNC0wLjgtMC44bDAtMi40YzAtMC41LDAuNC0wLjksMC45LTAuOWg5LjJjMS4zLDAsMi40LDEuMSwyLjQsMi40djhjMCwwLjEsMCwwLjEsMCwwLjJ2MTYuNmMwLDMuOCwwLDcuNCwwLDEwLjZjMCwwLjcsMCwxLjIsMCwxLjJjMCwwLjUtMC4xLDMuMSwxLjQsMy44YzAuMiwwLjEsMC42LDAuMiwxLjIsMC4zYzAuNCwwLDAuOCwwLjQsMC44LDAuOGwwLDIuNGMwLDAuNS0wLjQsMC44LTAuOSwwLjloLTkuMmMtMS4zLDAtMi40LTEuMS0yLjQtMi40bDAtNC41bDAtMi41QzI3MS45LDE3NC41LDI2Ny43LDE3Ny40LDI2NS40LDE3OC42Ii8+PHBhdGggY2xhc3M9InN0MSIgZD0iTTMwOS4yLDE3NmMxLjksMC45LDMuOSwxLjMsNiwxLjNjMy4yLDAsNi4zLTEuNyw5LTUuMmMyLjgtMy41LDQuMi04LjUsNC4yLTE1LjJjMC02LjEtMS40LTEwLjgtNC4yLTE0LjFjLTIuOC0zLjMtNi00LjktOS41LTQuOWMtMS45LDAtMy44LDAuNS01LjcsMS40Yy0xLjIsMC42LTIuOCwxLjgtNC43LDMuNGMtMC41LDAuNS0wLjgsMS4xLTAuOCwxLjhWMTcxYzAsMC43LDAuMywxLjQsMC44LDEuOEMzMDYsMTc0LjIsMzA3LjYsMTc1LjMsMzA5LjIsMTc2IE0yOTQuOCwxMThjMC0wLjUsMC0yLjctMS40LTMuNGMtMC4yLTAuMS0wLjMtMC4xLTAuNi0wLjJjLTAuNC0wLjEtMC42LTAuNC0wLjYtMC44bDAtMi4zYzAtMC41LDAuNC0wLjgsMC45LTAuOWgxLjhoNi41YzEuMywwLDIuMywxLDIuMywyLjNsMCwxMnYxNS40YzQuNy02LjQsOS44LTkuNiwxNS4zLTkuNmM1LDAsOS40LDIuMSwxMy4xLDYuM2MzLjcsNC4yLDUuNiw5LjksNS42LDE3LjJjMCw4LjUtMi45LDE1LjMtOC42LDIwLjVjLTQuOSw0LjQtMTAuNSw2LjctMTYuNSw2LjdjLTIuOCwwLTUuNy0wLjUtOC43LTEuNWMtMi41LTAuOS01LjEtMi4xLTcuNy0zLjdjLTAuOC0wLjUtMS4zLTEuNC0xLjMtMi40di00NmMwLTAuOSwwLTIsMC0zLjNMMjk0LjgsMTE4eiIvPjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0zODkuMywxNzkuMWMtMC41LDAtMC45LTAuNC0wLjktMC45bDAtMi4zYzAtMC40LDAuMy0wLjgsMC43LTAuOGMwLjUtMC4xLDAuOC0wLjEsMS0wLjJjMS40LTAuNywxLjQtMi45LDEuNC0zLjR2LTIuN2MwLDAsMC01LjgsMC0xNy41YzAtMS45LDAtMy44LDAuMS01LjVsMC00LjZjMC0wLjUsMC0xLDAtMS41YzAtMC42LDAtMi44LTEuNC0zLjVjLTAuMS0wLjEtMC4zLTAuMS0wLjUtMC4yYy0wLjQtMC4xLTAuNi0wLjQtMC42LTAuOGwwLTIuM2MwLTAuNSwwLjQtMC44LDAuOS0wLjloOC4xYzEuMywwLDIuMywxLDIuMywyLjN2My40YzAsMCwwLDAuNiwwLDEuOGMwLDAuMywwLjIsMC42LDAuNiwwLjZjMC4yLDAsMC4zLTAuMSwwLjQtMC4yYzUuNC01LjksMTIuMy04LjgsMTcuMi04LjhjMi43LDAsNSwwLjYsNi45LDEuOWMxLjksMS4zLDMuNCwzLjQsNC42LDYuM2MwLjgsMi4xLDEuMiw1LjIsMS4yLDkuNHYxNi41bDAsNi4zYzAsMC41LDAsMi43LDEuNCwzLjRjMC4yLDAuMSwwLjQsMC4yLDAuOCwwLjJjMC40LDAuMSwwLjcsMC40LDAuNywwLjhsMCwyLjNjMCwwLjUtMC40LDAuOC0wLjgsMC45Yy0wLjgsMC0xLjUsMC0yLDBoLTYuNWMtMC4xLDAtMC4zLDAtMC40LDBoLTMuMWMtMS4xLDAtMi0wLjktMi0yYzAtMSwwLjctMS45LDEuNi0yLjJjMC4xLDAsMC4xLDAsMC4yLTAuMWMxLTAuNSwxLjMtMS44LDEuNC0yLjd2LTcuNGwwLTE1LjJjMC00LjMtMC42LTcuNC0xLjctOS4zYy0xLjItMS45LTMuMS0yLjktNS44LTIuOWMtNC4yLDAtMTAuMywyLjItMTQuNCw2Ljd2MjAuOHYwLjNsMCw2LjRjMCwwLjUsMCwyLjgsMS40LDMuNWMwLjEsMCwwLjEsMCwwLjIsMC4xYzEsMC4zLDEuNiwxLjIsMS42LDIuMmMwLDEuMS0wLjksMi0yLDJIMzk0QzM5NCwxNzkuMSwzOTIuNCwxNzkuMSwzODkuMywxNzkuMSIvPjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik01MTUsMTUzLjRjLTYuNiwxLjMtMTAuNCwyLjItMTEuNCwyLjVjLTMuNywxLjItNi42LDIuNi02LjgsOC43Yy0wLjEsMi41LDAuOCw0LjcsMi4zLDYuM2MxLjUsMS43LDMuMywyLjUsNS4zLDIuNWMyLjUsMCw1LjctMS44LDkuNi00LjhjMC43LTAuNSwxLjEtMS4zLDEuMS0yLjJWMTUzLjR6IE01MjMuOCwxNzAuOGMwLDAuMSwwLDAuMiwwLDAuMmMwLDAuMiwwLDAuMywwLDAuNGMwLjEsMS40LDAuNiwyLjQsMS40LDIuOGMwLjIsMC4xLDAuNCwwLjIsMC42LDAuMmMwLjQsMC4xLDAuNywwLjQsMC43LDAuOGwwLDIuNGMwLDAuNS0wLjQsMC44LTAuOSwwLjloLTguM2MtMS4zLDAtMi4zLTEtMi4zLTIuM3YtNC41Yy01LDMuOS04LjIsNi4xLTkuNSw2LjdjLTEuOSwwLjktNCwxLjMtNi4xLDEuM2MtMy40LDAtNi4yLTEuMi04LjQtMy40Yy0yLjItMi4zLTMuMy01LjMtMy4zLTkuMWMwLTIuNCwwLjUtNC40LDEuNi02LjJjMS41LTIuNCwzLjctNS4yLDcuNi02LjhjNC0xLjYsNy4zLTIsMTgtNC40YzAtMC4zLDAtNCwwLTQuM2MwLTQuNS0wLjgtOS4yLTguNC04LjdjLTUuMywwLjMtMTAuMiwyLTE0LjcsNWMtMC40LDAuMy0wLjksMC4yLTEuMi0wLjJjLTAuMS0wLjEtMC4xLTAuMy0wLjEtMC41di0yLjhjMC0xLjUsMC4zLTIuNCwwLjktMi45YzMuMS0yLjUsMTAuOS01LjUsMTguNS01YzguNCwwLjYsMTEuNCw0LDEyLjksOS4zYzAuNSwxLjYsMSwyLjgsMSw3LjV2MTQuNWMwLDIsMCw0LDAsNS44VjE3MC44eiIvPjxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik00NjUuNCwxMzcuOGMtMS43LTEtMy40LTEuNS01LTEuNWMtMywwLTUuOCwxLjMtOC4zLDMuOGMtMi43LDIuOC00LjYsNi41LTQuNiwxMy41YzAsNywxLjUsMTIuNCw0LjYsMTYuMmMzLDMuNyw2LjQsNS42LDEwLjIsNS42YzIuNywwLDUuMy0xLjEsNy44LTMuNGMwLjktMC44LDEuNC0xLjksMS40LTN2LTIwLjhDNDcxLjQsMTQzLjksNDY5LjEsMTQwLDQ2NS40LDEzNy44IE00ODEuMywxNzQuNmMwLjEsMC4xLDAuMywwLjEsMC41LDAuMmMwLjQsMC4xLDAuNiwwLjQsMC42LDAuOGwwLDIuM2MwLDAuNS0wLjQsMC44LTAuOSwwLjloLThjLTEuMiwwLTIuMy0xLTIuMy0yLjJ2LTIuMmMtMi4zLDIuNC00LjYsNC4yLTYuOCw1LjNjLTIuMiwxLjEtNC42LDEuNi03LjEsMS42Yy01LjIsMC05LjctMi4yLTEzLjYtNi42Yy0zLjktNC40LTUuOC0xMC01LjgtMTYuOXMyLjEtMTMuMSw2LjQtMTguOGM0LjMtNS43LDkuOC04LjUsMTYuNS04LjVjNC4yLDAsNy42LDEuMywxMC40LDR2LTE2LjdjMC0wLjUsMC0yLjctMS40LTMuNGMtMC4xLTAuMS0wLjMtMC4xLTAuNS0wLjJjLTAuNC0wLjEtMC42LTAuNC0wLjYtMC44bDAtMi40YzAtMC41LDAuNC0wLjksMC45LTAuOWg3LjljMS4yLDAsMi4zLDEsMi4zLDIuMnY1OC45QzQ3OS45LDE3MS44LDQ3OS45LDE3My45LDQ4MS4zLDE3NC42Ii8+PHBhdGggY2xhc3M9InN0MSIgZD0iTTM1MCwxNTAuMmMwLDAuMSwwLDAuMywwLjEsMC4zYzAuMSwwLjEsMC4yLDAuMSwwLjQsMC4xaDIzLjljMC4zLDAsMC41LTAuMiwwLjUtMC40YzAuMy0yLjUsMC40LTctMy4zLTEwLjhjLTEuOC0xLjktNC4xLTIuOC04LjMtMi44QzM1NS43LDEzNi42LDM1MC44LDE0My45LDM1MCwxNTAuMiBNMzQ3LjUsMTc0LjljLTMuOS00LjMtNS45LTExLjMtNS45LTE4LjJjMC03LjMsMi4zLTEzLjksNi40LTE4LjdjNC4zLTUsMTAuMi03LjcsMTcuMS03LjdjNS44LDAsMTAuMiwyLDEzLjIsNS44YzIuNywzLjYsNC4xLDguOCw0LjEsMTUuNGMwLDAuOCwwLDEuOS0wLjEsMy4zYy0wLjEsMC45LTAuOCwxLjYtMS43LDEuNmgtMjkuOGMtMC4xLDAtMC4zLDAuMS0wLjQsMC4xYy0wLjEsMC4xLTAuMSwwLjItMC4xLDAuNGMwLjEsNS40LDEuOCwxMCw1LDEzLjJjMy4xLDMuMiw3LjQsNC45LDEyLjQsNC45YzMuNywwLDguNi0xLDEyLjQtMi4xYzAuNS0wLjIsMS4xLDAuMSwxLjMsMC43YzAuMSwwLjIsMC4xLDAuNCwwLDAuNWwtMC41LDEuOWMtMC4yLDAuNy0wLjcsMS4zLTEuMywxLjZjLTMuNywxLjgtOS4zLDMuNS0xNSwzLjVDMzU3LjYsMTgxLjIsMzUxLjYsMTc5LjUsMzQ3LjUsMTc0LjkiLz48cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjMxLjEsMTM1Ljl2MzYuOWMwLDEsMC42LDEuOSwxLjQsMi4zYzAuOSwwLjQsMS40LDEuMywxLjQsMi4zdjAuN2MwLDAuOC0wLjYsMS40LTEuNCwxLjRIMjIwYy0wLjgsMC0xLjQtMC42LTEuNC0xLjR2LTAuN2MwLTEsMC42LTEuOSwxLjQtMi4zYzAuOS0wLjQsMS40LTEuMywxLjQtMi4zdi0zNS43YzAtMC41LTAuNC0wLjktMC45LTAuOXMtMC45LTAuNC0wLjktMC45di0xLjJjMC0xLjIsMC45LTIuMSwyLjEtMi4xaDUuNkMyMjkuNCwxMzIsMjMxLjEsMTMzLjcsMjMxLjEsMTM1LjkiLz48cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjI2LjMsMTEwLjhjMy4zLDAsNiwyLjcsNiw1LjljMCwzLjMtMi43LDUuOS02LDUuOXMtNi0yLjctNi01LjlDMjIwLjMsMTEzLjUsMjIzLDExMC44LDIyNi4zLDExMC44Ii8+PC9zdmc+"/>
562
- </a>';
563
-
564
- if ( $tab_key === 'cs' ) {
565
- echo '
566
- <p class="iubenda-text">
567
- ' . __( "This plugin is the easiest and most comprehensive way to adapt your WordPress site to the ePrivacy (EU Cookie Law). Upon your users' first visit, the plugin will take care of collecting their consent, blocking the most popular cookie-scripts and subsequently reactivating 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 (asynchronous script reactivation).", 'iubenda' ) . '
568
- </p>
569
- <p class="iubenda-text">
570
- <span class="iubenda-title">' . __( "Does the Cookie Solution support IAB's Transparency and Consent Framework?", 'iubenda' ) . '</span><br />
571
- ' . sprintf( __( "Yes it does. You can read more about it <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">here.</a>", 'iubenda' ), $this->links['iab'] ) . '
572
- </p>
573
- <p class="iubenda-text">
574
- <span class="iubenda-title">' . __( "Would you like to know more about the cookie law?", 'iubenda' ) . '</span><br />
575
- ' . sprintf( __( "Read our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">complete guide to the cookie law.</a>", 'iubenda' ), $this->links['guide'] ) . '
576
- </p>
577
- <p class="iubenda-text">
578
- <span class="iubenda-title">' . __( "What is the full functionality of the plugin?", 'iubenda' ) . '</span><br />
579
- ' . sprintf( __( "Visit our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">plugin page.</a>", 'iubenda' ), $this->links['plugin_page'] ) . '
580
- </p>
581
- <p class="iubenda-text">
582
- <span class="iubenda-title">' . __( "Enter the iubenda code for the Cookie Solution below.", 'iubenda' ) . '</span><br />
583
- ' . 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' ), $this->links['generating_code'] ) . '
584
- </p>';
585
- } else {
586
- echo '
587
- <p class="iubenda-text">
588
- ' . __( 'Maintaining comprehensive records of consent is a vital part of privacy compliance in general but is specifically required under the GDPR. These records should include a way of identifying the user, store proof of consent, record of the consenting action, and the legal documents available to the user at the time of consent, among other things. You can read about the <a href="https://www.iubenda.com/en/help/5428-gdpr-guide#records-of-consent" target="_blank">full requirements here</a>.', 'iubenda' ) . '
589
- </p>';
590
- }
591
- ?>
592
- </div>
593
 
594
- <?php
595
- if ( $tab_key === 'cs' ) {
596
- // add per-purpose notice
597
- if ( iubenda()->options['cs']['skip_parsing'] ) {
598
- $iubenda_code = '';
599
 
600
- if ( iubenda()->multilang === true && defined( 'ICL_LANGUAGE_CODE' ) && isset( iubenda()->options['cs']['code_' . ICL_LANGUAGE_CODE] ) ) {
601
- $iubenda_code = iubenda()->options['cs']['code_' . ICL_LANGUAGE_CODE];
 
 
 
 
602
 
603
- // no code for current language, use default
604
- if ( ! $iubenda_code )
605
- $iubenda_code = iubenda()->options['cs']['code_default'];
606
- } else
607
- $iubenda_code = iubenda()->options['cs']['code_default'];
 
 
 
 
 
 
 
608
 
609
- $per_purpose_enabled = preg_match( '/(?:"|\')perPurposeConsent(?:"|\')\: *(?:"|\'*)true(?:"|\'*)/', $iubenda_code );
610
- $reject_enabled = preg_match( '/(?:"|\')rejectButtonDisplay(?:"|\')\: *(?:"|\'*)true(?:"|\'*)/', $iubenda_code );
611
 
612
- if ( $per_purpose_enabled || $reject_enabled )
613
- $this->add_notice( 'iub_per_purpose_enabled', sprintf( __( 'If you are using per-purpose script blocking or Reject option please disable the "Leave scripts untouched on the page if the user has already given consent" option. <a href="%s" target="_self">Disable now</a>', 'iubenda' ), esc_url( add_query_arg( 'action', 'disable_skip_parsing', $redirect_to ) ) ), 'notice' );
614
- }
615
-
616
- // add AMP notice
617
- if ( iubenda()->options['cs']['amp_support'] && iubenda()->options['cs']['amp_template_done'] ) {
618
- $ssl_support = true;
619
-
620
- // multilang support
621
- if ( iubenda()->multilang && ! empty( iubenda()->languages ) ) {
622
- foreach ( iubenda()->languages as $lang_id => $lang_name ) {
623
- $url = iubenda()->options['cs']['amp_source'] === 'remote' ? iubenda()->options['cs']['amp_template'][$lang_id] : iubenda()->AMP->get_amp_template_url( $lang_id );
624
- $bits = explode( '/', $url );
625
-
626
- if ( $bits[0] === 'http:' )
627
- $ssl_support = false;
628
- }
629
- } else {
630
- $url = iubenda()->options['cs']['amp_source'] === 'remote' ? iubenda()->options['cs']['amp_template'] : iubenda()->AMP->get_amp_template_url();
631
- $bits = explode( '/', $url );
632
-
633
- if ( $bits[0] === 'http:' )
634
- $ssl_support = false;
635
- }
636
-
637
- if ( ! $ssl_support )
638
- $this->add_notice( 'iub_amp_ssl_required', __( 'AMP configuration file requires HTTPS. Make sure your SSL Certificate is configured correctly.', 'iubenda' ), 'error' );
639
- }
640
 
641
- }
642
-
643
- // render custom notices
644
- $this->print_notices();
645
- ?>
646
-
647
- <h2 style="display: none;"></h2>
648
- <h2 class="nav-tab-wrapper iubenda-tab-wrapper">
649
- <a class="nav-tab<?php echo $tab_key == 'cs' ? ' nav-tab-active' : ''; ?>" href="<?php echo esc_url( iubenda()->base_url ); ?>"><?php _e( 'Cookie Solution', 'iubenda' ); ?></a>
650
- <a class="nav-tab<?php echo $tab_key == 'cons' ? ' nav-tab-active' : ''; ?>" href="<?php echo esc_url( add_query_arg( array( 'tab' => 'cons' ), iubenda()->base_url ) ); ?>"><?php _e( 'Consent Solution', 'iubenda' ); ?></a>
651
- </h2>
652
-
653
- <div id="iubenda-settings">
654
-
655
- <form id="iubenda-tabs" action="options.php" method="post">
656
-
657
-
658
- <?php
659
- if ( $tab_key === 'cs' ) {
660
- echo '<p>' . sprintf( __( 'This plugin drastically reduces the need for direct interventions in the code of the site by integrating with iubenda\'s Cookie Solution. It provides a fully customizable cookie banner, dynamically generates a cookie policy <a href="%s" target="_blank">to match the services in use on your site</a>, and, fully manages cookie-related consent - including the blocking of the most common widgets and third-party cookies before consent is received - in order to comply with the GDPR and ePrivacy.', 'iubenda' ), 'https://www.iubenda.com/en/help/19004-how-to-use-the-site-scanner-from-within-the-generator' ) . '</p>';
661
- } else {
662
- echo '<p>' . __( 'Maintaining valid records of consent is a vital part of privacy compliance in general, and it is specifically required under the GDPR. These records should include a userid, timestamp, consent proof, record of the consenting action, and the legal documents available to the user at the time of consent, among other things. This plugin is THE most complete solution for recording, sorting and maintaining GDPR records of consent*. The plugin also boasts built-in compatibility with WordPress comment form, Contact Form 7 and WP Forms plugins for your convenience, but can be manually integrated with any type of web-form and can even store consent proofs for consents collected offline (e.g in-store sign-ups) via WP media upload.' ) . '</p>';
663
- }
664
- ?>
665
 
666
- <?php
667
- settings_fields( $this->tabs[$tab_key]['key'] );
668
- do_settings_sections( $this->tabs[$tab_key]['key'] );
669
 
670
- if ( ! in_array( $this->action, array( 'save', 'edit' ) ) ) {
671
- echo ' <p class="submit submit-' . $tab_key . '">';
672
 
673
- // consent solution tab only
674
- if ( $tab_key != 'cs' && ! empty( iubenda()->options['cons']['public_api_key'] ) ) {
675
- echo '<a href="' . esc_url( add_query_arg( array( 'tab' => 'cons', 'action' => 'autodetect' ), iubenda()->base_url ) ) . '" class="button button-primary button-large iub-autodetect-forms">' . esc_html__( 'Autodetect Forms', 'iubenda' ) . '</a>';
676
- echo '<br />';
677
- }
678
- submit_button( '', 'primary', $this->tabs[$tab_key]['submit'], false );
679
- echo ' ';
680
- submit_button( __( 'Reset to defaults', 'iubenda' ), 'secondary', $this->tabs[$tab_key]['reset'], false );
681
- echo ' </p>';
682
- }
683
- ?>
684
-
685
- </form>
686
-
687
- </div>
688
-
689
- <div id="iubenda-footer">
690
- <?php echo '
691
- <p class="iubenda-text">
692
- <span class="iubenda-title">' . __( 'Need support for this plugin?', 'iubenda' ) . '</span><br />
693
- ' . sprintf( __( "Visit our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">support forum.</a>", 'iubenda' ), $this->links['support_forum'] ) . '
694
- </p>';
695
- ?>
696
- </div>
697
-
698
- <div class="clear"></div>
699
- </div>
700
- <?php
701
- }
702
 
703
- /**
704
- * Code option.
705
- *
706
- * @return mixed
707
- */
708
- public function iub_code() {
709
- // multilang support
710
- if ( iubenda()->multilang && ! empty( iubenda()->languages ) ) {
711
- echo '
712
- <div id="contextual-help-wrap" class="contextual-help-wrap hidden" tabindex="-1" style="display: block;">
713
- <div id="contextual-help-back" class="contextual-help-back"></div>
714
- <div id="contextual-help-columns" class="contextual-help-columns">
715
- <div class="contextual-help-tabs">
716
- <ul>';
717
- foreach ( iubenda()->languages as $lang_id => $lang_name ) {
718
- echo '
719
- <li class="' . ( iubenda()->lang_default == $lang_id ? 'active' : '' ) . '">
720
- <a href="#tab-panel-' . $lang_id . '" aria-controls="tab-panel-' . $lang_id . '">' . $lang_name . '</a>
721
- </li>';
722
- }
723
- echo '
724
- </ul>
725
- </div>
726
-
727
- <div id="contextual-help-tabs-wrap" class="contextual-help-tabs-wrap">';
728
- foreach ( iubenda()->languages as $lang_id => $lang_name ) {
729
- // get code for the language
730
- $code = ! empty( iubenda()->options['cs']['code_' . $lang_id] ) ? html_entity_decode( iubenda()->parse_code( iubenda()->options['cs']['code_' . $lang_id] ) ) : '';
731
- // handle default, if empty
732
- $code = empty( $code ) && $lang_id == iubenda()->lang_default ? html_entity_decode( iubenda()->parse_code( iubenda()->options['cs']['code_default'] ) ) : $code;
733
-
734
- echo '
735
- <div id="tab-panel-' . $lang_id . '" class="help-tab-content' . ( iubenda()->lang_default == $lang_id ? ' active' : '' ) . '">
736
- <textarea name="iubenda_cookie_law_solution[code_' . $lang_id . ']" class="large-text" cols="50" rows="10">' . $code . '</textarea>
737
- <p class="description">' . sprintf( __( 'Enter the iubenda code for %s.', 'iubenda' ), $lang_name ) . '</p>
738
- </div>';
739
- }
740
- echo '
741
- </div>
742
- </div>
743
- </div>';
744
- } else {
745
- echo '
746
- <div id="iub_code_default">
747
- <textarea name="iubenda_cookie_law_solution[code_default]" class="large-text" cols="50" rows="10">' . html_entity_decode( iubenda()->parse_code( iubenda()->options['cs']['code_default'] ) ) . '</textarea>
748
- <p class="description">' . __( 'Enter the iubenda code.', 'iubenda' ) . '</p>
749
- </div>';
750
- }
751
- }
752
 
753
- /**
754
- * Custom scripts option.
755
- *
756
- * @return void
757
- */
758
- public function iub_custom_scripts() {
759
- echo '
760
- <div id="contextual-help-wrap-2" class="contextual-help-wrap hidden" tabindex="-1" style="display: block;">
761
- <div id="contextual-help-back-2" class="contextual-help-back"></div>
762
- <div id="contextual-help-columns-2" class="contextual-help-columns">
763
- <div class="contextual-help-tabs">
764
- <ul>
765
- <li class="active">
766
- <a href="#tab-panel-scripts" aria-controls="tab-panel-scripts">' . esc_html__( 'Scripts', 'iubenda' ) . '</a>
767
- </li>
768
- <li>
769
- <a href="#tab-panel-iframes" aria-controls="tab-panel-iframes">' . esc_html__( 'Iframes', 'iubenda' ) . '</a>
770
- </li>
771
- </ul>
772
- </div>
773
- <div id="contextual-help-tabs-wrap-2" class="contextual-help-tabs-wrap">
774
- <div id="tab-panel-scripts" class="help-tab-content active">
775
- <p class="description">' . __( 'Provide a list of custom scripts you\'d like to block and assign their purpose.', 'iubenda' ) . '</p>
776
- <div id="custom-script-field-template" class="template-field" style="display: none;">
777
- <input type="text" class="regular-text" value="" name="iubenda_cookie_law_solution[custom_scripts][script][]" placeholder="' . __( 'Enter custom script', 'iubenda' ) . '" /> ' . $this->render_tag_types( 'script', 0 ) . ' <a href="#" class="remove-custom-script-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a>
778
- </div>';
779
-
780
- if ( ! empty( iubenda()->options['cs']['custom_scripts'] ) ) {
781
- foreach ( iubenda()->options['cs']['custom_scripts'] as $script => $type ) {
782
- echo '
783
- <div class="custom-script-field">
784
- <input type="text" class="regular-text" value="' . esc_attr( $script ) . '" name="iubenda_cookie_law_solution[custom_scripts][script][]" placeholder="' . __( 'Enter custom script', 'iubenda' ) . '" /> ' . $this->render_tag_types( 'script', $type ) . ' <a href="#" class="remove-custom-script-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a>
785
- </div>';
786
- }
787
- }
788
 
789
- echo '
790
- <a href="#" class="add-custom-script-field button-secondary">Add New Script</a>
791
- </div>
792
- <div id="tab-panel-iframes" class="help-tab-content">
793
- <p class="description">' . __( 'Provide a list of custom iframes you\'d like to block and assign their purpose. ', 'iubenda' ) . '</p>
794
- <div id="custom-iframe-field-template" class="template-field" style="display: none;">
795
- <input type="text" class="regular-text" value="" name="iubenda_cookie_law_solution[custom_iframes][iframe][]" placeholder="' . __( 'Enter custom iframe', 'iubenda' ) . '" /> ' . $this->render_tag_types( 'iframe', 0 ) . ' <a href="#" class="remove-custom-iframe-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a>
796
- </div>';
797
-
798
- if ( ! empty( iubenda()->options['cs']['custom_iframes'] ) ) {
799
- foreach ( iubenda()->options['cs']['custom_iframes'] as $iframe => $type ) {
800
- echo '
801
- <div class="custom-iframe-field">
802
- <input type="text" class="regular-text" value="' . esc_attr( $iframe ) . '" name="iubenda_cookie_law_solution[custom_iframes][iframe][]" placeholder="' . __( 'Enter custom iframe', 'iubenda' ) . '" /> ' . $this->render_tag_types( 'iframe', $type ) . ' <a href="#" class="remove-custom-iframe-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a>
803
- </div>';
804
- }
805
- }
 
 
 
 
 
 
806
 
807
- echo '
808
- <a href="#" class="add-custom-iframe-field button-secondary">Add New Iframe</a>
809
- </div>
810
- </div>
811
- </div>
812
- </div>';
813
- }
814
 
815
- /**
816
- * Prepare tag types select.
817
- *
818
- * @param string $type
819
- * @param int $selected
820
- * @return string
821
- */
822
- function render_tag_types( $type, $selected ) {
823
- $html = '<select name="iubenda_cookie_law_solution[custom_' . $type . 's][type][]">';
824
 
825
- foreach ( $this->tag_types as $tag_id => $tag_name ) {
826
- $html .= '<option value="' . esc_attr( $tag_id ) . '" ' . selected( $selected, $tag_id, false ) . '>' . esc_html( $tag_name ) . '</option>';
827
- }
828
 
829
- return $html . '</select>';
830
- }
 
831
 
832
- /**
833
- * Parsing option.
834
- *
835
- * @return mixed
836
- */
837
- public function iub_parse() {
838
- echo '
839
- <div id="iub_parse_container">
840
- <label><input id="iub_parse" type="checkbox" name="iubenda_cookie_law_solution[parse]" value="1" ' . checked( true, (bool) iubenda()->options['cs']['parse'], false ) . '/>' . __( 'Automatically block scripts detected by the plugin', 'iubenda' ) . '</label>
841
- <p class="description">' . '(' . sprintf( __( "see <a href=\"%s\" target=\"_blank\">our documentation</a> for the list of detected scripts.", 'iubenda' ), $this->links['documentation'] ) . ')' . '</p>
842
- <div id="iub_parser_engine_container"' . ( iubenda()->options['cs']['parse'] === false ? ' style="display: none;"' : '' ) . '>
843
- <div>
844
- <label><input id="iub_parser_engine-new" type="radio" name="iubenda_cookie_law_solution[parser_engine]" value="new" ' . checked( 'new', iubenda()->options['cs']['parser_engine'], false ) . ' />' . __( 'Primary', 'iubenda' ) . '</label>
845
- <label><input id="iub_parser_engine-default" type="radio" name="iubenda_cookie_law_solution[parser_engine]" value="default" ' . checked( 'default', iubenda()->options['cs']['parser_engine'], false ) . ' />' . __( 'Secondary', 'iubenda' ) . '</label>
846
- <p class="description">' . __( 'Select parsing engine.', 'iubenda' ) . '</p>
847
- </div>
848
- <div>
849
- <label><input id="iub_skip_parsing" type="checkbox" name="iubenda_cookie_law_solution[skip_parsing]" value="1" ' . checked( true, (bool) iubenda()->options['cs']['skip_parsing'], false ) . '/>' . __( 'Leave scripts untouched on the page if the user has already given consent', 'iubenda' ) . '</label>
850
- <p class="description">(' . __( "Enable this option to improve performance <strong>only</strong> if your site does <strong>not</strong> use a cache system or a cache plugin and if you're <strong>not</strong> collecting per-category consent. If you're in doubt, keep this setting disabled", 'iubenda' ) . ')</p>
851
- </div>
852
- </div>
853
- </div>';
854
- }
855
 
856
- /**
857
- * Ctype option.
858
- *
859
- * @return mixed
860
- */
861
- public function iub_ctype() {
862
- echo '
863
- <div id="iub_ctype_container">
864
- <label><input id="iub_ctype" type="checkbox" name="iubenda_cookie_law_solution[ctype]" value="1" ' . checked( true, (bool) iubenda()->options['cs']['ctype'], false ) . '/>' . __( 'Restrict the plugin to run only for requests that have "Content-type: text / html" (recommended)', 'iubenda' ) . '</label>
865
- </div>';
866
- }
867
 
868
- /**
869
- * RSS feed option.
870
- *
871
- * @return mixed
872
- */
873
- public function iub_output_feed() {
874
- echo '
875
- <div id="iub_output_feed_container">
876
- <label><input id="iub_output_feed" type="checkbox" name="iubenda_cookie_law_solution[output_feed]" value="1" ' . checked( true, (bool) iubenda()->options['cs']['output_feed'], false ) . '/>' . __( 'Do not run the plugin inside the RSS feed (recommended)', 'iubenda' ) . '</label>
877
- </div>';
878
- }
879
-
880
- /**
881
- * POST request option.
882
- *
883
- * @return mixed
884
- */
885
- public function iub_output_post() {
886
- echo '
887
- <div id="iub_output_post_container">
888
- <label><input id="iub_output_post" type="checkbox" name="iubenda_cookie_law_solution[output_post]" value="1" ' . checked( true, (bool) iubenda()->options['cs']['output_post'], false ) . '/>' . __( 'Do not run the plugin on POST requests (recommended)', 'iubenda' ) . '</label>
889
- </div>';
890
- }
891
 
892
- /**
893
- * Menu option.
894
- *
895
- * @return mixed
896
- */
897
- public function iub_menu_position() {
898
- echo '
899
- <div id="iub_menu_position_container">
900
- <label><input id="iub_menu_position-topmenu" type="radio" name="iubenda_cookie_law_solution[menu_position]" value="topmenu" ' . checked( 'topmenu', iubenda()->options['cs']['menu_position'], false ) . ' />' . __( 'Top menu', 'iubenda' ) . '</label>
901
- <label><input id="iub_menu_position-submenu" type="radio" name="iubenda_cookie_law_solution[menu_position]" value="submenu" ' . checked( 'submenu', iubenda()->options['cs']['menu_position'], false ) . ' />' . __( 'Submenu', 'iubenda' ) . '</label>
902
- <p class="description">' . __( 'Select whether to display iubenda in a top admin menu or the Settings submenu.', 'iubenda' ) . '</p>
903
- </div>';
904
- }
905
-
906
- /**
907
- * Google AMP support option.
908
- *
909
- * @return mixed
910
- */
911
- public function iub_amp_support() {
912
- echo '
913
- <div id="iub_amp_support_container">
914
- <label><input id="iub_amp_support" type="checkbox" name="iubenda_cookie_law_solution[amp_support]" value="1" ' . checked( true, (bool) iubenda()->options['cs']['amp_support'], false ) . '/>' . __( 'Enable Google AMP support.', 'iubenda' ) . '</label>
915
- <p class="description">' . sprintf( __( 'This feature enables iubenda on AMP pages via the <a href="%s" target="_blank">AMP</a> and <a href="%s" target="_blank">AMP for WP</a> plugins. AMP requires specific configuration parameters and a page hosted on your domain where the configuration is loaded from. <a href="%s" target="_blank">Learn more on iubenda and AMP</a>.', 'iubenda' ), 'https://wordpress.org/plugins/amp/', 'https://wordpress.org/plugins/accelerated-mobile-pages/', 'https://www.iubenda.com/en/help/22135-cookie-solution-amp#wordpress' ) . '</p>
916
- <div id="iub_amp_options_container"' . ( iubenda()->options['cs']['amp_support'] === false ? ' style="display: none;"' : '' ) . '>
917
- <div>
918
- <label><input id="iub_amp_source-local" class="iub_amp_source" type="radio" name="iubenda_cookie_law_solution[amp_source]" value="local" ' . checked( 'local', iubenda()->options['cs']['amp_source'], false ) . ' />' . __( 'Auto-generated configuration file', 'iubenda' ) . '</label>
919
- <label><input id="iub_amp_source-remote" class="iub_amp_source" type="radio" name="iubenda_cookie_law_solution[amp_source]" value="remote" ' . checked( 'remote', iubenda()->options['cs']['amp_source'], false ) . ' />' . __( 'Custom configuration file', 'iubenda' ) . '</label>
920
- <p class="description">' . __( 'Select the iubenda AMP configuration file location.', 'iubenda' ) . '</p>
921
- </div>
922
- <div id="iub_amp_template-local"' . ( iubenda()->options['cs']['amp_source'] === 'remote' ? ' style="display: none;"' : '' ) . '>';
923
- if ( empty( iubenda()->options['cs']['amp_template_done'] ) ) {
924
- echo '
925
- <p class="description">' . __( 'No file available. Save changes to generate iubenda AMP configuration file.', 'iubenda' ) . '</p>';
926
- } else {
927
- // multilang support
928
- if ( iubenda()->multilang && ! empty( iubenda()->languages ) ) {
929
- foreach ( iubenda()->languages as $lang_id => $lang_name ) {
930
- echo $lang_name . ':
931
- <a href="' . iubenda()->AMP->get_amp_template_url( $lang_id ) . '" target="_blank">' . iubenda()->AMP->get_amp_template_url( $lang_id ) . '</a><br />';
932
- }
933
- } else {
934
- echo '
935
- <a href="' . iubenda()->AMP->get_amp_template_url() . '" target="_blank">' . iubenda()->AMP->get_amp_template_url() . '</a>';
936
- }
937
- }
938
- echo '
939
- </div>
940
- <div id="iub_amp_template-remote"' . ( iubenda()->options['cs']['amp_source'] === 'local' ? ' style="display: none;"' : '' ) . '>';
941
-
942
- // multilang support
943
- if ( iubenda()->multilang && ! empty( iubenda()->languages ) ) {
944
- foreach ( iubenda()->languages as $lang_id => $lang_name ) {
945
- echo $lang_name . ':
946
- <label><input id="iub_amp_template-' . $lang_id . '" type="text" class="regular-text" name="iubenda_cookie_law_solution[amp_template][' . $lang_id . ']" value="' . ( isset( iubenda()->options['cs']['amp_template'][$lang_id] ) ? esc_url( iubenda()->options['cs']['amp_template'][$lang_id] ) : '' ) . '" /></label><br />';
947
- }
948
- } else {
949
- echo '
950
- <label><input id="iub_amp_template" type="text" class="regular-text" name="iubenda_cookie_law_solution[amp_template]" value="' . ( isset( iubenda()->options['cs']['amp_template'] ) ? esc_url( iubenda()->options['cs']['amp_template'] ) : '' ) . '" /></label>';
951
- }
952
- echo '
953
- <p class="description">' . __( 'If you\'re experiencing issues with AMP setup download the generated iubenda AMP configuration file, upload it to any SSL server and paste the file link to the field above.', 'iubenda' ) . '</p>
954
- </div>
955
- <p class="description">' . sprintf( __( 'Seeing the AMP cookie notice when testing from Google but not when visiting your AMP pages directly? <a href="%s" target="_blank">Learn how to fix it</a>.', 'iubenda' ), 'https://www.iubenda.com/en/help/22135-cookie-solution-amp-wordpress#amp-domain' ) . '</p>
956
- </div>
957
- </div>';
958
- }
959
 
960
- /**
961
- * Deactivation option.
962
- *
963
- * @return mixed
964
- */
965
- public function iub_deactivation() {
966
- echo '
967
- <div id="iub_deactivation_container">
968
- <label><input id="iub_deactivation" type="checkbox" name="iubenda_cookie_law_solution[deactivation]" value="1" ' . checked( true, (bool) iubenda()->options['cs']['deactivation'], false ) . '/>' . __( 'Delete all plugin data upon deactivation', 'iubenda' ) . '</label>
969
- </div>';
970
- }
971
 
972
- /**
973
- * Public API Key option.
974
- *
975
- * @return mixed
976
- */
977
- public function iub_public_api_key() {
978
- echo '
979
- <div id="iub_public_api_key_container">
980
- <label><input id="iub_public_api_key" type="text" class="regular-text" name="iubenda_consent_solution[public_api_key]" value="' . iubenda()->options['cons']['public_api_key'] . '" /></label>
981
- <p class="description">' . __( 'Enter your iubenda Javascript library public API key.', 'iubenda' ) . '</p>
982
- </div>';
983
- }
984
 
985
- /**
986
- * Forms list.
987
- *
988
- * @return mixed
989
- */
990
- public function iubenda_consent_forms() {
991
- $form_id = ! empty( $_GET['form_id'] ) ? absint( $_GET['form_id'] ) : 0;
992
- $form = ! empty( $form_id ) ? iubenda()->forms->get_form( $form_id ) : false;
993
 
994
- $supported_forms = iubenda()->forms->sources;
 
 
 
 
 
 
995
 
996
- echo '
997
- <p class="description">' . __( 'This section lists the forms available for field mapping. The plugin currently supports & detects: WordPress Comment, Contact Form 7, WooCommerce Checkout and WP Forms.', 'iubenda' ) . '</p>';
 
 
 
 
 
998
 
999
- // list screen
1000
- if ( ! class_exists( 'WP_List_Table' ) )
1001
- include_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
 
1002
 
1003
- include_once( IUBENDA_PLUGIN_PATH . '/includes/forms-list-table.php' );
 
 
 
 
1004
 
1005
- $list_table = new iubenda_List_Table_Forms();
 
 
 
 
1006
 
1007
- echo '
1008
- <div id="iubenda-consent-forms">';
1009
- $list_table->views();
1010
- $list_table->prepare_items();
1011
- $list_table->display();
 
 
 
 
 
 
 
 
 
1012
 
1013
- echo '
1014
- </div>';
1015
- }
1016
 
1017
- /**
1018
- * Single form.
1019
- *
1020
- * @return mixed
1021
- */
1022
- public function iubenda_consent_form() {
1023
- $form_id = ! empty( $_GET['form_id'] ) ? absint( $_GET['form_id'] ) : 0;
1024
- $form = ! empty( $form_id ) ? iubenda()->forms->get_form( $form_id ) : false;
1025
 
1026
- if ( ! $form )
1027
- return;
 
1028
 
1029
- $status = isset( $form->post_status ) && in_array( $form->post_status, array_keys( iubenda()->forms->statuses ) ) ? esc_attr( $form->post_status ) : 'publish';
1030
- $subject = isset( $form->form_subject ) && is_array( $form->form_subject ) ? array_map( 'esc_attr', $form->form_subject ) : array();
1031
- $preferences = isset( $form->form_preferences ) && is_array( $form->form_preferences ) ? array_map( 'esc_attr', $form->form_preferences ) : array();
1032
- $exclude = isset( $form->form_exclude ) && is_array( $form->form_exclude ) ? array_map( 'esc_attr', $form->form_exclude ) : array();
1033
- $legal_notices = isset( $form->form_legal_notices ) && is_array( $form->form_legal_notices ) ? array_map( 'esc_attr', $form->form_legal_notices ) : array();
1034
-
1035
- $available_fields = array();
1036
-
1037
- if ( ! empty( $form->form_fields ) && is_array( $form->form_fields ) ) {
1038
- foreach ( $form->form_fields as $index => $form_field ) {
1039
- if ( is_array( $form_field ) ) {
1040
- // print_r( $form_field );
1041
- $available_fields[] = $form_field['label'] . ' (' . $form_field['type'] . ')';
1042
- } else {
1043
- $available_fields[] = $form_field;
1044
- }
1045
- }
1046
- }
1047
-
1048
- // print_r( $form );
1049
-
1050
- echo '
1051
- <div id="poststuff">
1052
- <div id="post-body" class="metabox-holder columns-2">
1053
- <div id="post-body-content">
1054
- <div id="titlediv">
1055
- <div id="titlewrap">
1056
- <h1>' . $form->post_title . '</h1>
1057
- </div>
1058
- <p class="description">' . sprintf( __( '%s form title.', 'iubenda' ), ( array_key_exists( $form->form_source, iubenda()->forms->sources ) ? iubenda()->forms->sources[$form->form_source] : __( 'Unknown', 'iubenda' ) ) ) . '</p>
1059
-
1060
- <div style="margin-top: 18px"><strong>' . __( 'Available form fields:', 'iubenda' ) . '</strong><br /><p class="description">' . implode( ', ', $available_fields ) . '</p></div>
1061
- </div>
1062
- </div>
1063
- <div id="postbox-container-1" class="postbox-container">
1064
- <div id="side-sortables" class="">
1065
- <div id="submitdiv" class="postbox ">
1066
- <h3 class="hndle"><span>' . __( 'Publish' ) . '</span></h3>
1067
- <div class="inside">
1068
- <div id="submitpost" class="submitbox">
1069
- <div id="minor-publishing">
1070
- <div class="misc-pub-section misc-pub-post-status">
1071
- <label for="status">' . __( 'Status' ) . ':</label>
1072
- <div id="status-select" class="" style="margin: 3px 0 0;">
1073
- <select id="status" name="status">';
1074
- foreach ( iubenda()->forms->statuses as $name => $label ) {
1075
- echo '
1076
- <option value="' . $name . '"' . selected( $form->post_status, $name, true ) . '>' . $label . '</option>';
1077
- }
1078
- echo '
1079
- </select>
1080
- </div>
1081
- </div>
1082
- <div id="major-publishing-actions">
1083
- <div id="delete-action">
1084
- <a class="submitdelete deletion" href="' . esc_url( add_query_arg( array( 'tab' => 'cons' ), iubenda()->base_url ) ) . '">' . __( 'Cancel' ) . '</a>
1085
- </div>
1086
- <div id="publishing-action">
1087
- <span class="spinner"></span>
1088
- <input type="hidden" value="' . $form->ID . '" name="form_id">
1089
- <input id="publish" class="button button-primary button-large" type="submit" value="' . __( 'Save' ) . '" name="save">
1090
- </div>
1091
- <div class="clear"></div>
1092
- </div>
1093
- </div>
1094
- </div>
1095
- </div>
1096
- </div>
1097
- </div>
1098
- </div>
1099
- <div id="postbox-container-2" class="postbox-container">
1100
- <div id="normal-sortables" class="meta-box-sortables">
1101
- <div id="map-fields" class="postbox">
1102
- <h3 class="hndle ui-sortable-handle"><span>' . __( 'Map fields', 'iubenda' ) . '</span></h3>
1103
- <div class="inside">
1104
- <table class="widefat">
1105
- <tbody>
1106
- <tr>
1107
- <td class="label table-label">
1108
- <h4>' . __( 'Subject fields', 'iubenda' ) . ' <span class="required">(required)</span></h4>
1109
- <p class="description">' . __( 'Subject fields allow you to store a series of identifying values about your individual subjects/users. Please map the subject field with the corresponding form fields where applicable.', 'iubenda' ) . '</p>
1110
- </td>
1111
- <td>
1112
- <table class="widefat subject-table">
1113
- <thead>
1114
- <td class="label">' . __( 'Subject field', 'iubenda' ) . '</td>
1115
- <td class="label">' . __( 'Form field', 'iubenda' ) . '</td>
1116
- </thead>
1117
- <tbody>';
1118
-
1119
- foreach ( $this->subject_fields as $field_name => $field_label ) {
1120
- $selected = isset( $subject[$field_name] ) ? $subject[$field_name] : '';
1121
- $none = $field_name == 'id' ? __( 'Autogenerated', 'iubenda' ) : __( 'None', 'iubenda' );
1122
-
1123
- echo '
1124
- <tr class="subject-field options-field">
1125
- <td>' . $field_name . ' (' . $field_label . ')' . '</td>
1126
- <td>
1127
- <select class="subject-fields-select select-' . $field_name . '" name="subject[' . $field_name . ']">
1128
- <option value="" ' . selected( $selected, '', false ) . '>' . $none . '</option>';
1129
- if ( ! empty( $form->form_fields ) ) {
1130
- foreach ( $form->form_fields as $index => $form_field ) {
1131
- // get field data
1132
- $form_field_value = is_array( $form_field ) ? $index : $form_field;
1133
- $form_field_label = is_array( $form_field ) ? $form_field['label'] . ' (' . $form_field['type'] . ')' : $form_field;
1134
- $form_field_selected = is_array( $form_field ) ? $index : $form_field;
1135
-
1136
- echo '<option value="' . $form_field_value . '" ' . selected( $selected, $form_field_selected, false ) . '>' . $form_field_label . '</option>';
1137
- }
1138
- }
1139
- echo '
1140
- </select>
1141
- </td>
1142
- </tr>
1143
- ';
1144
- }
1145
- echo '
1146
- </tbody>
1147
- </table>
1148
- </td>
1149
- </tr>
1150
- <tr>
1151
- <td class="label table-label">
1152
- <h4>' . __( 'Preferences fields', 'iubenda' ) . ' <span class="required">(required)</span></h4>
1153
- <p class="description">' . __( 'Preferences fields allow you to store a record of the various opt-ins points at which the user has agreed or given consent, such as fields for agreeing to terms and conditions, newsletter, profiling, etc. *Please create at least one preference field.', 'iubenda' ) . '</p>
1154
- </td>
1155
- <td>
1156
- <table class="widefat preferences-table">
1157
- <thead>
1158
- <td class="label">' . __( 'Preferences field', 'iubenda' ) . '</td>
1159
- <td class="label">' . __( 'Form field', 'iubenda' ) . '</td>
1160
- </thead>
1161
- <tbody>';
1162
- echo '
1163
- <tr id="preferences-field-template" class="template-field" style="display: none;">
1164
- <td><input type="text" class="regular-text" value="" name="preferences[__PREFERENCE_ID__][field]" placeholder="' . __( 'Enter field name', 'iubenda' ) . '" /></td>
1165
- <td>
1166
- <select class="preferences-fields-select select-' . $field_name . '" name="preferences[__PREFERENCE_ID__][value]">';
1167
- if ( ! empty( $form->form_fields ) ) {
1168
- foreach ( $form->form_fields as $index => $form_field ) {
1169
- // get field data
1170
- $form_field_value = is_array( $form_field ) ? $index : $form_field;
1171
- $form_field_label = is_array( $form_field ) ? $form_field['label'] . ' (' . $form_field['type'] . ')' : $form_field;
1172
-
1173
- echo '<option value="' . $form_field_value . '">' . $form_field_label . '</option>';
1174
- }
1175
- }
1176
- echo '
1177
- </select>
1178
- <a href="javascript:void(0)" class="remove-preferences-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a>
1179
- </td>
1180
- </tr>';
1181
-
1182
- if ( $preferences ) {
1183
- $index = 0;
1184
-
1185
- foreach ( $preferences as $field_name => $field_value ) {
1186
- $selected = isset( $preferences[$field_name] ) ? $preferences[$field_name] : '';
1187
-
1188
- echo '
1189
- <tr class="preferences-field options-field">
1190
- <td><input type="text" class="regular-text" value="' . $field_name . '" name="preferences[' . $index . '][field]" placeholder="' . __( 'Enter field name', 'iubenda' ) . '" /></td>
1191
- <td>
1192
- <select class="preferences-fields-select select-' . $field_name . '" name="preferences[' . $index . '][value]">';
1193
- if ( ! empty( $form->form_fields ) ) {
1194
- foreach ( $form->form_fields as $index => $form_field ) {
1195
- // get field data
1196
- $form_field_value = is_array( $form_field ) ? $index : $form_field;
1197
- $form_field_label = is_array( $form_field ) ? $form_field['label'] . ' (' . $form_field['type'] . ')' : $form_field;
1198
- $form_field_selected = is_array( $form_field ) ? $index : $form_field;
1199
-
1200
- echo '<option value="' . $form_field_value . '" ' . selected( $selected, $form_field_selected, false ) . '>' . $form_field_label . '</option>';
1201
- }
1202
- }
1203
- echo '
1204
- </select>
1205
- <a href="javascript:void(0)" class="remove-preferences-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a>
1206
- </td>
1207
- </tr>';
1208
-
1209
- $index++;
1210
- }
1211
- }
1212
-
1213
- echo '
1214
- <tr class="submit-field"><td colspan="2"><a href="javascript:void(0)" class="add-preferences-field button-secondary">' . __( 'Add New Preference', 'iubenda' ) . '</a></td></tr>
1215
- </tbody>
1216
- </table>
1217
- </td>
1218
- </tr>
1219
- <tr>
1220
- <td class="label table-label">
1221
- <h4>' . __( 'Exclude fields', 'iubenda' ) . '</h4>
1222
- <p class="description">' . __( 'Exclude fields allow you to create a list of fields that you would like to exclude from your Consent Solution recorded proofs (for e.g. password or other fields not related to the consent).', 'iubenda' ) . '</p>
1223
- </td>
1224
- <td>
1225
- <table class="widefat exclude-table">
1226
- <thead>
1227
- <td class="label">' . __( 'Exclude field', 'iubenda' ) . '</td>
1228
- <td class="label"></td>
1229
- </thead>
1230
- <tbody>';
1231
- echo '
1232
- <tr id="exclude-field-template" class="template-field" style="display: none;">
1233
- <td>
1234
- <select class="exclude-fields-select select-' . $field_name . '" name="exclude[__EXCLUDE_ID__][field]">';
1235
- if ( ! empty( $form->form_fields ) ) {
1236
- foreach ( $form->form_fields as $index => $form_field ) {
1237
- // get field data
1238
- $form_field_value = is_array( $form_field ) ? $index : $form_field;
1239
- $form_field_label = is_array( $form_field ) ? $form_field['label'] . ' (' . $form_field['type'] . ')' : $form_field;
1240
-
1241
- echo '<option value="' . $form_field_value . '">' . $form_field_label . '</option>';
1242
- }
1243
- }
1244
- echo '
1245
- </select>
1246
- <a href="javascript:void(0)" class="remove-exclude-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a>
1247
- </td>
1248
- <td></td>
1249
-
1250
- </tr>';
1251
-
1252
- if ( $exclude ) {
1253
- $index = 0;
1254
-
1255
- foreach ( $exclude as $index => $field_name ) {
1256
- $selected = isset( $exclude[$index] ) ? $exclude[$index] : '';
1257
-
1258
- echo '
1259
- <tr class="exclude-field options-field">
1260
- <td>
1261
- <select class="exclude-fields-select select-' . $field_name . '" name="exclude[' . $index . '][field]">';
1262
- if ( ! empty( $form->form_fields ) ) {
1263
- foreach ( $form->form_fields as $index => $form_field ) {
1264
- // get field data
1265
- $form_field_value = is_array( $form_field ) ? $index : $form_field;
1266
- $form_field_label = is_array( $form_field ) ? $form_field['label'] . ' (' . $form_field['type'] . ')' : $form_field;
1267
- $form_field_selected = is_array( $form_field ) ? $index : $form_field;
1268
-
1269
- echo '<option value="' . $form_field_value . '" ' . selected( $selected, $form_field_selected, false ) . '>' . $form_field_label . '</option>';
1270
- }
1271
- }
1272
- echo '
1273
- </select>
1274
- <a href="javascript:void(0)" class="remove-exclude-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a>
1275
- </td>
1276
- <td></td>
1277
- </tr>';
1278
-
1279
- $index++;
1280
- }
1281
- }
1282
-
1283
- echo '
1284
- <tr class="submit-field"><td colspan="2"><a href="javascript:void(0)" class="add-exclude-field button-secondary">' . __( 'Add New Exclude', 'iubenda' ) . '</a></td></tr>
1285
- </tbody>
1286
- </table>
1287
- </td>
1288
- </tr>
1289
- </tbody>
1290
- </table>
1291
- </div>
1292
- </div>
1293
- <div id="legal-notices" class="postbox">
1294
- <h3 class="hndle ui-sortable-handle"><span>' . __( 'Legal Notices', 'iubenda' ) . '</span></h3>
1295
- <div class="inside">
1296
- <table class="widefat">
1297
- <tbody>
1298
- <tr>
1299
- <td class="label table-label">
1300
- <h4>' . __( 'Legal documents', 'iubenda' ) . '</h4>
1301
- <p class="description">' . __( 'In general, it\'s important that you declare which legal documents are being agreed upon when each consent is collected. However, if you use iubenda for your legal documents, it is *required* that you identify the documents by selecting them here.', 'iubenda' ) . '</p>
1302
- </td>
1303
- <td>
1304
- <table class="widefat legal_notices-table">
1305
- <thead>
1306
- <td class="label">' . __( 'Identifier', 'iubenda' ) . '</td>
1307
- <td class="label"></td>
1308
- </thead>
1309
- <tbody>';
1310
-
1311
- // default identifiers
1312
- foreach ( $this->legal_notices as $index => $field_name ) {
1313
- echo '
1314
- <tr class="legal_notices-field default-field">
1315
- <td>' . ( $index === 0 ? '<p class="description">' . __( 'Please select each legal document available on your site.', 'iubenda' ) . '</p>' : '' ) . '<label for="legal_notices-default-field=' . $index . '"><input id="legal_notices-default-field=' . $index . '" type="checkbox" value="' . $field_name . '" name="legal_notices[' . $index . '][field]"' . checked( in_array( $field_name, $legal_notices, true ), true, false ) . 'placeholder="' . __( 'Enter field name', 'iubenda' ) . '" />' . $field_name . '</label></td>
1316
- <td></td>
1317
- </tr>';
1318
- }
1319
-
1320
- $index++;
1321
-
1322
- // custom identifiers
1323
- echo '
1324
- <tr id="legal_notices-field-template" class="template-field" style="display: none;">
1325
- <td><input type="text" class="regular-text" value="" name="legal_notices[__LEGAL_NOTICE_ID__][field]" placeholder="' . __( 'Enter field name', 'iubenda' ) . '" /> <a href="javascript:void(0)" class="remove-legal_notices-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a></td>
1326
- <td></td>
1327
- </tr>';
1328
-
1329
- echo '
1330
- <tr>
1331
- <td colspan="2"><p class="description" style="margin-bottom: 0;">' . __( 'Alternatively, you may add your own custom document identifiers.', 'iubenda' ) . '</p></td>
1332
- </tr>';
1333
-
1334
- if ( $legal_notices ) {
1335
- foreach ( $legal_notices as $field_name ) {
1336
- if ( in_array( $field_name, $this->legal_notices, true ) )
1337
- continue;
1338
-
1339
- echo '
1340
- <tr class="legal_notices-field options-field">
1341
- <td><input type="text" class="regular-text" value="' . $field_name . '" name="legal_notices[' . $index . '][field]" placeholder="' . __( 'Enter field name', 'iubenda' ) . '" /> <a href="javascript:void(0)" class="remove-legal_notices-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a></td>
1342
- <td></td>
1343
- </tr>';
1344
-
1345
- $index++;
1346
- }
1347
- }
1348
-
1349
- echo '
1350
- <tr class="submit-field"><td colspan="2"><a href="javascript:void(0)" class="add-legal_notices-field button-secondary">' . __( 'Add New Document', 'iubenda' ) . '</a></td></tr>';
1351
- echo '
1352
- </tbody>
1353
- </table>
1354
- </td>
1355
- </tr>
1356
- </tbody>
1357
- </table>
1358
- </div>
1359
- </div>
1360
- </div>
1361
- </div>
1362
- </div>
1363
- </div>
1364
- <div class="clear"></div>';
1365
-
1366
- // echo '<pre>'; print_r( $form ); echo '</pre>';
1367
- }
1368
 
1369
- /**
1370
- * Save cookie solution options.
1371
- *
1372
- * @return void
1373
- */
1374
- public function save_cookie_law_options( $input ) {
1375
- if ( ! current_user_can( apply_filters( 'iubenda_cookie_law_cap', 'manage_options' ) ) )
1376
- return $input;
1377
-
1378
- // save options
1379
- if ( isset( $_POST['save_iubenda_options'] ) ) {
1380
- $input['parse'] = (bool) isset( $input['parse'] );
1381
- $input['parser_engine'] = isset( $input['parser_engine'] ) && in_array( $input['parser_engine'], array( 'default', 'new' ) ) ? $input['parser_engine'] : iubenda()->defaults['cs']['parser_engine'];
1382
- $input['skip_parsing'] = (bool) isset( $input['skip_parsing'] );
1383
- $input['ctype'] = (bool) isset( $input['ctype'] );
1384
- $input['output_feed'] = (bool) isset( $input['output_feed'] );
1385
- $input['output_post'] = (bool) isset( $input['output_post'] );
1386
- $input['menu_position'] = isset( $input['menu_position'] ) && in_array( $input['menu_position'], array( 'topmenu', 'submenu' ) ) ? $input['menu_position'] : iubenda()->defaults['cs']['menu_position'];
1387
- $input['amp_support'] = (bool) isset( $input['amp_support'] );
1388
- $input['deactivation'] = (bool) isset( $input['deactivation'] );
1389
-
1390
- // multilang support
1391
- if ( iubenda()->multilang && ! empty( iubenda()->languages ) ) {
1392
- $iubenda_code = array();
1393
-
1394
- foreach ( iubenda()->languages as $lang_id => $lang_name ) {
1395
- $input['code_' . $lang_id] = $iubenda_code[$lang_id] = ! empty( $input['code_' . $lang_id] ) ? iubenda()->parse_code( $input['code_' . $lang_id] ) : '';
1396
-
1397
- // handle default lang too
1398
- if ( $lang_id == iubenda()->lang_default ) {
1399
- $input['code_default'] = ! empty( $input['code_' . $lang_id] ) ? iubenda()->parse_code( $input['code_' . $lang_id] ) : iubenda()->options['cs']['code_default'];
1400
- }
1401
- }
1402
- } else {
1403
- $iubenda_code = '';
1404
-
1405
- $input['code_default'] = $iubenda_code = ! empty( $input['code_default'] ) ? iubenda()->parse_code( $input['code_default'] ) : '';
1406
- }
1407
-
1408
- // generate amp template file
1409
- if ( isset( $input['amp_support'] ) ) {
1410
- $template_done = false;
1411
-
1412
- if ( ! empty( $iubenda_code ) ) {
1413
- if ( is_array( $iubenda_code ) ) {
1414
- $template_done = array();
1415
-
1416
- foreach ( $iubenda_code as $lang => $code ) {
1417
- $template_done[$lang] = (bool) iubenda()->AMP->generate_amp_template( $code, $lang );
1418
- }
1419
- } else {
1420
- $template_done = (bool) iubenda()->AMP->generate_amp_template( $iubenda_code );
1421
- }
1422
- }
1423
 
1424
- // Check if AMP is checked and the auto generated option is selected
1425
- if ("1" == $input['amp_support'] && 'local' == $input['amp_source']) {
1426
- if (is_bool($template_done) && false === $template_done) {
1427
- $message = "Currently, you do not have write permission for <i>%s</i>. For instructions on how to fix this, please read <a target=\"_blank\" href=\"%s\">our guide</a>.";
1428
- $our_guide_URL = 'https://www.iubenda.com/en/help/1215-cookie-solution-wordpress-plugin-installation-guide#amp-permissions';
1429
- $file_path = IUBENDA_PLUGIN_PATH . 'templates' . DIRECTORY_SEPARATOR;
1430
- add_settings_error('cs_settings_errors', 'iub_cs_settings_updated', __(sprintf($message, $file_path, $our_guide_URL), 'iubenda'), 'error');
1431
- }
1432
- }
1433
 
1434
- $input['amp_template_done'] = $template_done;
1435
-
1436
- if ( is_array( $input['amp_template'] ) ) {
1437
- foreach ( $input['amp_template'] as $lang => $template ) {
1438
- $input['amp_template'][$lang] = esc_url( $template );
1439
- }
1440
- } else {
1441
- $input['amp_template'] = esc_url( $input['amp_template'] );
1442
- }
1443
- }
1444
 
1445
- // scripts
1446
- if ( ! empty( $input['custom_scripts'] ) && ! empty( $input['custom_scripts']['script'] ) && ! empty( $input['custom_scripts']['type'] ) ) {
1447
- $scripts = array();
1448
 
1449
- // first field is template
1450
- if ( count( $input['custom_scripts']['script'] ) > 1 ) {
1451
- foreach ( $input['custom_scripts']['script'] as $number => $script ) {
1452
- $trimmed = trim( $script );
1453
 
1454
- if ( $trimmed !== '' )
1455
- $scripts[$trimmed] = (int) $input['custom_scripts']['type'][$number];
1456
- }
1457
- }
1458
 
1459
- $input['custom_scripts'] = $scripts;
1460
- } else
1461
- $input['custom_scripts'] = array();
1462
 
1463
- // iframes
1464
- if ( ! empty( $input['custom_iframes'] ) && ! empty( $input['custom_iframes']['iframe'] ) && ! empty( $input['custom_iframes']['type'] ) ) {
1465
- $iframes = array();
1466
 
1467
- // first field is template
1468
- if ( count( $input['custom_iframes']['iframe'] ) > 1 ) {
1469
- foreach ( $input['custom_iframes']['iframe'] as $number => $iframe ) {
1470
- $trimmed = trim( $iframe );
1471
 
1472
- if ( $trimmed !== '' )
1473
- $iframes[$trimmed] = (int) $input['custom_iframes']['type'][$number];
1474
- }
1475
- }
1476
 
1477
- $input['custom_iframes'] = $iframes;
1478
- } else
1479
- $input['custom_iframes'] = array();
1480
 
1481
- add_settings_error( 'cs_settings_errors', 'iub_cs_settings_updated', __( 'Settings saved.', 'iubenda' ), 'updated' );
1482
- // reset options
1483
- } elseif ( isset( $_POST['reset_iubenda_options'] ) ) {
1484
- $input = iubenda()->defaults['cs'];
 
 
1485
 
1486
- // multilang support
1487
- if ( iubenda()->multilang && ! empty( iubenda()->languages ) ) {
1488
- foreach ( iubenda()->languages as $lang_id => $lang_name ) {
1489
- $input['code_' . $lang_id] = '';
1490
- }
1491
- }
 
 
 
 
1492
 
1493
- add_settings_error( 'cs_settings_errors', 'iub_cs_settings_restored', __( 'Settings restored to defaults.', 'iubenda' ), 'updated' );
1494
- }
1495
 
1496
- return $input;
1497
- }
1498
 
1499
- /**
1500
- * Save consent solution options.
1501
- *
1502
- * @return void
1503
- */
1504
- public function save_consent_options( $input ) {
1505
 
1506
- if ( ! current_user_can( apply_filters( 'iubenda_cookie_law_cap', 'manage_options' ) ) )
1507
- return $input;
 
1508
 
1509
- // save options
1510
- if ( isset( $_POST['save_consent_options'] ) ) {
1511
- $input['public_api_key'] = isset( $input['public_api_key'] ) ? esc_attr( $input['public_api_key'] ) : '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1512
 
1513
- add_settings_error( 'cons_settings_errors', 'iub_cons_settings_updated', __( 'Settings saved.', 'iubenda' ), 'updated' );
1514
- // reset options
1515
- } elseif ( isset( $_POST['reset_consent_options'] ) ) {
1516
- $input = iubenda()->defaults['cons'];
1517
 
1518
- add_settings_error( 'cons_settings_errors', 'iub_cons_settings_restored', __( 'Settings restored to defaults.', 'iubenda' ), 'updated' );
1519
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1520
 
1521
- return $input;
1522
- }
1523
 
1524
- /**
1525
- * Process the bulk actions
1526
- *
1527
- * @return void
1528
- */
1529
- public function process_actions() {
1530
- global $pagenow;
1531
-
1532
- $page = ! empty( $_POST['option_page'] ) ? esc_attr( $_POST['option_page'] ) : ( ! empty( $_GET['page'] ) ? esc_attr( $_GET['page'] ) : '' );
1533
- $id = isset( $_REQUEST['form_id'] ) ? ( is_array( $_REQUEST['form_id'] ) ? array_map( 'ansint', $_REQUEST['form_id'] ) : absint( $_REQUEST['form_id'] ) ) : false;
1534
- $tab_key = ! empty( $_GET['tab'] ) ? esc_attr( $_GET['tab'] ) : 'cs';
1535
-
1536
- if ( ! $page )
1537
- return;
1538
-
1539
- // get redirect url
1540
- if ( iubenda()->options['cs']['menu_position'] === 'submenu' && $pagenow === 'admin.php' ) {
1541
- // sub menu
1542
- $redirect_to = admin_url( 'options-general.php?page=iubenda&tab=' . $tab_key );
1543
- } else {
1544
- // top menu
1545
- $redirect_to = admin_url( 'admin.php?page=iubenda&tab=' . $tab_key );
1546
- }
1547
 
1548
- // add comments cookie option notice
1549
- if ( $tab_key != 'cs' && ! empty( iubenda()->options['cons']['public_api_key'] ) ) {
1550
- $cookies_enabled = get_option( 'show_comments_cookies_opt_in' );
1551
 
1552
- if ( ! $cookies_enabled ) {
1553
- $this->add_notice( 'iub_comment_cookies_disabled', sprintf( __( 'Please enable comments cookies opt-in checkbox in the <a href="%s" target="_blank">Discussion settings</a>.', 'iubenda' ), esc_url( admin_url( 'options-discussion.php' ) ) ), 'notice' );
1554
- }
1555
- }
1556
 
1557
- $result = null;
 
1558
 
1559
- switch ( $this->action ) {
1560
- case 'autodetect' :
1561
- $result = iubenda()->forms->autodetect_forms();
1562
 
1563
- // new forms notice
1564
- if ( ! empty( $result['new'] ) )
1565
- $this->add_notice( 'iub_autodetect_success', sprintf( _n( '%d form detected successfully.', '%d forms detected successfully.', count( $result['new'] ), 'iubenda' ), count( $result['new'] ) ), 'success' );
1566
 
1567
- // forms changed notice
1568
- if ( ! empty( $result['updated'] ) )
1569
- $this->add_notice( 'iub_autodetect_success', sprintf( _n( '%d form change detected.', '%d form changes detected.', count( $result['updated'] ), 'iubenda' ), count( $result['updated'] ) ), 'success' );
1570
-
1571
- // no changes notice
1572
- if ( empty( $result['new'] ) && empty( $result['updated'] ) )
1573
- $this->add_notice( 'iub_autodetect_success', __( 'No forms or form changes detected.', 'iubenda' ), 'error' );
1574
 
1575
- // make sure it's current host location
1576
- wp_safe_redirect( $redirect_to );
1577
- exit;
 
1578
 
1579
- break;
 
1580
 
1581
- case 'save' :
1582
- if ( ! $id )
1583
- return;
1584
 
1585
- $form = iubenda()->forms->get_form( $id );
 
 
 
 
1586
 
1587
- if ( $form->ID != $id )
1588
- return;
1589
 
1590
- $status = isset( $_POST['status'] ) && in_array( $_POST['status'], array_keys( iubenda()->forms->statuses ) ) ? esc_attr( $_POST['status'] ) : 'publish';
1591
- $subject = isset( $_POST['subject'] ) && is_array( $_POST['subject'] ) ? array_map( 'esc_attr', $_POST['subject'] ) : array();
1592
- $preferences = array();
1593
- $exclude = array();
1594
- $legal_notices = array();
 
1595
 
1596
- $preferences_raw = isset( $_POST['preferences'] ) && is_array( $_POST['preferences'] ) ? array_map( array( $this, 'array_map_callback' ), $_POST['preferences'] ) : array();
1597
- $exclude_raw = isset( $_POST['exclude'] ) && is_array( $_POST['exclude'] ) ? array_map( array( $this, 'array_map_callback' ), $_POST['exclude'] ) : array();
1598
- $legal_notices_raw = isset( $_POST['legal_notices'] ) && is_array( $_POST['legal_notices'] ) ? array_map( array( $this, 'array_map_callback' ), $_POST['legal_notices'] ) : array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1599
 
1600
- // format preferences data
1601
- if ( ! empty( $preferences_raw ) && is_array( $preferences_raw ) ) {
1602
- foreach ( $preferences_raw as $index => $data ) {
1603
- if ( ! empty( $data['field'] ) && ( ! is_null( $data['value'] ) || ! "" == $data['value'] ) ) {
1604
- $preferences[ sanitize_key( $data['field'] ) ] = $data['value'];
1605
- }
1606
- }
1607
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1608
 
1609
- // format exclude data
1610
- if ( ! empty( $exclude_raw ) && is_array( $exclude_raw ) ) {
1611
- foreach ( $exclude_raw as $index => $data ) {
1612
- if ( ! empty( $data['field'] ) )
1613
- $exclude[] = $data['field'];
1614
- }
1615
- }
1616
 
1617
- // format legal notices data
1618
- if ( ! empty( $legal_notices_raw ) && is_array( $legal_notices_raw ) ) {
1619
- foreach ( $legal_notices_raw as $index => $data ) {
1620
- if ( ! empty( $data['field'] ) )
1621
- $legal_notices[] = $data['field'];
1622
- }
1623
- }
1624
-
1625
- // form first save, update status to mapped automatically
1626
- if ( empty( $form->form_subject ) && empty( $form->form_preferences ) ) {
1627
- $status = 'mapped';
1628
- }
1629
-
1630
- // echo '<pre>'; print_r( $_POST ); echo '</pre>'; exit;
1631
- $filtered_subjects = array_filter($subject, array(
1632
- $this,
1633
- 'is_not_empty'
1634
- ));
1635
 
1636
- // bail if empty fields
1637
- if ( ! count( $filtered_subjects ) ) {
1638
- $this->add_notice( 'iub_form_fields_missing', __( 'Form saving failed. Please fill the Subject fields.', 'iubenda' ), 'error' );
1639
- return;
1640
- }
1641
 
1642
- $args = array(
1643
- 'ID' => $form->ID,
1644
- 'status' => $status,
1645
- 'object_type' => $form->object_type,
1646
- 'object_id' => $form->object_id,
1647
- 'form_source' => $form->form_source,
1648
- 'form_title' => $form->post_title,
1649
- 'form_date' => $form->post_modified,
1650
- 'form_fields' => $form->form_fields,
1651
- 'form_subject' => $subject,
1652
- 'form_preferences' => $preferences,
1653
- 'form_exclude' => $exclude,
1654
- 'form_legal_notices' => $legal_notices
1655
- );
1656
 
1657
- $result = iubenda()->forms->save_form( $args );
 
 
 
 
 
 
1658
 
1659
- if ( $result ) {
1660
- // form save, inform about form status update
1661
- if ( empty( $form->form_subject ) && empty( $form->form_preferences ) ) {
1662
- $this->add_notice( 'iub_form_saved', __( 'Form saved successfully - form status changed to Mapped.', 'iubenda' ), 'success' );
1663
- // form update
1664
- } else {
1665
- $this->add_notice( 'iub_form_updated', __( 'Form updated successfully.', 'iubenda' ), 'success' );
1666
- }
1667
- } else {
1668
- $this->add_notice( 'iub_form_failed', __( 'Form saving failed.', 'iubenda' ), 'error' );
1669
- }
1670
 
1671
- break;
1672
-
1673
- case 'delete' :
1674
- if ( ! $id )
1675
- return;
1676
-
1677
- $form = iubenda()->forms->get_form( $id );
1678
-
1679
- if ( empty( $form ) )
1680
- return;
1681
-
1682
- $result = iubenda()->forms->delete_form( $id );
1683
-
1684
- if ( $result )
1685
- $this->add_notice( 'iub_form_deleted', __( 'Form deleted successfully.', 'iubenda' ), 'success' );
1686
- else
1687
- $this->add_notice( 'iub_form_delete_failed', __( 'Form delete failed.', 'iubenda' ), 'error' );
1688
-
1689
- // make sure it's current host location
1690
- wp_safe_redirect( $redirect_to );
1691
- exit;
1692
-
1693
- break;
1694
-
1695
- case 'disable_skip_parsing' :
1696
-
1697
- // disable skip parsing option
1698
- $options = iubenda()->options['cs'];
1699
- $options['skip_parsing'] = false;
1700
-
1701
- update_option( 'iubenda_cookie_law_solution', $options );
1702
-
1703
- $this->add_notice( 'iub_settings_updated', __( 'Settings saved.', 'iubenda' ), 'success' );
1704
-
1705
- // make sure it's current host location
1706
- wp_safe_redirect( $redirect_to );
1707
- exit;
1708
-
1709
- break;
1710
-
1711
- default :
1712
- return;
1713
- }
1714
 
1715
- if ( ! empty ( $result ) ) {
1716
- //
1717
- } else {
1718
- //
1719
- }
1720
- }
 
 
 
1721
 
1722
- /**
1723
- * Add admin notice.
1724
- *
1725
- * @param mixed $message
1726
- * @param string $notice_type
1727
- */
1728
- public function add_notice( $key, $message, $notice_type = 'notice' ) {
1729
- $key = ! empty( $key ) ? sanitize_key( $key ) : '';
1730
- $message = ! empty( $message ) ? wp_kses_post( $message ) : '';
1731
- $notice_type = ! empty( $notice_type ) && in_array( $notice_type, $this->notice_types ) ? $notice_type : 'notice';
1732
 
1733
- if ( ! $key || ! $message )
1734
- return;
 
 
 
 
 
 
 
 
1735
 
1736
- $notices = get_transient( 'iubenda_dashboard_notices' );
1737
- $delay = MINUTE_IN_SECONDS * 2;
1738
 
1739
- // Check notice type is exist before checking the key
1740
- if ( empty( $notices ) || ( isset( $notices[ $notice_type ] ) && ! array_key_exists( $key, $notices[ $notice_type ] ) ) ) {
1741
- $notices[$notice_type][$key] = $message;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1742
 
1743
- set_transient( 'iubenda_dashboard_notices', $notices, $delay );
1744
- }
1745
- }
 
 
 
 
 
 
1746
 
1747
- /**
1748
- * Display admin notices.
1749
- *
1750
- * @return mixed
1751
- */
1752
- public function print_notices() {
1753
- $notices = get_transient( 'iubenda_dashboard_notices' );
1754
- $notices_array = array();
1755
 
1756
- foreach ( $this->notice_types as $notice_type ) {
1757
- if ( $this->notice_count( $notices, $notice_type ) > 0 ) {
1758
- echo '<div class="notice notice-' . ( $notice_type === 'notice' ? 'info' : $notice_type ) . ' below-h2 is-dismissible">';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1759
 
1760
- foreach ( $notices[$notice_type] as $key => $notice ) {
1761
- echo '<p><strong>' . wp_kses_post( $notice ) . '</strong></p>';
1762
- }
 
 
 
 
 
 
 
1763
 
1764
- echo '<button type="button" class="notice-dismiss"><span class="screen-reader-text">' . __( 'Dismiss this notice.' ) . '</span></button>';
 
 
 
 
 
 
 
 
 
 
 
1765
 
1766
- echo '</div>';
1767
- }
1768
- }
 
 
1769
 
1770
- delete_transient( 'iubenda_dashboard_notices' );
1771
- }
1772
 
1773
- /**
1774
- * Count notices function.
1775
- *
1776
- * @param string $notice_type
1777
- * @return int
1778
- */
1779
- public function notice_count( $all_notices = array(), $notice_type = '' ) {
1780
- $notice_count = 0;
1781
-
1782
- if ( isset( $all_notices[$notice_type] ) ) {
1783
- $notice_count = absint( sizeof( $all_notices[$notice_type] ) );
1784
- } elseif ( empty( $notice_type ) ) {
1785
- foreach ( $all_notices as $notices ) {
1786
- $notice_count += absint( sizeof( $all_notices ) );
1787
- }
1788
- }
1789
 
1790
- return $notice_count;
1791
- }
1792
 
1793
- /**
1794
- * Adjust highlighted menu.
1795
- *
1796
- * @param type $file
1797
- * @return type
1798
- */
1799
- public function submenu_file( $submenu_file, $parent_file ) {
1800
- global $menu, $submenu;
1801
 
1802
- if ( $parent_file == 'iubenda' ) {
1803
- $tab_key = ! empty( $_GET['tab'] ) ? esc_attr( $_GET['tab'] ) : 'cs';
 
 
 
 
 
 
 
 
 
 
 
1804
 
1805
- if ( $tab_key == 'cons' ) {
1806
- $submenu_file = 'admin.php?page=iubenda&tab=cons';
1807
- $submenu['iubenda'][1][2] = 'admin.php?page=iubenda&tab=cons';
1808
- }
1809
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1810
 
1811
- return $submenu_file;
1812
- }
 
 
 
1813
 
1814
- /**
1815
- * Sanitize array helper function.
1816
- *
1817
- * @param array $array
1818
- * @return array
1819
- */
1820
- public function array_map_callback( $array ) {
1821
- if ( ! is_array( $array ) )
1822
- return array();
1823
 
1824
- return array_map( 'esc_attr', $array );
1825
- }
 
 
 
 
1826
 
1827
- /**
1828
- * Check the value is not empty and check it contains any value even 0
1829
- *
1830
- * @param $value
1831
- * @return bool
1832
- */
1833
- private function is_not_empty($value) {
1834
- if(is_null($value) || '' === $value){
1835
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1836
  }
1837
 
1838
- return true;
1839
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1840
  }
9
  * @class Post_Views_Counter_Settings
10
  */
11
  class iubenda_Settings {
12
+ const IUB_QG_Response = 'iubenda_quick_generator_response';
13
+ public $tabs = [];
14
  public $action = '';
15
+ public $links = [];
16
+ public $notice_types = ['error', 'success', 'notice'];
17
+ public $subject_fields = [];
18
+ public $quick_generator = [];
19
+ public $services = [];
20
+
21
 
22
  public function __construct() {
23
+ if(array_get($_GET, 'page') == 'iubenda'){
24
+ add_action('admin_head', array( $this, 'iubdena_hide_notices_wp' ));
25
+ }
26
+
27
  // actions
28
  add_action( 'after_setup_theme', array( $this, 'load_defaults' ) );
 
29
  add_action( 'admin_init', array( $this, 'update_plugin' ), 9 );
 
 
 
30
  add_action( 'admin_menu', array( $this, 'admin_menu_options' ) );
31
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
32
+ add_action( 'admin_print_styles', array( $this, 'admin_print_styles' ) );
33
+ add_action( 'admin_init', array( $this, 'process_actions' ), 20 );
34
+ add_action( 'admin_init', array( $this, 'maybe_show_notice' ) );
35
+ add_action( 'wp_ajax_iubenda_dismiss_notice', array( $this, 'dismiss_notice' ) );
36
+
37
+ add_action( 'wp_ajax_update_options', array($this, 'update_options'));
38
+
39
+ add_action( 'wp_ajax_quick_generator_api', array(new QuickGeneratorService(), 'quick_generator_api'));
40
+ add_action( 'wp_ajax_integrate_setup', array(new QuickGeneratorService(), 'integrate_setup'));
41
+ add_action( 'wp_ajax_cs_configuration', array(new QuickGeneratorService(), 'cs_configuration')); //todo - not in the right place
42
+ add_action( 'wp_ajax_pp_configuration', array(new QuickGeneratorService(), 'pp_configuration')); //todo - not in the right place
43
+ add_action( 'wp_ajax_tc_configuration', array(new QuickGeneratorService(), 'tc_configuration')); //todo - not in the right place
44
+ add_action( 'wp_ajax_cons_configuration', array(new QuickGeneratorService(), 'cons_configuration')); //todo - not in the right place
45
+ add_action( 'wp_ajax_toggle_services', array($this, 'toggle_services'));
46
+ add_action( 'wp_ajax_save_public_api_key', array(new QuickGeneratorService(), 'save_public_api_key')); //todo - not in the right place
47
+ add_action( 'wp_ajax_auto_detect_forms', array(new QuickGeneratorService(), 'auto_detect_forms')); //todo - not in the right place
48
+
49
+ add_action( 'wp_ajax_ajax_save_options', array(new QuickGeneratorService(), 'ajax_save_options'));
50
+
51
+ add_action('wp_ajax_radar_percentage_reload', array(new RadarService(), 'askRadarToSendRequest')); //todo - not in the right place
52
+
53
+ // Getting main div in frontpage with updated data
54
+ add_action( 'wp_ajax_frontpage_main_box', [$this, 'get_frontpage_main_box']);
55
+
56
+ register_setting( 'iubenda_consent_solution_forms', 'status' );
57
+
58
+ register_setting( 'iubenda_consent_solution', 'iubenda_consent_forms' );
59
+ add_shortcode( 'iub-tc-button', array( new QuickGeneratorService(), 'tc_button_shortcode' ) );
60
+ add_shortcode( 'iub-pp-button', array( new QuickGeneratorService(), 'pp_button_shortcode' ) );
61
+
62
+ }
63
 
64
  /**
65
  * Load default settings.
66
  */
67
  public function load_defaults() {
68
+ $this->services = $this->services_option();
69
+
70
+ $this->subject_fields = array(
71
  'id' => __( 'string', 'iubenda' ),
72
  'email' => __( 'string', 'iubenda' ),
73
  'first_name' => __( 'string', 'iubenda' ),
105
  4 => __( 'Analytics', 'iubenda' ),
106
  5 => __( 'Targeting & Advertising', 'iubenda' )
107
  );
108
+ $siteId = array_get(iubenda()->options['global_options'], 'site_id');
109
+
110
+ $QG_Response = (new QuickGeneratorService())->QG_Response;
111
 
112
  $links = array(
113
  'en' => array(
114
  'iab' => 'https://www.iubenda.com/en/help/7440-enable-preference-management-iab-framework',
115
+ 'enable_iab' => 'https://www.iubenda.com/en/help/7440-iab-framework-cmp#why-publishers-should-enable-the-transparency-and-consent-framework',
116
+ 'guide' => 'https://www.iubenda.com/en/cookie-solution',
117
  'plugin_page' => 'https://www.iubenda.com/en/help/posts/1215',
 
118
  'support_forum' => 'https://support.iubenda.com/support/home',
119
+ 'documentation' => 'https://www.iubenda.com/en/help/posts/1215',
120
+ 'how_generate_tc' => 'https://www.iubenda.com/en/help/19461',
121
+ 'how_generate_cs' => 'https://www.iubenda.com/en/help/1177',
122
+ 'how_generate_pp' => 'https://www.iubenda.com/en/help/463-generate-privacy-policy',
123
+ 'how_generate_cons' => 'https://www.iubenda.com/en/help/6473-consent-solution-js-documentation#generate-embed',
124
+ 'about_pp' => 'https://www.iubenda.com/en/privacy-and-cookie-policy-generator',
125
+ 'about_cs' => 'https://www.iubenda.com/en/cookie-solution',
126
+ 'about_tc' => 'https://www.iubenda.com/en/terms-and-conditions-generator',
127
+ 'flow_page' => "https://www.iubenda.com/en/flow/{$siteId}",
128
+ 'about_cons' => 'https://www.iubenda.com/en/consent-solution',
129
+ 'amp_support' => 'https://www.iubenda.com/en/help/22135-cookie-solution-amp-wordpress#amp-domain',
130
+ 'enable_amp_support' => 'https://www.iubenda.com/en/help/22135-cookie-solution-amp-wordpress#step-2-enable-the-google-amp-support',
131
+ 'wordpress_support' => 'https://www.iubenda.com/en/help/370-how-to-use-iubenda-privacy-and-cookie-policy-on-a-wordpress-website',
132
+ 'privacy_policy_generator_edit' => array_get($QG_Response, 'privacy_policies.en.edit_url', '') ?? '',
133
+ 'privacy_policy_generator_setup' => array_get($QG_Response, 'privacy_policies.en.setup_url', '') ?? '',
134
+ 'automatic_block_scripts' => 'https://www.iubenda.com/en/help/1215-cookie-solution-wordpress-plugin-installation-guide#functionality',
135
  ),
136
+ 'it' => array(
137
+ 'iab' => 'https://www.iubenda.com/it/help/7440-enable-preference-management-iab-framework',
138
+ 'enable_iab' => 'https://www.iubenda.com/it/help/7440-iab-framework-cmp#why-publishers-should-enable-the-transparency-and-consent-framework',
139
+ 'guide' => 'https://www.iubenda.com/it/cookie-solution',
140
+ 'plugin_page' => 'https://www.iubenda.com/it/help/posts/810',
141
+ 'support_forum' => 'https://support.iubenda.com/support/home',
142
+ 'documentation' => 'https://www.iubenda.com/it/help/posts/810',
143
+ 'how_generate_tc' => 'https://www.iubenda.com/it/help/19394',
144
+ 'how_generate_cs' => 'https://www.iubenda.com/it/help/680',
145
+ 'how_generate_pp' => 'https://www.iubenda.com/it/help/463-generate-privacy-policy',
146
+ 'how_generate_cons' => 'https://www.iubenda.com/it/help/6473-consent-solution-js-documentation#generate-embed',
147
+ 'about_pp' => 'https://www.iubenda.com/it/privacy-and-cookie-policy-generator',
148
+ 'about_cs' => 'https://www.iubenda.com/it/cookie-solution',
149
+ 'about_tc' => 'https://www.iubenda.com/it/terms-and-conditions-generator',
150
+ 'flow_page' => "https://www.iubenda.com/it/flow/{$siteId}",
151
+ 'about_cons' => 'https://www.iubenda.com/it/consent-solution',
152
+ 'amp_support' => 'https://www.iubenda.com/it/help/22135-cookie-solution-amp-wordpress#amp-domain',
153
+ 'enable_amp_support' => 'https://www.iubenda.com/it/help/22135-cookie-solution-amp-wordpress#step-2-enable-the-google-amp-support',
154
+ 'wordpress_support' => 'https://www.iubenda.com/it/help/370-how-to-use-iubenda-privacy-and-cookie-policy-on-a-wordpress-website',
155
+ 'privacy_policy_generator_edit' => array_get($QG_Response, 'privacy_policies.it.edit_url', '') ?? '',
156
+ 'privacy_policy_generator_setup' => array_get($QG_Response, 'privacy_policies.it.setup_url', '') ?? '',
157
+ 'automatic_block_scripts' => 'https://www.iubenda.com/it/help/1215-cookie-solution-wordpress-plugin-installation-guide#functionality',
158
+ ),
159
+ 'de' => array(
160
+ 'iab' => 'https://www.iubenda.com/de/help/7440-enable-preference-management-iab-framework',
161
+ 'enable_iab' => 'https://www.iubenda.com/de/help/7440-iab-framework-cmp#why-publishers-should-enable-the-transparency-and-consent-framework',
162
+ 'guide' => 'https://www.iubenda.com/de/cookie-solution',
163
+ 'plugin_page' => 'https://www.iubenda.com/de/help/posts/810',
164
+ 'support_forum' => 'https://support.iubenda.com/support/home',
165
+ 'documentation' => 'https://www.iubenda.com/de/help/posts/810',
166
+ 'how_generate_tc' => 'https://www.iubenda.com/de/help/19394',
167
+ 'how_generate_cs' => 'https://www.iubenda.com/de/help/680',
168
+ 'how_generate_pp' => 'https://www.iubenda.com/de/help/463-generate-privacy-policy',
169
+ 'how_generate_cons' => 'https://www.iubenda.com/de/help/6473-consent-solution-js-documentation#generate-embed',
170
+ 'about_pp' => 'https://www.iubenda.com/de/privacy-and-cookie-policy-generator',
171
+ 'about_cs' => 'https://www.iubenda.com/de/cookie-solution',
172
+ 'about_tc' => 'https://www.iubenda.com/de/terms-and-conditions-generator',
173
+ 'flow_page' => "https://www.iubenda.com/de/flow/{$siteId}",
174
+ 'about_cons' => 'https://www.iubenda.com/de/consent-solution',
175
+ 'amp_support' => 'https://www.iubenda.com/de/help/22135-cookie-solution-amp-wordpress#amp-domain',
176
+ 'enable_amp_support' => 'https://www.iubenda.com/de/help/22135-cookie-solution-amp-wordpress#step-2-enable-the-google-amp-support',
177
+ 'wordpress_support' => 'https://www.iubenda.com/de/help/370-how-to-use-iubenda-privacy-and-cookie-policy-on-a-wordpress-website',
178
+ 'privacy_policy_generator_edit' => array_get($QG_Response, 'privacy_policies.de.edit_url', '') ?? '',
179
+ 'privacy_policy_generator_setup' => array_get($QG_Response, 'privacy_policies.de.setup_url', '') ?? '',
180
+ 'automatic_block_scripts' => 'https://www.iubenda.com/de/help/1215-cookie-solution-wordpress-plugin-installation-guide#functionality',
181
+ ),
182
+ 'es' => array(
183
+ 'iab' => 'https://www.iubenda.com/es/help/7440-enable-preference-management-iab-framework',
184
+ 'enable_iab' => 'https://www.iubenda.com/es/help/7440-iab-framework-cmp#why-publishers-should-enable-the-transparency-and-consent-framework',
185
+ 'guide' => 'https://www.iubenda.com/es/cookie-solution',
186
+ 'plugin_page' => 'https://www.iubenda.com/es/help/posts/810',
187
+ 'support_forum' => 'https://support.iubenda.com/support/home',
188
+ 'documentation' => 'https://www.iubenda.com/es/help/posts/810',
189
+ 'how_generate_tc' => 'https://www.iubenda.com/es/help/19394',
190
+ 'how_generate_cs' => 'https://www.iubenda.com/es/help/680',
191
+ 'how_generate_pp' => 'https://www.iubenda.com/es/help/463-generate-privacy-policy',
192
+ 'how_generate_cons' => 'https://www.iubenda.com/es/help/6473-consent-solution-js-documentation#generate-embed',
193
+ 'about_pp' => 'https://www.iubenda.com/es/privacy-and-cookie-policy-generator',
194
+ 'about_cs' => 'https://www.iubenda.com/es/cookie-solution',
195
+ 'about_tc' => 'https://www.iubenda.com/es/terms-and-conditions-generator',
196
+ 'flow_page' => "https://www.iubenda.com/es/flow/{$siteId}",
197
+ 'about_cons' => 'https://www.iubenda.com/es/consent-solution',
198
+ 'amp_support' => 'https://www.iubenda.com/es/help/22135-cookie-solution-amp-wordpress#amp-domain',
199
+ 'enable_amp_support' => 'https://www.iubenda.com/es/help/22135-cookie-solution-amp-wordpress#step-2-enable-the-google-amp-support',
200
+ 'wordpress_support' => 'https://www.iubenda.com/es/help/370-how-to-use-iubenda-privacy-and-cookie-policy-on-a-wordpress-website',
201
+ 'privacy_policy_generator_edit' => array_get($QG_Response, 'privacy_policies.es.edit_url', '') ?? '',
202
+ 'privacy_policy_generator_setup' => array_get($QG_Response, 'privacy_policies.es.setup_url', '') ?? '',
203
+ 'automatic_block_scripts' => 'https://www.iubenda.com/es/help/1215-cookie-solution-wordpress-plugin-installation-guide#functionality',
204
+ ),
205
+ 'fr' => array(
206
+ 'iab' => 'https://www.iubenda.com/fr/help/7440-enable-preference-management-iab-framework',
207
+ 'enable_iab' => 'https://www.iubenda.com/fr/help/7440-iab-framework-cmp#why-publishers-should-enable-the-transparency-and-consent-framework',
208
+ 'guide' => 'https://www.iubenda.com/fr/cookie-solution',
209
+ 'plugin_page' => 'https://www.iubenda.com/fr/help/posts/810',
210
+ 'support_forum' => 'https://support.iubenda.com/support/home',
211
+ 'documentation' => 'https://www.iubenda.com/fr/help/posts/810',
212
+ 'how_generate_tc' => 'https://www.iubenda.com/fr/help/19394',
213
+ 'how_generate_cs' => 'https://www.iubenda.com/fr/help/680',
214
+ 'how_generate_pp' => 'https://www.iubenda.com/fr/help/463-generate-privacy-policy',
215
+ 'how_generate_cons' => 'https://www.iubenda.com/fr/help/6473-consent-solution-js-documentation#generate-embed',
216
+ 'about_pp' => 'https://www.iubenda.com/fr/privacy-and-cookie-policy-generator',
217
+ 'about_cs' => 'https://www.iubenda.com/fr/cookie-solution',
218
+ 'about_tc' => 'https://www.iubenda.com/fr/terms-and-conditions-generator',
219
+ 'flow_page' => "https://www.iubenda.com/fr/flow/{$siteId}",
220
+ 'about_cons' => 'https://www.iubenda.com/fr/consent-solution',
221
+ 'amp_support' => 'https://www.iubenda.com/fr/help/22135-cookie-solution-amp-wordpress#amp-domain',
222
+ 'enable_amp_support' => 'https://www.iubenda.com/fr/help/22135-cookie-solution-amp-wordpress#step-2-enable-the-google-amp-support',
223
+ 'wordpress_support' => 'https://www.iubenda.com/fr/help/370-how-to-use-iubenda-privacy-and-cookie-policy-on-a-wordpress-website',
224
+ 'privacy_policy_generator_edit' => array_get($QG_Response, 'privacy_policies.fr.edit_url', '') ?? '',
225
+ 'privacy_policy_generator_setup' => array_get($QG_Response, 'privacy_policies.fr.setup_url', '') ?? '',
226
+ 'automatic_block_scripts' => 'https://www.iubenda.com/fr/help/1215-cookie-solution-wordpress-plugin-installation-guide#functionality',
227
+ ),
228
+ 'pt-br' => array(
229
+ 'iab' => 'https://www.iubenda.com/pt-br/help/7440-enable-preference-management-iab-framework',
230
+ 'enable_iab' => 'https://www.iubenda.com/pt-br/help/7440-iab-framework-cmp#why-publishers-should-enable-the-transparency-and-consent-framework',
231
+ 'guide' => 'https://www.iubenda.com/pt-br/cookie-solution',
232
+ 'plugin_page' => 'https://www.iubenda.com/pt-br/help/posts/810',
233
+ 'support_forum' => 'https://support.iubenda.com/support/home',
234
+ 'documentation' => 'https://www.iubenda.com/pt-br/help/posts/810',
235
+ 'how_generate_tc' => 'https://www.iubenda.com/pt-br/help/19394',
236
+ 'how_generate_cs' => 'https://www.iubenda.com/pt-br/help/680',
237
+ 'how_generate_pp' => 'https://www.iubenda.com/pt-br/help/463-generate-privacy-policy',
238
+ 'how_generate_cons' => 'https://www.iubenda.com/pt-br/help/6473-consent-solution-js-documentation#generate-embed',
239
+ 'about_pp' => 'https://www.iubenda.com/pt-br/privacy-and-cookie-policy-generator',
240
+ 'about_cs' => 'https://www.iubenda.com/pt-br/cookie-solution',
241
+ 'about_tc' => 'https://www.iubenda.com/pt-br/terms-and-conditions-generator',
242
+ 'flow_page' => "https://www.iubenda.com/pt-br/flow/{$siteId}",
243
+ 'about_cons' => 'https://www.iubenda.com/pt-br/consent-solution',
244
+ 'amp_support' => 'https://www.iubenda.com/pt-br/help/22135-cookie-solution-amp-wordpress#amp-domain',
245
+ 'enable_amp_support' => 'https://www.iubenda.com/pt-br/help/22135-cookie-solution-amp-wordpress#step-2-enable-the-google-amp-support',
246
+ 'wordpress_support' => 'https://www.iubenda.com/pt-br/help/370-how-to-use-iubenda-privacy-and-cookie-policy-on-a-wordpress-website',
247
+ 'privacy_policy_generator_edit' => array_get($QG_Response, 'privacy_policies.pt-br.edit_url', '') ?? '',
248
+ 'privacy_policy_generator_setup' => array_get($QG_Response, 'privacy_policies.pt-br.setup_url', '') ?? '',
249
+ 'automatic_block_scripts' => 'https://www.iubenda.com/pt-br/help/1215-cookie-solution-wordpress-plugin-installation-guide#functionality',
250
+ )
251
  );
252
 
253
+ foreach ($this->services as $name => $service) {
254
+ $this->services[$name]['status'] = array_get(iubenda()->options, "activated_products.{$service['key']}", 'false');
255
+ }
256
+ $this->quick_generator = get_option(static::IUB_QG_Response) ?: [];
257
+
258
  $locale = explode( '_', get_locale() );
259
  $locale_code = $locale[0];
260
 
266
  // update item action
267
  $this->action = 'save';
268
  } else {
269
+ $this->action = isset( $_GET['action'] ) && -1 != $_GET['action'] ? esc_attr( $_GET['action'] ) : '';
270
+ $this->action = isset( $_GET['action2'] ) && -1 != $_GET['action2'] ? esc_attr( $_GET['action2'] ) : $this->action;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
271
  }
272
  }
273
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
  /**
275
  * Add submenu.
276
  *
287
  add_menu_page(
288
  'iubenda', 'iubenda', apply_filters( 'iubenda_cookie_law_cap', 'manage_options' ), 'iubenda', array( $this, 'options_page' ), 'none'
289
  );
 
 
290
  }
291
  }
292
 
293
+ private function check_site_is_already_made_setup() {
294
+ $result = array_filter(array_column($this->services, 'status'), function ($service) { return (stripos($service, 'false') === false); });
 
 
 
 
 
 
 
 
 
 
 
 
 
295
 
296
+ if ($result) {
297
+ return true;
298
+ }
 
 
 
 
 
 
299
 
300
+ // Check if the services are configured
301
+ $result = array_filter(array_column(iubenda()->options, 'configured'), function ($service) { return (stripos($service, 'false') === false); });
302
 
303
+ if ($result) {
304
+ return true;
305
+ }
 
 
 
306
 
307
+ return false;
308
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
309
 
310
+ /**
311
+ * Load admin options page.
312
+ *
313
+ * @return void
314
+ */
315
+ public function options_page() {
316
+ global $pagenow;
 
 
 
 
 
 
 
 
 
 
 
 
 
317
 
318
+ $show_products_page = $this->check_site_is_already_made_setup();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
319
 
320
+ if ( ! current_user_can( apply_filters( 'iubenda_cookie_law_cap', 'manage_options' ) ) ) {
321
+ wp_die( __( "You don't have permission to access this page.", 'iubenda' ) );
322
+ }
323
+ $default = 'frontpage';
324
 
325
+ if($show_products_page){
326
+ $default = 'products-page';
327
+ }elseif(!empty((new QuickGeneratorService())->QG_Response)){
328
+ $default = 'integrate-setup';
329
+ }
330
+ $view = array_get($_GET, 'view', $default);
331
+
332
+ switch ($view) {
333
+ case "integrate-setup":
334
+ require_once IUBENDA_PLUGIN_PATH . 'views/integrate-setup.php';
335
+ break;
336
+ case 'products-page':
337
+ require_once IUBENDA_PLUGIN_PATH . 'views/products-page.php';
338
+ break;
339
+ case "tc-configuration":
340
+ $pageLabels = [['title' => __('Terms and condition', 'iubenda')]];
341
+ $key = 'tc';
342
+ $service = array_get(iubenda()->settings->services, $key);
343
+ require_once IUBENDA_PLUGIN_PATH . 'views/tc-configuration.php';
344
+ break;
345
+ case "pp-configuration":
346
+ $pageLabels = [['title' => __('Privacy and Cookie Policy', 'iubenda')]];
347
+ $key = 'pp';
348
+ $service = array_get(iubenda()->settings->services, $key);
349
+ require_once IUBENDA_PLUGIN_PATH . 'views/pp-configuration.php';
350
+ break;
351
+ case "cs-configuration":
352
+ $pageLabels = [['title' => __('Cookie Solution', 'iubenda')]];
353
+ $key = 'cs';
354
+ $service = array_get(iubenda()->settings->services, $key);
355
+ require_once IUBENDA_PLUGIN_PATH . 'views/cs-configuration.php';
356
+ break;
357
+ case "cons-configuration":
358
+ $pageLabels = [['title' => __('Consent Solution', 'iubenda')]];
359
+ require_once IUBENDA_PLUGIN_PATH . 'views/cons-configuration.php';
360
+ break;
361
+ case "cons-form-edit":
362
+ $form_id = ! empty( $_GET['form_id'] ) ? absint( $_GET['form_id'] ) : 0;
363
+ $form = ! empty( $form_id ) ? iubenda()->forms->get_form( $form_id ) : false;
364
+
365
+ if ( ! $form ){
366
+ return;
367
+ }
368
+ $pageLabels = [
369
+ ['title' => __('Consent Solution', 'iubenda'), 'href' => add_query_arg( array( 'view' => 'cons-configuration' ), iubenda()->base_url )],
370
+ ['title' => $form->post_title]
371
+ ];
372
+ require_once IUBENDA_PLUGIN_PATH . 'views/cons-single-form.php';
373
+ break;
374
+ default:
375
+ if ($show_products_page) {
376
+ require_once IUBENDA_PLUGIN_PATH . 'views/products-page.php';
377
+ }
378
+ else {
379
+ require_once IUBENDA_PLUGIN_PATH . 'views/frontpage.php';
380
+ }
381
+ }
382
+ }
383
 
384
+ public function admin_enqueue_scripts($page) {
385
+ if ( ! in_array( $page, array( 'toplevel_page_iubenda', 'settings_page_iubenda' ) ) ){
386
+ wp_enqueue_style( 'iubenda-admin', IUBENDA_PLUGIN_URL . '/assets/css/admin.css' );
387
+ return;
388
+ }
389
+ wp_enqueue_style('iubenda-admin', IUBENDA_PLUGIN_URL . '/assets/css/style.css');
390
+ wp_enqueue_script('iubenda-admin', IUBENDA_PLUGIN_URL . '/assets/js/admin.js','','',true);
391
 
392
+ // Get radar api status
393
+ $iubendaRadarApiConfiguration = get_option('iubenda_radar_api_configuration', []) ?: [];
394
 
395
+ // Localize the script with new data
396
+ $iub_js_vars = [
397
+ 'site_url' => get_site_url(),
398
+ 'radar_status' => array_get($iubendaRadarApiConfiguration, 'status'),
399
+ 'form_id' => $_GET['form_id'] ?? 0,
400
+ ];
401
+ wp_localize_script( 'iubenda-admin', 'iub_js_vars', $iub_js_vars );
 
 
 
 
 
402
 
403
+ wp_register_script('iubenda-admin-tabs', IUBENDA_PLUGIN_URL . '/assets/js/tabs.js');
404
+ wp_enqueue_script('iubenda-admin-tabs', IUBENDA_PLUGIN_URL . '/assets/js/tabs.js', array(''), false, true);
405
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
406
 
407
  /**
408
  * Plugin options migration for versions < 1.14.0
418
 
419
  if ( $db_version != false ) {
420
  if ( version_compare( $db_version, '1.14.0', '<' ) ) {
421
+ $options = [];
422
 
423
  $old_new = array(
424
  'iubenda_parse' => 'parse',
425
  'skip_parsing' => 'skip_parsing',
426
  'iubenda_ctype' => 'ctype',
 
427
  'parser_engine' => 'parser_engine',
428
  'iubenda_output_feed' => 'output_feed',
429
  'iubenda-code-default' => 'code_default',
456
 
457
  add_option( 'iubenda_cookie_law_solution', $options, '', 'no' );
458
  add_option( 'iubenda_cookie_law_version', iubenda()->version, '', 'no' );
459
+ }
460
  }
461
+ }
462
 
463
+ public function update_options($data = []){
464
+ $data = $data ?: $_POST;
 
 
 
 
 
 
 
 
 
465
 
466
+ $products = [
467
+ 'iubenda_privacy_policy_solution' => 'pp',
468
+ 'iubenda_cookie_law_solution' => 'cs',
469
+ 'iubenda_terms_conditions_solution' => 'tc',
470
+ 'iubenda_consent_solution' => 'cons',
471
+ ];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
472
 
473
+ $result = $this->init_prepare_product_options($products, $data);
 
 
 
 
474
 
475
+ // Validate whether the product (CS) is active or not
476
+ $iubenda_cookie_law_solution_status = array_get($result, 'iubenda_activated_products.iubenda_cookie_law_solution', 'false') ?: 'false';
477
+ if($iubenda_cookie_law_solution_status != 'true'){
478
+ echo json_encode(['status' => 'error', 'responseText' => "( CS ) must be activated."]);
479
+ wp_die();
480
+ }
481
 
482
+ // validating Embed Codes of product contains at least one valid code if the product is activated
483
+ foreach (array_get($result, 'iubenda_activated_products', []) ?: [] as $product_name => $product_status) {
484
+ if($product_status == 'false' || $product_name == 'iubenda_consent_solution'){
485
+ continue;
486
+ }
487
+
488
+ // Count valid codes per $product_name and return error if doesn't have at least 1 valid code
489
+ if(count(array_filter(array_get($result, "codes_statues.{$product_name}_codes", []) ?: [])) == 0){
490
+ echo json_encode(['status' => 'error', 'responseText' => "( {$product_name} ) At least one code must be valid."]);
491
+ wp_die();
492
+ }
493
+ }
494
 
495
+ $this->save_init_prepared_product_options($products, $result);
 
496
 
497
+ $data = [
498
+ 'status' => 'done',
499
+ ];
500
+ echo json_encode($data);
501
+ wp_die();
502
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
503
 
504
+ public function toggle_services(){
505
+ $name = array_get($_POST, 'name');
506
+ $status = array_get($_POST, 'status');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
507
 
508
+ if($status != 'true'){
509
+ $status = 'false';
510
+ }
511
 
512
+ $iubenda_activated_products = get_option( 'iubenda_activated_products');
513
+ $iubenda_activated_products[$name] = $status;
514
 
515
+ update_option( 'iubenda_activated_products', $iubenda_activated_products );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
516
 
517
+ // Reload Options and activated products
518
+ iubenda()->options['activated_products'] = get_option( 'iubenda_activated_products', [] );
519
+ $this->load_defaults();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
520
 
521
+ $data = ['status' => 'done', 'rating_percentage' => iubenda()->serviceRating->servicesPercentage()];
522
+ echo json_encode($data);
523
+ wp_die();
524
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
525
 
526
+ /**
527
+ * Process the bulk actions
528
+ *
529
+ * @return void
530
+ */
531
+ public function process_actions() {
532
+ global $pagenow;
533
+
534
+ $page = ! empty( $_POST['option_page'] ) ? esc_attr( $_POST['option_page'] ) : ( ! empty( $_GET['page'] ) ? esc_attr( $_GET['page'] ) : '' );
535
+ $id = isset( $_REQUEST['form_id'] ) ? ( is_array( $_REQUEST['form_id'] ) ? array_map( 'ansint', $_REQUEST['form_id'] ) : absint( $_REQUEST['form_id'] ) ) : false;
536
+ $view_key = ! empty( $_GET['view'] ) ? esc_attr( $_GET['view'] ) : null;
537
+
538
+ if ( ! $page )
539
+ return;
540
+
541
+ // get redirect url
542
+ if ( iubenda()->options['cs']['menu_position'] === 'submenu' && $pagenow === 'admin.php' ) {
543
+ // sub menu
544
+ $redirect_to = admin_url( 'options-general.php?page=iubenda&view=' . $view_key );
545
+ } else {
546
+ // top menu
547
+ $redirect_to = admin_url( 'admin.php?page=iubenda&view=' . $view_key );
548
+ }
549
 
550
+ // add comments cookie option notice
551
+ if ( $view_key == 'cons-configuration' && ! empty( iubenda()->options['cons']['public_api_key'] ) ) {
552
+ $cookies_enabled = get_option( 'show_comments_cookies_opt_in' );
553
+ if ( ! $cookies_enabled ) {
554
+ $this->add_notice( 'iub_comment_cookies_disabled', sprintf( __( 'Please enable comments cookies opt-in checkbox in the <a href="%s" target="_blank">Discussion settings</a>.', 'iubenda' ), esc_url( admin_url( 'options-discussion.php' ) ) ), 'notice' );
555
+ }
556
+ }
557
 
558
+ $result = null;
 
 
 
 
 
 
 
 
559
 
560
+ switch ( $this->action ) {
561
+ case 'autodetect' :
562
+ $result = iubenda()->forms->autodetect_forms();
563
 
564
+ // make sure it's current host location
565
+ wp_safe_redirect( $redirect_to );
566
+ exit;
567
 
568
+ break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
569
 
570
+ case 'save' :
571
+ if ( ! $id )
572
+ return;
 
 
 
 
 
 
 
 
573
 
574
+ $form = iubenda()->forms->get_form( $id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
575
 
576
+ if ( $form->ID != $id )
577
+ return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
578
 
579
+ $status = isset( $_POST['status'] ) && in_array( $_POST['status'], array_keys( iubenda()->forms->statuses ) ) ? esc_attr( $_POST['status'] ) : 'publish';
580
+ $subject = isset( $_POST['subject'] ) && is_array( $_POST['subject'] ) ? array_map( 'esc_attr', $_POST['subject'] ) : array();
581
+ $preferences = array();
582
+ $exclude = array();
583
+ $legal_notices = array();
 
 
 
 
 
 
584
 
585
+ $preferences_raw = isset( $_POST['preferences'] ) && is_array( $_POST['preferences'] ) ? array_map( array( $this, 'array_map_callback' ), $_POST['preferences'] ) : array();
586
+ $exclude_raw = isset( $_POST['exclude'] ) && is_array( $_POST['exclude'] ) ? array_map( array( $this, 'array_map_callback' ), $_POST['exclude'] ) : array();
587
+ $legal_notices_raw = isset( $_POST['legal_notices'] ) && is_array( $_POST['legal_notices'] ) ? array_map( array( $this, 'array_map_callback' ), $_POST['legal_notices'] ) : array();
 
 
 
 
 
 
 
 
 
588
 
589
+ // format preferences data
590
+ if ( ! empty( $preferences_raw ) && is_array( $preferences_raw ) ) {
591
+ foreach ( $preferences_raw as $index => $data ) {
592
+ if ( ! empty( $data['field'] ) && ( ! is_null( $data['value'] ) || ! "" == $data['value'] ) ) {
593
+ $preferences[ sanitize_key( $data['field'] ) ] = $data['value'];
594
+ }
595
+ }
596
+ }
597
 
598
+ // format exclude data
599
+ if ( ! empty( $exclude_raw ) && is_array( $exclude_raw ) ) {
600
+ foreach ( $exclude_raw as $index => $data ) {
601
+ if ( ! empty( $data['field'] ) )
602
+ $exclude[] = $data['field'];
603
+ }
604
+ }
605
 
606
+ // format legal notices data
607
+ if ( ! empty( $legal_notices_raw ) && is_array( $legal_notices_raw ) ) {
608
+ foreach ( $legal_notices_raw as $index => $data ) {
609
+ if ( ! empty( $data['field'] ) )
610
+ $legal_notices[] = $data['field'];
611
+ }
612
+ }
613
 
614
+ // form first save, update status to mapped automatically
615
+ if ( empty( $form->form_subject ) && empty( $form->form_preferences ) ) {
616
+ $status = 'mapped';
617
+ }
618
 
619
+ // echo '<pre>'; print_r( $_POST ); echo '</pre>'; exit;
620
+ $filtered_subjects = array_filter($subject, array(
621
+ $this,
622
+ 'is_not_empty'
623
+ ));
624
 
625
+ // bail if empty fields
626
+ if ( ! count( $filtered_subjects ) ) {
627
+ $this->add_notice( 'iub_form_fields_missing', __( 'Form saving failed. Please fill the Subject fields.', 'iubenda' ), 'error' );
628
+ return;
629
+ }
630
 
631
+ $args = array(
632
+ 'ID' => $form->ID,
633
+ 'status' => $status,
634
+ 'object_type' => $form->object_type,
635
+ 'object_id' => $form->object_id,
636
+ 'form_source' => $form->form_source,
637
+ 'form_title' => $form->post_title,
638
+ 'form_date' => $form->post_modified,
639
+ 'form_fields' => $form->form_fields,
640
+ 'form_subject' => $subject,
641
+ 'form_preferences' => $preferences,
642
+ 'form_exclude' => $exclude,
643
+ 'form_legal_notices' => $legal_notices
644
+ );
645
 
646
+ $result = iubenda()->forms->save_form( $args );
 
 
647
 
648
+ break;
 
 
 
 
 
 
 
649
 
650
+ case 'delete' :
651
+ if ( ! $id )
652
+ return;
653
 
654
+ $form = iubenda()->forms->get_form( $id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
655
 
656
+ if ( empty( $form ) )
657
+ return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
658
 
659
+ $result = iubenda()->forms->delete_form( $id );
 
 
 
 
 
 
 
 
660
 
661
+ // make sure it's current host location
662
+ wp_safe_redirect( $redirect_to );
663
+ exit;
 
 
 
 
 
 
 
664
 
665
+ break;
 
 
666
 
667
+ case 'disable_skip_parsing' :
 
 
 
668
 
669
+ // disable skip parsing option
670
+ $options = iubenda()->options['cs'];
671
+ $options['skip_parsing'] = false;
 
672
 
673
+ update_option( 'iubenda_cookie_law_solution', $options );
 
 
674
 
675
+ $this->add_notice( 'iub_settings_updated', __( 'Settings saved.', 'iubenda' ), 'success' );
 
 
676
 
677
+ // make sure it's current host location
678
+ wp_safe_redirect( $redirect_to );
679
+ exit;
 
680
 
681
+ break;
 
 
 
682
 
683
+ default :
684
+ return;
685
+ }
686
 
687
+ if ( ! empty ( $result ) ) {
688
+ //
689
+ } else {
690
+ //
691
+ }
692
+ }
693
 
694
+ /**
695
+ * Add admin notice.
696
+ *
697
+ * @param mixed $message
698
+ * @param string $notice_type
699
+ */
700
+ public function add_notice( $key, $message, $notice_type = 'notice' ) {
701
+ $key = ! empty( $key ) ? sanitize_key( $key ) : '';
702
+ $message = ! empty( $message ) ? wp_kses_post( $message ) : '';
703
+ $notice_type = ! empty( $notice_type ) && in_array( $notice_type, $this->notice_types ) ? $notice_type : 'notice';
704
 
705
+ if ( ! $key || ! $message )
706
+ return;
707
 
708
+ $notices = get_transient( 'iubenda_dashboard_notices' );
709
+ $delay = MINUTE_IN_SECONDS * 2;
710
 
711
+ // Check notice type is exist before checking the key
712
+ if ( empty( $notices ) || ( isset( $notices[ $notice_type ] ) && ! array_key_exists( $key, $notices[ $notice_type ] ) ) ) {
713
+ $notices[$notice_type][$key] = $message;
 
 
 
714
 
715
+ set_transient( 'iubenda_dashboard_notices', $notices, $delay );
716
+ }
717
+ }
718
 
719
+ /**
720
+ * Display admin notices.
721
+ *
722
+ * @return mixed
723
+ */
724
+ public function print_notices() {
725
+ $notices = get_transient( 'iubenda_dashboard_notices' );
726
+ foreach ( $this->notice_types as $notice_type ) {
727
+ if ( $this->notice_count( $notices, $notice_type ) > 0 ) {
728
+ require IUBENDA_PLUGIN_PATH . '/views/partials/alert.php';
729
+ }
730
+ }
731
+ delete_transient( 'iubenda_dashboard_notices' );
732
+ }
733
+
734
+ public function has_notices() {
735
+ $notices = get_transient( 'iubenda_dashboard_notices' );
736
+ foreach ( $this->notice_types as $notice_type ) {
737
+ if ( $this->notice_count( $notices, $notice_type ) > 0 ) {
738
+ return true;
739
+ }
740
+ }
741
 
742
+ return false;
743
+ }
 
 
744
 
745
+ /**
746
+ * Count notices function.
747
+ *
748
+ * @param string $notice_type
749
+ * @return int
750
+ */
751
+ public function notice_count( $all_notices = array(), $notice_type = '' ) {
752
+ $notice_count = 0;
753
+
754
+ if ( isset( $all_notices[$notice_type] ) ) {
755
+ $notice_count = absint( sizeof( $all_notices[$notice_type] ) );
756
+ } elseif ( empty( $notice_type ) ) {
757
+ foreach ( $all_notices as $notices ) {
758
+ $notice_count += absint( sizeof( $all_notices ) );
759
+ }
760
+ }
761
 
762
+ return $notice_count;
763
+ }
764
 
765
+ /**
766
+ * Perform show notice on plugin installation/upgrade.
767
+ *
768
+ * @return void
769
+ */
770
+ public function maybe_show_notice() {
771
+ if ( ! current_user_can( 'install_plugins' ) )
772
+ return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
773
 
774
+ $current_update = 10;
775
+ $activation = (array) get_option( 'iubenda_activation_data', iubenda()->activation );
 
776
 
777
+ // delete_option( 'iubenda_activation_data' );
778
+ // echo '<pre>'; print_r( $activation ); echo '</pre>'; exit;
 
 
779
 
780
+ // get current time
781
+ $current_time = time();
782
 
783
+ if ( $activation['update_version'] < $current_update ) {
784
+ // check version, if update ver is lower than plugin ver, set update notice to true
785
+ $activation = array_merge( $activation, array( 'update_version' => $current_update, 'update_notice' => true ) );
786
 
787
+ // set activation date if not set
788
+ if ( $activation['update_date'] == false )
789
+ $activation = array_merge( $activation, array( 'update_date' => $current_time ) );
790
 
791
+ update_option( 'iubenda_activation_data', $activation );
792
+ }
 
 
 
 
 
793
 
794
+ // display current version notice
795
+ if ( $activation['update_notice'] === true ) {
796
+ // include notice js, only if needed
797
+ add_action( 'admin_print_scripts', array( $this, 'admin_inline_js' ), 999 );
798
 
799
+ // get activation date
800
+ $activation_date = $activation['update_date'];
801
 
802
+ // set delay in seconds
803
+ $delay = WEEK_IN_SECONDS;
 
804
 
805
+ if ( (int) $activation['update_delay_date'] === 0 ) {
806
+ if ( $activation_date + $delay > $current_time )
807
+ $activation['update_delay_date'] = $activation_date + $delay;
808
+ else
809
+ $activation['update_delay_date'] = $current_time;
810
 
811
+ update_option( 'iubenda_activation_data', $activation );
812
+ }
813
 
814
+ if ( ( ! empty( $activation['update_delay_date'] ) ? (int) $activation['update_delay_date'] : $current_time ) <= $current_time ) {
815
+ // add notice
816
+ add_action( 'admin_notices', array( $this, 'show_notice' ) );
817
+ }
818
+ }
819
+ }
820
 
821
+ /**
822
+ * Display admin notices at iubenda settings.
823
+ */
824
+ public function show_notice() {
825
+ ?>
826
+ <div id="iubenda-rate" class="iubenda-notice notice is-dismissible">
827
+ <div>
828
+ <p class="step-1">
829
+ <span class="notice-question"><?php _e( 'Enjoying the iubenda Cookie & Consent Solution Plugin?', 'iubenda' ); ?></span>
830
+ <span class="notice-reply">
831
+ <a href="#" class="reply-yes"><?php _e( 'Yes', 'iubenda' ); ?></a>
832
+ <a href="#" class="reply-no"><?php _e( 'No', 'iubenda' ); ?></a>
833
+ </span>
834
+ </p>
835
+ <p class="step-2 step-yes">
836
+ <span class="notice-question"><?php _e( "Whew, what a relief!? We've worked countless hours to make this plugin as useful as possible - so we're pretty happy that you're enjoying it. While you here, would you mind leaving us a 5 star rating? It would really help us out.", 'iubenda' ); ?></span>
837
+ <span class="notice-reply">
838
+ <a href="https://wordpress.org/support/plugin/iubenda-cookie-law-solution/reviews/?filter=5" target="_blank" class="reply-yes"><?php _e( 'Sure!', 'iubenda' ); ?></a>
839
+ <a href="javascript:void(0)" class="reply-no"><?php _e( 'No thanks', 'iubenda' ); ?></a>
840
+ </span>
841
+ </p>
842
+ <p class="step-2 step-no">
843
+ <span class="notice-question"><?php _e( "We're sorry to hear that. Would you mind giving us some feedback?", 'iubenda' ); ?></span>
844
+ <span class="notice-reply">
845
+ <a href="https://iubenda.typeform.com/to/BXuSMZ" target="_blank" class="reply-yes"><?php _e( 'Ok sure!', 'iubenda' ); ?></a>
846
+ <a href="javascript:void(0)" class="reply-no"><?php _e( 'No thanks', 'iubenda' ); ?></a>
847
+ </span>
848
+ </p>
849
+ </div>
850
+ </div>
851
+ <?php
852
+ }
853
 
854
+ /**
855
+ * Print admin scripts.
856
+ *
857
+ * @return void
858
+ */
859
+ public function admin_inline_js() {
860
+ if ( ! current_user_can( 'install_plugins' ) )
861
+ return;
862
+
863
+ $delay = MONTH_IN_SECONDS * 6;
864
+ ?>
865
+ <script type="text/javascript">
866
+ ( function ( $ ) {
867
+ $( document ).ready( function () {
868
+ // step 1
869
+ $( '.iubenda-notice .step-1 a' ).on( 'click', function ( e ) {
870
+ e.preventDefault();
871
+
872
+ $( '.iubenda-notice .step-1' ).slideUp( 'fast' );
873
+ $( '.iubenda-notice .step-1' ).hide( 'fast' );
874
+
875
+ if ( $( e.target ).hasClass( 'reply-yes' ) ) {
876
+ $( '.iubenda-notice .step-2.step-yes' ).show( 'fast' );
877
+ } else {
878
+ $( '.iubenda-notice .step-2.step-no' ).show( 'fast' );
879
+ };
880
+ } );
881
+ // step 2
882
+ $( '.iubenda-notice.is-dismissible' ).on( 'click', '.notice-dismiss, .step-2 a', function ( e ) {
883
+ // console.log( $( e ) );
884
+
885
+ var delay = <?php echo $delay; ?>;
886
+
887
+ if ( $( e.target ).hasClass( 'reply-yes' ) ) {
888
+ delay = 0;
889
+ }
890
+
891
+ $.post( ajaxurl, {
892
+ action: 'iubenda_dismiss_notice',
893
+ delay: delay,
894
+ url: '<?php echo admin_url( 'admin-ajax.php' ); ?>',
895
+ iubenda_nonce: '<?php echo wp_create_nonce( 'iubenda_dismiss_notice' ); ?>'
896
+ } );
897
+
898
+ $( e.delegateTarget ).slideUp( 'fast' );
899
+ } );
900
+ } );
901
+ } )( jQuery );
902
+ </script>
903
+ <?php
904
+ }
905
 
906
+ /**
907
+ * Dismiss notice.
908
+ *
909
+ * @return void
910
+ */
911
+ public function dismiss_notice() {
912
+ $result = false;
913
 
914
+ if ( ! current_user_can( 'install_plugins' ) )
915
+ return $result;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
916
 
917
+ $nonce = wp_verify_nonce( $_REQUEST['iubenda_nonce'], 'iubenda_dismiss_notice' );
 
 
 
 
918
 
919
+ if ( $nonce ) {
920
+ $delay = ! empty( $_REQUEST['delay'] ) ? absint( $_REQUEST['delay'] ) : 0;
921
+ $activation = (array) get_option( 'iubenda_activation_data', iubenda()->activation );
 
 
 
 
 
 
 
 
 
 
 
922
 
923
+ // delay notice
924
+ if ( $delay > 0 ) {
925
+ $activation = array_merge( $activation, array( 'update_delay_date' => time() + $delay ) );
926
+ // hide notice permanently
927
+ } else {
928
+ $activation = array_merge( $activation, array( 'update_delay_date' => 0, 'update_notice' => false ) );
929
+ }
930
 
931
+ // update activation options
932
+ $result = update_option( 'iubenda_activation_data', $activation );
933
+ }
 
 
 
 
 
 
 
 
934
 
935
+ echo json_encode( $result );
936
+ exit;
937
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
938
 
939
+ /**
940
+ * Sanitize array helper function.
941
+ *
942
+ * @param array $array
943
+ * @return array
944
+ */
945
+ public function array_map_callback( $array ) {
946
+ if ( ! is_array( $array ) )
947
+ return array();
948
 
949
+ return array_map( 'esc_attr', $array );
950
+ }
 
 
 
 
 
 
 
 
951
 
952
+ /**
953
+ * Check the value is not empty and check it contains any value even 0
954
+ *
955
+ * @param $value
956
+ * @return bool
957
+ */
958
+ private function is_not_empty($value) {
959
+ if(is_null($value) || '' === $value){
960
+ return false;
961
+ }
962
 
963
+ return true;
964
+ }
965
 
966
+ /**
967
+ * Load admin style inline, for menu icon only.
968
+ *
969
+ * @return mixed
970
+ */
971
+ public function admin_print_styles() {
972
+ echo '
973
+ <style>
974
+ a.toplevel_page_iubenda .wp-menu-image {
975
+ background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCAyMzIgNTAzIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MS40MTQyMTsiPiAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLDEzNi4yNDcsMjY4LjgzMSkiPiAgICAgICAgPHBhdGggZD0iTTAsLTM1LjgxTC0zNi4zLDAuNDg5TC0zNi4zLDE0MC45NzhMMCwxNDAuOTc4TDAsLTM1LjgxWk0tMjAuOTM4LC0xMjkuODAyQy02LjI4NywtMTI5LjgwMiA1LjU4NywtMTQxLjU2NSA1LjU4NywtMTU2LjA2QzUuNTg3LC0xNzAuNTU2IC02LjI4NywtMTgyLjMwOCAtMjAuOTM4LC0xODIuMzA4Qy0zNS42LC0xODIuMzA4IC00Ny40NzQsLTE3MC41NTYgLTQ3LjQ3NCwtMTU2LjA2Qy00Ny40NzQsLTE0MS41NjUgLTM1LjYsLTEyOS44MDIgLTIwLjkzOCwtMTI5LjgwMk04OS4zNiwtMTU0LjQxNkM4OS4zNiwtMTI3LjgyNSA3OS41NzUsLTEwMy40OTkgNjMuMjY5LC04NC42NzJMODYuNjk0LDIyNi42MjhMLTEyMi43MjgsMjI2LjYyOEwtMTAwLjAyNCwtNzkuMjI5Qy0xMTkuMzUxLC05OC42NjggLTEzMS4yNDcsLTEyNS4xNTkgLTEzMS4yNDcsLTE1NC40MTZDLTEzMS4yNDcsLTIxNC4wODYgLTgxLjg3NCwtMjYyLjQzOCAtMjAuOTM4LC0yNjIuNDM4QzM5Ljk5OSwtMjYyLjQzOCA4OS4zNiwtMjE0LjA4NiA4OS4zNiwtMTU0LjQxNiIgc3R5bGU9ImZpbGw6d2hpdGU7ZmlsbC1ydWxlOm5vbnplcm87Ii8+ICAgIDwvZz48L3N2Zz4=);
976
+ background-position: center center;
977
+ background-repeat: no-repeat;
978
+ background-size: 7px auto;
979
+ }
980
+ </style>
981
+ ';
982
+ }
983
+
984
+ private function services_option() {
985
+ $cs_settings = [];
986
+ if(array_get(iubenda()->options['cs'], 'configuration_type') == 'simplified'){
987
+ $legislation = array_get(iubenda()->options['cs'], 'simplified.legislation') == 'both' ? 'GDPR/CCPA' : strtoupper(array_get(iubenda()->options['cs'], 'simplified.legislation'));
988
+ $cs_settings = [
989
+ ['label' => __('Style', 'iubenda'), 'value' => ucwords(array_get(iubenda()->options['cs'], 'simplified.banner_style'))],
990
+ ['label' => __('Position', 'iubenda'), 'value' => ucwords(array_get(iubenda()->options['cs'], 'simplified.position'))],
991
+ ['label' => __('legislation', 'iubenda'), 'value' => $legislation],
992
+ ];
993
+ }else{
994
+ $languages = (new ProductHelper())->get_languages();
995
+ foreach ($languages as $k => $v) {
996
+ $code = array_get(iubenda()->options['cs'], "code_{$k}");
997
+ if($code){
998
+ $banner = iubenda()->parse_configuration($code, ['mode' => 'banner']);
999
+ $options = iubenda()->parse_configuration($code);
1000
+
1001
+ $style = array_get($banner, 'backgroundColor') ? 'White' : 'Dark';
1002
+ if(array_get($options, 'enableGdpr') === null && array_get($options, 'ccpaApplies') == 1){
1003
+ $legislation = 'GDPR/CCPA';
1004
+ }elseif(array_get($options, 'enableGdpr') === null){
1005
+ $legislation = 'GDPR';
1006
+ }else{
1007
+ $legislation = 'CCPA';
1008
+ }
1009
 
1010
+ $cs_settings = [
1011
+ ['label' => __('Style', 'iubenda'), 'value' => $style],
1012
+ ['label' => __('Position', 'iubenda'), 'value' => ucwords(array_get($banner, 'position'))],
1013
+ ['label' => __('legislation', 'iubenda'), 'value' => $legislation],
1014
+ ];
1015
+ break;
1016
+ }
1017
+ }
1018
+ }
1019
 
 
 
 
 
 
 
 
 
1020
 
1021
+ return [
1022
+ 'pp' => [
1023
+ 'status' => false,
1024
+ 'configured' => array_get(iubenda()->options['pp'], 'configured'),
1025
+ 'label' => __('Privacy and Cookie Policy', 'iubenda'),
1026
+ 'name' => 'privacy_policy',
1027
+ 'key' => 'iubenda_privacy_policy_solution',
1028
+ 'settings' => [
1029
+ ['label' => __('Version', 'iubenda'), 'value' => array_get(iubenda()->options['pp'], 'version')],
1030
+ ['label' => __('Style', 'iubenda'), 'value' => array_get(iubenda()->options['pp'], 'button_style')],
1031
+ ['label' => __('Position', 'iubenda'), 'value' => array_get(iubenda()->options['pp'], 'button_position')]
1032
+ ]
1033
+ ],
1034
+ 'cs' => [
1035
+ 'status' => false,
1036
+ 'configured' => array_get(iubenda()->options['cs'], 'configured'),
1037
+ 'label' => __('Cookie Solution', 'iubenda'),
1038
+ 'name' => 'cookie_law',
1039
+ 'key' => 'iubenda_cookie_law_solution',
1040
+ 'settings' => $cs_settings
1041
+ ],
1042
+ 'tc' => [
1043
+ 'status' => false,
1044
+ 'configured' => array_get(iubenda()->options['tc'], 'configured'),
1045
+ 'label' => __('Terms and Conditions', 'iubenda'),
1046
+ 'name' => 'terms_conditions',
1047
+ 'key' => 'iubenda_terms_conditions_solution',
1048
+ 'settings' => [
1049
+ ['label' => __('Version', 'iubenda'), 'value' => '1.5.0'],
1050
+ ['label' => __('Style', 'iubenda'), 'value' => array_get(iubenda()->options['tc'], 'button_style')],
1051
+ ['label' => __('Position', 'iubenda'), 'value' => array_get(iubenda()->options['tc'], 'button_position')]
1052
+ ]
1053
+ ],
1054
+ 'cons' => [
1055
+ 'status' => false,
1056
+ 'configured' => array_get(iubenda()->options['cons'], 'configured'),
1057
+ 'label' => __('Consent Solution', 'iubenda'),
1058
+ 'name' => 'consent',
1059
+ 'key' => 'iubenda_consent_solution',
1060
+ ],
1061
+ ];
1062
+
1063
+ }
1064
 
1065
+ /**
1066
+ * Return error to appear alert modal
1067
+ * @param $index
1068
+ * @param $section
1069
+ */
1070
+ public function return_alert( $index ,$section) {
1071
+ $response = $index == 'code_default' ?: "($index)" ;
1072
+ echo json_encode(['status' => 'error', 'responseText' => "invalid script {$response}", 'focus' => "#{$index}-{$section}_tab" ]);
1073
+ wp_die();
1074
+ }
1075
 
1076
+ /**
1077
+ * Check embed code if empty or not valid
1078
+ * @param $index
1079
+ * @param $option
1080
+ * @param $section
1081
+ * @return bool
1082
+ */
1083
+ public function check_embed_code($index, $option, $section)
1084
+ {
1085
+ if(substr( $index, 0, 5 ) === "code_" && empty($option)){
1086
+ return false;
1087
+ }
1088
 
1089
+ if($section == 'iubenda_privacy_policy_solution' || $section == 'iubenda_terms_conditions_solution'){
1090
+ if(!iubenda()->parse_tc_pp_configuration(stripslashes_deep($option))){
1091
+ return false;
1092
+ }
1093
+ }
1094
 
1095
+ if($section == 'iubenda_cookie_law_solution' && substr( $index, 0, 5 ) === "code_"){
1096
+ $parsedCode = iubenda()->parse_configuration(stripslashes_deep($option)) ? iubenda()->parse_configuration(stripslashes_deep($option)) : false;
1097
 
1098
+ if(!$parsedCode){
1099
+ $this->return_alert($index, $section);
1100
+ }
1101
+ }
 
 
 
 
 
 
 
 
 
 
 
 
1102
 
1103
+ return true;
1104
+ }
1105
 
1106
+ /**
1107
+ * Getting main div in frontpage with updated data
1108
+ */
1109
+ public function get_frontpage_main_box()
1110
+ {
1111
+ require_once IUBENDA_PLUGIN_PATH . '/views/partials/frontpage_main_box.php';
1112
+ wp_die();
1113
+ }
1114
 
1115
+ /**
1116
+ * Hide all notices except iubenda notice
1117
+ */
1118
+ function iubdena_hide_notices_wp()
1119
+ {
1120
+ ?>
1121
+ <style>
1122
+ .error, .notice:not(.iubenda-notice) {
1123
+ display: none;
1124
+ }
1125
+ </style>
1126
+ <?php
1127
+ }
1128
 
1129
+ /**
1130
+ * @param $products
1131
+ * @param $data
1132
+ * @return array
1133
+ */
1134
+ public function init_prepare_product_options($products, $data)
1135
+ {
1136
+ $result = [];
1137
+
1138
+ foreach ($products as $product_name => $product_key) {
1139
+ $product_option = [];
1140
+
1141
+ if(array_get($data, "{$product_name}_status") && array_get($data, "{$product_name}_status") == 'true'){
1142
+ $result['iubenda_activated_products'][$product_name] = 'true';
1143
+ $product_option['configured'] = 'true';
1144
+
1145
+ // Check if product is CONS
1146
+ if ($product_key == 'cons') {
1147
+ // iubenda_consent_solution saving data
1148
+ if(array_get($data, "{$product_name}.public_api_key") ?: null){
1149
+ $product_option = ['public_api_key' => array_get($data, "{$product_name}.public_api_key")];
1150
+ }else{
1151
+ $result['iubenda_activated_products'][$product_name] = 'false';
1152
+ }
1153
+ }
1154
 
1155
+ // Check if product in ['PP', 'CS', 'TC'] to check and validate embed codes
1156
+ if (in_array($product_key, ['pp', 'cs', 'tc'])) {
1157
+ $languages = (new ProductHelper())->get_languages();
1158
+ foreach ( $languages as $lang_id => $lang_name ) {
1159
+ $code = array_get($data, "{$product_name}.code_{$lang_id}");
1160
 
1161
+ //check if code is empty or code is invalid
1162
+ $result['codes_statues']["{$product_name}_codes"][] = $this->check_embed_code("code_{$lang_id}", $code , $product_name);
 
 
 
 
 
 
 
1163
 
1164
+ //get public_id & site_id if only the product key is CS and had a valid embed code
1165
+ if ($product_key == 'cs' && $parsed_code = iubenda()->parse_configuration(stripslashes_deep($code))) {
1166
+ //getting site id to save it into Iubenda global option
1167
+ if (!array_get($result, 'site_id') ?: null) {
1168
+ $result['site_id'] = array_get($parsed_code, 'siteId');
1169
+ }
1170
 
1171
+ //getting public id to save it into Iubenda global option by lang
1172
+ $result['public_ids'][$lang_id] = (array_get($parsed_code, 'cookiePolicyId') ?: null);
1173
+ }
1174
+
1175
+ if (in_array($product_key, ['pp', 'tc'])) {
1176
+ $parsed_code = iubenda()->parse_tc_pp_configuration(stripslashes_deep($code));
1177
+
1178
+ //getting public id to save it into Iubenda global option lang
1179
+ if ($parsed_code) {
1180
+ $result['public_ids'][$lang_id] = array_get($parsed_code, 'cookie_policy_id');
1181
+ $product_option['button_style'] = array_get($parsed_code, 'button_style');
1182
+ }
1183
+
1184
+ //to make tc/pp button appear in footer by default
1185
+ $product_option['button_position'] = 'automatic';
1186
+
1187
+ // Add a widget in the sidebar
1188
+ do_action('iubenda_assign_widget_to_first_sidebar');
1189
+ }
1190
+
1191
+ $product_option["code_{$lang_id}"] = stripslashes($code);
1192
+ $product_option["manual_code_{$lang_id}"] = stripslashes($code);
1193
+ }
1194
+ }
1195
+
1196
+
1197
+ if (in_array($product_key, ['pp', 'tc'])) {
1198
+ // Add a widget in the sidebar if the button is positioned automatically
1199
+ do_action('iubenda_assign_widget_to_first_sidebar');
1200
+ }
1201
+
1202
+ //add version if Iubenda privacy policy solution activated
1203
+ if ($product_key == 'pp') {
1204
+ $product_option["version"] = 'Manual';
1205
+ }
1206
+
1207
+ // Send options to save it
1208
+ $result['products_option'][$product_key] = $product_option;
1209
+ }else{
1210
+ $result['iubenda_activated_products'][$product_name] = 'false';
1211
+ }
1212
  }
1213
 
1214
+ return $result;
1215
+ }
1216
+
1217
+ public function save_init_prepared_product_options($products, $result)
1218
+ {
1219
+ // Getting product option to save it
1220
+ foreach ($products as $product_name => $product_key) {
1221
+ $product_status = array_get($result, "iubenda_activated_products.{$product_name}", 'false') ?: 'false';
1222
+ if($product_status == 'false'){
1223
+ continue;
1224
+ }
1225
+
1226
+ $product_option = array_get($result, "products_option.{$product_key}", []) ?: [];
1227
+
1228
+ // Merging old $product_name options with new options
1229
+ update_option( $product_name, array_merge(iubenda()->options[$product_key] ?: [], $product_option));
1230
+
1231
+ // Update Iubenda instance with new $product_name options
1232
+ iubenda()->options[$product_key] = array_merge(iubenda()->options[$product_key] ?: [], $product_option);
1233
+ }
1234
+
1235
+ update_option( 'iubenda_activated_products', array_get($result, 'iubenda_activated_products', []) ?: [] );
1236
+ update_option( 'iubenda_global_options', ['site_id' => array_get($result, 'site_id', '') ?: '', 'public_ids' => array_get($result, 'public_ids', []) ?: []] );
1237
+ }
1238
  }
includes/widget/IubendaLegalWidget.php ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class IubendaLegalWidget extends WP_Widget
5
+ {
6
+ private $widget_id = 'iubenda_legal_widget';
7
+
8
+ private $default_widget_title = 'Legal';
9
+
10
+ public function __construct()
11
+ {
12
+ parent::__construct(
13
+
14
+ // Base ID of your widget
15
+ $this->widget_id,
16
+
17
+ // Widget name will appear in UI
18
+ __('Iubenda legal', 'iubenda'),
19
+
20
+ // Widget description
21
+ ['description' => __('Iubenda legal widget for Privacy Policy and Terms & Conditions', 'iubenda'),]
22
+ );
23
+
24
+ add_action( 'iubenda_assign_widget_to_first_sidebar', [$this, 'assign_iubenda_widget'] );
25
+ $this->init();
26
+ }
27
+
28
+ /**
29
+ * Register HOOKS
30
+ *
31
+ * @return void
32
+ */
33
+ private function init() {
34
+ add_action('widgets_init', [$this, 'register_widget']);
35
+ }
36
+
37
+ /**
38
+ * Set default value for the first Iubenda Legal widget
39
+ * @return array|array[]|ArrayIterator|ArrayObject|false
40
+ */
41
+ public function get_settings()
42
+ {
43
+ $settings = parent::get_settings();
44
+ // Set default value for the first widget
45
+ if (!$settings) {
46
+ return [1 => []];
47
+ }
48
+
49
+ return $settings;
50
+ }
51
+
52
+ /**
53
+ * Override display callback
54
+ *
55
+ * @param $args
56
+ * @param $widget_args
57
+ * @return void
58
+ */
59
+ public function display_callback( $args, $widget_args = 1 ) {
60
+
61
+ if ( is_numeric( $widget_args ) ) {
62
+ $widget_args = array( 'number' => $widget_args );
63
+ }
64
+
65
+ $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) );
66
+ $this->_set( $widget_args['number'] );
67
+ $instances = $this->get_settings();
68
+
69
+ // Additional code to add default title widget title if it's not set yet
70
+ if (!$instances) {
71
+ $instances[$this->number] = ['title' => __($this->default_widget_title ,'iubenda')];
72
+ }
73
+
74
+ if ( isset( $instances[ $this->number ] ) ) {
75
+ $instance = $instances[ $this->number ];
76
+
77
+ /**
78
+ * Filters the settings for a particular widget instance.
79
+ *
80
+ * Returning false will effectively short-circuit display of the widget.
81
+ *
82
+ * @since 2.8.0
83
+ *
84
+ * @param array $instance The current widget instance's settings.
85
+ * @param WP_Widget $widget The current widget instance.
86
+ * @param array $args An array of default widget arguments.
87
+ */
88
+ $instance = apply_filters( 'widget_display_callback', $instance, $this, $args );
89
+
90
+ if ( false === $instance ) {
91
+ return;
92
+ }
93
+
94
+ $was_cache_addition_suspended = wp_suspend_cache_addition();
95
+ if ( $this->is_preview() && ! $was_cache_addition_suspended ) {
96
+ wp_suspend_cache_addition( true );
97
+ }
98
+
99
+ $this->widget( $args, $instance );
100
+
101
+ if ( $this->is_preview() ) {
102
+ wp_suspend_cache_addition( $was_cache_addition_suspended );
103
+ }
104
+ }
105
+ }
106
+
107
+
108
+ // Creating widget front-end
109
+ public function widget($args, $instance)
110
+ {
111
+ $ppStatus = array_get(iubenda()->settings->services, 'pp.status') == 'true';
112
+ $ppPosition = array_get(iubenda()->options['pp'], 'button_position') == 'automatic';
113
+
114
+ $tcStatus = array_get(iubenda()->settings->services, 'tc.status') == 'true';
115
+ $tcPosition = array_get(iubenda()->options['tc'], 'button_position') == 'automatic';
116
+
117
+ // Checking if there is no public id for current language
118
+ if ( iubenda()->multilang && ! empty( iubenda()->lang_current ) ) {
119
+ $lang_id = iubenda()->lang_current;
120
+ } else {
121
+ $lang_id = 'default';
122
+ }
123
+
124
+ $public_id = array_get(iubenda()->options['global_options'], "public_ids.{$lang_id}", false) ?: false;
125
+
126
+ // Return false if there is no public id for current language
127
+ if (!($public_id)) {
128
+ return false;
129
+ }
130
+ $quickGeneratorService = new QuickGeneratorService();
131
+
132
+ if (!($ppStatus && $ppPosition && boolval($quickGeneratorService->pp_button())) && !($tcStatus && $tcPosition && boolval($quickGeneratorService->tc_button()))) {
133
+ return false;
134
+ }
135
+
136
+ $title = apply_filters('widget_title', array_get($instance, 'title') ?? 'Legal');
137
+
138
+ // before and after widget arguments are defined by themes
139
+ echo $args['before_widget'];
140
+ if (!empty($title)) echo $args['before_title'] . $title . $args['after_title'];
141
+
142
+ // Display TC or PP if activated
143
+ if (($ppStatus && $ppPosition) || ($tcStatus && $tcPosition)) {
144
+
145
+ $legal = '<section>';
146
+
147
+ if($ppStatus && $ppPosition){
148
+ $legal .= $quickGeneratorService->pp_button();
149
+ }
150
+ if(($ppStatus && $ppPosition) && ($tcStatus && $tcPosition)){
151
+ $legal .= '<br>';
152
+ }
153
+ if($tcStatus && $tcPosition){
154
+ $legal .= $quickGeneratorService->tc_button();
155
+ }
156
+
157
+ $legal .= '</section>';
158
+
159
+ echo $legal;
160
+ }
161
+ echo $args['after_widget'];
162
+ }
163
+
164
+ // Widget Backend
165
+ public function form($instance)
166
+ {
167
+ $title = __('Legal', 'iubenda');
168
+
169
+ if (isset($instance['title'])) {
170
+ $title = $instance['title'];
171
+ }
172
+
173
+ // Widget admin form
174
+ ?>
175
+ <p>
176
+ <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label>
177
+ <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>"/>
178
+ </p>
179
+ <?php
180
+ }
181
+
182
+ // Updating widget replacing old instances with new
183
+ public function update($new_instance, $old_instance)
184
+ {
185
+ $instance = [];
186
+ $instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : '';
187
+ return $instance;
188
+ }
189
+
190
+ /**
191
+ * Assign iubenda widget to registered sidebar if exists and not registered before
192
+ *
193
+ * @return bool
194
+ */
195
+ public function assign_iubenda_widget()
196
+ {
197
+ global $wp_registered_sidebars;
198
+
199
+ // Check if iubenda widget activated in any sidebar
200
+ if (is_active_widget(false, false, $this->widget_id)) {
201
+ return;
202
+ }
203
+
204
+ // If sidebar-1 not registered or not activated
205
+ if (!array_get($wp_registered_sidebars, 'sidebar-1')) {
206
+ return;
207
+ }
208
+
209
+ // Iubenda widget in not activated in sidebar and sidebar-1 is registered and activated
210
+ wp_assign_widget_to_sidebar("{$this->widget_id}-1", 'sidebar-1');
211
+ }
212
+
213
+ /**
214
+ * Register current widget in WP
215
+ *
216
+ * @return void
217
+ */
218
+ public function register_widget() {
219
+ register_widget(__CLASS__);
220
+ }
221
+ }
222
+
223
+
224
+
iubenda_cookie_solution.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Cookie and Consent Solution for the GDPR & ePrivacy
4
  Plugin URI: https://www.iubenda.com
5
  Description: An All-in-One approach developed by iubenda, which includes functionalities of two powerful solutions that help to make your website GDPR and ePrivacy compliant.
6
- Version: 2.5.91
7
  Author: iubenda
8
  Author URI: https://www.iubenda.com
9
  License: MIT License
@@ -31,21 +31,28 @@ define( 'IUB_DEBUG', false );
31
  /**
32
  * iubenda final class.
33
  *
 
 
34
  * @class iubenda
35
- * @version 2.5.91
36
  */
37
  class iubenda {
38
 
 
 
 
 
 
39
  private static $instance;
40
  public $options = array();
41
  public $defaults = array(
42
  'cs' => array(
43
- 'parse' => false, // iubenda_parse
44
  'skip_parsing' => false, // skip_parsing
45
- 'ctype' => true, // iubenda_ctype
46
- 'parser_engine' => 'new', // parser_engine
47
- 'output_feed' => true, // iubenda_output_feed
48
- 'output_post' => true,
49
  'code_default' => false, // iubenda-code-default,
50
  'menu_position' => 'topmenu',
51
  'amp_support' => false,
@@ -54,7 +61,30 @@ class iubenda {
54
  'amp_template' => '',
55
  'custom_scripts' => array(),
56
  'custom_iframes' => array(),
57
- 'deactivation' => false
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  ),
59
  'cons' => array(
60
  'public_api_key' => '',
@@ -62,7 +92,7 @@ class iubenda {
62
  )
63
  );
64
  public $base_url;
65
- public $version = '2.5.91';
66
  public $activation = array(
67
  'update_version' => 0,
68
  'update_notice' => true,
@@ -72,8 +102,33 @@ class iubenda {
72
  public $no_html = false;
73
  public $multilang = false;
74
  public $languages = array();
 
75
  public $lang_default = '';
76
  public $lang_current = '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
 
78
  /**
79
  * Disable object clone.
@@ -105,10 +160,12 @@ class iubenda {
105
  add_action( 'plugins_loaded', array( self::$instance, 'init' ) );
106
 
107
  self::$instance->includes();
 
108
 
109
  self::$instance->AMP = new iubenda_AMP();
110
  self::$instance->forms = new iubenda_Forms();
111
  self::$instance->settings = new iubenda_Settings();
 
112
  }
113
 
114
  return self::$instance;
@@ -123,6 +180,8 @@ class iubenda {
123
 
124
  // settings
125
  $cs_options = (array) get_option( 'iubenda_cookie_law_solution', $this->defaults['cs'] );
 
 
126
  $cons_options = (array) get_option( 'iubenda_consent_solution', $this->defaults['cons'] );
127
 
128
  // activate AMP if not available before
@@ -132,32 +191,14 @@ class iubenda {
132
  }
133
 
134
  $this->options['cs'] = array_merge( $this->defaults['cs'], $cs_options );
 
 
135
  $this->options['cons'] = array_merge( $this->defaults['cons'], $cons_options );
 
 
136
 
137
  $this->base_url = esc_url_raw( add_query_arg( 'page', 'iubenda', admin_url( $this->options['cs']['menu_position'] === 'submenu' ? 'options-general.php' : 'admin.php' ) ) );
138
 
139
- // check old custom scripts
140
- if ( ! empty( $this->options['cs']['custom_scripts'] ) && is_array( $this->options['cs']['custom_scripts'] ) && ! is_int( reset( $this->options['cs']['custom_scripts'] ) ) ) {
141
- $data = array();
142
-
143
- foreach ( $this->options['cs']['custom_scripts'] as $script ) {
144
- $data[$script] = 0;
145
- }
146
-
147
- $this->options['cs']['custom_scripts'] = $data;
148
- }
149
-
150
- // check old custom iframes
151
- if ( ! empty( $this->options['cs']['custom_iframes'] ) && is_array( $this->options['cs']['custom_iframes'] ) && ! is_int( reset( $this->options['cs']['custom_iframes'] ) ) ) {
152
- $data = array();
153
-
154
- foreach ( $this->options['cs']['custom_iframes'] as $iframe ) {
155
- $data[$iframe] = 0;
156
- }
157
-
158
- $this->options['cs']['custom_iframes'] = $data;
159
- }
160
-
161
  // actions
162
  add_action( 'after_setup_theme', array( $this, 'register_shortcode' ) );
163
  add_action( 'wp_head', array( $this, 'wp_head_cs' ), 0 );
@@ -213,8 +254,15 @@ class iubenda {
213
  private function includes() {
214
  include_once( IUBENDA_PLUGIN_PATH . 'includes/settings.php' );
215
  include_once( IUBENDA_PLUGIN_PATH . 'includes/forms.php' );
216
- include_once( IUBENDA_PLUGIN_PATH . 'includes/amp.php' );
217
- }
 
 
 
 
 
 
 
218
 
219
  /**
220
  * Initialize plugin.
@@ -233,8 +281,10 @@ class iubenda {
233
  $registered_languages = PLL()->model->get_languages_list();
234
 
235
  if ( ! empty( $registered_languages ) ) {
236
- foreach ( $registered_languages as $language )
237
- $this->languages[$language->slug] = $language->name;
 
 
238
  }
239
 
240
  // get default language
@@ -252,15 +302,21 @@ class iubenda {
252
  $registered_languages = icl_get_languages();
253
 
254
  if ( ! empty( $registered_languages ) ) {
255
- foreach ( $registered_languages as $language )
256
- $this->languages[$language['code']] = $language['display_name'];
257
- }
 
 
258
 
259
  // get default language
260
  $this->lang_default = $sitepress->get_default_language();
261
  // get current language
262
  $this->lang_current = $sitepress->get_current_language();
263
- }
 
 
 
 
264
 
265
  // load iubenda parser
266
  include_once( dirname( __FILE__ ) . '/iubenda-cookie-class/iubenda.class.php' );
@@ -278,6 +334,10 @@ class iubenda {
278
  add_option( 'iubenda_cookie_law_solution', $this->options['cons'], '', 'no' );
279
  add_option( 'iubenda_cookie_law_version', $this->version, '', 'no' );
280
  add_option( 'iubenda_activation_data', $this->activation, '', 'no' );
 
 
 
 
281
  }
282
 
283
  /**
@@ -288,11 +348,23 @@ class iubenda {
288
  public function deactivation() {
289
  // remove options from database?
290
  if ( $this->options['cs']['deactivation'] ) {
291
- delete_option( 'iubenda_cookie_law_solution' );
292
- delete_option( 'iubenda_consent_solution' );
293
- delete_option( 'iubenda_cookie_law_version' );
294
- delete_option( 'iubenda_activation_data' );
 
 
 
 
 
 
 
 
295
  }
 
 
 
 
296
  }
297
 
298
  /**
@@ -338,7 +410,7 @@ class iubenda {
338
  * @return void
339
  */
340
  public function load_textdomain() {
341
- load_plugin_textdomain( 'iubenda', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
342
  }
343
 
344
  /**
@@ -375,11 +447,15 @@ class iubenda {
375
  }
376
 
377
  /**
378
- * Add wp_head cookie soution content.
379
  *
380
  * @return mixed
381
  */
382
  public function wp_head_cs() {
 
 
 
 
383
 
384
  // check content type
385
  if ( (bool) $this->options['cs']['ctype'] == true ) {
@@ -409,14 +485,16 @@ class iubenda {
409
  // initial head output
410
  $iubenda_code = '';
411
 
412
- if ( $this->multilang === true && defined( 'ICL_LANGUAGE_CODE' ) && isset( $this->options['cs']['code_' . ICL_LANGUAGE_CODE] ) ) {
413
- $iubenda_code .= $this->options['cs']['code_' . ICL_LANGUAGE_CODE];
 
414
 
415
- // no code for current language, use default
416
- if ( ! $iubenda_code )
417
- $iubenda_code .= $this->options['cs']['code_default'];
418
- } else
419
- $iubenda_code .= $this->options['cs']['code_default'];
 
420
 
421
  $iubenda_code = $this->parse_code( $iubenda_code, true );
422
 
@@ -568,6 +646,11 @@ class iubenda {
568
  $scripts = $this->prepare_custom_data( $this->options['cs']['custom_scripts'] );
569
  $iframes = $this->prepare_custom_data( $this->options['cs']['custom_iframes'] );
570
 
 
 
 
 
 
571
  // experimental class
572
  if ( $this->options['cs']['parser_engine'] == 'new' ) {
573
  $iubenda = new iubendaParser( mb_convert_encoding( $output, 'HTML-ENTITIES', 'UTF-8' ), array(
@@ -707,6 +790,19 @@ class iubenda {
707
  if ( function_exists( 'is_amp_endpoint' ) || function_exists( 'ampforwp_is_amp_endpoint' ) ) {
708
  $this->regenerate_amp_templates();
709
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
710
  }
711
 
712
  /**
@@ -786,6 +882,30 @@ class iubenda {
786
  return $configuration;
787
  }
788
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
789
  /**
790
  * Domain info helper function.
791
  *
@@ -911,12 +1031,170 @@ class iubenda {
911
  $code = iubenda()->options['cs']['code_default'];
912
  iubenda()->AMP->generate_amp_template( $code );
913
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
914
  }
915
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
916
  /**
917
  * Initialise iubenda Cookie Solution
918
  *
919
- * @return object
920
  */
921
  function iubenda() {
922
  static $instance;
3
  Plugin Name: Cookie and Consent Solution for the GDPR & ePrivacy
4
  Plugin URI: https://www.iubenda.com
5
  Description: An All-in-One approach developed by iubenda, which includes functionalities of two powerful solutions that help to make your website GDPR and ePrivacy compliant.
6
+ Version: 3.0.0
7
  Author: iubenda
8
  Author URI: https://www.iubenda.com
9
  License: MIT License
31
  /**
32
  * iubenda final class.
33
  *
34
+ * @property-read iubenda_Settings $settings
35
+ *
36
  * @class iubenda
37
+ * @version 3.0.0
38
  */
39
  class iubenda {
40
 
41
+ /**
42
+ * @var ServiceRating
43
+ */
44
+ public $serviceRating;
45
+
46
  private static $instance;
47
  public $options = array();
48
  public $defaults = array(
49
  'cs' => array(
50
+ 'parse' => true, // iubenda_parse
51
  'skip_parsing' => false, // skip_parsing
52
+ 'ctype' => true, // iubenda_ctype
53
+ 'parser_engine' => 'new', // parser_engine
54
+ 'output_feed' => true, // iubenda_output_feed
55
+ 'output_post' => true,
56
  'code_default' => false, // iubenda-code-default,
57
  'menu_position' => 'topmenu',
58
  'amp_support' => false,
61
  'amp_template' => '',
62
  'custom_scripts' => array(),
63
  'custom_iframes' => array(),
64
+ 'deactivation' => false,
65
+ 'configuration_type'=> 'manual',
66
+ 'simplified' => [
67
+ 'position' => 'float-top-center',
68
+ 'background_overlay' => false,
69
+ 'banner_style' => 'dark',
70
+ 'legislation' => 'gdpr',
71
+ 'require_consent' => 'worldwide',
72
+ 'explicit_accept' => true,
73
+ 'explicit_reject' => true,
74
+ ]
75
+ ),
76
+ 'pp' => array(
77
+ 'version' => '', // Simplified / Embed Code
78
+ 'parse' => false, // iubenda_parse
79
+ 'deactivation' => false,
80
+ 'button_style' => 'white',
81
+ 'button_position' => 'automatic'
82
+ ),
83
+ 'tc' => array(
84
+ 'parse' => false, // iubenda_parse
85
+ 'deactivation' => false,
86
+ 'button_style' => 'white',
87
+ 'button_position' => 'automatic'
88
  ),
89
  'cons' => array(
90
  'public_api_key' => '',
92
  )
93
  );
94
  public $base_url;
95
+ public $version = '3.0.0';
96
  public $activation = array(
97
  'update_version' => 0,
98
  'update_notice' => true,
102
  public $no_html = false;
103
  public $multilang = false;
104
  public $languages = array();
105
+ public $languages_locale = array();
106
  public $lang_default = '';
107
  public $lang_current = '';
108
+ public $lang_mapping = [
109
+ //wordpress language //iubenda language
110
+ 'nl_NL' =>'nl',
111
+ 'en_US' =>'en',
112
+ 'en_UK' =>'en',
113
+ 'en_GB' =>'en-GB',
114
+ 'fr_FR' =>'fr',
115
+ 'de_DE' =>'de',
116
+ 'it_IT' =>'it',
117
+ 'pt_BR' =>'pt-BR',
118
+ 'ru_RU' =>'ru',
119
+ 'es_ES' =>'es',
120
+ ];
121
+ public $supported_languages = [
122
+ 'nl' => 'Dutch',
123
+ 'en' => 'English (US)',
124
+ 'en-GB' => 'English (UK)',
125
+ 'fr' => 'French',
126
+ 'de' => 'German',
127
+ 'it' => 'Italian',
128
+ 'pt-BR' => 'Portuguese (BR)',
129
+ 'ru' => 'Russian',
130
+ 'es' => 'Spanish',
131
+ ];
132
 
133
  /**
134
  * Disable object clone.
160
  add_action( 'plugins_loaded', array( self::$instance, 'init' ) );
161
 
162
  self::$instance->includes();
163
+ self::$instance->serviceRating = new ServiceRating();
164
 
165
  self::$instance->AMP = new iubenda_AMP();
166
  self::$instance->forms = new iubenda_Forms();
167
  self::$instance->settings = new iubenda_Settings();
168
+ self::$instance->widget = new IubendaLegalWidget();
169
  }
170
 
171
  return self::$instance;
180
 
181
  // settings
182
  $cs_options = (array) get_option( 'iubenda_cookie_law_solution', $this->defaults['cs'] );
183
+ $pp_options = (array) get_option( 'iubenda_privacy_policy_solution', $this->defaults['pp'] );
184
+ $tc_options = (array) get_option( 'iubenda_terms_conditions_solution', $this->defaults['tc'] );
185
  $cons_options = (array) get_option( 'iubenda_consent_solution', $this->defaults['cons'] );
186
 
187
  // activate AMP if not available before
191
  }
192
 
193
  $this->options['cs'] = array_merge( $this->defaults['cs'], $cs_options );
194
+ $this->options['pp'] = array_merge( $this->defaults['pp'], $pp_options );
195
+ $this->options['tc'] = array_merge( $this->defaults['tc'], $tc_options );
196
  $this->options['cons'] = array_merge( $this->defaults['cons'], $cons_options );
197
+ $this->options['activated_products'] = get_option( 'iubenda_activated_products', [] ) ?: [];
198
+ $this->options['global_options'] = get_option( 'iubenda_global_options', [] ) ?: [];
199
 
200
  $this->base_url = esc_url_raw( add_query_arg( 'page', 'iubenda', admin_url( $this->options['cs']['menu_position'] === 'submenu' ? 'options-general.php' : 'admin.php' ) ) );
201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  // actions
203
  add_action( 'after_setup_theme', array( $this, 'register_shortcode' ) );
204
  add_action( 'wp_head', array( $this, 'wp_head_cs' ), 0 );
254
  private function includes() {
255
  include_once( IUBENDA_PLUGIN_PATH . 'includes/settings.php' );
256
  include_once( IUBENDA_PLUGIN_PATH . 'includes/forms.php' );
257
+ include_once( IUBENDA_PLUGIN_PATH . 'includes/amp.php' );
258
+ include_once( IUBENDA_PLUGIN_PATH . 'includes/QuickGeneratorService.php' );
259
+ include_once( IUBENDA_PLUGIN_PATH . 'includes/RadarService.php' );
260
+ include_once( IUBENDA_PLUGIN_PATH . 'includes/CookieSolutionGenerator.php' );
261
+ include_once( IUBENDA_PLUGIN_PATH . 'includes/PrivacyPolicyGenerator.php' );
262
+ include_once( IUBENDA_PLUGIN_PATH . 'includes/ServiceRating.php' );
263
+ include_once( IUBENDA_PLUGIN_PATH . 'includes/widget/IubendaLegalWidget.php' );
264
+ include_once( IUBENDA_PLUGIN_PATH . 'includes/ProductHelper.php' );
265
+ }
266
 
267
  /**
268
  * Initialize plugin.
281
  $registered_languages = PLL()->model->get_languages_list();
282
 
283
  if ( ! empty( $registered_languages ) ) {
284
+ foreach ( $registered_languages as $language ){
285
+ $this->languages[$language->slug] = $language->name;
286
+ $this->languages_locale[$language->locale] = $language->slug;
287
+ }
288
  }
289
 
290
  // get default language
302
  $registered_languages = icl_get_languages();
303
 
304
  if ( ! empty( $registered_languages ) ) {
305
+ foreach ( $registered_languages as $language ){
306
+ $this->languages[$language['code']] = $language['display_name'];
307
+ $this->languages_locale[$language['default_locale']] = $language['code'];
308
+ }
309
+ }
310
 
311
  // get default language
312
  $this->lang_default = $sitepress->get_default_language();
313
  // get current language
314
  $this->lang_current = $sitepress->get_current_language();
315
+ }else{
316
+ // if no plugin for multi lang installed
317
+ $this->lang_default = array_get(iubenda()->lang_mapping, get_locale(), 'en');
318
+ $this->lang_current = array_get(iubenda()->lang_mapping, get_locale());
319
+ }
320
 
321
  // load iubenda parser
322
  include_once( dirname( __FILE__ ) . '/iubenda-cookie-class/iubenda.class.php' );
334
  add_option( 'iubenda_cookie_law_solution', $this->options['cons'], '', 'no' );
335
  add_option( 'iubenda_cookie_law_version', $this->version, '', 'no' );
336
  add_option( 'iubenda_activation_data', $this->activation, '', 'no' );
337
+
338
+ // Send a radar request on plugin activation.
339
+ $radar = new RadarService;
340
+ $radar->askRadarToSendRequest();
341
  }
342
 
343
  /**
348
  public function deactivation() {
349
  // remove options from database?
350
  if ( $this->options['cs']['deactivation'] ) {
351
+ delete_option( 'iubenda_activated_products' );
352
+ delete_option( 'iubenda_activation_data' );
353
+ delete_option( 'iubenda_consent_forms' );
354
+ delete_option( 'iubenda_consent_solution' );
355
+ delete_option( 'iubenda_cookie_law_solution' );
356
+ delete_option( 'iubenda_cookie_law_version' );
357
+ delete_option( 'iubenda_cs_page_configuration' );
358
+ delete_option( 'iubenda_pp_page_configuration' );
359
+ delete_option( 'iubenda_privacy_policy_solution' );
360
+ delete_option( 'iubenda_quick_generator_response' );
361
+ delete_option( 'iubenda_tc_page_configuration' );
362
+ delete_option( 'iubenda_terms_conditions_solution' );
363
  }
364
+
365
+ // remove radar options from database
366
+ delete_option( 'iubenda_radar_api_configuration' );
367
+ delete_option( 'iubenda_radar_api_response' );
368
  }
369
 
370
  /**
410
  * @return void
411
  */
412
  public function load_textdomain() {
413
+ load_plugin_textdomain( 'iubenda', false, IUBENDA_PLUGIN_REL_PATH . 'languages/' );
414
  }
415
 
416
  /**
447
  }
448
 
449
  /**
450
+ * Add wp_head cookie solution content.
451
  *
452
  * @return mixed
453
  */
454
  public function wp_head_cs() {
455
+ // Check if cookie solution service is activated and configured
456
+ if(boolval(array_get($this->settings->services, 'cs.status') !== 'true') || boolval(array_get($this->settings->services, 'cs.configured') !== 'true')){
457
+ return;
458
+ }
459
 
460
  // check content type
461
  if ( (bool) $this->options['cs']['ctype'] == true ) {
485
  // initial head output
486
  $iubenda_code = '';
487
 
488
+ // Check if there is multi language plugin installed and activated
489
+ if ( $this->multilang === true && defined( 'ICL_LANGUAGE_CODE' ) && isset( $this->options['cs']['code_' . ICL_LANGUAGE_CODE] ) ) {
490
+ $iubenda_code .= $this->options['cs']['code_' . ICL_LANGUAGE_CODE];
491
 
492
+ // no code for current language, use default
493
+ if ( ! $iubenda_code )
494
+ $iubenda_code .= $this->options['cs']['code_default'];
495
+ } else{
496
+ $iubenda_code .= $this->options['cs']['code_default'];
497
+ }
498
 
499
  $iubenda_code = $this->parse_code( $iubenda_code, true );
500
 
646
  $scripts = $this->prepare_custom_data( $this->options['cs']['custom_scripts'] );
647
  $iframes = $this->prepare_custom_data( $this->options['cs']['custom_iframes'] );
648
 
649
+ // Check if the current language have a valid CS code or not
650
+ if (!(new ProductHelper())->check_iub_cs_code_exists_current_lang()) {
651
+ return $output;
652
+ }
653
+
654
  // experimental class
655
  if ( $this->options['cs']['parser_engine'] == 'new' ) {
656
  $iubenda = new iubendaParser( mb_convert_encoding( $output, 'HTML-ENTITIES', 'UTF-8' ), array(
790
  if ( function_exists( 'is_amp_endpoint' ) || function_exists( 'ampforwp_is_amp_endpoint' ) ) {
791
  $this->regenerate_amp_templates();
792
  }
793
+
794
+ // Sending a radar request when installing the plugin for the first time
795
+ $radar = new RadarService;
796
+ $radar->askRadarToSendRequest();
797
+
798
+ // Migrating with old version
799
+ $db_version = get_option( 'iubenda_cookie_law_version' );
800
+ $db_version = ! $db_version ? '2.5.91' : $db_version;
801
+
802
+ // Version 3.0.0
803
+ if ( version_compare( $db_version, '3.0.0', '<' ) ) {
804
+ $this->upgrading_to_ver_3_process();
805
+ }
806
  }
807
 
808
  /**
882
  return $configuration;
883
  }
884
 
885
+ /**
886
+ * Get configuration data parsed from TC & PP iubenda code
887
+ * @param $code
888
+ * @return array|false
889
+ */
890
+ public function parse_tc_pp_configuration($code) {
891
+ if (empty($code)) {
892
+ return false;
893
+ }
894
+
895
+ preg_match_all('/<a[^>]+href=([\'"])(?<href>.+?)\1[^>]*>/i', $code, $result);
896
+ $url = array_get($result, 'href.0');
897
+
898
+ if (!$url) {
899
+ return false;
900
+ }
901
+
902
+
903
+ $button_style = strpos(stripslashes($code), 'iubenda-white') !== false ? 'white' : 'black';
904
+ $cookie_policy_id = basename($url);
905
+
906
+ return ['button_style' => $button_style, 'cookie_policy_id' => $cookie_policy_id];
907
+ }
908
+
909
  /**
910
  * Domain info helper function.
911
  *
1031
  $code = iubenda()->options['cs']['code_default'];
1032
  iubenda()->AMP->generate_amp_template( $code );
1033
  }
1034
+
1035
+ /**
1036
+ * unification all languages from locale to iub language
1037
+ *
1038
+ * @param array $locale_languages
1039
+ * @return array
1040
+ */
1041
+ public function language_unification_locale_to_iub(array $locale_languages): array
1042
+ {
1043
+ $iub_languages = [];
1044
+
1045
+ // Workaround to solve return languages if has 'pt' language
1046
+ if($key = array_search('pt_PT', $locale_languages)){
1047
+ unset($locale_languages[$key]);
1048
+ $iub_languages[] = 'pt-BR';
1049
+ }
1050
+ if($key = array_search('pt_BR', $locale_languages)){
1051
+ unset($locale_languages[$key]);
1052
+ $iub_languages[] = 'pt-BR';
1053
+ }
1054
+ if($key = array_search('en_GB', $locale_languages)){
1055
+ unset($locale_languages[$key]);
1056
+ $iub_languages[] = 'en-GB';
1057
+ }
1058
+
1059
+ if($key = array_search('en_US', $locale_languages)){
1060
+ unset($locale_languages[$key]);
1061
+ $iub_languages[] = 'en';
1062
+ }
1063
+
1064
+ if($key = array_search('en_AU', $locale_languages)){
1065
+ unset($locale_languages[$key]);
1066
+ $iub_languages[] = 'en';
1067
+ }
1068
+
1069
+ if($key = array_search('en_CA', $locale_languages)){
1070
+ unset($locale_languages[$key]);
1071
+ $iub_languages[] = 'en';
1072
+ }
1073
+
1074
+ foreach ($locale_languages as $language){
1075
+ if(strpos($language, '_')){
1076
+ $iub_languages[] = strstr($language, '_', true);
1077
+ }
1078
+ }
1079
+
1080
+ return $iub_languages;
1081
+ }
1082
+
1083
+ private function upgrading_to_ver_3_process()
1084
+ {
1085
+ $products = [
1086
+ 'iubenda_cookie_law_solution' => 'cs',
1087
+ 'iubenda_consent_solution' => 'cons',
1088
+ ];
1089
+
1090
+ $old_data = [
1091
+ 'iubenda_cookie_law_solution' => iubenda()->options['cs'],
1092
+ 'iubenda_cookie_law_solution_status' => 'true',
1093
+ 'iubenda_consent_solution' => iubenda()->options['cons'],
1094
+ 'iubenda_consent_solution_status' => 'true',
1095
+ ];
1096
+ $result = $this->settings->init_prepare_product_options($products, $old_data);
1097
+
1098
+ // Count valid codes for iubenda cookie law solution codes and set the service inactive
1099
+ if(count(array_filter(array_get($result, "codes_statues.iubenda_cookie_law_solution_codes", []) ?: [])) == 0){
1100
+ $result['iubenda_activated_products']['iubenda_cookie_law_solution'] = 'false';
1101
+ }
1102
+
1103
+ $this->settings->save_init_prepared_product_options($products, $result);
1104
+
1105
+ // Reload Options and activated products
1106
+ iubenda()->options['activated_products'] = array_get($result, 'iubenda_activated_products', []) ?: [];
1107
+ $this->settings->load_defaults();
1108
+ }
1109
  }
1110
 
1111
+ if (!function_exists('array_get')) {
1112
+ function array_get($array, $key, $default = null) {
1113
+ if (!(is_array($array) || $array instanceof ArrayAccess)) {
1114
+ return $default instanceof Closure ? $default() : $default;
1115
+ }
1116
+
1117
+ if (is_null($key)) {
1118
+ return $array;
1119
+ }
1120
+
1121
+ if (array_key_exists($key, $array)) {
1122
+ return $array[$key];
1123
+ }
1124
+
1125
+ if (strpos($key, '.') === false) {
1126
+ return $array[$key] ?? ($default instanceof Closure ? $default() : $default);
1127
+ }
1128
+
1129
+ foreach (explode('.', $key) as $segment) {
1130
+ if ((is_array($array) || $array instanceof ArrayAccess) && (array_key_exists($segment, $array))) {
1131
+ $array = $array[$segment];
1132
+ } else {
1133
+ return $default instanceof Closure ? $default() : $default;
1134
+ }
1135
+ }
1136
+
1137
+ return $array;
1138
+ }
1139
+ }
1140
+
1141
+ if (!function_exists('__2')) {
1142
+ /**
1143
+ * @param $string
1144
+ * @param $textDomain
1145
+ * @param $locale
1146
+ * @return string|void
1147
+ */
1148
+ function __2($string, $textDomain, $locale): string
1149
+ {
1150
+ global $l10n;
1151
+ if(isset($l10n[$textDomain])) $backup = $l10n[$textDomain];
1152
+ load_textdomain($textDomain, get_template_directory() . '/languages/'. $locale . '.mo');
1153
+ $translation = __($string,$textDomain);
1154
+ if(isset($bkup)) $l10n[$textDomain] = $backup;
1155
+ return $translation;
1156
+ }
1157
+ }
1158
+
1159
+ if (!function_exists('_e2')) {
1160
+ /**
1161
+ * @param $string
1162
+ * @param $textDomain
1163
+ * @param $locale
1164
+ * @return string|void
1165
+ */
1166
+ function _e2($string, $textDomain, $locale): string
1167
+ {
1168
+ return __2($string, $textDomain, $locale);
1169
+ }
1170
+ }
1171
+
1172
+ /**
1173
+ * add stars in iubenda plugin meta
1174
+ */
1175
+ add_filter('plugin_row_meta' , 'iubenda_add_plugin_meta_links', 10, 2);
1176
+ if ( ! function_exists('iubenda_add_plugin_meta_links') ) {
1177
+ function iubenda_add_plugin_meta_links($meta_fields, $file) {
1178
+ if ( plugin_basename(__FILE__) == $file ) {
1179
+ $plugin_url = "https://wordpress.org/support/plugin/iubenda-cookie-law-solution/reviews/?rate=5#new-post";
1180
+ $meta_fields[] = "<a href='" . esc_url($plugin_url) ."' target='_blank' title='" . esc_html__('Rate', 'iubenda') . "'>
1181
+ <i class='IUB-rate-stars'>"
1182
+ . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1183
+ . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1184
+ . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1185
+ . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1186
+ . "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>"
1187
+ . "</i></a>";
1188
+
1189
+ }
1190
+
1191
+ return $meta_fields;
1192
+ }
1193
+ }
1194
  /**
1195
  * Initialise iubenda Cookie Solution
1196
  *
1197
+ * @return iubenda
1198
  */
1199
  function iubenda() {
1200
  static $instance;
js/admin.js DELETED
@@ -1,282 +0,0 @@
1
- ( function ( $ ) {
2
-
3
- $(function() {
4
- // parse args
5
- var args = iubAdminArgs;
6
-
7
- // parser options
8
- $( '#iub_parse' ).change( function () {
9
- if ( $( this ).is( ':checked' ) ) {
10
- $( '#iub_parser_engine_container' ).slideDown( 'fast' );
11
- } else {
12
- $( '#iub_parser_engine_container' ).slideUp( 'fast' );
13
- }
14
- } );
15
-
16
- // amp options
17
- $( '#iub_amp_support' ).change( function () {
18
- if ( $( this ).is( ':checked' ) ) {
19
- $( '#iub_amp_options_container' ).slideDown( 'fast' );
20
- } else {
21
- $( '#iub_amp_options_container' ).slideUp( 'fast' );
22
- }
23
- } );
24
-
25
- // amp options
26
- $( 'input.iub_amp_source' ).change( function () {
27
- var value = $( 'input.iub_amp_source:checked' ).val();
28
-
29
- if ( value === 'remote' ) {
30
- $( '#iub_amp_template-local' ).fadeOut( 'fast', function () {
31
- $( '#iub_amp_template-remote' ).fadeIn( 'fast' );
32
- } );
33
- } else {
34
- $( '#iub_amp_template-remote' ).fadeOut( 'fast', function () {
35
- $( '#iub_amp_template-local' ).fadeIn( 'fast' );
36
- } );
37
- }
38
- } );
39
-
40
- // move notices
41
- var errors = $( '.settings-error' ).detach();
42
-
43
- $( '.iubenda-link' ).after( errors );
44
-
45
- // Help tabs
46
- $( '.contextual-help-tabs a' ).off( 'click' ).click( function ( e ) {
47
- var link = $( this ),
48
- panel,
49
- panelParent;
50
-
51
- e.preventDefault();
52
-
53
- // don't do anything if the click is for the tab already showing.
54
- if ( link.is( '.active a' ) )
55
- return false;
56
-
57
- panelParent = link.closest( '.contextual-help-wrap' );
58
-
59
- // links
60
- $( panelParent ).find( '.contextual-help-tabs .active' ).removeClass( 'active' );
61
- link.parent( 'li' ).addClass( 'active' );
62
-
63
- panel = $( link.attr( 'href' ) );
64
-
65
- // panels
66
- $( panelParent ).find( '.help-tab-content' ).not( panel ).removeClass( 'active' ).hide();
67
- panel.addClass( 'active' ).show();
68
- } );
69
-
70
- // Preferences fields
71
- var preferencesID = $( '.preferences-field' ).length;
72
-
73
- // Add new preferences field
74
- $( document ).on( 'click', '.add-preferences-field', function ( e ) {
75
- e.preventDefault();
76
-
77
- $( '#postbox-container-2' ).change();
78
-
79
- var html = $( '#preferences-field-template' ).html();
80
- html = html.replace( /__PREFERENCE_ID__/g, preferencesID++ );
81
-
82
- $( '.preferences-table .add-preferences-field' ).closest( 'tr' ).before( '<tr class="preferences-field options-field" style="display: none;">' + html + '</tr>' );
83
-
84
- var last = $( '.preferences-field' ).last();
85
-
86
- last.fadeIn( 300 );
87
- } );
88
-
89
- // Remove preferences field
90
- $( document ).on( 'click', '.remove-preferences-field', function ( e ) {
91
- e.preventDefault();
92
-
93
- $( '#postbox-container-2' ).change();
94
-
95
- $( this ).closest( '.preferences-field' ).fadeOut( 300, function () {
96
- $( this ).remove();
97
- } );
98
- } );
99
-
100
- // Exclude fields
101
- var excludeID = $( '.exclude-field' ).length;
102
-
103
- // Add new preferences field
104
- $( document ).on( 'click', '.add-exclude-field', function ( e ) {
105
- e.preventDefault();
106
-
107
- console.log( this );
108
-
109
- $( '#postbox-container-2' ).change();
110
-
111
- var html = $( '#exclude-field-template' ).html();
112
- html = html.replace( /__EXCLUDE_ID__/g, excludeID++ );
113
-
114
- $( '.exclude-table .add-exclude-field' ).closest( 'tr' ).before( '<tr class="exclude-field options-field" style="display: none;">' + html + '</tr>' );
115
-
116
- var last = $( '.exclude-field' ).last();
117
-
118
- last.fadeIn( 300 );
119
- } );
120
-
121
- // Remove exclude field
122
- $( document ).on( 'click', '.remove-exclude-field', function ( e ) {
123
- e.preventDefault();
124
-
125
- $( '#postbox-container-2' ).change();
126
-
127
- $( this ).closest( '.exclude-field' ).fadeOut( 300, function () {
128
- $( this ).remove();
129
- } );
130
- } );
131
-
132
- // Legal notices fields
133
- var legalNoticesID = $( '.legal_notices-field' ).length;
134
-
135
- // Add new preferences field
136
- $( document ).on( 'click', '.add-legal_notices-field', function ( e ) {
137
- e.preventDefault();
138
-
139
- $( '#postbox-container-2' ).change();
140
-
141
- var html = $( '#legal_notices-field-template' ).html();
142
- html = html.replace( /__LEGAL_NOTICE_ID__/g, legalNoticesID++ );
143
-
144
- console.log( html );
145
-
146
- $( '.legal_notices-table .add-legal_notices-field' ).closest( 'tr' ).before( '<tr class="legal_notices-field options-field" style="display: none;">' + html + '</tr>' );
147
-
148
- var last = $( '.legal_notices-field' ).last();
149
-
150
- last.fadeIn( 300 );
151
- } );
152
-
153
- // Remove legal notices field
154
- $( document ).on( 'click', '.remove-legal_notices-field', function ( e ) {
155
- e.preventDefault();
156
-
157
- $( '#postbox-container-2' ).change();
158
-
159
- $( this ).closest( '.legal_notices-field' ).fadeOut( 300, function () {
160
- $( this ).remove();
161
- } );
162
- } );
163
-
164
- // add new script field
165
- $( document ).on( 'click', '.add-custom-script-field', function( e ) {
166
- e.preventDefault();
167
-
168
- $( this ).before( '<div class="custom-script-field" style="display: none;">' + $( '#custom-script-field-template' ).html() + '</div>' );
169
- $( '#tab-panel-scripts' ).find( '.custom-script-field' ).last().fadeIn( 300 );
170
- } );
171
-
172
- // remove custom script field
173
- $( document ).on( 'click', '.remove-custom-script-field', function( e ) {
174
- e.preventDefault();
175
-
176
- $( this ).closest( '.custom-script-field' ).fadeOut( 300, function() {
177
- $( this ).remove();
178
- } );
179
- } );
180
-
181
- // add new iframe field
182
- $( document ).on( 'click', '.add-custom-iframe-field', function( e ) {
183
- e.preventDefault();
184
-
185
- $( this ).before( '<div class="custom-iframe-field" style="display: none;">' + $( '#custom-iframe-field-template' ).html() + '</div>' );
186
- $( '#tab-panel-iframes' ).find( '.custom-iframe-field' ).last().fadeIn( 300 );
187
- } );
188
-
189
- // remove custom iframe field
190
- $( document ).on( 'click', '.remove-custom-iframe-field', function( e ) {
191
- e.preventDefault();
192
-
193
- $( this ).closest( '.custom-iframe-field' ).fadeOut( 300, function() {
194
- $( this ).remove();
195
- } );
196
- } );
197
-
198
- // Remove template fields on save
199
- $( document ).on( 'click', '#publish', function () {
200
- $( '#preferences-field-template' ).remove();
201
- $( '#exclude-field-template' ).remove();
202
- $( '#legal_notices-field-template' ).remove();
203
- } );
204
-
205
- // Confirm form delete
206
- $( document ).on( 'click', '#iubenda-consent-forms .delete-form', function () {
207
- return confirm( args.deleteForm );
208
- } );
209
-
210
- // Handle form fields data
211
- $( document ).on( 'change', '#postbox-container-2', function() {
212
- var fields = {},
213
- fieldsTypes = [ 'subject', 'preferences', 'exclude' ];
214
-
215
- if ( args.formId > 0 ) {
216
- // get all fields
217
- fields.all = $( '.subject-fields-select.select-id option:not([value=""])' ).map( function() { return $( this ).val(); } ).get();
218
-
219
- // get specific fields
220
- $.each( fieldsTypes, function( index, fieldType ) {
221
- fields[fieldType] = [];
222
-
223
- var fieldItems = $( '.' + fieldType + '-field select' );
224
-
225
- // get selected values
226
- $.each( fieldItems, function( index, item ) {
227
- if ( $( item ).val() != '' )
228
- fields[fieldType].push( $( item ).val() );
229
- } );
230
-
231
- fields.fieldType = $.unique( fields[fieldType] );
232
-
233
- // remove available fields if needed
234
- if ( fields[fieldType].length > 0 ) {
235
-
236
- // get options count
237
- var templateItemsCount = $( '.template-field .' + fieldType + '-fields-select option:disabled' ).length;
238
-
239
- // update if options count changed
240
- if ( templateItemsCount !== 0 && fields[fieldType].length != templateItemsCount ) {
241
- // console.log( fields[fieldType] );
242
- }
243
-
244
- // disable add button if needed
245
- if ( fields.all.length == fields[fieldType].length ) {
246
- $( '.add-' + fieldType + '-field' ).attr( 'disabled', 'disabled' );
247
- } else {
248
- $( '.add-' + fieldType + '-field' ).attr( 'disabled', false );
249
- }
250
-
251
- // adjust disabled options
252
- $.each( fields.all, function( index, fieldName ) {
253
- if ( $.inArray( fieldName, fields[fieldType] ) < 0 ) {
254
- // options field
255
- $( '.' + fieldType + '-fields-select option:not(:checked)[value="' + fieldName + '"]' ).attr( 'disabled', false );
256
- // template field
257
- $( '.template-field .' + fieldType + '-fields-select option[value="' + fieldName + '"]' ).attr( 'disabled', false );
258
- } else {
259
- $( '.' + fieldType + '-fields-select option:not(:checked)[value="' + fieldName + '"]' ).attr( 'disabled', 'disabled' );
260
- $( '.template-field .' + fieldType + '-fields-select option[value="' + fieldName + '"]' ).attr( 'disabled', 'disabled' );
261
- }
262
- } );
263
- }
264
- } );
265
-
266
- // console.log( fields );
267
- }
268
-
269
- } );
270
-
271
- // Force trigger change on document ready
272
- $( function() {
273
- $( '#postbox-container-2' ).change();
274
- } );
275
-
276
- $( document ).on( 'mouseenter mouseleave', '#postbox-container-2 .options-field, #postbox-container-2 .submit-field', function() {
277
- $( '#postbox-container-2' ).change();
278
- } );
279
-
280
- } );
281
-
282
- } )( jQuery );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/iubenda-cookie-law-solution-it_IT.mo DELETED
Binary file
languages/iubenda-cookie-law-solution-it_IT.po DELETED
@@ -1,863 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Iubenda Cookie Solution\n"
4
- "POT-Creation-Date: 2020-02-06 13:33+0100\n"
5
- "PO-Revision-Date: 2020-02-06 13:34+0100\n"
6
- "Last-Translator: \n"
7
- "Language-Team: \n"
8
- "Language: it\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 2.3\n"
13
- "X-Poedit-Basepath: ..\n"
14
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
- "X-Poedit-SourceCharset: UTF-8\n"
16
- "X-Poedit-KeywordsList: __\n"
17
- "X-Poedit-SearchPath-0: .\n"
18
-
19
- #: includes/amp.php:126
20
- msgid "Loading"
21
- msgstr ""
22
-
23
- #: includes/amp.php:258
24
- msgid "AMP Cookie Consent"
25
- msgstr ""
26
-
27
- #: includes/forms-list-table.php:92
28
- msgid "Form Title"
29
- msgstr "Nome del form"
30
-
31
- #: includes/forms-list-table.php:93
32
- msgid "Form ID"
33
- msgstr "ID del form"
34
-
35
- #: includes/forms-list-table.php:94
36
- #, fuzzy
37
- #| msgid "Source"
38
- msgid "Form Source"
39
- msgstr "Fonte"
40
-
41
- #: includes/forms-list-table.php:95
42
- msgid "Fields"
43
- msgstr "Campi"
44
-
45
- #: includes/forms-list-table.php:96
46
- msgid "Date"
47
- msgstr "Data"
48
-
49
- #: includes/forms-list-table.php:165
50
- msgid "Edit"
51
- msgstr "Modifica"
52
-
53
- #: includes/forms-list-table.php:166
54
- msgid "Delete"
55
- msgstr "Elimina"
56
-
57
- #: includes/forms-list-table.php:277
58
- msgid "Filter"
59
- msgstr "Filtra"
60
-
61
- #: includes/forms-list-table.php:294
62
- msgid "Filter by source"
63
- msgstr "Filtra per fonte"
64
-
65
- #: includes/forms-list-table.php:296
66
- msgid "All form sources"
67
- msgstr "Tutte le fonti"
68
-
69
- #: includes/forms-list-table.php:364
70
- msgid "No forms found."
71
- msgstr "Nessun form trovato."
72
-
73
- #: includes/forms.php:149 includes/settings.php:138
74
- msgid "Forms"
75
- msgstr "Form"
76
-
77
- #: includes/forms.php:150
78
- msgid "Form"
79
- msgstr "Form"
80
-
81
- #: includes/forms.php:566 includes/forms.php:580
82
- msgid "First name"
83
- msgstr "Nome"
84
-
85
- #: includes/forms.php:572 includes/forms.php:592
86
- msgid "Last name"
87
- msgstr "Cognome"
88
-
89
- #: includes/forms.php:586
90
- msgid "Middle name"
91
- msgstr "Secondo nome"
92
-
93
- #: includes/settings.php:43 includes/settings.php:44 includes/settings.php:45
94
- #: includes/settings.php:46 includes/settings.php:47
95
- msgid "string"
96
- msgstr "stringa"
97
-
98
- #: includes/settings.php:59 includes/settings.php:183
99
- msgid "Cookie Solution"
100
- msgstr "Cookie Solution"
101
-
102
- #: includes/settings.php:65 includes/settings.php:184
103
- msgid "Consent Solution"
104
- msgstr "Consent Solution"
105
-
106
- #: includes/settings.php:73
107
- msgid "Not set"
108
- msgstr ""
109
-
110
- #: includes/settings.php:74
111
- msgid "Strictly necessary"
112
- msgstr ""
113
-
114
- #: includes/settings.php:75
115
- msgid "Basic interactions & functionalities"
116
- msgstr ""
117
-
118
- #: includes/settings.php:76
119
- #, fuzzy
120
- #| msgid "Experimental (enhances performance)"
121
- msgid "Experience enhancement"
122
- msgstr "Sperimentale (performance migliorata)"
123
-
124
- #: includes/settings.php:77
125
- msgid "Analytics"
126
- msgstr ""
127
-
128
- #: includes/settings.php:78
129
- msgid "Targeting & Advertising"
130
- msgstr ""
131
-
132
- #: includes/settings.php:125
133
- msgid "Code"
134
- msgstr "Codice"
135
-
136
- #: includes/settings.php:126
137
- msgid "Google AMP"
138
- msgstr ""
139
-
140
- #: includes/settings.php:127
141
- #, fuzzy
142
- #| msgid "Scripts blocking"
143
- msgid "Script blocking"
144
- msgstr "Blocco preventivo dei codici"
145
-
146
- #: includes/settings.php:128
147
- msgid "Custom scripts"
148
- msgstr "Script personalizzati"
149
-
150
- #: includes/settings.php:129
151
- msgid "Content type"
152
- msgstr "Tipo di contenuto"
153
-
154
- #: includes/settings.php:130
155
- msgid "RSS feed"
156
- msgstr "Feed RSS"
157
-
158
- #: includes/settings.php:131
159
- msgid "POST requests"
160
- msgstr "Richieste POST"
161
-
162
- #: includes/settings.php:132
163
- msgid "Menu position"
164
- msgstr "Posizione menu"
165
-
166
- #: includes/settings.php:133
167
- msgid "Deactivation"
168
- msgstr "Disattivazione"
169
-
170
- #: includes/settings.php:139
171
- #, fuzzy
172
- #| msgid "Public API Key"
173
- msgid "Public Api Key"
174
- msgstr "Chiave API pubblica"
175
-
176
- #: includes/settings.php:142 includes/settings.php:146
177
- msgid "Field Mapping"
178
- msgstr "Mapping dei campi"
179
-
180
- #: includes/settings.php:206
181
- msgid "Are you sure you want to delete this form?"
182
- msgstr "Sei sicuro di voler eliminare questo form?"
183
-
184
- #: includes/settings.php:541
185
- msgid "You don't have permission to access this page."
186
- msgstr "Non disponi dell'autorizzazione per accedere a questa pagina."
187
-
188
- #: includes/settings.php:567
189
- #, fuzzy
190
- #| msgid ""
191
- #| "This plugin is the easiest and most comprehensive way to adapt your "
192
- #| "WordPress site to the European cookie law. Upon your user's first visit, "
193
- #| "the plugin will take care of collecting their consent, of blocking the "
194
- #| "most popular among the scripts that install cookies and subsequently "
195
- #| "reactivate these scripts as soon as consent is provided. The basic "
196
- #| "settings include obtaining consent by a simple scroll action (the most "
197
- #| "effective method) and script reactivation without refreshing the page."
198
- msgid ""
199
- "This plugin is the easiest and most comprehensive way to adapt your "
200
- "WordPress site to the ePrivacy (EU Cookie Law). Upon your users’ first "
201
- "visit, the plugin will take care of collecting their consent, blocking the "
202
- "most popular cookie-scripts and subsequently reactivating these scripts as "
203
- "soon as consent is provided. The basic settings include obtaining consent by "
204
- "a simple scroll action (the most effective method) and script reactivation "
205
- "without refreshing the page (asynchronous script reactivation)."
206
- msgstr ""
207
- "Questo plugin è il modo più semplice e completo per adeguare il tuo sito "
208
- "WordPress alla Direttiva ePrivacy (Cookie Law). Alla prima visita "
209
- "dell'utente il plugin si occuperà di raccoglierne il consenso, bloccare gli "
210
- "script più popolari che installano cookie e riattivarli non appena il "
211
- "consenso viene fornito. Le impostazioni di base includono la raccolta del "
212
- "consenso tramite il semplice scroll (il metodo più efficace) e la "
213
- "riattivazione senza il refresh della pagina."
214
-
215
- #: includes/settings.php:570
216
- msgid ""
217
- "Does the Cookie Solution support IAB’s Transparency and Consent Framework?"
218
- msgstr ""
219
- "La Cookie Solution supporta il Transparency e Consent Framework di IAB?"
220
-
221
- #: includes/settings.php:571
222
- #, fuzzy, php-format
223
- #| msgid ""
224
- #| "Visit our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">plugin "
225
- #| "page.</a>"
226
- msgid ""
227
- "Yes it does. You can read more about it <a href=\"%s\" class=\"iubenda-url\" "
228
- "target=\"_blank\">here.</a>"
229
- msgstr ""
230
- "Sì. Visita <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">questa "
231
- "pagina</a> per maggiori dettagli."
232
-
233
- #: includes/settings.php:574
234
- #, fuzzy
235
- #| msgid "Would you like to know more about the Cookie Law?"
236
- msgid "Would you like to know more about the cookie law?"
237
- msgstr "Vuoi saperne di più sulla Cookie Law?"
238
-
239
- #: includes/settings.php:575
240
- #, fuzzy, php-format
241
- #| msgid ""
242
- #| "Read our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">complete "
243
- #| "guide to the Cookie Law</a>."
244
- msgid ""
245
- "Read our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">complete "
246
- "guide to the cookie law.</a>"
247
- msgstr ""
248
- "Leggi la nostra <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">guida "
249
- "completa alla Cookie Law</a>."
250
-
251
- #: includes/settings.php:578
252
- msgid "What is the full functionality of the plugin?"
253
- msgstr "Quali sono le funzionalità del plugin?"
254
-
255
- #: includes/settings.php:579
256
- #, fuzzy, php-format
257
- #| msgid ""
258
- #| "Visit our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">plugin "
259
- #| "page</a>."
260
- msgid ""
261
- "Visit our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">plugin page."
262
- "</a>"
263
- msgstr ""
264
- "Visita la <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">pagina "
265
- "dedicata</a> al plugin."
266
-
267
- #: includes/settings.php:582
268
- msgid "Enter the iubenda code for the Cookie Solution below."
269
- msgstr "Inserisci qui sotto il codice di iubenda per la Cookie Solution."
270
-
271
- #: includes/settings.php:583
272
- #, php-format
273
- msgid ""
274
- "In order to run the plugin, you need to enter the iubenda code that "
275
- "activates the cookie law banner and the cookie policy in the form below. "
276
- "This code can be generated on www.iubenda.com, following <a href=\"%s\" "
277
- "class=\"iubenda-url\" target=\"_blank\">this guide.</a>"
278
- msgstr ""
279
- "Per far funzionare il plugin, è necessario inserire nel form sottostante il "
280
- "codice di iubenda che attiva il cookie banner e la cookie policy. Questo "
281
- "codice può essere generato su www.iubenda.com seguendo le istruzioni "
282
- "contenute in <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">questa "
283
- "guida</a>"
284
-
285
- #: includes/settings.php:588
286
- #, fuzzy
287
- #| msgid ""
288
- #| "Maintaining comprehensive records of consent is a vital part of privacy "
289
- #| "compliance in general but is specifically required under the GDPR. These "
290
- #| "records should include a way of identifying the user, store proof of "
291
- #| "consent, record of the consenting action, and the legal documents "
292
- #| "available to the user at the time of consent, among other things. You can "
293
- #| "read about the <a href=\"https://www.iubenda.com/en/help/5428#records-of-"
294
- #| "consent\" target=\"_blank\">full requirements here</a>."
295
- msgid ""
296
- "Maintaining comprehensive records of consent is a vital part of privacy "
297
- "compliance in general but is specifically required under the GDPR. These "
298
- "records should include a way of identifying the user, store proof of "
299
- "consent, record of the consenting action, and the legal documents available "
300
- "to the user at the time of consent, among other things. You can read about "
301
- "the <a href=\"https://www.iubenda.com/en/help/5428-gdpr-guide#records-of-"
302
- "consent\" target=\"_blank\">full requirements here</a>."
303
- msgstr ""
304
- "Oltre ad essere un elemento vitale per il rispetto della privacy in "
305
- "generale, il mantenimento di un registro dei consensi è specificamente "
306
- "richiesto dal GDPR. Tra le altre cose, tale registro dovrebbe includere un "
307
- "modo per identificare l'utente, la prova del consenso, la registrazione "
308
- "dell'azione di consenso e i documenti legali messi a disposizione "
309
- "dell'utente al momento del consenso. <a href=\"https://www.iubenda.com/it/"
310
- "help/5424#registro-consensi\" target=\"_blank\">Trovi tutti i requisiti qui</"
311
- "a>."
312
-
313
- #: includes/settings.php:613
314
- #, php-format
315
- msgid ""
316
- "If you are using per-purpose script blocking or Reject option please disable "
317
- "the \"Leave scripts untouched on the page if the user has already given "
318
- "consent\" option. <a href=\"%s\" target=\"_self\">Disable now</a>"
319
- msgstr ""
320
-
321
- #: includes/settings.php:638
322
- msgid ""
323
- "AMP configuration file requires HTTPS. Make sure your SSL Certificate is "
324
- "configured correctly."
325
- msgstr ""
326
-
327
- #: includes/settings.php:660
328
- #, php-format
329
- msgid ""
330
- "This plugin drastically reduces the need for direct interventions in the "
331
- "code of the site by integrating with iubenda’s Cookie Solution. It provides "
332
- "a fully customizable cookie banner, dynamically generates a cookie policy <a "
333
- "href=\"%s\" target=\"_blank\">to match the services in use on your site</a>, "
334
- "and, fully manages cookie-related consent – including the blocking of the "
335
- "most common widgets and third-party cookies before consent is received – in "
336
- "order to comply with the GDPR and ePrivacy."
337
- msgstr ""
338
- "Grazie all'integrazione con la Cookie Solution di iubenda, questo plugin "
339
- "riduce drasticamente la necessità di interventi diretti sul codice del sito. "
340
- "Prevede un cookie banner completamente personalizzabile, genera una cookie "
341
- "policy che <a href=\"%s\" target=\"_blank\">rispecchia i servizi in uso dal "
342
- "tuo sito web</a> e gestisce il consenso ai cookie (incluso il blocco "
343
- "automatico dei widget e dei cookie di terza parte più diffusi) in modo da "
344
- "permetterti di rispettare il GDPR e la Direttiva ePrivacy."
345
-
346
- #: includes/settings.php:662
347
- msgid ""
348
- "Maintaining valid records of consent is a vital part of privacy compliance "
349
- "in general, and it is specifically required under the GDPR. These records "
350
- "should include a userid, timestamp, consent proof, record of the consenting "
351
- "action, and the legal documents available to the user at the time of "
352
- "consent, among other things. This plugin is THE most complete solution for "
353
- "recording, sorting and maintaining GDPR records of consent*. The plugin also "
354
- "boasts built-in compatibility with WordPress comment form, Contact Form 7 "
355
- "and WP Forms plugins for your convenience, but can be manually integrated "
356
- "with any type of web-form and can even store consent proofs for consents "
357
- "collected offline (e.g in-store sign-ups) via WP media upload."
358
- msgstr ""
359
- "Il mantenimento di un valido registro dei consensi è un elemento vitale per "
360
- "il rispetto della privacy, ed è specificamente richiesto dal GDPR. Tra le "
361
- "altre cose, questo registro dovrebbe includere l'identificativo dell'utente, "
362
- "il timestamp, la prova del consenso, la registrazione dell'azione di "
363
- "consenso e i documenti legali messi a disposizione dell'utente nel momento "
364
- "in cui il consenso è stato acquisito. Questo plugin è la soluzione più "
365
- "completa per la creazione e la gestione di un registro dei consensi*. Il "
366
- "plugin è compatibile con il modulo dei commenti WordPress e i plugin Contact "
367
- "Form 7 e WP Forms, può essere integrato manualmente con qualsiasi form e può "
368
- "memorizzare la prova del consenso anche per i consensi raccolti offline (ad "
369
- "esempio, le iscrizioni in-store) tramite l'upload dei media WP."
370
-
371
- #: includes/settings.php:680
372
- msgid "Reset to defaults"
373
- msgstr "Ripristina le impostazioni di default"
374
-
375
- #: includes/settings.php:692
376
- msgid "Need support for this plugin?"
377
- msgstr "Serve aiuto per questo plugin?"
378
-
379
- #: includes/settings.php:693
380
- #, php-format
381
- msgid ""
382
- "Visit our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">support "
383
- "forum.</a>"
384
- msgstr ""
385
- "Visita il nostro <a href=\"%s\" class=\"iubenda-url\" target=\"_blank"
386
- "\">forum di supporto</a>"
387
-
388
- #: includes/settings.php:737
389
- #, php-format
390
- msgid "Enter the iubenda code for %s."
391
- msgstr "Inserisci il codice di iubenda per %s."
392
-
393
- #: includes/settings.php:748
394
- msgid "Enter the iubenda code."
395
- msgstr "Inserisci il codice di iubenda."
396
-
397
- #: includes/settings.php:775
398
- #, fuzzy
399
- #| msgid "Enter a list of custom scripts (one per line)."
400
- msgid ""
401
- "Provide a list of custom scripts you’d like to block and assign their "
402
- "purpose."
403
- msgstr "Elenca gli script personalizzati (uno per riga)."
404
-
405
- #: includes/settings.php:777 includes/settings.php:784
406
- #, fuzzy
407
- #| msgid "Custom scripts"
408
- msgid "Enter custom script"
409
- msgstr "Script personalizzati"
410
-
411
- #: includes/settings.php:777 includes/settings.php:784
412
- #: includes/settings.php:795 includes/settings.php:802
413
- #: includes/settings.php:1178 includes/settings.php:1205
414
- #: includes/settings.php:1246 includes/settings.php:1274
415
- #: includes/settings.php:1325 includes/settings.php:1341
416
- msgid "Remove"
417
- msgstr "Elimina"
418
-
419
- #: includes/settings.php:793
420
- #, fuzzy
421
- #| msgid "Enter a list of custom iframes (one per line)."
422
- msgid ""
423
- "Provide a list of custom iframes you’d like to block and assign their "
424
- "purpose. "
425
- msgstr "Elenca gli iframe personalizzati (uno per riga)."
426
-
427
- #: includes/settings.php:795 includes/settings.php:802
428
- msgid "Enter custom iframe"
429
- msgstr ""
430
-
431
- #: includes/settings.php:840
432
- #, fuzzy
433
- #| msgid "Automatically block scripts detected by the plugin."
434
- msgid "Automatically block scripts detected by the plugin"
435
- msgstr "Blocca automaticamente gli script rilevati dal plugin."
436
-
437
- #: includes/settings.php:841
438
- #, php-format
439
- msgid ""
440
- "see <a href=\"%s\" target=\"_blank\">our documentation</a> for the list of "
441
- "detected scripts."
442
- msgstr ""
443
- "visita <a href=\"%s\" target=\"_blank\">la nostra documentazione</a> per la "
444
- "lista degli script rilevati automaticamente dal plugin."
445
-
446
- #: includes/settings.php:844
447
- msgid "Primary"
448
- msgstr "Primario"
449
-
450
- #: includes/settings.php:845
451
- msgid "Secondary"
452
- msgstr "Secondario"
453
-
454
- #: includes/settings.php:846
455
- msgid "Select parsing engine."
456
- msgstr "Seleziona il motore di parsing."
457
-
458
- #: includes/settings.php:849
459
- msgid ""
460
- "Leave scripts untouched on the page if the user has already given consent"
461
- msgstr ""
462
- "Lascia gli script intatti sulla pagina se l'utente ha già prestato il "
463
- "consenso"
464
-
465
- #: includes/settings.php:850
466
- #, fuzzy
467
- #| msgid ""
468
- #| "improves performance, highly recommended, to be deactivated only if your "
469
- #| "site uses a caching system"
470
- msgid ""
471
- "improves performance, highly recommended, to be deactivated only if your "
472
- "site uses a caching system or if you're collecting per-category consent."
473
- msgstr ""
474
- "migliora le prestazioni, altamente consigliato, da disattivare solo qualora "
475
- "il tuo sito utilizzi un sistema di cache"
476
-
477
- #: includes/settings.php:864
478
- msgid ""
479
- "Restrict the plugin to run only for requests that have \"Content-type: "
480
- "text / html\" (recommended)"
481
- msgstr ""
482
- "Restringi l'esecuzione del plugin alle sole richieste che presentano "
483
- "\"Content-type: text/html\" (consigliato)"
484
-
485
- #: includes/settings.php:876
486
- msgid "Do not run the plugin inside the RSS feed (recommended)"
487
- msgstr "Non eseguire il plugin all'interno dei Feed RSS (consigliato)"
488
-
489
- #: includes/settings.php:888
490
- #, fuzzy
491
- #| msgid "Do not run the plugin inside the RSS feed (recommended)"
492
- msgid "Do not run the plugin on POST requests (recommended)"
493
- msgstr "Non eseguire il plugin per richieste POST (consigliato)"
494
-
495
- #: includes/settings.php:900
496
- msgid "Top menu"
497
- msgstr "Menu principale"
498
-
499
- #: includes/settings.php:901
500
- msgid "Submenu"
501
- msgstr "Sottomenu"
502
-
503
- #: includes/settings.php:902
504
- msgid ""
505
- "Select whether to display iubenda in a top admin menu or the Settings "
506
- "submenu."
507
- msgstr ""
508
- "Scegli se visualizzare iubenda in una voce di menu principale del pannello "
509
- "admin o in un sottomenu della scheda Impostazioni."
510
-
511
- #: includes/settings.php:914
512
- msgid "Enable Google AMP support."
513
- msgstr ""
514
-
515
- #: includes/settings.php:915
516
- #, php-format
517
- msgid ""
518
- "This feature enables iubenda on AMP pages via the <a href=\"%s\" target="
519
- "\"_blank\">AMP</a> and <a href=\"%s\" target=\"_blank\">AMP for WP</a> "
520
- "plugins. AMP requires specific configuration parameters and a page hosted on "
521
- "your domain where the configuration is loaded from. <a href=\"%s\" target="
522
- "\"_blank\">Learn more on iubenda and AMP</a>."
523
- msgstr ""
524
-
525
- #: includes/settings.php:918
526
- msgid "Auto-generated configuration file"
527
- msgstr ""
528
-
529
- #: includes/settings.php:919
530
- msgid "Custom configuration file"
531
- msgstr ""
532
-
533
- #: includes/settings.php:920
534
- msgid "Select the iubenda AMP configuration file location."
535
- msgstr ""
536
-
537
- #: includes/settings.php:925
538
- msgid ""
539
- "No file available. Save changes to generate iubenda AMP configuration file."
540
- msgstr ""
541
-
542
- #: includes/settings.php:953
543
- msgid ""
544
- "If you're experiencing issues with AMP setup download the generated iubenda "
545
- "AMP configuration file, upload it to any SSL server and paste the file link "
546
- "to the field above."
547
- msgstr ""
548
-
549
- #: includes/settings.php:955
550
- #, php-format
551
- msgid ""
552
- "Seeing the AMP cookie notice when testing from Google but not when visiting "
553
- "your AMP pages directly? <a href=\"%s\" target=\"_blank\">Learn how to fix "
554
- "it</a>."
555
- msgstr ""
556
-
557
- #: includes/settings.php:968
558
- msgid "Delete all plugin data upon deactivation"
559
- msgstr "Vuoi eliminare tutti i dati del plugin al momento della disattivazione"
560
-
561
- #: includes/settings.php:981
562
- msgid "Enter your iubenda Javascript library public API key."
563
- msgstr ""
564
- "Inserisci la chiave API pubblica per la libreria JavaScript di iubenda."
565
-
566
- #: includes/settings.php:997
567
- msgid ""
568
- "This section lists the forms available for field mapping. The plugin "
569
- "currently supports & detects: WordPress Comment, Contact Form 7, WooCommerce "
570
- "Checkout and WP Forms."
571
- msgstr ""
572
- "Questa sezione elenca i form disponibili al mapping. Al momento il plugin "
573
- "supporta e rileva: Commenti WordPress, Contact Form 7, WooCommerce Checkout "
574
- "e WP Forms."
575
-
576
- #: includes/settings.php:1058
577
- #, php-format
578
- msgid "%s form title."
579
- msgstr "%s nome del form."
580
-
581
- #: includes/settings.php:1058
582
- msgid "Unknown"
583
- msgstr "Sconosciuto"
584
-
585
- #: includes/settings.php:1060
586
- msgid "Available form fields:"
587
- msgstr "Campi disponibili:"
588
-
589
- #: includes/settings.php:1066
590
- msgid "Publish"
591
- msgstr "Pubblica"
592
-
593
- #: includes/settings.php:1071
594
- msgid "Status"
595
- msgstr "Stato"
596
-
597
- #: includes/settings.php:1084
598
- msgid "Cancel"
599
- msgstr "Annulla"
600
-
601
- #: includes/settings.php:1089
602
- msgid "Save"
603
- msgstr "Salva"
604
-
605
- #: includes/settings.php:1102
606
- msgid "Map fields"
607
- msgstr "Mappa i campi"
608
-
609
- #: includes/settings.php:1108
610
- msgid "Subject fields"
611
- msgstr "Utente"
612
-
613
- #: includes/settings.php:1109
614
- #, fuzzy
615
- #| msgid ""
616
- #| "Subject fields allow you to store a series of identifying values about "
617
- #| "your individual subjects/users. Please map the subject field with the "
618
- #| "corresponding form fields where applicable."
619
- msgid ""
620
- "Subject fields allow you to store a series of identifying values about your "
621
- "individual subjects/users. Please map the subject field with the "
622
- "corresponding form fields where applicable."
623
- msgstr ""
624
- "Questi campi ti permettono di memorizzare una serie di valori identificativi "
625
- "dell'utente. Associa gli attributi dell'utente ai corrispondenti campi del "
626
- "form (quando applicabile)."
627
-
628
- #: includes/settings.php:1114
629
- msgid "Subject field"
630
- msgstr "Attributo"
631
-
632
- #: includes/settings.php:1115 includes/settings.php:1159
633
- msgid "Form field"
634
- msgstr "Campo del form"
635
-
636
- #: includes/settings.php:1121
637
- msgid "Autogenerated"
638
- msgstr "Generato automaticamente"
639
-
640
- #: includes/settings.php:1121
641
- msgid "None"
642
- msgstr "Nessuno"
643
-
644
- #: includes/settings.php:1152
645
- msgid "Preferences fields"
646
- msgstr "Preferenze"
647
-
648
- #: includes/settings.php:1153
649
- msgid ""
650
- "Preferences fields allow you to store a record of the various opt-ins points "
651
- "at which the user has agreed or given consent, such as fields for agreeing "
652
- "to terms and conditions, newsletter, profiling, etc. *Please create at least "
653
- "one preference field."
654
- msgstr ""
655
- "Questi campi ti permettono di memorizzare a cosa l'utente ha prestato il "
656
- "proprio consenso, come ad esempio i termini e condizioni, la newsletter la "
657
- "profilazione, ecc. *Si prega di creare almeno un campo."
658
-
659
- #: includes/settings.php:1158
660
- msgid "Preferences field"
661
- msgstr "Campo delle preferenze"
662
-
663
- #: includes/settings.php:1164 includes/settings.php:1190
664
- #: includes/settings.php:1315 includes/settings.php:1325
665
- #: includes/settings.php:1341
666
- msgid "Enter field name"
667
- msgstr "Aggiungi il nome di un campo"
668
-
669
- #: includes/settings.php:1214
670
- msgid "Add New Preference"
671
- msgstr "Aggiungi nuova preferenza"
672
-
673
- #: includes/settings.php:1221
674
- msgid "Exclude fields"
675
- msgstr "Esclusioni"
676
-
677
- #: includes/settings.php:1222
678
- msgid ""
679
- "Exclude fields allow you to create a list of fields that you would like to "
680
- "exclude from your Consent Solution recorded proofs (for e.g. password or "
681
- "other fields not related to the consent)."
682
- msgstr ""
683
- "Qui puoi creare una lista dei campi che desideri escludere dalle prove del "
684
- "consenso memorizzate dalla Consent Solution (ad es. password o altri campi "
685
- "non correlati)."
686
-
687
- #: includes/settings.php:1227
688
- msgid "Exclude field"
689
- msgstr "Campi esclusi"
690
-
691
- #: includes/settings.php:1284
692
- msgid "Add New Exclude"
693
- msgstr "Aggiungi una nuova esclusione"
694
-
695
- #: includes/settings.php:1294
696
- msgid "Legal Notices"
697
- msgstr "Note legali"
698
-
699
- #: includes/settings.php:1300
700
- msgid "Legal documents"
701
- msgstr "Documenti legali"
702
-
703
- #: includes/settings.php:1301
704
- msgid ""
705
- "In general, it’s important that you declare which legal documents are being "
706
- "agreed upon when each consent is collected. However, if you use iubenda for "
707
- "your legal documents, it is *required* that you identify the documents by "
708
- "selecting them here."
709
- msgstr ""
710
- "In generale, è importante dichiarare quali documenti legali vengono "
711
- "accettati al momento del conferimento del consenso. Se usi iubenda per le "
712
- "tue informative, *devi* identificare tali documenti selezionandoli qui."
713
-
714
- #: includes/settings.php:1306
715
- msgid "Identifier"
716
- msgstr "Identificatore"
717
-
718
- #: includes/settings.php:1315
719
- msgid "Please select each legal document available on your site."
720
- msgstr "Seleziona tutti i documenti legali presenti sul tuo sito."
721
-
722
- #: includes/settings.php:1331
723
- msgid "Alternatively, you may add your own custom document identifiers."
724
- msgstr "In alternativa, puoi aggiungere degli identificatori personalizzati."
725
-
726
- #: includes/settings.php:1350
727
- msgid "Add New Document"
728
- msgstr "Aggiungi un nuovo documento"
729
-
730
- #: includes/settings.php:1471 includes/settings.php:1503
731
- #: includes/settings.php:1688
732
- msgid "Settings saved."
733
- msgstr "Impostazioni salvate."
734
-
735
- #: includes/settings.php:1483 includes/settings.php:1508
736
- msgid "Settings restored to defaults."
737
- msgstr "Impostazioni di default ripristinate."
738
-
739
- #: includes/settings.php:1543
740
- #, php-format
741
- msgid ""
742
- "Please enable comments cookies opt-in checkbox in the <a href=\"%s\" target="
743
- "\"_blank\">Discussion settings</a>."
744
- msgstr ""
745
- "Abilita per i commenti la possibilità di attivare o disattivare la "
746
- "memorizzazione dei dati personali in un cookie. Per farlo, vai su <a href="
747
- "\"%s\" target=\"_blank\">Impostazioni discussione</a>."
748
-
749
- #: includes/settings.php:1563
750
- msgid "No forms or form changes detected."
751
- msgstr "Nessun form o modifica rilevati."
752
-
753
- #: includes/settings.php:1623
754
- msgid "Form saving failed. Please fill the Subject fields."
755
- msgstr "Salvataggio del form fallito. Compila i campi Utente e Preferenze."
756
-
757
- #: includes/settings.php:1647
758
- #, fuzzy
759
- #| msgid "Settings applied successfully"
760
- msgid "Form saved successfully - form status changed to Mapped."
761
- msgstr "Form salvato con successo - Stato aggiornato a Mappato."
762
-
763
- #: includes/settings.php:1650
764
- msgid "Form updated successfully."
765
- msgstr "Form aggiornato con successo."
766
-
767
- #: includes/settings.php:1653
768
- msgid "Form saving failed."
769
- msgstr "Salvataggio del form fallito."
770
-
771
- #: includes/settings.php:1670
772
- #, fuzzy
773
- #| msgid "Settings applied successfully"
774
- msgid "Form deleted successfully."
775
- msgstr "Form eliminato con successo."
776
-
777
- #: includes/settings.php:1672
778
- msgid "Form delete failed."
779
- msgstr "Eliminazione del form fallita."
780
-
781
- #: includes/settings.php:1748
782
- msgid "Dismiss this notice."
783
- msgstr "Chiudi questo avviso."
784
-
785
- #: includes/settings.php:1424
786
- msgid "Currently, you do not have write permission for <i>%s</i>. For instructions on how to fix this, please read <a target=\"_blank\" href=\"%s\">our guide</a>."
787
- msgstr "Al momento non disponi dei permessi di scrittura per <i>%s</i>. Leggi la <a target=\"_blank\" href=\"%s\">nostra guida</a> per istruzioni su come risolvere il problema."
788
-
789
- #, fuzzy
790
- #~| msgid "Settings applied successfully"
791
- #~ msgid "Forms detected successfully."
792
- #~ msgstr "Impostazioni salvate con successo."
793
-
794
- #, fuzzy
795
- #~| msgid "Content type"
796
- #~ msgid "Contents"
797
- #~ msgstr "Tipo di contenuto"
798
-
799
- #~ msgid "Want to try a beta version of this plugin with the latest features?"
800
- #~ msgstr ""
801
- #~ "Vuoi provare una versione Beta di questo plugin, con le funzionalità più "
802
- #~ "recenti?"
803
-
804
- #~ msgid ""
805
- #~ "Visit our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank"
806
- #~ "\">documentation pages</a> and follow the instructions to install a beta "
807
- #~ "version."
808
- #~ msgstr ""
809
- #~ "Visita la <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">nostra "
810
- #~ "documentazione</a> e segui le istruzioni per installare una versione Beta."
811
-
812
- #~ msgid "Default"
813
- #~ msgstr "Default"
814
-
815
- #~ msgid "Experimental"
816
- #~ msgstr "Sperimentale"
817
-
818
- #~ msgid "What’s the full functionality of the plugin?"
819
- #~ msgstr "Quali sono le funzionalità del plugin?"
820
-
821
- #~ msgid "Select a language to correctly pair it with your script"
822
- #~ msgstr "Seleziona una lingua a cui associare il tuo codice"
823
-
824
- #~ msgid "Automatically blocks scripts detected by the plugin"
825
- #~ msgstr "Effettua il blocco automatico degli script rilevati dal plugin"
826
-
827
- #~ msgid ""
828
- #~ "see <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">our "
829
- #~ "documentation</a> for the list of detected scripts."
830
- #~ msgstr ""
831
- #~ "consulta la <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">nostra "
832
- #~ "documentazione</a> per la lista di script rilevati."
833
-
834
- #~ msgid "Parsing engine"
835
- #~ msgstr "Parsing engine"
836
-
837
- #~ msgid ""
838
- #~ "Leaves scripts untouched on the page if the user has already given consent"
839
- #~ msgstr ""
840
- #~ "Lascia intatti gli script della pagina se l'utente ha già dato il consenso"
841
-
842
- #~ msgid "Applies special optimizations in cases with faulty output"
843
- #~ msgstr "Applica ottimizzazioni speciali in caso di errori con l'output"
844
-
845
- #~ msgid ""
846
- #~ "only select this option if you had performance problems or if you notice "
847
- #~ "that the blocking of code is run several times"
848
- #~ msgstr ""
849
- #~ "attiva questa opzione solo qualora avessi problemi di performance o "
850
- #~ "notassi che il blocco dei codici viene applicato più volte"
851
-
852
- #~ msgid "Parsed with iubenda experimental class in %s sec."
853
- #~ msgstr "Parsed with iubenda experimental class in %s sec."
854
-
855
- #~ msgid "Parsed with iubenda default class in %s sec."
856
- #~ msgstr "Parsed with iubenda default class in %s sec."
857
-
858
- #~ msgid ""
859
- #~ "see <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">our "
860
- #~ "documentation</a> for the list of detected scripts this guide."
861
- #~ msgstr ""
862
- #~ "consulta la <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">nostra "
863
- #~ "documentazione</a> per la lista di script rilevati."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/iubenda-cookie-law-solution.pot DELETED
@@ -1,647 +0,0 @@
1
- #, fuzzy
2
- msgid ""
3
- msgstr ""
4
- "Project-Id-Version: Iubenda Cookie Solution\n"
5
- "POT-Creation-Date: 2020-02-06 13:33+0100\n"
6
- "PO-Revision-Date: 2015-08-12 10:36+0200\n"
7
- "Last-Translator: \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-Generator: Poedit 2.3\n"
13
- "X-Poedit-Basepath: ..\n"
14
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
- "X-Poedit-SourceCharset: UTF-8\n"
16
- "X-Poedit-KeywordsList: __\n"
17
- "X-Poedit-SearchPath-0: .\n"
18
-
19
- #: includes/amp.php:126
20
- msgid "Loading"
21
- msgstr ""
22
-
23
- #: includes/amp.php:258
24
- msgid "AMP Cookie Consent"
25
- msgstr ""
26
-
27
- #: includes/forms-list-table.php:92
28
- msgid "Form Title"
29
- msgstr ""
30
-
31
- #: includes/forms-list-table.php:93
32
- msgid "Form ID"
33
- msgstr ""
34
-
35
- #: includes/forms-list-table.php:94
36
- msgid "Form Source"
37
- msgstr ""
38
-
39
- #: includes/forms-list-table.php:95
40
- msgid "Fields"
41
- msgstr ""
42
-
43
- #: includes/forms-list-table.php:96
44
- msgid "Date"
45
- msgstr ""
46
-
47
- #: includes/forms-list-table.php:165
48
- msgid "Edit"
49
- msgstr ""
50
-
51
- #: includes/forms-list-table.php:166
52
- msgid "Delete"
53
- msgstr ""
54
-
55
- #: includes/forms-list-table.php:277
56
- msgid "Filter"
57
- msgstr ""
58
-
59
- #: includes/forms-list-table.php:294
60
- msgid "Filter by source"
61
- msgstr ""
62
-
63
- #: includes/forms-list-table.php:296
64
- msgid "All form sources"
65
- msgstr ""
66
-
67
- #: includes/forms-list-table.php:364
68
- msgid "No forms found."
69
- msgstr ""
70
-
71
- #: includes/forms.php:149 includes/settings.php:138
72
- msgid "Forms"
73
- msgstr ""
74
-
75
- #: includes/forms.php:150
76
- msgid "Form"
77
- msgstr ""
78
-
79
- #: includes/forms.php:566 includes/forms.php:580
80
- msgid "First name"
81
- msgstr ""
82
-
83
- #: includes/forms.php:572 includes/forms.php:592
84
- msgid "Last name"
85
- msgstr ""
86
-
87
- #: includes/forms.php:586
88
- msgid "Middle name"
89
- msgstr ""
90
-
91
- #: includes/settings.php:43 includes/settings.php:44 includes/settings.php:45
92
- #: includes/settings.php:46 includes/settings.php:47
93
- msgid "string"
94
- msgstr ""
95
-
96
- #: includes/settings.php:59 includes/settings.php:183
97
- msgid "Cookie Solution"
98
- msgstr ""
99
-
100
- #: includes/settings.php:65 includes/settings.php:184
101
- msgid "Consent Solution"
102
- msgstr ""
103
-
104
- #: includes/settings.php:73
105
- msgid "Not set"
106
- msgstr ""
107
-
108
- #: includes/settings.php:74
109
- msgid "Strictly necessary"
110
- msgstr ""
111
-
112
- #: includes/settings.php:75
113
- msgid "Basic interactions & functionalities"
114
- msgstr ""
115
-
116
- #: includes/settings.php:76
117
- msgid "Experience enhancement"
118
- msgstr ""
119
-
120
- #: includes/settings.php:77
121
- msgid "Analytics"
122
- msgstr ""
123
-
124
- #: includes/settings.php:78
125
- msgid "Targeting & Advertising"
126
- msgstr ""
127
-
128
- #: includes/settings.php:125
129
- msgid "Code"
130
- msgstr ""
131
-
132
- #: includes/settings.php:126
133
- msgid "Google AMP"
134
- msgstr ""
135
-
136
- #: includes/settings.php:127
137
- msgid "Script blocking"
138
- msgstr ""
139
-
140
- #: includes/settings.php:128
141
- msgid "Custom scripts"
142
- msgstr ""
143
-
144
- #: includes/settings.php:129
145
- msgid "Content type"
146
- msgstr ""
147
-
148
- #: includes/settings.php:130
149
- msgid "RSS feed"
150
- msgstr ""
151
-
152
- #: includes/settings.php:131
153
- msgid "POST requests"
154
- msgstr ""
155
-
156
- #: includes/settings.php:132
157
- msgid "Menu position"
158
- msgstr ""
159
-
160
- #: includes/settings.php:133
161
- msgid "Deactivation"
162
- msgstr ""
163
-
164
- #: includes/settings.php:139
165
- msgid "Public Api Key"
166
- msgstr ""
167
-
168
- #: includes/settings.php:142 includes/settings.php:146
169
- msgid "Field Mapping"
170
- msgstr ""
171
-
172
- #: includes/settings.php:206
173
- msgid "Are you sure you want to delete this form?"
174
- msgstr ""
175
-
176
- #: includes/settings.php:541
177
- msgid "You don't have permission to access this page."
178
- msgstr ""
179
-
180
- #: includes/settings.php:567
181
- msgid ""
182
- "This plugin is the easiest and most comprehensive way to adapt your "
183
- "WordPress site to the ePrivacy (EU Cookie Law). Upon your users’ first "
184
- "visit, the plugin will take care of collecting their consent, blocking the "
185
- "most popular cookie-scripts and subsequently reactivating these scripts as "
186
- "soon as consent is provided. The basic settings include obtaining consent "
187
- "by a simple scroll action (the most effective method) and script "
188
- "reactivation without refreshing the page (asynchronous script reactivation)."
189
- msgstr ""
190
-
191
- #: includes/settings.php:570
192
- msgid ""
193
- "Does the Cookie Solution support IAB’s Transparency and Consent Framework?"
194
- msgstr ""
195
-
196
- #: includes/settings.php:571
197
- #, php-format
198
- msgid ""
199
- "Yes it does. You can read more about it <a href=\"%s\" class=\"iubenda-url"
200
- "\" target=\"_blank\">here.</a>"
201
- msgstr ""
202
-
203
- #: includes/settings.php:574
204
- msgid "Would you like to know more about the cookie law?"
205
- msgstr ""
206
-
207
- #: includes/settings.php:575
208
- #, php-format
209
- msgid ""
210
- "Read our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">complete "
211
- "guide to the cookie law.</a>"
212
- msgstr ""
213
-
214
- #: includes/settings.php:578
215
- msgid "What is the full functionality of the plugin?"
216
- msgstr ""
217
-
218
- #: includes/settings.php:579
219
- #, php-format
220
- msgid ""
221
- "Visit our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">plugin "
222
- "page.</a>"
223
- msgstr ""
224
-
225
- #: includes/settings.php:582
226
- msgid "Enter the iubenda code for the Cookie Solution below."
227
- msgstr ""
228
-
229
- #: includes/settings.php:583
230
- #, php-format
231
- msgid ""
232
- "In order to run the plugin, you need to enter the iubenda code that "
233
- "activates the cookie law banner and the cookie policy in the form below. "
234
- "This code can be generated on www.iubenda.com, following <a href=\"%s\" "
235
- "class=\"iubenda-url\" target=\"_blank\">this guide.</a>"
236
- msgstr ""
237
-
238
- #: includes/settings.php:588
239
- msgid ""
240
- "Maintaining comprehensive records of consent is a vital part of privacy "
241
- "compliance in general but is specifically required under the GDPR. These "
242
- "records should include a way of identifying the user, store proof of "
243
- "consent, record of the consenting action, and the legal documents available "
244
- "to the user at the time of consent, among other things. You can read about "
245
- "the <a href=\"https://www.iubenda.com/en/help/5428-gdpr-guide#records-of-"
246
- "consent\" target=\"_blank\">full requirements here</a>."
247
- msgstr ""
248
-
249
- #: includes/settings.php:613
250
- #, php-format
251
- msgid ""
252
- "If you are using per-purpose script blocking or Reject option please "
253
- "disable the \"Leave scripts untouched on the page if the user has already "
254
- "given consent\" option. <a href=\"%s\" target=\"_self\">Disable now</a>"
255
- msgstr ""
256
-
257
- #: includes/settings.php:638
258
- msgid ""
259
- "AMP configuration file requires HTTPS. Make sure your SSL Certificate is "
260
- "configured correctly."
261
- msgstr ""
262
-
263
- #: includes/settings.php:660
264
- #, php-format
265
- msgid ""
266
- "This plugin drastically reduces the need for direct interventions in the "
267
- "code of the site by integrating with iubenda’s Cookie Solution. It provides "
268
- "a fully customizable cookie banner, dynamically generates a cookie policy "
269
- "<a href=\"%s\" target=\"_blank\">to match the services in use on your site</"
270
- "a>, and, fully manages cookie-related consent – including the blocking of "
271
- "the most common widgets and third-party cookies before consent is received "
272
- "– in order to comply with the GDPR and ePrivacy."
273
- msgstr ""
274
-
275
- #: includes/settings.php:662
276
- msgid ""
277
- "Maintaining valid records of consent is a vital part of privacy compliance "
278
- "in general, and it is specifically required under the GDPR. These records "
279
- "should include a userid, timestamp, consent proof, record of the consenting "
280
- "action, and the legal documents available to the user at the time of "
281
- "consent, among other things. This plugin is THE most complete solution for "
282
- "recording, sorting and maintaining GDPR records of consent*. The plugin "
283
- "also boasts built-in compatibility with WordPress comment form, Contact "
284
- "Form 7 and WP Forms plugins for your convenience, but can be manually "
285
- "integrated with any type of web-form and can even store consent proofs for "
286
- "consents collected offline (e.g in-store sign-ups) via WP media upload."
287
- msgstr ""
288
-
289
- #: includes/settings.php:680
290
- msgid "Reset to defaults"
291
- msgstr ""
292
-
293
- #: includes/settings.php:692
294
- msgid "Need support for this plugin?"
295
- msgstr ""
296
-
297
- #: includes/settings.php:693
298
- #, php-format
299
- msgid ""
300
- "Visit our <a href=\"%s\" class=\"iubenda-url\" target=\"_blank\">support "
301
- "forum.</a>"
302
- msgstr ""
303
-
304
- #: includes/settings.php:737
305
- #, php-format
306
- msgid "Enter the iubenda code for %s."
307
- msgstr ""
308
-
309
- #: includes/settings.php:748
310
- msgid "Enter the iubenda code."
311
- msgstr ""
312
-
313
- #: includes/settings.php:775
314
- msgid ""
315
- "Provide a list of custom scripts you’d like to block and assign their "
316
- "purpose."
317
- msgstr ""
318
-
319
- #: includes/settings.php:777 includes/settings.php:784
320
- msgid "Enter custom script"
321
- msgstr ""
322
-
323
- #: includes/settings.php:777 includes/settings.php:784
324
- #: includes/settings.php:795 includes/settings.php:802
325
- #: includes/settings.php:1178 includes/settings.php:1205
326
- #: includes/settings.php:1246 includes/settings.php:1274
327
- #: includes/settings.php:1325 includes/settings.php:1341
328
- msgid "Remove"
329
- msgstr ""
330
-
331
- #: includes/settings.php:793
332
- msgid ""
333
- "Provide a list of custom iframes you’d like to block and assign their "
334
- "purpose. "
335
- msgstr ""
336
-
337
- #: includes/settings.php:795 includes/settings.php:802
338
- msgid "Enter custom iframe"
339
- msgstr ""
340
-
341
- #: includes/settings.php:840
342
- msgid "Automatically block scripts detected by the plugin"
343
- msgstr ""
344
-
345
- #: includes/settings.php:841
346
- #, php-format
347
- msgid ""
348
- "see <a href=\"%s\" target=\"_blank\">our documentation</a> for the list of "
349
- "detected scripts."
350
- msgstr ""
351
-
352
- #: includes/settings.php:844
353
- msgid "Primary"
354
- msgstr ""
355
-
356
- #: includes/settings.php:845
357
- msgid "Secondary"
358
- msgstr ""
359
-
360
- #: includes/settings.php:846
361
- msgid "Select parsing engine."
362
- msgstr ""
363
-
364
- #: includes/settings.php:849
365
- msgid ""
366
- "Leave scripts untouched on the page if the user has already given consent"
367
- msgstr ""
368
-
369
- #: includes/settings.php:850
370
- msgid ""
371
- "improves performance, highly recommended, to be deactivated only if your "
372
- "site uses a caching system or if you're collecting per-category consent."
373
- msgstr ""
374
-
375
- #: includes/settings.php:864
376
- msgid ""
377
- "Restrict the plugin to run only for requests that have \"Content-type: "
378
- "text / html\" (recommended)"
379
- msgstr ""
380
-
381
- #: includes/settings.php:876
382
- msgid "Do not run the plugin inside the RSS feed (recommended)"
383
- msgstr ""
384
-
385
- #: includes/settings.php:888
386
- msgid "Do not run the plugin on POST requests (recommended)"
387
- msgstr ""
388
-
389
- #: includes/settings.php:900
390
- msgid "Top menu"
391
- msgstr ""
392
-
393
- #: includes/settings.php:901
394
- msgid "Submenu"
395
- msgstr ""
396
-
397
- #: includes/settings.php:902
398
- msgid ""
399
- "Select whether to display iubenda in a top admin menu or the Settings "
400
- "submenu."
401
- msgstr ""
402
-
403
- #: includes/settings.php:914
404
- msgid "Enable Google AMP support."
405
- msgstr ""
406
-
407
- #: includes/settings.php:915
408
- #, php-format
409
- msgid ""
410
- "This feature enables iubenda on AMP pages via the <a href=\"%s\" target="
411
- "\"_blank\">AMP</a> and <a href=\"%s\" target=\"_blank\">AMP for WP</a> "
412
- "plugins. AMP requires specific configuration parameters and a page hosted "
413
- "on your domain where the configuration is loaded from. <a href=\"%s\" "
414
- "target=\"_blank\">Learn more on iubenda and AMP</a>."
415
- msgstr ""
416
-
417
- #: includes/settings.php:918
418
- msgid "Auto-generated configuration file"
419
- msgstr ""
420
-
421
- #: includes/settings.php:919
422
- msgid "Custom configuration file"
423
- msgstr ""
424
-
425
- #: includes/settings.php:920
426
- msgid "Select the iubenda AMP configuration file location."
427
- msgstr ""
428
-
429
- #: includes/settings.php:925
430
- msgid ""
431
- "No file available. Save changes to generate iubenda AMP configuration file."
432
- msgstr ""
433
-
434
- #: includes/settings.php:953
435
- msgid ""
436
- "If you're experiencing issues with AMP setup download the generated iubenda "
437
- "AMP configuration file, upload it to any SSL server and paste the file link "
438
- "to the field above."
439
- msgstr ""
440
-
441
- #: includes/settings.php:955
442
- #, php-format
443
- msgid ""
444
- "Seeing the AMP cookie notice when testing from Google but not when visiting "
445
- "your AMP pages directly? <a href=\"%s\" target=\"_blank\">Learn how to fix "
446
- "it</a>."
447
- msgstr ""
448
-
449
- #: includes/settings.php:968
450
- msgid "Delete all plugin data upon deactivation"
451
- msgstr ""
452
-
453
- #: includes/settings.php:981
454
- msgid "Enter your iubenda Javascript library public API key."
455
- msgstr ""
456
-
457
- #: includes/settings.php:997
458
- msgid ""
459
- "This section lists the forms available for field mapping. The plugin "
460
- "currently supports & detects: WordPress Comment, Contact Form 7, "
461
- "WooCommerce Checkout and WP Forms."
462
- msgstr ""
463
-
464
- #: includes/settings.php:1058
465
- #, php-format
466
- msgid "%s form title."
467
- msgstr ""
468
-
469
- #: includes/settings.php:1058
470
- msgid "Unknown"
471
- msgstr ""
472
-
473
- #: includes/settings.php:1060
474
- msgid "Available form fields:"
475
- msgstr ""
476
-
477
- #: includes/settings.php:1066
478
- msgid "Publish"
479
- msgstr ""
480
-
481
- #: includes/settings.php:1071
482
- msgid "Status"
483
- msgstr ""
484
-
485
- #: includes/settings.php:1084
486
- msgid "Cancel"
487
- msgstr ""
488
-
489
- #: includes/settings.php:1089
490
- msgid "Save"
491
- msgstr ""
492
-
493
- #: includes/settings.php:1102
494
- msgid "Map fields"
495
- msgstr ""
496
-
497
- #: includes/settings.php:1108
498
- msgid "Subject fields"
499
- msgstr ""
500
-
501
- #: includes/settings.php:1109
502
- msgid ""
503
- "Subject fields allow you to store a series of identifying values about your "
504
- "individual subjects/users. Please map the subject field with the "
505
- "corresponding form fields where applicable."
506
- msgstr ""
507
-
508
- #: includes/settings.php:1114
509
- msgid "Subject field"
510
- msgstr ""
511
-
512
- #: includes/settings.php:1115 includes/settings.php:1159
513
- msgid "Form field"
514
- msgstr ""
515
-
516
- #: includes/settings.php:1121
517
- msgid "Autogenerated"
518
- msgstr ""
519
-
520
- #: includes/settings.php:1121
521
- msgid "None"
522
- msgstr ""
523
-
524
- #: includes/settings.php:1152
525
- msgid "Preferences fields"
526
- msgstr ""
527
-
528
- #: includes/settings.php:1153
529
- msgid ""
530
- "Preferences fields allow you to store a record of the various opt-ins "
531
- "points at which the user has agreed or given consent, such as fields for "
532
- "agreeing to terms and conditions, newsletter, profiling, etc. *Please "
533
- "create at least one preference field."
534
- msgstr ""
535
-
536
- #: includes/settings.php:1158
537
- msgid "Preferences field"
538
- msgstr ""
539
-
540
- #: includes/settings.php:1164 includes/settings.php:1190
541
- #: includes/settings.php:1315 includes/settings.php:1325
542
- #: includes/settings.php:1341
543
- msgid "Enter field name"
544
- msgstr ""
545
-
546
- #: includes/settings.php:1214
547
- msgid "Add New Preference"
548
- msgstr ""
549
-
550
- #: includes/settings.php:1221
551
- msgid "Exclude fields"
552
- msgstr ""
553
-
554
- #: includes/settings.php:1222
555
- msgid ""
556
- "Exclude fields allow you to create a list of fields that you would like to "
557
- "exclude from your Consent Solution recorded proofs (for e.g. password or "
558
- "other fields not related to the consent)."
559
- msgstr ""
560
-
561
- #: includes/settings.php:1227
562
- msgid "Exclude field"
563
- msgstr ""
564
-
565
- #: includes/settings.php:1284
566
- msgid "Add New Exclude"
567
- msgstr ""
568
-
569
- #: includes/settings.php:1294
570
- msgid "Legal Notices"
571
- msgstr ""
572
-
573
- #: includes/settings.php:1300
574
- msgid "Legal documents"
575
- msgstr ""
576
-
577
- #: includes/settings.php:1301
578
- msgid ""
579
- "In general, it’s important that you declare which legal documents are being "
580
- "agreed upon when each consent is collected. However, if you use iubenda for "
581
- "your legal documents, it is *required* that you identify the documents by "
582
- "selecting them here."
583
- msgstr ""
584
-
585
- #: includes/settings.php:1306
586
- msgid "Identifier"
587
- msgstr ""
588
-
589
- #: includes/settings.php:1315
590
- msgid "Please select each legal document available on your site."
591
- msgstr ""
592
-
593
- #: includes/settings.php:1331
594
- msgid "Alternatively, you may add your own custom document identifiers."
595
- msgstr ""
596
-
597
- #: includes/settings.php:1350
598
- msgid "Add New Document"
599
- msgstr ""
600
-
601
- #: includes/settings.php:1471 includes/settings.php:1503
602
- #: includes/settings.php:1688
603
- msgid "Settings saved."
604
- msgstr ""
605
-
606
- #: includes/settings.php:1483 includes/settings.php:1508
607
- msgid "Settings restored to defaults."
608
- msgstr ""
609
-
610
- #: includes/settings.php:1543
611
- #, php-format
612
- msgid ""
613
- "Please enable comments cookies opt-in checkbox in the <a href=\"%s\" target="
614
- "\"_blank\">Discussion settings</a>."
615
- msgstr ""
616
-
617
- #: includes/settings.php:1563
618
- msgid "No forms or form changes detected."
619
- msgstr ""
620
-
621
- #: includes/settings.php:1623
622
- msgid "Form saving failed. Please fill the Subject fields."
623
- msgstr ""
624
-
625
- #: includes/settings.php:1647
626
- msgid "Form saved successfully - form status changed to Mapped."
627
- msgstr ""
628
-
629
- #: includes/settings.php:1650
630
- msgid "Form updated successfully."
631
- msgstr ""
632
-
633
- #: includes/settings.php:1653
634
- msgid "Form saving failed."
635
- msgstr ""
636
-
637
- #: includes/settings.php:1670
638
- msgid "Form deleted successfully."
639
- msgstr ""
640
-
641
- #: includes/settings.php:1672
642
- msgid "Form delete failed."
643
- msgstr ""
644
-
645
- #: includes/settings.php:1748
646
- msgid "Dismiss this notice."
647
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/iubenda-it_IT.mo ADDED
Binary file
languages/iubenda-it_IT.po ADDED
@@ -0,0 +1,1038 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: \n"
4
+ "POT-Creation-Date: 2022-05-17 21:29+0200\n"
5
+ "PO-Revision-Date: 2022-05-23 13:47+0000\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: Italiano\n"
8
+ "Language: it_IT\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: Loco https://localise.biz/\n"
14
+ "X-Poedit-Basepath: ..\n"
15
+ "X-Poedit-KeywordsList: _e;__\n"
16
+ "X-Poedit-SearchPath-0: .\n"
17
+
18
+ #: views/partials/modals/modal_almost_there.php:25
19
+ msgid "(required)"
20
+ msgstr "(consigliato)"
21
+
22
+ #: views/partials/buttonPosition.php:68
23
+ msgid ""
24
+ "A shortcode is a tiny bit of code that allows embedding interactive elements "
25
+ "or creating complex page layouts with a minimal effort.<br>Just copy and "
26
+ "paste the shortcode where you want the button to appear."
27
+ msgstr ""
28
+ "Uno shortcode è un piccolo pezzo di codice che consente di inserire elementi "
29
+ "interattivi o di creare layout di pagina complessi con uno sforzo minimo.<br>"
30
+ "Basta copiare e incollare lo shortcode nel punto in cui si desidera che "
31
+ "appaia il pulsante."
32
+
33
+ #: views/cons-configuration.php:17
34
+ msgid "Activate & Configure Consent Solution by"
35
+ msgstr "Attiva e configura la Consent Solution"
36
+
37
+ #: views/cons-configuration.php:14
38
+ msgid ""
39
+ "Activate <strong>Consent Solution</strong> on our website in your iubenda "
40
+ "dashboard and paste here the <strong>API key</strong> to integrate it on "
41
+ "your website."
42
+ msgstr ""
43
+ "Attiva la <strong>Consent Solution</strong> dalla tua dashboard iubenda e "
44
+ "incolla qui la <strong>chiave API</strong> per integrarla sul tuo sito web."
45
+
46
+ #: views/integrate-setup.php:21
47
+ msgid "Add a cookie banner"
48
+ msgstr "Aggiungi un cookie banner"
49
+
50
+ #: views/cons-configuration.php:44
51
+ msgid "Add forms"
52
+ msgstr "Aggiungi form"
53
+
54
+ #: views/cons-single-form.php:268
55
+ msgid "Add New Document"
56
+ msgstr "Aggiungi un nuovo documento"
57
+
58
+ #: views/cons-single-form.php:216
59
+ msgid "Add New Exclude"
60
+ msgstr "Aggiungi una nuova esclusione"
61
+
62
+ #: views/partials/csPluginSettings.php:133
63
+ msgid "Add New iframe"
64
+ msgstr "Aggiungi un nuovo iframe"
65
+
66
+ #: views/cons-single-form.php:155
67
+ msgid "Add New Preference"
68
+ msgstr "Aggiungi nuova preferenza"
69
+
70
+ #: views/partials/csPluginSettings.php:98
71
+ msgid "Add New Script"
72
+ msgstr "Aggiungi un nuovo script"
73
+
74
+ #: views/integrate-setup.php:140
75
+ msgid "Add the privacy policy button"
76
+ msgstr "Aggiungi il pulsante della privacy policy"
77
+
78
+ #: views/partials/buttonPosition.php:5 views/tc-configuration.php:61
79
+ msgid "Add to the footer automatically"
80
+ msgstr "Aggiungi automaticamente al footer"
81
+
82
+ #: includes/forms-list-table.php:279
83
+ msgid "All form sources"
84
+ msgstr "Tutte le fonti"
85
+
86
+ #: views/cons-single-form.php:250
87
+ msgid "Alternatively, you may add your own custom document identifiers."
88
+ msgstr "In alternativa, puoi aggiungere degli identificatori personalizzati."
89
+
90
+ #: includes/amp.php:281
91
+ msgid "AMP Cookie Consent"
92
+ msgstr "AMP Cookie Consent"
93
+
94
+ #: includes/settings.php:105 views/partials/csPluginSettings.php:73
95
+ #: views/partials/csPluginSettings.php:89
96
+ #: views/partials/csPluginSettings.php:108
97
+ #: views/partials/csPluginSettings.php:124
98
+ msgid "Analytics"
99
+ msgstr "Statistiche"
100
+
101
+ #: views/partials/frontpage_main_box.php:39
102
+ msgid "Analyzing your website"
103
+ msgstr "Stiamo analizzando il tuo sito"
104
+
105
+ #: views/cons-configuration.php:53
106
+ msgid "Auto-detect forms"
107
+ msgstr "Rileva automaticamente i form"
108
+
109
+ #: views/integrate-setup.php:36 views/partials/csGeneralSettings.php:78
110
+ msgid "Auto-generated configuration file"
111
+ msgstr "File di configurazione generato automaticamente"
112
+
113
+ #: views/cons-single-form.php:71
114
+ msgid "Autogenerated"
115
+ msgstr "Generato automaticamente"
116
+
117
+ #: views/integrate-setup.php:108 views/partials/csPluginSettings.php:4
118
+ msgid "Automatically block scripts detected by the plugin"
119
+ msgstr "Blocca automaticamente gli script rilevati dal plugin"
120
+
121
+ #: views/partials/bannerPosition.php:41
122
+ msgid "Background-overlay"
123
+ msgstr "Oscura sfondo"
124
+
125
+ #: views/partials/csSimplifiedConfiguration.php:68
126
+ msgid "Banner buttons"
127
+ msgstr "Pulsanti del banner"
128
+
129
+ #: includes/settings.php:103
130
+ msgid "Basic interactions & functionalities"
131
+ msgstr "Interazioni e funzionalità semplici"
132
+
133
+ #: views/partials/csPluginSettings.php:71
134
+ #: views/partials/csPluginSettings.php:87
135
+ #: views/partials/csPluginSettings.php:106
136
+ #: views/partials/csPluginSettings.php:122
137
+ msgid "Basic interactions &amp; functionalities"
138
+ msgstr "Interazioni e funzionalità semplici"
139
+
140
+ #: views/partials/csSimplifiedConfiguration.php:22
141
+ msgid "Both"
142
+ msgstr "Entrambi"
143
+
144
+ #: views/partials/buttonPosition.php:1 views/tc-configuration.php:57
145
+ msgid "Button position"
146
+ msgstr "Posizione del pulsante"
147
+
148
+ #: views/partials/buttonStyle.php:1 views/tc-configuration.php:32
149
+ msgid "Button style"
150
+ msgstr "Stile del pulsante"
151
+
152
+ #: views/cons-configuration.php:60 views/cons-single-form.php:277
153
+ #: views/cs-configuration.php:32 views/pp-configuration.php:33
154
+ #: views/tc-configuration.php:125
155
+ msgid "Cancel"
156
+ msgstr "Annulla"
157
+
158
+ #: views/partials/csSimplifiedConfiguration.php:18
159
+ msgid "CCPA Only"
160
+ msgstr "Solo CCPA"
161
+
162
+ #: views/cons-configuration.php:18 views/partials/csManualConfiguration.php:6
163
+ #: views/tc-configuration.php:16
164
+ msgid "clicking here"
165
+ msgstr "cliccando qui"
166
+
167
+ #: views/partials/csGeneralSettings.php:3
168
+ msgid "Configuration"
169
+ msgstr "Configurazione"
170
+
171
+ #: views/partials/product-card.php:44
172
+ msgid "Configure"
173
+ msgstr "Configura"
174
+
175
+ #: views/partials/csManualConfiguration.php:5
176
+ msgid "Configure cookie banner by"
177
+ msgstr "Configura il tuo cookie banner"
178
+
179
+ #: views/tc-configuration.php:15
180
+ msgid "Configure terms and conditions by"
181
+ msgstr "Configura i termini e condizioni"
182
+
183
+ #: views/partials/csManualConfiguration.php:2
184
+ msgid ""
185
+ "Configure your cookie banner on our website and paste here the embed code to "
186
+ "integrate it to your website."
187
+ msgstr ""
188
+ "Configura il tuo cookie banner dal nostro sito e incolla qui il codice "
189
+ "d’integrazione per integrarlo sul tuo sito Webb."
190
+
191
+ #: views/tc-configuration.php:12
192
+ msgid ""
193
+ "Configure your terms and conditions on our website and paste here the embed "
194
+ "code to integrate the button on your website."
195
+ msgstr ""
196
+ "Configura i tuoi termini e condizioni sul nostro sito e incolla qui il "
197
+ "codice d’integrazione per integrare il pulsante sul tuo sito web."
198
+
199
+ #: views/cons-configuration.php:31
200
+ msgid "Confirm API"
201
+ msgstr "Conferma API"
202
+
203
+ #: includes/settings.php:93 includes/settings.php:358 includes/settings.php:369
204
+ #: includes/settings.php:1057
205
+ msgid "Consent Solution"
206
+ msgstr "Consent Solution"
207
+
208
+ #: views/partials/modals/modal_almost_there.php:37
209
+ msgid "Consent Solution API key"
210
+ msgstr "Chiave API della Consent Solution"
211
+
212
+ #: views/partials/modals/modal_select_language.php:53
213
+ msgid "Continue"
214
+ msgstr "Continua"
215
+
216
+ #: includes/settings.php:87 includes/settings.php:352
217
+ #: includes/settings.php:1037
218
+ msgid "Cookie Solution"
219
+ msgstr "Cookie Solution"
220
+
221
+ #: views/integrate-setup.php:40 views/partials/csGeneralSettings.php:82
222
+ msgid "Custom configuration file"
223
+ msgstr "File di configurazione personalizzato"
224
+
225
+ #: views/partials/csPluginSettings.php:63
226
+ msgid "Custom iframes"
227
+ msgstr "iframe personalizzati"
228
+
229
+ #: views/partials/csPluginSettings.php:62
230
+ msgid "Custom scripts"
231
+ msgstr "Script personalizzati"
232
+
233
+ #: views/partials/csPluginSettings.php:59
234
+ msgid "Custom settings"
235
+ msgstr "Impostazioni personalizzate"
236
+
237
+ #: views/partials/bannerStyle.php:9 views/partials/buttonStyle.php:19
238
+ #: views/tc-configuration.php:50
239
+ msgid "Dark"
240
+ msgstr "Scuro"
241
+
242
+ #: includes/forms-list-table.php:90
243
+ msgid "Date"
244
+ msgstr "Data"
245
+
246
+ #: views/integrate-setup.php:73 views/integrate-setup.php:91
247
+ #: views/partials/csGeneralSettings.php:116
248
+ msgid "Default language"
249
+ msgstr "Lingua predefinita"
250
+
251
+ #: includes/forms-list-table.php:160
252
+ msgid "Delete"
253
+ msgstr "Elimina"
254
+
255
+ #: views/partials/csPluginSettings.php:41
256
+ msgid "Delete all plugin data upon deactivation"
257
+ msgstr "Elimina tutti i dati del plugin al momento della disattivazione"
258
+
259
+ #: views/partials/csPluginSettings.php:33
260
+ msgid "Do not run the plugin inside the RSS feed (recommended)"
261
+ msgstr "Non eseguire il plugin all’interno dei Feed RSS (consigliato)"
262
+
263
+ #: views/partials/csPluginSettings.php:37
264
+ msgid "Do not run the plugin on POST requests (recommended)"
265
+ msgstr "Non eseguire il plugin per richieste POST (consigliato)"
266
+
267
+ #: views/partials/footer.php:3
268
+ msgid "Documentation"
269
+ msgstr "Documentazione"
270
+
271
+ #: includes/forms-list-table.php:159
272
+ msgid "Edit"
273
+ msgstr "Modifica"
274
+
275
+ #: views/integrate-setup.php:29 views/partials/csGeneralSettings.php:70
276
+ msgid "Enable Google AMP support"
277
+ msgstr "Abilita il supporto per l’AMP di Google"
278
+
279
+ #: views/partials/csSimplifiedConfiguration.php:88
280
+ msgid "Enable IAB Transparency and Consent Framework"
281
+ msgstr "Abilita il Transparency and Consent Framework di IAB"
282
+
283
+ #: views/integrate-setup.php:128 views/partials/csPluginSettings.php:24
284
+ msgid ""
285
+ "Enable this option to improve performance <strong>only</strong> if your site "
286
+ "does <strong>not</strong> use a cache system or a cache plugin and if you're "
287
+ "<strong>not</strong> collecting per-category consent. If you're in doubt, "
288
+ "keep this setting disabled"
289
+ msgstr ""
290
+ "Abilita quest’opzione per migliorare la performance <strong>solo</strong> se "
291
+ "il tuo sito <strong>non</strong> utilizza un sistema di cache o un plugin di "
292
+ "cache e se <strong>non</strong> raccogli il consenso per categoria. Se non "
293
+ "sei sicuro, mantieni quest’opzione disabilitata"
294
+
295
+ #: includes/settings.php:829
296
+ msgid "Enjoying the iubenda Cookie & Consent Solution Plugin?"
297
+ msgstr "Ti piace il plugin per la Cookie & Consent Solution di iubenda?"
298
+
299
+ #: views/cons-single-form.php:108 views/cons-single-form.php:133
300
+ #: views/cons-single-form.php:234 views/cons-single-form.php:244
301
+ #: views/cons-single-form.php:260
302
+ msgid "Enter field name"
303
+ msgstr "Aggiungi il nome di un campo"
304
+
305
+ #: views/partials/csSimplifiedConfiguration.php:59
306
+ msgid "EU Only"
307
+ msgstr "Solo UE"
308
+
309
+ #: views/cons-single-form.php:164
310
+ msgid "Exclude field"
311
+ msgstr "Campi esclusi"
312
+
313
+ #: views/cons-single-form.php:159
314
+ msgid "Exclude fields"
315
+ msgstr "Esclusioni"
316
+
317
+ #: views/cons-single-form.php:160
318
+ msgid ""
319
+ "Exclude fields allow you to create a list of fields that you would like to "
320
+ "exclude from your Consent Solution recorded proofs (for e.g. password or "
321
+ "other fields not related to the consent)."
322
+ msgstr ""
323
+ "Qui puoi creare una lista dei campi che desideri escludere dalle prove del "
324
+ "consenso memorizzate dalla Consent Solution (ad esempio, password o altri "
325
+ "campi non correlati)."
326
+
327
+ #: includes/settings.php:104 views/partials/csPluginSettings.php:72
328
+ #: views/partials/csPluginSettings.php:88
329
+ #: views/partials/csPluginSettings.php:107
330
+ #: views/partials/csPluginSettings.php:123
331
+ msgid "Experience enhancement"
332
+ msgstr "Miglioramento dell’esperienza"
333
+
334
+ #: views/partials/csSimplifiedConfiguration.php:72
335
+ msgid "Explicit Accept and Customize buttons"
336
+ msgstr "Mostra i pulsanti Accetta e Personalizza"
337
+
338
+ #: views/partials/csSimplifiedConfiguration.php:77
339
+ msgid "Explicit Reject button"
340
+ msgstr "Mostra il pulsante Rifiuta"
341
+
342
+ #: views/cons-single-form.php:12
343
+ msgid "Field Mapping"
344
+ msgstr "Mapping dei campi"
345
+
346
+ #: includes/forms-list-table.php:89
347
+ msgid "Fields"
348
+ msgstr "Campi"
349
+
350
+ #: includes/forms-list-table.php:260
351
+ msgid "Filter"
352
+ msgstr "Filtra"
353
+
354
+ #: includes/forms-list-table.php:277
355
+ msgid "Filter by source"
356
+ msgstr "Filtra per fonte"
357
+
358
+ #: includes/forms.php:579 includes/forms.php:593
359
+ msgid "First name"
360
+ msgstr "Nome"
361
+
362
+ #: views/partials/modals/modal_sync.php:4
363
+ msgid ""
364
+ "First of all, tell us if you already use our products for this website or if "
365
+ "you want to start from scratch"
366
+ msgstr ""
367
+ "Per prima cosa, dicci se utilizzi già i nostri prodotti per questo sito o se "
368
+ "desideri iniziare da zero"
369
+
370
+ #: includes/forms.php:153
371
+ msgid "Form"
372
+ msgstr "Form"
373
+
374
+ #: views/cons-single-form.php:66 views/cons-single-form.php:103
375
+ msgid "Form field"
376
+ msgstr "Campo del form"
377
+
378
+ #: includes/forms-list-table.php:87
379
+ msgid "Form ID"
380
+ msgstr "ID del form"
381
+
382
+ #: includes/settings.php:627
383
+ msgid "Form saving failed. Please fill the Subject fields."
384
+ msgstr "Salvataggio del form fallito. Compila i campi Utente e Preferenze."
385
+
386
+ #: includes/forms-list-table.php:88
387
+ msgid "Form Source"
388
+ msgstr "Fonte"
389
+
390
+ #: includes/forms-list-table.php:86
391
+ msgid "Form Title"
392
+ msgstr "Nome del form"
393
+
394
+ #: includes/forms.php:152
395
+ msgid "Forms"
396
+ msgstr "Form"
397
+
398
+ #: views/partials/modals/modal_pp_created.php:7
399
+ msgid ""
400
+ "From here you can customize your privacy policy by adding the services you "
401
+ "use within your website or you can customize the style of the button that "
402
+ "displays your privacy policy."
403
+ msgstr ""
404
+ "Da qui, puoi personalizzare la tua privacy policy aggiungendo i servizi che "
405
+ "utilizzi per il tuo sito web, o puoi personalizzare lo stile del pulsante "
406
+ "che mostra la tua privacy policy."
407
+
408
+ #: views/partials/csSimplifiedConfiguration.php:14
409
+ msgid "GDPR Only"
410
+ msgstr "Solo GDPR"
411
+
412
+ #: views/cs-configuration.php:15
413
+ msgid "General settings"
414
+ msgstr "Impostazioni generali"
415
+
416
+ #: views/partials/modals/modal_pp_created.php:9
417
+ msgid "Got it"
418
+ msgstr "Capito"
419
+
420
+ #: views/frontpage.php:9
421
+ msgid "Help me get compliant!"
422
+ msgstr "Aiutami a diventare conforme!"
423
+
424
+ #: views/partials/buttonPosition.php:31 views/tc-configuration.php:86
425
+ msgid "HTML"
426
+ msgstr "HTML"
427
+
428
+ #: views/partials/modals/modal_no_website_found.php:11
429
+ #: views/partials/modals/modal_sync.php:8
430
+ msgid "I want to start from scratch"
431
+ msgstr "Voglio iniziare da zero"
432
+
433
+ #: views/cons-single-form.php:225
434
+ msgid "Identifier"
435
+ msgstr "Identificatore"
436
+
437
+ #: views/cons-single-form.php:222
438
+ msgid ""
439
+ "In general, it's important that you declare which legal documents are being "
440
+ "agreed upon when each consent is collected. However, if you use iubenda for "
441
+ "your legal documents, it is *required* that you identify the documents by "
442
+ "selecting them here."
443
+ msgstr ""
444
+ "In generale, è importante dichiarare quali documenti legali vengono "
445
+ "accettati al momento del conferimento del consenso. Se usi iubenda per le "
446
+ "tue informative, *devi* identificare tali documenti selezionandoli qui."
447
+
448
+ #: views/partials/integrateFooter.php:4
449
+ msgid "Integrate"
450
+ msgstr "Integra"
451
+
452
+ #: views/partials/buttonPosition.php:10 views/tc-configuration.php:65
453
+ msgid "Integrate manually"
454
+ msgstr "Integra manualmente"
455
+
456
+ #: views/pp-configuration.php:26 views/tc-configuration.php:30
457
+ msgid "Integration"
458
+ msgstr "Integrazione"
459
+
460
+ #: views/partials/modals/modal_no_website_found.php:8
461
+ msgid ""
462
+ "It seems that it is not possible to access your data with the code you "
463
+ "pasted, do you want to try again or do you prefer to start configuring your "
464
+ "website from scratch?"
465
+ msgstr ""
466
+ "Sembra che non sia possibile accedere ai tuoi dati con il codice che hai "
467
+ "inserito. Vuoi provare un’altra volta o preferisci iniziare a configurare il "
468
+ "tuo sito web da zero?"
469
+
470
+ #: views/partials/modals/modal_ops_embed_invalid.php:8
471
+ msgid ""
472
+ "It seems that it is not possible to access your data with the code you "
473
+ "pasted, do you want to try again."
474
+ msgstr ""
475
+ "Sembra che non sia possibile accedere ai tuoi dati con il codice che hai "
476
+ "inserito. Vuoi provare un’altra volta?"
477
+
478
+ #: views/products-page.php:15
479
+ msgid ""
480
+ "It seems that you have not activated any of our services, we recommend you "
481
+ "to activate them and increase your level of compliance and avoid risking "
482
+ "fines."
483
+ msgstr ""
484
+ "Sembra che tu non abbia attivato nessuno dei nostri servizi. Ti consigliamo "
485
+ "di attivarli per aumentare il tuo tasso di conformità ed evitare di esporti "
486
+ "a sanzioni."
487
+
488
+ #: includes/widget/IubendaLegalWidget.php:18
489
+ msgid "Iubenda legal"
490
+ msgstr "Documenti iubenda"
491
+
492
+ #: includes/widget/IubendaLegalWidget.php:21
493
+ msgid "Iubenda legal widget for Privacy Policy and Terms & Conditions"
494
+ msgstr "Il widget legale di iubenda per privacy policy e termini e condizioni"
495
+
496
+ #: views/partials/modals/modal_sync.php:6
497
+ msgid "I’ve already made the set up on iubenda.com"
498
+ msgstr "Ho già effettuato la configurazione su iubenda.com"
499
+
500
+ #: includes/forms.php:585 includes/forms.php:605
501
+ msgid "Last name"
502
+ msgstr "Cognome"
503
+
504
+ #: views/integrate-setup.php:85 views/partials/csGeneralSettings.php:128
505
+ msgid "Learn how to fix it"
506
+ msgstr "Ecco come risolvere"
507
+
508
+ #: views/partials/csSimplifiedConfiguration.php:88
509
+ msgid "Learn More"
510
+ msgstr "Scopri di più"
511
+
512
+ #: views/integrate-setup.php:126 views/partials/csPluginSettings.php:22
513
+ msgid ""
514
+ "Leave scripts untouched on the page if the user has already given consent"
515
+ msgstr ""
516
+ "Lascia gli script intatti sulla pagina se l’utente ha già prestato il "
517
+ "consenso"
518
+
519
+ #: includes/widget/IubendaLegalWidget.php:167
520
+ msgid "Legal"
521
+ msgstr "Documenti e contatti"
522
+
523
+ #: views/cons-single-form.php:221
524
+ msgid "Legal documents"
525
+ msgstr "Documenti legali"
526
+
527
+ #: views/partials/csSimplifiedConfiguration.php:9
528
+ msgid "Legislation"
529
+ msgstr "Legislazione"
530
+
531
+ #: includes/settings.php:991 includes/settings.php:1013
532
+ msgid "legislation"
533
+ msgstr "legislazione"
534
+
535
+ #: views/frontpage.php:8
536
+ msgid "Let's configure your website for compliance."
537
+ msgstr "Rendiamo il tuo sito conforme."
538
+
539
+ #: views/partials/bannerStyle.php:15 views/partials/buttonStyle.php:10
540
+ #: views/tc-configuration.php:41
541
+ msgid "Light"
542
+ msgstr "Chiaro"
543
+
544
+ #: views/partials/csGeneralSettings.php:36
545
+ #: views/partials/csGeneralSettings.php:43
546
+ msgid "Manual embed"
547
+ msgstr "Integrazione manuale"
548
+
549
+ #: views/cons-single-form.php:44
550
+ msgid "Map fields"
551
+ msgstr "Mappa i campi"
552
+
553
+ #: views/partials/csPluginSettings.php:45
554
+ msgid "Menu position"
555
+ msgstr "Posizione menù"
556
+
557
+ #: includes/forms.php:599
558
+ msgid "Middle name"
559
+ msgstr "Secondo nome"
560
+
561
+ #: views/partials/modals/modal_almost_there.php:5
562
+ msgid "Nice! We are almost there."
563
+ msgstr "Perfetto! Ci siamo quasi."
564
+
565
+ #: includes/settings.php:832
566
+ msgid "No"
567
+ msgstr "No"
568
+
569
+ #: views/integrate-setup.php:49 views/partials/csGeneralSettings.php:92
570
+ msgid ""
571
+ "No file available. Save changes to generate iubenda AMP configuration file."
572
+ msgstr ""
573
+ "Nessun file disponibile. Salva le modifiche per generare un file di "
574
+ "configurazione per l’AMP di iubenda."
575
+
576
+ #: includes/forms-list-table.php:347
577
+ msgid "No forms found."
578
+ msgstr "Nessun form trovato."
579
+
580
+ #: includes/settings.php:839 includes/settings.php:846
581
+ msgid "No thanks"
582
+ msgstr "No, grazie"
583
+
584
+ #: views/cons-single-form.php:71
585
+ msgid "None"
586
+ msgstr "Nessuno"
587
+
588
+ #: includes/settings.php:101 views/partials/csPluginSettings.php:69
589
+ #: views/partials/csPluginSettings.php:85
590
+ #: views/partials/csPluginSettings.php:104
591
+ #: views/partials/csPluginSettings.php:120
592
+ msgid "Not set"
593
+ msgstr "Non specificata"
594
+
595
+ #: views/partials/modals/modal_select_language.php:4
596
+ msgid "Now, select your website language"
597
+ msgstr "Ora seleziona la lingua del tuo sito"
598
+
599
+ #: includes/settings.php:845
600
+ msgid "Ok sure!"
601
+ msgstr "Certo!"
602
+
603
+ #: views/partials/frontpage_main_box.php:22
604
+ msgid "Only track users that give consent"
605
+ msgstr "Traccia solo gli utenti che hanno prestato il consenso"
606
+
607
+ #: views/partials/modals/modal_no_website_found.php:6
608
+ #: views/partials/modals/modal_ops_embed_invalid.php:6
609
+ msgid "Ooops! <br> No website found with this embed code."
610
+ msgstr ""
611
+ "Ops! <br> Non abbiamo trovato nessun sito con questo codice d’integrazione."
612
+
613
+ #: views/partials/modals/modal_sync.php:7
614
+ msgid "or"
615
+ msgstr "o"
616
+
617
+ #: views/partials/csSimplifiedConfiguration.php:83
618
+ msgid "Other options"
619
+ msgstr "Altre opzioni"
620
+
621
+ #: views/partials/welcomeScreenHeader.php:3
622
+ msgid "Our plugin will help you to make your website compliant in minutes."
623
+ msgstr ""
624
+ "Il nostro plugin ti aiuterà a rendere il tuo sito conforme in pochi minuti."
625
+
626
+ #: includes/QuickGeneratorService.php:139
627
+ msgid ""
628
+ "Our products has been integrated successfully, now customize all products to "
629
+ "increase the compliance rating and make your website fully compliant."
630
+ msgstr ""
631
+ "I nostri prodotti sono stati integrati correttamente. Ora personalizzali, "
632
+ "per aumentare il tasso di conformità e rendere il tuo sito pienamente "
633
+ "conforme."
634
+
635
+ #: views/partials/modals/modal_almost_there.php:39
636
+ msgid "Paste your API key here"
637
+ msgstr "Incolla la tua chiave API qui"
638
+
639
+ #: views/partials/csManualConfiguration.php:11
640
+ msgid "Paste your cookie solution embed code here"
641
+ msgstr "Incolla qui il codice d’integrazione della tua Cookie Solution"
642
+
643
+ #: views/partials/languagesTabs.php:21
644
+ msgid "Paste your embed code here"
645
+ msgstr "Incolla qui il tuo codice d’integrazione"
646
+
647
+ #: views/cons-configuration.php:23
648
+ msgid "Paste your public API key here"
649
+ msgstr "Incolla qui la tua chiave API pubblica"
650
+
651
+ #: views/tc-configuration.php:21
652
+ msgid "Paste your terms and conditions embed code here"
653
+ msgstr "Incolla qui il codice d’integrazione dei tuoi termini e condizioni"
654
+
655
+ #: includes/settings.php:554
656
+ #, php-format
657
+ msgid ""
658
+ "Please enable comments cookies opt-in checkbox in the <a href=\"%s\" "
659
+ "target=\"_blank\">Discussion settings</a>."
660
+ msgstr ""
661
+ "Abilita per i commenti la possibilità di attivare o disattivare la "
662
+ "memorizzazione dei dati personali in un cookie. Per farlo, vai su <a "
663
+ "href=“%s” target=“_blank”>Impostazioni discussione</a>."
664
+
665
+ #: views/cons-single-form.php:234
666
+ msgid "Please select each legal document available on your site."
667
+ msgstr "Seleziona tutti i documenti legali presenti sul tuo sito."
668
+
669
+ #: views/cs-configuration.php:16
670
+ msgid "Plugin settings"
671
+ msgstr "Impostazioni del plugin"
672
+
673
+ #: includes/settings.php:990 includes/settings.php:1012
674
+ #: includes/settings.php:1031 includes/settings.php:1051
675
+ #: views/partials/bannerPosition.php:20
676
+ msgid "Position"
677
+ msgstr "Posizione"
678
+
679
+ #: views/cons-single-form.php:102
680
+ msgid "Preferences field"
681
+ msgstr "Campo delle preferenze"
682
+
683
+ #: views/cons-single-form.php:98
684
+ msgid "Preferences fields"
685
+ msgstr "Preferenze"
686
+
687
+ #: views/cons-single-form.php:99
688
+ msgid ""
689
+ "Preferences fields allow you to store a record of the various opt-ins points "
690
+ "at which the user has agreed or given consent, such as fields for agreeing "
691
+ "to terms and conditions, newsletter, profiling, etc."
692
+ msgstr ""
693
+ "Questi campi ti permettono di memorizzare a cosa l’utente ha prestato il "
694
+ "proprio consenso, come ad esempio i termini e condizioni, la newsletter la "
695
+ "profilazione, ecc."
696
+
697
+ #: views/integrate-setup.php:114 views/partials/csPluginSettings.php:10
698
+ msgid "Primary"
699
+ msgstr "Primario"
700
+
701
+ #: includes/settings.php:346 includes/settings.php:1025
702
+ msgid "Privacy and Cookie Policy"
703
+ msgstr "Privacy e Cookie Policy"
704
+
705
+ #: includes/PrivacyPolicyGenerator.php:23
706
+ msgid "Privacy Policy"
707
+ msgstr "Privacy policy"
708
+
709
+ #: views/partials/breadcrumb.php:2
710
+ msgid "Products"
711
+ msgstr "Prodotti"
712
+
713
+ #: views/partials/csPluginSettings.php:132
714
+ msgid ""
715
+ "Provide a list of domains for any custom iframes you'd like to block, and "
716
+ "assign their purposes. To make sure they are blocked correctly, please add "
717
+ "domains in the same format as 'example.com', without any protocols e.g. "
718
+ "'http://' or 'https://'. You may also use wildcards (*) to include parent "
719
+ "domains or subdomains."
720
+ msgstr ""
721
+ "Fornisci una lista di domini per ogni iframe personalizzato che desideri "
722
+ "bloccare e assegna loro una finalità. Per assicurarti di averli bloccati "
723
+ "correttamente, inserisci i domini nello stesso formato di 'exmpale.com', "
724
+ "senza alcun protocollo (ad esempio, 'http://' o 'https://'). Puoi anche "
725
+ "utilizzare dei metacaratteri (*) per includere i domini principali o i "
726
+ "sottodomini."
727
+
728
+ #: views/partials/csPluginSettings.php:97
729
+ msgid ""
730
+ "Provide a list of domains for any custom scripts you'd like to block, and "
731
+ "assign their purposes. To make sure they are blocked correctly, please add "
732
+ "domains in the same format as 'example.com', without any protocols e.g. "
733
+ "'http://' or 'https://'. You may also use wildcards (*) to include parent "
734
+ "domains or subdomains."
735
+ msgstr ""
736
+ "Fornisci una lista di domini per ogni script personalizzato che desideri "
737
+ "bloccare e assegna loro una finalità. Per assicurarti di averli bloccati "
738
+ "correttamente, inserisci i domini nello stesso formato di 'example.com', "
739
+ "senza alcun protocollo (ad esempio, 'http://' o 'https://'). Puoi anche "
740
+ "utilizzare dei metacaratteri (*) per includere i domini principali o i "
741
+ "sottodomini."
742
+
743
+ #: views/cons-single-form.php:122 views/cons-single-form.php:148
744
+ #: views/cons-single-form.php:183 views/cons-single-form.php:207
745
+ #: views/cons-single-form.php:244 views/cons-single-form.php:260
746
+ msgid "Remove"
747
+ msgstr "Elimina"
748
+
749
+ #: views/partials/csSimplifiedConfiguration.php:29
750
+ msgid "Require consent from"
751
+ msgstr "Richiedi il consenso da"
752
+
753
+ #: views/partials/integrateFooter.php:3
754
+ msgid "Reset settings"
755
+ msgstr "Ripristina le impostazioni"
756
+
757
+ #: views/partials/csPluginSettings.php:29
758
+ msgid ""
759
+ "Restrict the plugin to run only for requests that have \"Content-type: text "
760
+ "/ html\" (recommended)"
761
+ msgstr ""
762
+ "Restringi l’esecuzione del plugin alle sole richieste che presentano "
763
+ "“Content-type: text/html” (consigliato)"
764
+
765
+ #: views/cons-configuration.php:62 views/cons-single-form.php:279
766
+ #: views/cs-configuration.php:34 views/pp-configuration.php:35
767
+ #: views/tc-configuration.php:127
768
+ msgid "Save settings"
769
+ msgstr "Salva le impostazioni"
770
+
771
+ #: views/integrate-setup.php:118 views/partials/csPluginSettings.php:14
772
+ msgid "Secondary"
773
+ msgstr "Secondario"
774
+
775
+ #: views/integrate-setup.php:85 views/partials/csGeneralSettings.php:128
776
+ msgid ""
777
+ "Seeing the AMP cookie notice when testing from Google but not when visiting "
778
+ "your AMP pages directly?"
779
+ msgstr ""
780
+ "Riesci a vedere il cookie banner AMP effettuando dei test da Google ma non "
781
+ "quando visiti la tua pagina AMP direttamente?"
782
+
783
+ #: includes/forms-list-table.php:376
784
+ msgid "Select All"
785
+ msgstr "Seleziona tutto"
786
+
787
+ #: views/integrate-setup.php:121 views/partials/csPluginSettings.php:17
788
+ msgid "Select Parsing Engine"
789
+ msgstr "Seleziona il motore di parsing"
790
+
791
+ #: views/partials/modals/modal_almost_there.php:13
792
+ msgid "Select products you have already activated"
793
+ msgstr "Seleziona i prodotti che hai già attivato"
794
+
795
+ #: views/integrate-setup.php:32 views/partials/csGeneralSettings.php:74
796
+ msgid "Select the iubenda AMP configuration file location."
797
+ msgstr "Seleziona la posizione del file della configurazione AMP di iubenda."
798
+
799
+ #: views/partials/csPluginSettings.php:56
800
+ msgid ""
801
+ "Select whether to display iubenda in a top admin menu or the Settings "
802
+ "submenu."
803
+ msgstr ""
804
+ "Scegli se visualizzare iubenda in una voce di menù principale del pannello "
805
+ "admin o in un sottomenù della scheda Impostazioni."
806
+
807
+ #: views/partials/product-card.php:42
808
+ msgid "Service"
809
+ msgstr "Servizio"
810
+
811
+ #: views/partials/frontpage_main_box.php:18
812
+ msgid "Set up a cookie banner"
813
+ msgstr "Configura un cookie banner"
814
+
815
+ #: views/partials/frontpage_main_box.php:26
816
+ msgid "Set up a privacy policy"
817
+ msgstr "Configura una privacy policy"
818
+
819
+ #: views/partials/frontpage_main_box.php:30
820
+ msgid "Set up terms and conditions"
821
+ msgstr "Configura termini e condizioni"
822
+
823
+ #: includes/settings.php:675
824
+ msgid "Settings saved."
825
+ msgstr "Impostazioni salvate."
826
+
827
+ #: views/pp-configuration.php:22
828
+ msgid "Setup your privacy and cookie policy on iubenda.com"
829
+ msgstr "Configura la tua privacy e cookie policy su iubenda.com"
830
+
831
+ #: views/partials/buttonPosition.php:67 views/tc-configuration.php:111
832
+ msgid "Shortcode"
833
+ msgstr "Shortcode"
834
+
835
+ #: views/partials/csGeneralSettings.php:15
836
+ #: views/partials/csGeneralSettings.php:24
837
+ msgid "Simplified"
838
+ msgstr "Semplificata"
839
+
840
+ #: views/partials/modals/modal_almost_there.php:6
841
+ msgid ""
842
+ "Since you already activated some products for this website, we just ask you "
843
+ "to copy and paste the embedding code of the product you already have to "
844
+ "syncronize your iubenda acount with WP plugin."
845
+ msgstr ""
846
+ "Visto che hai già attivato alcuni prodotti per questo sito web, ti chiediamo "
847
+ "di copiare e incollare il codice d’integrazione del prodotto che hai già "
848
+ "attivato per sincronizzare il tuo account iubenda con il plugin WP."
849
+
850
+ #: views/cons-single-form.php:48
851
+ msgid "Status"
852
+ msgstr "Stato"
853
+
854
+ #: includes/settings.php:102 views/partials/csPluginSettings.php:70
855
+ #: views/partials/csPluginSettings.php:86
856
+ #: views/partials/csPluginSettings.php:105
857
+ #: views/partials/csPluginSettings.php:121
858
+ msgid "Strictly necessary"
859
+ msgstr "Strettamente necessari"
860
+
861
+ #: includes/settings.php:71 includes/settings.php:72 includes/settings.php:73
862
+ #: includes/settings.php:74 includes/settings.php:75
863
+ msgid "string"
864
+ msgstr "stringa"
865
+
866
+ #: includes/settings.php:989 includes/settings.php:1011
867
+ #: includes/settings.php:1030 includes/settings.php:1050
868
+ msgid "Style"
869
+ msgstr "Stile"
870
+
871
+ #: views/cons-single-form.php:65
872
+ msgid "Subject field"
873
+ msgstr "Attributo"
874
+
875
+ #: views/cons-single-form.php:61
876
+ msgid "Subject fields"
877
+ msgstr "Utente"
878
+
879
+ #: views/cons-single-form.php:62
880
+ msgid ""
881
+ "Subject fields allow you to store a series of identifying values about your "
882
+ "individual subjects/users. Please map the subject field with the "
883
+ "corresponding form fields where applicable."
884
+ msgstr ""
885
+ "Questi campi ti permettono di memorizzare una serie di valori identificativi "
886
+ "dell’utente. Associa gli attributi dell’utente ai corrispondenti campi del "
887
+ "form (quando applicabile)."
888
+
889
+ #: views/partials/csPluginSettings.php:53
890
+ msgid "Submenu"
891
+ msgstr "Sottomenù"
892
+
893
+ #: includes/settings.php:838
894
+ msgid "Sure!"
895
+ msgstr "Certo!"
896
+
897
+ #: views/partials/modals/modal_almost_there.php:69
898
+ msgid "Synchronize products"
899
+ msgstr "Sincronizza i prodotti"
900
+
901
+ #: includes/settings.php:106
902
+ msgid "Targeting & Advertising"
903
+ msgstr "Targeting e Pubblicità"
904
+
905
+ #: views/partials/csPluginSettings.php:74
906
+ #: views/partials/csPluginSettings.php:90
907
+ #: views/partials/csPluginSettings.php:109
908
+ #: views/partials/csPluginSettings.php:125
909
+ msgid "Targeting &amp; Advertising"
910
+ msgstr "Targeting e Pubblicità"
911
+
912
+ #: includes/settings.php:340
913
+ msgid "Terms and condition"
914
+ msgstr "Termini e condizioni"
915
+
916
+ #: includes/settings.php:1045
917
+ msgid "Terms and Conditions"
918
+ msgstr "Termini e Condizioni"
919
+
920
+ #: views/partials/bannerStyle.php:2
921
+ msgid "Theme"
922
+ msgstr "Tema"
923
+
924
+ #: views/partials/frontpage_main_box.php:43
925
+ msgid "This is what you may need to be compliant"
926
+ msgstr "Ecco cosa potrebbe servirti per essere conforme"
927
+
928
+ #: views/partials/auto_detect_forms.php:29
929
+ msgid ""
930
+ "This section lists the forms available for field mapping. The plugin "
931
+ "currently supports & detects: WordPress Comment, Contact Form 7, WooCommerce "
932
+ "Checkout and WP Forms."
933
+ msgstr ""
934
+ "Questa sezione elenca i form disponibili al mapping. Al momento il plugin "
935
+ "supporta e rileva: Commenti WordPress, Contact Form 7, WooCommerce Checkout "
936
+ "e WP Forms."
937
+
938
+ #: includes/widget/IubendaLegalWidget.php:176
939
+ msgid "Title:"
940
+ msgstr "Nome:"
941
+
942
+ #: views/partials/csPluginSettings.php:49
943
+ msgid "Top menu"
944
+ msgstr "Menù principale"
945
+
946
+ #: views/partials/modals/modal_no_website_found.php:10
947
+ #: views/partials/modals/modal_ops_embed_invalid.php:10
948
+ msgid "Try again"
949
+ msgstr "Riprova"
950
+
951
+ #: includes/settings.php:1029 includes/settings.php:1049
952
+ msgid "Version"
953
+ msgstr "Versione"
954
+
955
+ #: views/partials/header_scanned.php:4
956
+ msgid "We have analyzed your website in background and this is the result."
957
+ msgstr "Abbiamo analizzato il tuo sito web e questo è il risultato."
958
+
959
+ #: views/partials/buttonPosition.php:22
960
+ #: views/partials/modals/modal_almost_there.php:56
961
+ #: views/tc-configuration.php:77
962
+ #, php-format
963
+ msgid ""
964
+ "We were not able to add a \"Legal\" widget to the footer as your theme is "
965
+ "not compatible, you can position the \"Legal\" widget manually from <a "
966
+ "href=\"%s\" target=\"_blank\">here</a>."
967
+ msgstr ""
968
+ "Non siamo riusciti ad aggiungere il widget “Documenti e contatti” al footer, "
969
+ "dal momento che il tuo tema non è compatibile. Puoi posizionare il widget "
970
+ "“Documenti e contatti” manualmente da <a href=“%s” target=“_blank”>qui</a>."
971
+
972
+ #: includes/settings.php:843
973
+ msgid "We're sorry to hear that. Would you mind giving us some feedback?"
974
+ msgstr "Ci dispiace. Che ne dici di lasciarci un feedback?"
975
+
976
+ #: views/partials/welcomeScreenHeader.php:2
977
+ msgid "Welcome to iubenda!"
978
+ msgstr "Benvenuto su iubenda!"
979
+
980
+ #: views/cons-configuration.php:37 views/partials/languagesTabs.php:27
981
+ #: views/partials/modals/modal_almost_there.php:42
982
+ msgid "Where can I find this code?"
983
+ msgstr "Dove posso trovare questo codice?"
984
+
985
+ #: includes/settings.php:836
986
+ msgid ""
987
+ "Whew, what a relief!? We've worked countless hours to make this plugin as "
988
+ "useful as possible - so we're pretty happy that you're enjoying it. While "
989
+ "you here, would you mind leaving us a 5 star rating? It would really help us "
990
+ "out."
991
+ msgstr ""
992
+ "Che sollievo! Abbiamo lavorato tantissimo per rendere questo plugin il più "
993
+ "utile possibile, quindi siamo molto contenti che ti piaccia. Ormai che sei "
994
+ "qui, che ne dici di lasciarci 5 stelle?? Ci aiuterebbe davvero."
995
+
996
+ #: views/partials/csSimplifiedConfiguration.php:43
997
+ msgid "Worldwide"
998
+ msgstr "Tutto il mondo"
999
+
1000
+ #: includes/settings.php:831
1001
+ msgid "Yes"
1002
+ msgstr "Sì"
1003
+
1004
+ #: includes/settings.php:321
1005
+ msgid "You don't have permission to access this page."
1006
+ msgstr "Non sei autorizzato ad accedere a questa pagina."
1007
+
1008
+ #: views/partials/csSimplifiedConfiguration.php:92
1009
+ msgid "You should activate this feature if you show ads on your website"
1010
+ msgstr ""
1011
+ "Dovresti attivare questa funzionalità se mostri annunci pubblicitari sul tuo "
1012
+ "sito web"
1013
+
1014
+ #: views/partials/buttonPosition.php:58 views/tc-configuration.php:102
1015
+ msgid "Your embed code"
1016
+ msgstr "Il tuo codice d’integrazione"
1017
+
1018
+ #: views/cons-configuration.php:29
1019
+ msgid "Your iubenda Javascript library public API key"
1020
+ msgstr "La tua chiave API pubblica per la libreria JavaScript di iubenda"
1021
+
1022
+ #: views/partials/modals/modal_pp_created.php:5
1023
+ msgid "Your privacy policy has been created!"
1024
+ msgstr "La tua privacy policy è stata creata!"
1025
+
1026
+ #: views/partials/header_scanned.php:3 views/partials/siteInfo.php:16
1027
+ msgid "Your rating"
1028
+ msgstr "La tua valutazione"
1029
+
1030
+ #: includes/QuickGeneratorService.php:116
1031
+ msgid ""
1032
+ "Your website has been created and your legal documents have been generated. "
1033
+ "Setup your cookie banner and privacy policy button to complete the "
1034
+ "integration."
1035
+ msgstr ""
1036
+ "Il tuo sito è stato creato e i tuoi documenti legali generati. Configura il "
1037
+ "tuo cookie banner e il pulsante della privacy policy per completare "
1038
+ "l’integrazione."
languages/iubenda.pot ADDED
@@ -0,0 +1,875 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #, fuzzy
2
+ msgid ""
3
+ msgstr ""
4
+ "Project-Id-Version: \n"
5
+ "POT-Creation-Date: 2022-05-23 15:47+0200\n"
6
+ "PO-Revision-Date: 2022-03-03 17:48+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: en\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
14
+ "X-Generator: Poedit 3.0.1\n"
15
+ "X-Poedit-Basepath: ..\n"
16
+ "X-Poedit-KeywordsList: _e;__\n"
17
+ "X-Poedit-SearchPath-0: .\n"
18
+
19
+ #: includes/PrivacyPolicyGenerator.php:23
20
+ msgid "Privacy Policy"
21
+ msgstr ""
22
+
23
+ #: includes/QuickGeneratorService.php:116
24
+ msgid "Your website has been created and your legal documents have been generated. Setup your cookie banner and privacy policy button to complete the integration."
25
+ msgstr ""
26
+
27
+ #: includes/QuickGeneratorService.php:139
28
+ msgid "Our products has been integrated successfully, now customize all products to increase the compliance rating and make your website fully compliant."
29
+ msgstr ""
30
+
31
+ #: includes/amp.php:281
32
+ msgid "AMP Cookie Consent"
33
+ msgstr ""
34
+
35
+ #: includes/forms-list-table.php:86
36
+ msgid "Form Title"
37
+ msgstr ""
38
+
39
+ #: includes/forms-list-table.php:87
40
+ msgid "Form ID"
41
+ msgstr ""
42
+
43
+ #: includes/forms-list-table.php:88
44
+ msgid "Form Source"
45
+ msgstr ""
46
+
47
+ #: includes/forms-list-table.php:89
48
+ msgid "Fields"
49
+ msgstr ""
50
+
51
+ #: includes/forms-list-table.php:90
52
+ msgid "Date"
53
+ msgstr ""
54
+
55
+ #: includes/forms-list-table.php:159
56
+ msgid "Edit"
57
+ msgstr ""
58
+
59
+ #: includes/forms-list-table.php:160
60
+ msgid "Delete"
61
+ msgstr ""
62
+
63
+ #: includes/forms-list-table.php:260
64
+ msgid "Filter"
65
+ msgstr ""
66
+
67
+ #: includes/forms-list-table.php:277
68
+ msgid "Filter by source"
69
+ msgstr ""
70
+
71
+ #: includes/forms-list-table.php:279
72
+ msgid "All form sources"
73
+ msgstr ""
74
+
75
+ #: includes/forms-list-table.php:347
76
+ msgid "No forms found."
77
+ msgstr ""
78
+
79
+ #: includes/forms-list-table.php:376
80
+ msgid "Select All"
81
+ msgstr ""
82
+
83
+ #: includes/forms.php:152
84
+ msgid "Forms"
85
+ msgstr ""
86
+
87
+ #: includes/forms.php:153
88
+ msgid "Form"
89
+ msgstr ""
90
+
91
+ #: includes/forms.php:579 includes/forms.php:593
92
+ msgid "First name"
93
+ msgstr ""
94
+
95
+ #: includes/forms.php:585 includes/forms.php:605
96
+ msgid "Last name"
97
+ msgstr ""
98
+
99
+ #: includes/forms.php:599
100
+ msgid "Middle name"
101
+ msgstr ""
102
+
103
+ #: includes/settings.php:71 includes/settings.php:72 includes/settings.php:73
104
+ #: includes/settings.php:74 includes/settings.php:75
105
+ msgid "string"
106
+ msgstr ""
107
+
108
+ #: includes/settings.php:87 includes/settings.php:352
109
+ #: includes/settings.php:1037
110
+ msgid "Cookie Solution"
111
+ msgstr ""
112
+
113
+ #: includes/settings.php:93 includes/settings.php:358 includes/settings.php:369
114
+ #: includes/settings.php:1057
115
+ msgid "Consent Solution"
116
+ msgstr ""
117
+
118
+ #: includes/settings.php:101 views/partials/csPluginSettings.php:69
119
+ #: views/partials/csPluginSettings.php:85
120
+ #: views/partials/csPluginSettings.php:104
121
+ #: views/partials/csPluginSettings.php:120
122
+ msgid "Not set"
123
+ msgstr ""
124
+
125
+ #: includes/settings.php:102 views/partials/csPluginSettings.php:70
126
+ #: views/partials/csPluginSettings.php:86
127
+ #: views/partials/csPluginSettings.php:105
128
+ #: views/partials/csPluginSettings.php:121
129
+ msgid "Strictly necessary"
130
+ msgstr ""
131
+
132
+ #: includes/settings.php:103
133
+ msgid "Basic interactions & functionalities"
134
+ msgstr ""
135
+
136
+ #: includes/settings.php:104 views/partials/csPluginSettings.php:72
137
+ #: views/partials/csPluginSettings.php:88
138
+ #: views/partials/csPluginSettings.php:107
139
+ #: views/partials/csPluginSettings.php:123
140
+ msgid "Experience enhancement"
141
+ msgstr ""
142
+
143
+ #: includes/settings.php:105 views/partials/csPluginSettings.php:73
144
+ #: views/partials/csPluginSettings.php:89
145
+ #: views/partials/csPluginSettings.php:108
146
+ #: views/partials/csPluginSettings.php:124
147
+ msgid "Analytics"
148
+ msgstr ""
149
+
150
+ #: includes/settings.php:106
151
+ msgid "Targeting & Advertising"
152
+ msgstr ""
153
+
154
+ #: includes/settings.php:321
155
+ msgid "You don't have permission to access this page."
156
+ msgstr ""
157
+
158
+ #: includes/settings.php:340
159
+ msgid "Terms and condition"
160
+ msgstr ""
161
+
162
+ #: includes/settings.php:346 includes/settings.php:1025
163
+ msgid "Privacy and Cookie Policy"
164
+ msgstr ""
165
+
166
+ #: includes/settings.php:554
167
+ #, php-format
168
+ msgid "Please enable comments cookies opt-in checkbox in the <a href=\"%s\" target=\"_blank\">Discussion settings</a>."
169
+ msgstr ""
170
+
171
+ #: includes/settings.php:627
172
+ msgid "Form saving failed. Please fill the Subject fields."
173
+ msgstr ""
174
+
175
+ #: includes/settings.php:675
176
+ msgid "Settings saved."
177
+ msgstr ""
178
+
179
+ #: includes/settings.php:829
180
+ msgid "Enjoying the iubenda Cookie & Consent Solution Plugin?"
181
+ msgstr ""
182
+
183
+ #: includes/settings.php:831
184
+ msgid "Yes"
185
+ msgstr ""
186
+
187
+ #: includes/settings.php:832
188
+ msgid "No"
189
+ msgstr ""
190
+
191
+ #: includes/settings.php:836
192
+ msgid "Whew, what a relief!? We've worked countless hours to make this plugin as useful as possible - so we're pretty happy that you're enjoying it. While you here, would you mind leaving us a 5 star rating? It would really help us out."
193
+ msgstr ""
194
+
195
+ #: includes/settings.php:838
196
+ msgid "Sure!"
197
+ msgstr ""
198
+
199
+ #: includes/settings.php:839 includes/settings.php:846
200
+ msgid "No thanks"
201
+ msgstr ""
202
+
203
+ #: includes/settings.php:843
204
+ msgid "We're sorry to hear that. Would you mind giving us some feedback?"
205
+ msgstr ""
206
+
207
+ #: includes/settings.php:845
208
+ msgid "Ok sure!"
209
+ msgstr ""
210
+
211
+ #: includes/settings.php:989 includes/settings.php:1011
212
+ #: includes/settings.php:1030 includes/settings.php:1050
213
+ msgid "Style"
214
+ msgstr ""
215
+
216
+ #: includes/settings.php:990 includes/settings.php:1012
217
+ #: includes/settings.php:1031 includes/settings.php:1051
218
+ #: views/partials/bannerPosition.php:20
219
+ msgid "Position"
220
+ msgstr ""
221
+
222
+ #: includes/settings.php:991 includes/settings.php:1013
223
+ msgid "legislation"
224
+ msgstr ""
225
+
226
+ #: includes/settings.php:1029 includes/settings.php:1049
227
+ msgid "Version"
228
+ msgstr ""
229
+
230
+ #: includes/settings.php:1045
231
+ msgid "Terms and Conditions"
232
+ msgstr ""
233
+
234
+ #: includes/widget/IubendaLegalWidget.php:18
235
+ msgid "Iubenda legal"
236
+ msgstr ""
237
+
238
+ #: includes/widget/IubendaLegalWidget.php:21
239
+ msgid "Iubenda legal widget for Privacy Policy and Terms & Conditions"
240
+ msgstr ""
241
+
242
+ #: includes/widget/IubendaLegalWidget.php:167
243
+ msgid "Legal"
244
+ msgstr ""
245
+
246
+ #: includes/widget/IubendaLegalWidget.php:176
247
+ msgid "Title:"
248
+ msgstr ""
249
+
250
+ #: views/cons-configuration.php:14
251
+ msgid "Activate <strong>Consent Solution</strong> on our website in your iubenda dashboard and paste here the <strong>API key</strong> to integrate it on your website."
252
+ msgstr ""
253
+
254
+ #: views/cons-configuration.php:17
255
+ msgid "Activate & Configure Consent Solution by"
256
+ msgstr ""
257
+
258
+ #: views/cons-configuration.php:18 views/partials/csManualConfiguration.php:6
259
+ #: views/tc-configuration.php:16
260
+ msgid "clicking here"
261
+ msgstr ""
262
+
263
+ #: views/cons-configuration.php:23
264
+ msgid "Paste your public API key here"
265
+ msgstr ""
266
+
267
+ #: views/cons-configuration.php:29
268
+ msgid "Your iubenda Javascript library public API key"
269
+ msgstr ""
270
+
271
+ #: views/cons-configuration.php:31
272
+ msgid "Confirm API"
273
+ msgstr ""
274
+
275
+ #: views/cons-configuration.php:37 views/partials/languagesTabs.php:27
276
+ #: views/partials/modals/modal_almost_there.php:42
277
+ msgid "Where can I find this code?"
278
+ msgstr ""
279
+
280
+ #: views/cons-configuration.php:44
281
+ msgid "Add forms"
282
+ msgstr ""
283
+
284
+ #: views/cons-configuration.php:53
285
+ msgid "Auto-detect forms"
286
+ msgstr ""
287
+
288
+ #: views/cons-configuration.php:60 views/cons-single-form.php:277
289
+ #: views/cs-configuration.php:32 views/pp-configuration.php:33
290
+ #: views/tc-configuration.php:125
291
+ msgid "Cancel"
292
+ msgstr ""
293
+
294
+ #: views/cons-configuration.php:62 views/cons-single-form.php:279
295
+ #: views/cs-configuration.php:34 views/pp-configuration.php:35
296
+ #: views/tc-configuration.php:127
297
+ msgid "Save settings"
298
+ msgstr ""
299
+
300
+ #: views/cons-single-form.php:12
301
+ msgid "Field Mapping"
302
+ msgstr ""
303
+
304
+ #: views/cons-single-form.php:44
305
+ msgid "Map fields"
306
+ msgstr ""
307
+
308
+ #: views/cons-single-form.php:48
309
+ msgid "Status"
310
+ msgstr ""
311
+
312
+ #: views/cons-single-form.php:61
313
+ msgid "Subject fields"
314
+ msgstr ""
315
+
316
+ #: views/cons-single-form.php:62
317
+ msgid "Subject fields allow you to store a series of identifying values about your individual subjects/users. Please map the subject field with the corresponding form fields where applicable."
318
+ msgstr ""
319
+
320
+ #: views/cons-single-form.php:65
321
+ msgid "Subject field"
322
+ msgstr ""
323
+
324
+ #: views/cons-single-form.php:66 views/cons-single-form.php:103
325
+ msgid "Form field"
326
+ msgstr ""
327
+
328
+ #: views/cons-single-form.php:71
329
+ msgid "Autogenerated"
330
+ msgstr ""
331
+
332
+ #: views/cons-single-form.php:71
333
+ msgid "None"
334
+ msgstr ""
335
+
336
+ #: views/cons-single-form.php:98
337
+ msgid "Preferences fields"
338
+ msgstr ""
339
+
340
+ #: views/cons-single-form.php:99
341
+ msgid "Preferences fields allow you to store a record of the various opt-ins points at which the user has agreed or given consent, such as fields for agreeing to terms and conditions, newsletter, profiling, etc."
342
+ msgstr ""
343
+
344
+ #: views/cons-single-form.php:102
345
+ msgid "Preferences field"
346
+ msgstr ""
347
+
348
+ #: views/cons-single-form.php:108 views/cons-single-form.php:133
349
+ #: views/cons-single-form.php:234 views/cons-single-form.php:244
350
+ #: views/cons-single-form.php:260
351
+ msgid "Enter field name"
352
+ msgstr ""
353
+
354
+ #: views/cons-single-form.php:122 views/cons-single-form.php:148
355
+ #: views/cons-single-form.php:183 views/cons-single-form.php:207
356
+ #: views/cons-single-form.php:244 views/cons-single-form.php:260
357
+ msgid "Remove"
358
+ msgstr ""
359
+
360
+ #: views/cons-single-form.php:155
361
+ msgid "Add New Preference"
362
+ msgstr ""
363
+
364
+ #: views/cons-single-form.php:159
365
+ msgid "Exclude fields"
366
+ msgstr ""
367
+
368
+ #: views/cons-single-form.php:160
369
+ msgid "Exclude fields allow you to create a list of fields that you would like to exclude from your Consent Solution recorded proofs (for e.g. password or other fields not related to the consent)."
370
+ msgstr ""
371
+
372
+ #: views/cons-single-form.php:164
373
+ msgid "Exclude field"
374
+ msgstr ""
375
+
376
+ #: views/cons-single-form.php:216
377
+ msgid "Add New Exclude"
378
+ msgstr ""
379
+
380
+ #: views/cons-single-form.php:221
381
+ msgid "Legal documents"
382
+ msgstr ""
383
+
384
+ #: views/cons-single-form.php:222
385
+ msgid "In general, it's important that you declare which legal documents are being agreed upon when each consent is collected. However, if you use iubenda for your legal documents, it is *required* that you identify the documents by selecting them here."
386
+ msgstr ""
387
+
388
+ #: views/cons-single-form.php:225
389
+ msgid "Identifier"
390
+ msgstr ""
391
+
392
+ #: views/cons-single-form.php:234
393
+ msgid "Please select each legal document available on your site."
394
+ msgstr ""
395
+
396
+ #: views/cons-single-form.php:250
397
+ msgid "Alternatively, you may add your own custom document identifiers."
398
+ msgstr ""
399
+
400
+ #: views/cons-single-form.php:268
401
+ msgid "Add New Document"
402
+ msgstr ""
403
+
404
+ #: views/cs-configuration.php:15
405
+ msgid "General settings"
406
+ msgstr ""
407
+
408
+ #: views/cs-configuration.php:16
409
+ msgid "Plugin settings"
410
+ msgstr ""
411
+
412
+ #: views/frontpage.php:8
413
+ msgid "Let's configure your website for compliance."
414
+ msgstr ""
415
+
416
+ #: views/frontpage.php:9
417
+ msgid "Help me get compliant!"
418
+ msgstr ""
419
+
420
+ #: views/integrate-setup.php:21
421
+ msgid "Add a cookie banner"
422
+ msgstr ""
423
+
424
+ #: views/integrate-setup.php:29 views/partials/csGeneralSettings.php:70
425
+ msgid "Enable Google AMP support"
426
+ msgstr ""
427
+
428
+ #: views/integrate-setup.php:32 views/partials/csGeneralSettings.php:74
429
+ msgid "Select the iubenda AMP configuration file location."
430
+ msgstr ""
431
+
432
+ #: views/integrate-setup.php:36 views/partials/csGeneralSettings.php:78
433
+ msgid "Auto-generated configuration file"
434
+ msgstr ""
435
+
436
+ #: views/integrate-setup.php:40 views/partials/csGeneralSettings.php:82
437
+ msgid "Custom configuration file"
438
+ msgstr ""
439
+
440
+ #: views/integrate-setup.php:49 views/partials/csGeneralSettings.php:92
441
+ msgid "No file available. Save changes to generate iubenda AMP configuration file."
442
+ msgstr ""
443
+
444
+ #: views/integrate-setup.php:73 views/integrate-setup.php:91
445
+ #: views/partials/csGeneralSettings.php:116
446
+ msgid "Default language"
447
+ msgstr ""
448
+
449
+ #: views/integrate-setup.php:85 views/partials/csGeneralSettings.php:128
450
+ msgid "Seeing the AMP cookie notice when testing from Google but not when visiting your AMP pages directly?"
451
+ msgstr ""
452
+
453
+ #: views/integrate-setup.php:85 views/partials/csGeneralSettings.php:128
454
+ msgid "Learn how to fix it"
455
+ msgstr ""
456
+
457
+ #: views/integrate-setup.php:108 views/partials/csPluginSettings.php:4
458
+ msgid "Automatically block scripts detected by the plugin"
459
+ msgstr ""
460
+
461
+ #: views/integrate-setup.php:114 views/partials/csPluginSettings.php:10
462
+ msgid "Primary"
463
+ msgstr ""
464
+
465
+ #: views/integrate-setup.php:118 views/partials/csPluginSettings.php:14
466
+ msgid "Secondary"
467
+ msgstr ""
468
+
469
+ #: views/integrate-setup.php:121 views/partials/csPluginSettings.php:17
470
+ msgid "Select Parsing Engine"
471
+ msgstr ""
472
+
473
+ #: views/integrate-setup.php:126 views/partials/csPluginSettings.php:22
474
+ msgid "Leave scripts untouched on the page if the user has already given consent"
475
+ msgstr ""
476
+
477
+ #: views/integrate-setup.php:128 views/partials/csPluginSettings.php:24
478
+ msgid "Enable this option to improve performance <strong>only</strong> if your site does <strong>not</strong> use a cache system or a cache plugin and if you're <strong>not</strong> collecting per-category consent. If you're in doubt, keep this setting disabled"
479
+ msgstr ""
480
+
481
+ #: views/integrate-setup.php:140
482
+ msgid "Add the privacy policy button"
483
+ msgstr ""
484
+
485
+ #: views/partials/auto_detect_forms.php:29
486
+ msgid "This section lists the forms available for field mapping. The plugin currently supports & detects: WordPress Comment, Contact Form 7, WooCommerce Checkout and WP Forms."
487
+ msgstr ""
488
+
489
+ #: views/partials/bannerPosition.php:41
490
+ msgid "Background-overlay"
491
+ msgstr ""
492
+
493
+ #: views/partials/bannerStyle.php:2
494
+ msgid "Theme"
495
+ msgstr ""
496
+
497
+ #: views/partials/bannerStyle.php:9 views/partials/buttonStyle.php:19
498
+ #: views/tc-configuration.php:50
499
+ msgid "Dark"
500
+ msgstr ""
501
+
502
+ #: views/partials/bannerStyle.php:15 views/partials/buttonStyle.php:10
503
+ #: views/tc-configuration.php:41
504
+ msgid "Light"
505
+ msgstr ""
506
+
507
+ #: views/partials/breadcrumb.php:2
508
+ msgid "Products"
509
+ msgstr ""
510
+
511
+ #: views/partials/buttonPosition.php:1 views/tc-configuration.php:57
512
+ msgid "Button position"
513
+ msgstr ""
514
+
515
+ #: views/partials/buttonPosition.php:5 views/tc-configuration.php:61
516
+ msgid "Add to the footer automatically"
517
+ msgstr ""
518
+
519
+ #: views/partials/buttonPosition.php:10 views/tc-configuration.php:65
520
+ msgid "Integrate manually"
521
+ msgstr ""
522
+
523
+ #: views/partials/buttonPosition.php:22
524
+ #: views/partials/modals/modal_almost_there.php:56
525
+ #: views/tc-configuration.php:77
526
+ #, php-format
527
+ msgid "We were not able to add a \"Legal\" widget to the footer as your theme is not compatible, you can position the \"Legal\" widget manually from <a href=\"%s\" target=\"_blank\">here</a>."
528
+ msgstr ""
529
+
530
+ #: views/partials/buttonPosition.php:31 views/tc-configuration.php:86
531
+ msgid "HTML"
532
+ msgstr ""
533
+
534
+ #: views/partials/buttonPosition.php:58 views/tc-configuration.php:102
535
+ msgid "Your embed code"
536
+ msgstr ""
537
+
538
+ #: views/partials/buttonPosition.php:67 views/tc-configuration.php:111
539
+ msgid "Shortcode"
540
+ msgstr ""
541
+
542
+ #: views/partials/buttonPosition.php:68
543
+ msgid "A shortcode is a tiny bit of code that allows embedding interactive elements or creating complex page layouts with a minimal effort.<br>Just copy and paste the shortcode where you want the button to appear."
544
+ msgstr ""
545
+
546
+ #: views/partials/buttonStyle.php:1 views/tc-configuration.php:32
547
+ msgid "Button style"
548
+ msgstr ""
549
+
550
+ #: views/partials/csGeneralSettings.php:3
551
+ msgid "Configuration"
552
+ msgstr ""
553
+
554
+ #: views/partials/csGeneralSettings.php:15
555
+ #: views/partials/csGeneralSettings.php:24
556
+ msgid "Simplified"
557
+ msgstr ""
558
+
559
+ #: views/partials/csGeneralSettings.php:36
560
+ #: views/partials/csGeneralSettings.php:43
561
+ msgid "Manual embed"
562
+ msgstr ""
563
+
564
+ #: views/partials/csManualConfiguration.php:2
565
+ msgid "Configure your cookie banner on our website and paste here the embed code to integrate it to your website."
566
+ msgstr ""
567
+
568
+ #: views/partials/csManualConfiguration.php:5
569
+ msgid "Configure cookie banner by"
570
+ msgstr ""
571
+
572
+ #: views/partials/csManualConfiguration.php:11
573
+ msgid "Paste your cookie solution embed code here"
574
+ msgstr ""
575
+
576
+ #: views/partials/csPluginSettings.php:29
577
+ msgid "Restrict the plugin to run only for requests that have \"Content-type: text / html\" (recommended)"
578
+ msgstr ""
579
+
580
+ #: views/partials/csPluginSettings.php:33
581
+ msgid "Do not run the plugin inside the RSS feed (recommended)"
582
+ msgstr ""
583
+
584
+ #: views/partials/csPluginSettings.php:37
585
+ msgid "Do not run the plugin on POST requests (recommended)"
586
+ msgstr ""
587
+
588
+ #: views/partials/csPluginSettings.php:41
589
+ msgid "Delete all plugin data upon deactivation"
590
+ msgstr ""
591
+
592
+ #: views/partials/csPluginSettings.php:45
593
+ msgid "Menu position"
594
+ msgstr ""
595
+
596
+ #: views/partials/csPluginSettings.php:49
597
+ msgid "Top menu"
598
+ msgstr ""
599
+
600
+ #: views/partials/csPluginSettings.php:53
601
+ msgid "Submenu"
602
+ msgstr ""
603
+
604
+ #: views/partials/csPluginSettings.php:56
605
+ msgid "Select whether to display iubenda in a top admin menu or the Settings submenu."
606
+ msgstr ""
607
+
608
+ #: views/partials/csPluginSettings.php:59
609
+ msgid "Custom settings"
610
+ msgstr ""
611
+
612
+ #: views/partials/csPluginSettings.php:62
613
+ msgid "Custom scripts"
614
+ msgstr ""
615
+
616
+ #: views/partials/csPluginSettings.php:63
617
+ msgid "Custom iframes"
618
+ msgstr ""
619
+
620
+ #: views/partials/csPluginSettings.php:71
621
+ #: views/partials/csPluginSettings.php:87
622
+ #: views/partials/csPluginSettings.php:106
623
+ #: views/partials/csPluginSettings.php:122
624
+ msgid "Basic interactions &amp; functionalities"
625
+ msgstr ""
626
+
627
+ #: views/partials/csPluginSettings.php:74
628
+ #: views/partials/csPluginSettings.php:90
629
+ #: views/partials/csPluginSettings.php:109
630
+ #: views/partials/csPluginSettings.php:125
631
+ msgid "Targeting &amp; Advertising"
632
+ msgstr ""
633
+
634
+ #: views/partials/csPluginSettings.php:97
635
+ msgid "Provide a list of domains for any custom scripts you'd like to block, and assign their purposes. To make sure they are blocked correctly, please add domains in the same format as 'example.com', without any protocols e.g. 'http://' or 'https://'. You may also use wildcards (*) to include parent domains or subdomains."
636
+ msgstr ""
637
+
638
+ #: views/partials/csPluginSettings.php:98
639
+ msgid "Add New Script"
640
+ msgstr ""
641
+
642
+ #: views/partials/csPluginSettings.php:132
643
+ msgid "Provide a list of domains for any custom iframes you'd like to block, and assign their purposes. To make sure they are blocked correctly, please add domains in the same format as 'example.com', without any protocols e.g. 'http://' or 'https://'. You may also use wildcards (*) to include parent domains or subdomains."
644
+ msgstr ""
645
+
646
+ #: views/partials/csPluginSettings.php:133
647
+ msgid "Add New iframe"
648
+ msgstr ""
649
+
650
+ #: views/partials/csSimplifiedConfiguration.php:9
651
+ msgid "Legislation"
652
+ msgstr ""
653
+
654
+ #: views/partials/csSimplifiedConfiguration.php:14
655
+ msgid "GDPR Only"
656
+ msgstr ""
657
+
658
+ #: views/partials/csSimplifiedConfiguration.php:18
659
+ msgid "CCPA Only"
660
+ msgstr ""
661
+
662
+ #: views/partials/csSimplifiedConfiguration.php:22
663
+ msgid "Both"
664
+ msgstr ""
665
+
666
+ #: views/partials/csSimplifiedConfiguration.php:29
667
+ msgid "Require consent from"
668
+ msgstr ""
669
+
670
+ #: views/partials/csSimplifiedConfiguration.php:43
671
+ msgid "Worldwide"
672
+ msgstr ""
673
+
674
+ #: views/partials/csSimplifiedConfiguration.php:59
675
+ msgid "EU Only"
676
+ msgstr ""
677
+
678
+ #: views/partials/csSimplifiedConfiguration.php:68
679
+ msgid "Banner buttons"
680
+ msgstr ""
681
+
682
+ #: views/partials/csSimplifiedConfiguration.php:72
683
+ msgid "Explicit Accept and Customize buttons"
684
+ msgstr ""
685
+
686
+ #: views/partials/csSimplifiedConfiguration.php:77
687
+ msgid "Explicit Reject button"
688
+ msgstr ""
689
+
690
+ #: views/partials/csSimplifiedConfiguration.php:83
691
+ msgid "Other options"
692
+ msgstr ""
693
+
694
+ #: views/partials/csSimplifiedConfiguration.php:88
695
+ msgid "Enable IAB Transparency and Consent Framework"
696
+ msgstr ""
697
+
698
+ #: views/partials/csSimplifiedConfiguration.php:88
699
+ msgid "Learn More"
700
+ msgstr ""
701
+
702
+ #: views/partials/csSimplifiedConfiguration.php:92
703
+ msgid "You should activate this feature if you show ads on your website"
704
+ msgstr ""
705
+
706
+ #: views/partials/footer.php:3
707
+ msgid "Documentation"
708
+ msgstr ""
709
+
710
+ #: views/partials/frontpage_main_box.php:18
711
+ msgid "Set up a cookie banner"
712
+ msgstr ""
713
+
714
+ #: views/partials/frontpage_main_box.php:22
715
+ msgid "Only track users that give consent"
716
+ msgstr ""
717
+
718
+ #: views/partials/frontpage_main_box.php:26
719
+ msgid "Set up a privacy policy"
720
+ msgstr ""
721
+
722
+ #: views/partials/frontpage_main_box.php:30
723
+ msgid "Set up terms and conditions"
724
+ msgstr ""
725
+
726
+ #: views/partials/frontpage_main_box.php:39
727
+ msgid "Analyzing your website"
728
+ msgstr ""
729
+
730
+ #: views/partials/frontpage_main_box.php:43
731
+ msgid "This is what you may need to be compliant"
732
+ msgstr ""
733
+
734
+ #: views/partials/header_scanned.php:3 views/partials/siteInfo.php:16
735
+ msgid "Your rating"
736
+ msgstr ""
737
+
738
+ #: views/partials/header_scanned.php:4
739
+ msgid "We have analyzed your website in background and this is the result."
740
+ msgstr ""
741
+
742
+ #: views/partials/integrateFooter.php:3
743
+ msgid "Reset settings"
744
+ msgstr ""
745
+
746
+ #: views/partials/integrateFooter.php:4
747
+ msgid "Integrate"
748
+ msgstr ""
749
+
750
+ #: views/partials/languagesTabs.php:21
751
+ msgid "Paste your embed code here"
752
+ msgstr ""
753
+
754
+ #: views/partials/modals/modal_almost_there.php:5
755
+ msgid "Nice! We are almost there."
756
+ msgstr ""
757
+
758
+ #: views/partials/modals/modal_almost_there.php:6
759
+ msgid "Since you already activated some products for this website, we just ask you to copy and paste the embedding code of the product you already have to syncronize your iubenda acount with WP plugin."
760
+ msgstr ""
761
+
762
+ #: views/partials/modals/modal_almost_there.php:13
763
+ msgid "Select products you have already activated"
764
+ msgstr ""
765
+
766
+ #: views/partials/modals/modal_almost_there.php:25
767
+ msgid "(required)"
768
+ msgstr ""
769
+
770
+ #: views/partials/modals/modal_almost_there.php:37
771
+ msgid "Consent Solution API key"
772
+ msgstr ""
773
+
774
+ #: views/partials/modals/modal_almost_there.php:39
775
+ msgid "Paste your API key here"
776
+ msgstr ""
777
+
778
+ #: views/partials/modals/modal_almost_there.php:69
779
+ msgid "Synchronize products"
780
+ msgstr ""
781
+
782
+ #: views/partials/modals/modal_no_website_found.php:6
783
+ #: views/partials/modals/modal_ops_embed_invalid.php:6
784
+ msgid "Ooops! <br> No website found with this embed code."
785
+ msgstr ""
786
+
787
+ #: views/partials/modals/modal_no_website_found.php:8
788
+ msgid "It seems that it is not possible to access your data with the code you pasted, do you want to try again or do you prefer to start configuring your website from scratch?"
789
+ msgstr ""
790
+
791
+ #: views/partials/modals/modal_no_website_found.php:10
792
+ #: views/partials/modals/modal_ops_embed_invalid.php:10
793
+ msgid "Try again"
794
+ msgstr ""
795
+
796
+ #: views/partials/modals/modal_no_website_found.php:11
797
+ #: views/partials/modals/modal_sync.php:8
798
+ msgid "I want to start from scratch"
799
+ msgstr ""
800
+
801
+ #: views/partials/modals/modal_ops_embed_invalid.php:8
802
+ msgid "It seems that it is not possible to access your data with the code you pasted, do you want to try again."
803
+ msgstr ""
804
+
805
+ #: views/partials/modals/modal_pp_created.php:5
806
+ msgid "Your privacy policy has been created!"
807
+ msgstr ""
808
+
809
+ #: views/partials/modals/modal_pp_created.php:7
810
+ msgid "From here you can customize your privacy policy by adding the services you use within your website or you can customize the style of the button that displays your privacy policy."
811
+ msgstr ""
812
+
813
+ #: views/partials/modals/modal_pp_created.php:9
814
+ msgid "Got it"
815
+ msgstr ""
816
+
817
+ #: views/partials/modals/modal_select_language.php:4
818
+ msgid "Now, select your website language"
819
+ msgstr ""
820
+
821
+ #: views/partials/modals/modal_select_language.php:53
822
+ msgid "Continue"
823
+ msgstr ""
824
+
825
+ #: views/partials/modals/modal_sync.php:4
826
+ msgid "First of all, tell us if you already use our products for this website or if you want to start from scratch"
827
+ msgstr ""
828
+
829
+ #: views/partials/modals/modal_sync.php:6
830
+ msgid "I’ve already made the set up on iubenda.com"
831
+ msgstr ""
832
+
833
+ #: views/partials/modals/modal_sync.php:7
834
+ msgid "or"
835
+ msgstr ""
836
+
837
+ #: views/partials/product-card.php:42
838
+ msgid "Service"
839
+ msgstr ""
840
+
841
+ #: views/partials/product-card.php:44
842
+ msgid "Configure"
843
+ msgstr ""
844
+
845
+ #: views/partials/welcomeScreenHeader.php:2
846
+ msgid "Welcome to iubenda!"
847
+ msgstr ""
848
+
849
+ #: views/partials/welcomeScreenHeader.php:3
850
+ msgid "Our plugin will help you to make your website compliant in minutes."
851
+ msgstr ""
852
+
853
+ #: views/pp-configuration.php:22
854
+ msgid "Setup your privacy and cookie policy on iubenda.com"
855
+ msgstr ""
856
+
857
+ #: views/pp-configuration.php:26 views/tc-configuration.php:30
858
+ msgid "Integration"
859
+ msgstr ""
860
+
861
+ #: views/products-page.php:15
862
+ msgid "It seems that you have not activated any of our services, we recommend you to activate them and increase your level of compliance and avoid risking fines."
863
+ msgstr ""
864
+
865
+ #: views/tc-configuration.php:12
866
+ msgid "Configure your terms and conditions on our website and paste here the embed code to integrate the button on your website."
867
+ msgstr ""
868
+
869
+ #: views/tc-configuration.php:15
870
+ msgid "Configure terms and conditions by"
871
+ msgstr ""
872
+
873
+ #: views/tc-configuration.php:21
874
+ msgid "Paste your terms and conditions embed code here"
875
+ msgstr ""
readme.txt CHANGED
@@ -1,103 +1,137 @@
1
- === iubenda - Cookie and Consent Solution for the GDPR & ePrivacy ===
2
  Contributors: iubenda
3
  Donate link:
4
- Tags: cookies, cookie law, cookie policy, cookie banner, privacy policy, cookie consent, privacy, gdpr, eprivacy
5
- Requires at least: 4.0
6
- Requires PHP: 5.2.4
7
  Tested up to: 5.9
8
- Stable tag: 2.5.91
9
  License: MIT License
10
  License URI: http://opensource.org/licenses/MIT
11
 
12
- An All-in-One approach developed by iubenda, which includes functionalities of two powerful solutions that help to make your website GDPR and ePrivacy compliant.
13
-
14
  == Description ==
15
 
16
- This plugin is an All-in-One approach developed by iubenda, which includes functionalities of two powerful solutions (see below) that help to make your website GDPR and ePrivacy compliant. The plugin lets you automate the implementation of ePrivacy (Cookie Law) and GDPR requirements by providing a fully customizable cookie banner, blocking scripts, and by managing all aspects of cookie consent. It also allows you to record, review, and maintain comprehensive GDPR records of consent for your web-forms.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
  == Cookie Solution ==
19
 
20
- This plugin drastically reduces the need for direct interventions in the code of the site by integrating with iubenda’s Cookie Solution. It provides a fully customizable cookie banner, dynamically generates a cookie policy to [match the services in use on your site](https://www.iubenda.com/en/help/19004-how-to-use-the-site-scanner-from-within-the-generator), and, fully manages cookie-related consent including the blocking of the most common widgets and third-party cookies before consent is received in order to comply with the GDPR and ePrivacy.
21
-
22
- **Key features:**
23
-
24
- * The plugin automatically inserts the iubenda code in the head of every page of the site
25
- * Allows you to automatically or manually block scripts that can install cookies prior to consent, without the need of direct intervention on the code
26
- * Allows you to autodetect and limit prior-blocking and cookie consent requests only to users from the EU where this is a legal requirement while running cookies scripts normally in regions where you are still legally allowed to do so.
27
- * Asynchronously re-activates cookie scripts once consent is collected.
28
- * Handles the display of the cookie banner and cookie policy, allowing you to fully customize the banner to match the look and colors of your site if needed
29
- * California Consumer Privacy Act [(CCPA) Support](https://www.iubenda.com/en/help/21165-ccpa-how-to-add-a-notice-of-collection-and-a-do-not-sell-link)
30
- * Saves user preferences about the use of cookies and displays a clean page (without banner) to users who have already provided their consent
31
- * Integrates with IAB’s [Transparency and Consent Framework](https://www.iubenda.com/en/help/7440-enable-preference-management-iab-framework#revenue) (TCF)
32
- * Allows you to provide you users with granular, per-category preference control (e.g. basic functionalities, experience enhancement, targeting & advertising)
33
- * Compatible with Google's Accelerated Mobile Pages (AMP)
34
- * Features an easy-to-use interface for entering custom scripts and iframes
35
- * Detects bots/spiders and serves them a clean page so that your SEO efforts are never compromised
36
-
37
- **The plugin is currently capable of automatically detecting and blocking the following scripts:**
38
-
39
- * Google Analytics
40
- * Google Maps
41
- * Google AdSense
42
- * Google ReCaptcha
43
- * Google Site Search
44
- * Google Tag Manager
45
- * Google oAuth
46
- * Google+ widgets
47
- * Twitter widgets
48
- * Facebook widgets
49
- * Facebook Comments
50
- * YouTube
51
- * Vimeo
52
- * Linkedin widgets
53
- * ShareThis widgets
54
- * Instagram widgets
55
- * AddThis widgets
56
- * Pinterest widgets
57
- * PayPal widgets
58
- * Disqus
59
- * Optimizely
60
- * Neodata
61
- * Criteo
62
- * Outbrain
63
- * Headway
64
- * Codepen
65
- * Freshchat
66
- * Uservoice
67
- * AdRoll
68
- * Olark
69
- * Segment
70
- * Kissmetrics
71
- * Mixpanel
72
- * Pingdom
73
- * Bing
74
- * Elevio
75
 
76
  == Consent Solution ==
77
 
78
- Maintaining valid records of consent is a vital part of privacy compliance in general, and it is specifically required under the GDPR. These records should include a userid, timestamp, consent proof, record of the consenting action, and the legal documents available to the user at the time of consent, among other things. This plugin **is THE most complete solution for recording, sorting and maintaining GDPR records of consent**. The plugin also boasts built-in compatibility with WordPress comment form, Contact Form 7 and WP Forms plugins for your convenience, but can be manually integrated with any type of web-form and can even store consent proofs for consents collected offline (e.g in-store sign-ups) via WP media upload.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
 
80
- **Key features:**
81
 
82
- * The plugin detects and identifies all supported forms that are embedded in the website
83
- * It’s auto-compatible with and allows super easy mapping of Contact Form 7, WP Forms, WordPress comment, Mailchimp for WordPress, Germanized for WooCommerce and WooCommerce checkout forms
84
- * It allows manual integration with any type of web-form
85
- * For each consent, track the form/wording the user was prompted with
86
- * Flexibly upload any form of proof of consent or legal notice, including a PDF if consent was collected offline
87
- * It provides a high granularity: map individual form fields, exclude fields (like password inputs), add legal notices available at the time of consent collection, indicate double opt-in, set preferences and more
88
- * REST HTTP API and JS SDK, to give you total control and how and when consent is stored
89
- * Store multiple preferences for each user (e.g. if you have multiple newsletters or opt-ins)
90
- * Features an easy-to-use interface for entering custom scripts and iframes
91
- * It provides API input field for quick and easy activation
92
 
93
- **Some background information**
94
 
95
- If you potentially have any European users, you must comply with laws like the [GDPR](https://www.iubenda.com/en/help/5428-gdpr-guide#consent) and [ePrivacy](https://www.iubenda.com/en/help/6293-cookie-consent-management-faq). These laws are precise in their requirements and technical implementation can be pretty complicated. We've tried to make this process as painless as possible for website and app owners with our suite of compliance software solutions.
96
- Our Cookie and Consent Solution plugin for WordPress simplifies and manages these compliance requirements within a few clicks. This extension works with the iubenda [Cookie Solution](https://www.iubenda.com/en/cookie-solution) and [Consent Solution](https://www.iubenda.com/en/consent-solution).
 
 
 
 
 
 
97
 
98
- **Which languages does iubenda work in currently?**
99
 
100
- * English
 
 
 
 
 
 
101
  * Italian
102
  * French
103
  * Spanish
@@ -106,50 +140,109 @@ Our Cookie and Consent Solution plugin for WordPress simplifies and manages thes
106
  * Dutch
107
  * Russian
108
 
109
- == Installation ==
110
-
111
- * Search in your WordPress plugins admin panel for “iubenda Cookie and Consent Solution”, install it;
112
- * Once the plugin is installed and activated, go to the Admin Panel → iubenda menu where you can select either the Cookie Solution or Consent Solution (depending on which you’d like to set up first).
113
- * **For the Cookie Solution**, you will be asked to paste your script into that field the script is generated from your iubenda account dashboard when you activate the solution. For more information on how to activate the Cookie Solution, see this article (https://www.iubenda.com/en/help/1177-cookie-solution-getting-started#banner).
114
- * At this point the plugin will begin to show your banner on which displays the legal text, the consent options and your cookie policy (link) to users who visit the site for the first time. No need for other configurations;
115
- * Furthermore, the plugin automatically recognizes and blocks cookies that get installed via an extensive list of services such as the YouTube video player, social widgets (e.g the Facebook Like Box) etc. on your site. The full list is included in the “details” above.
116
- * Important note: Scripts can only be automatically blocked when generated from the server side (therefore processed by PHP via WordPress). Scripts that are added to the page via Javascript after page load must be blocked manually. Thankfully, this is fairly easy to do via the Custom Scripts field in the plugin console. Simply enter the custom script or iframe sources you'd like to block within the field, and click on the save changes button. You can find details, examples and further information [here](https://www.iubenda.com/en/help/1215-cookie-solution-wordpress-plugin-installation-guide#blocking-custom-scripts).
117
- * If you’d like to manually block a specific script using a manual “wrap” method, you can use the following:
118
- `<!--IUB-COOKIE-BLOCK-START-->
119
- <iframe src="...
120
- <img src="...
121
- <!--IUB-COOKIE-BLOCK-END-->`
122
- * For elements installed directly within WordPress posts (as opposed to elements integrated at the template level – example footer.php) there are shortcodes available:
123
- `[iub-cookie-policy]
124
- [/iub-cookie-policy]`
125
- * In case youre querying WordPress via API, you can disable our plugin by using the iub_no_parse=true URL parameter, like this: www.example.com/api/get_recent_posts?iub_no_parse=true (http://www.example.com/api/get_recent_posts?iub_no_parse=true).
126
- * **For the Consent Solution**, you will need to paste in your Consent Solution API key. Once you’ve activated the Consent Solution in your iubenda dashboard, you can find your public API key in your dashboard (https://www.iubenda.com/en/dashboard) at [Your website] > Consent Solution > Embed).
 
127
 
128
  == Frequently Asked Questions ==
129
 
130
- **Where can I find help?**
131
- You can find a dedicated support forum thread here [Uservoice forum](https://support.iubenda.com/support/discussions/forums/42000118028) or we're happy to answer at info@iubenda.com.
132
 
133
- **Do you have more guidance, or a demo?**
134
- Here’s a [quick video](https://iubenda.wistia.com/medias/02ie8av6kt) on what the cookie banner looks like and how you can configure it. More details on how to fully set up the Cookie Solution for wordpress [here](https://www.iubenda.com/en/help/1215-cookie-solution-wordpress-plugin-installation-guide).
135
 
136
- Here’s a [quick look](https://iubenda.wistia.com/medias/fsbr465bku) at the Consent Solution dashboard. More details on how to fully set up the Consent Solution for wordpress [here](https://www.iubenda.com/en/help/13083-consent-solution-wordpress-contact-form-7) .
137
 
138
- **Bug reports**
139
- The best way you can help us is by providing as much information as possible, including the use of [wp_debug](https://wordpress.org/support/article/debugging-in-wordpress/).
140
- We will be very happy to receive feedback here: [Uservoice forum](https://support.iubenda.com/support/discussions/forums/42000115771)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
 
142
- == Screenshots ==
143
 
144
- 1. It's as simple as copy-pasting the code from iubenda into the plugin form.
145
- 2. Simply enter you API key and click on autodetect to see all forms eligible for mapping.
146
- 3. The visual configurator lets you fully customize the look and feel of your banner, wording, and consent collection options.
147
- 4. When clicking on the cookie policy link, the user gets a view of the entire cookie policy, where they ultimately can give their consent.
148
- 5. IAB Transparency and consent framework integrated.
149
- 6. IAB Transparency and consent framework integrated.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
 
151
  == Changelog ==
152
 
 
 
 
 
 
 
153
  = 2.5.91 =
154
  * Bugfix: save CF7 Consent
155
 
@@ -352,7 +445,7 @@ We will be very happy to receive feedback here: [Uservoice forum](https://suppor
352
  = 1.15.4 =
353
  * New: Option to block custom scripts and iframes
354
  * Tweak: Update and extend the list of blocked scripts including Google Site Search, Google oAuth, Linkedin widgets, PayPal widgets, Freshchat, Uservoice
355
- , AdRoll, Olark, Segment, Kissmetrics, Mixpanel, Pingdom, Bing and Elevio
356
 
357
  = 1.15.3 =
358
  * Tweak: Update and extend the list of blocked scripts including Pinterest, AddThis, Disqus, Optimizely, Neodata, Criteo, Outbrain, Headway and Codepen
@@ -549,5 +642,8 @@ We will be very happy to receive feedback here: [Uservoice forum](https://suppor
549
 
550
  == Upgrade Notice ==
551
 
552
- = 2.5.91 =
553
- * Bugfix: save CF7 Consent
 
 
 
1
+ === iubenda | All-in-one Compliance for GDPR / CCPA Cookie Consent + more ===
2
  Contributors: iubenda
3
  Donate link:
4
+ Tags: cookie banner, cookie law, eprivacy, gdpr, ukgdpr, ccpa, caloppa, lgpd, dsgvo, rgpd, pecr
5
+ Requires at least: 5.0
6
+ Requires PHP: 7.0.0
7
  Tested up to: 5.9
8
+ Stable tag: 3.0.0
9
  License: MIT License
10
  License URI: http://opensource.org/licenses/MIT
11
 
 
 
12
  == Description ==
13
 
14
+ More than just a cookie banner. The iubenda plugin is an **all-in-one**, extremely easy to use 360° compliance solution, with text crafted by actual lawyers, that quickly **scans your site and auto-configures to match your specific setup**. It supports the GDPR (DSGVO, RGPD), UK-GDPR, ePrivacy, LGPD, CCPA, CalOPPA, PECR and more.
15
+
16
+ It allows you to:
17
+
18
+ * **⚡️Scan your site and have solutions auto-configured** to match your site's specific needs.
19
+ * 🚀 Easily generate a fully customizable **cookie banner,** **manage cookie consent** and store legally required **GDPR consent proofs** for cookies.
20
+ * Generate a **CCPA notice with working DNSMPI link** as legally required.
21
+ * Activate IABs **TCF to maximize ad earning**.
22
+ * 🚀 Quickly generate a fully customizable **privacy and cookie policy**.
23
+ * **Auto-detect user location and auto-applies the correct data privacy settings** (needed if you have users from multiple regions like the US and the EU).
24
+ * 🚀 Capture, store and manage **GDPR consent records** for your webforms.
25
+ * 🚀 Effortlessly **generate professional Terms and Conditions** to protect you from liabilities and more.
26
+ * **Translate all documents with a single click** (supports 9 languages).
27
+ * Compatible with **Google’s Accelerated Mobile Pages** (AMP)
28
+
29
+ And of course, basic set-up is completely free.
30
+
31
+ [[video](https://iubenda.wistia.com/medias/iejo0ldhkt)]
32
+
33
+
34
+ == Features ==
35
+
36
+ This all-in-one plugin lets you integrate all iubenda compliance solutions in a single install and basic set-up is completely free.
37
+
38
+ **⚡️** The plugin **scans your site and auto-configures everything** based on your site's specific needs.
39
+
40
+ **⭐ All our solutions are fully responsive (perfect for all screen sizes) and WCAG Level AAA Compliant.**
41
+
42
+ They’re auto-updated when the law changes so that they’re always up-to-date and our built-in site scanner runs periodic scans on your site and alerts you if it detects something that should be added to your compliance documents.
43
+
44
+ **All solutions support the GDPR (DSGVO, RGPD), UK-GDPR, ePrivacy, LGPD, CCPA, CalOPPA, PECR and more.**
45
+
46
 
47
  == Cookie Solution ==
48
 
49
+ Includes cookie banner/notice, and cookie consent management (blocking scripts until consent is collected as legally required). Free basic setup and full CCPA support.
50
+
51
+ * Easy and guided set-up: **Analyzes your site and auto-configures everything** to make set-up as easy as possible.
52
+ * **Fully customizable cookie banner** - change functionality, design, location, colors, add your logo and more.
53
+ * Asynchronously re-activates cookie scripts once consent is collected (**no page reload needed**).
54
+ * Lightning-fast: **won’t affect page performance**.
55
+ * **Auto-detects and blocks a wide range of 3rd party script**s like Google Analytics, Google Maps, Facebook and Instagram widgets, Youtube, Twitter, PayPal, Disqus, Outbrain, AdRoll, Kissmetrics, Freshchat and more.
56
+ * Allows you to provide you users with **granular, per-category preference control** (e.g. basic functionalities, experience enhancement, targeting & advertising)
57
+ * **Google Consent Mode** support.
58
+ * Integrates with IAB’s [Transparency and Consent Framework](https://www.iubenda.com/en/help/7440-enable-preference-management-iab-framework#revenue) (**TCF**) to maximize ad revenue (needed if your site uses ad networks like Google ads and more)
59
+ * Compatible with **Google’s Accelerated Mobile Pages** (AMP)
60
+ * Allows you to autodetect and **limit prior-blocking and cookie consent requests only to users from the EU** – where this is a legal requirement – while running cookies scripts normally in regions where you are still legally allowed to do so.
61
+ * Features an **easy-to-use interface for entering custom scripts** and iframes
62
+ * Cookie database feature allows you to auto-set **cookie lifetime information**.
63
+ * **Display CCPA notice and opt-out link as required by the** [**California Consumer Privacy Act**](https://www.iubenda.com/en/help/21165-ccpa-how-to-add-a-notice-of-collection-and-a-do-not-sell-link)
64
+ * Provides **cookie consent analytics** for high-traffic sites.
65
+ * **Detects bots/spiders** and serves them a clean page **so that your SEO efforts are never compromised**
66
+
67
+
68
+
69
+ == Privacy and Cookie Policy Generator ==
70
+
71
+ This solution lets you generate professional privacy and cookie policies **in minutes**.
72
+
73
+
74
+ * Super **easy interface, guided process, fully customizable**
75
+ * All **legal text written by actual legal professionals**
76
+ * Quick select from **over 1900 clauses or create custom clauses**
77
+ * Activate **cookie policy in a single click**
78
+ * Site Scanner to quickly **detect which services/ clauses you need to add to your policie**s.
79
+ * **One-click translation**. 9 languages supported: English-US, English-UK, Italian French, Spanish, German, Portuguese (Brazilian), Russian, Dutch.
80
+ * One-click activation for **country/ region-specific text**.
81
+ * Compatible with **Google’s Accelerated Mobile Pages** (AMP)
82
+ * Documents are **remotely updated when legal requirements change**
83
+ * Manage documents for **multiple sites from a single dashboard**
84
+ * **White label option** allows you to seamlessly integrate your privacy policy text into the body of your webpage
85
+
86
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
 
88
  == Consent Solution ==
89
 
90
+ Collect consent, document opt-ins and opt-outs via your web forms. This solution smoothly integrates with your consent collection forms to auto-create legally required GDPR and LGPD consent records.
91
+
92
+ **About Legal requirements and Consent Records**
93
+ These records should include a userid, timestamp, consent proof, record of the consenting action, and the legal documents available to the user at the time of consent, [among other things](https://www.iubenda.com/en/help/5428-gdpr-guide#records-of-consent).
94
+
95
+ This plugin is **THE most complete solution for recording, sorting and maintaining GDPR & LGPD records of consent**.
96
+
97
+ The plugin also boasts built-in compatibility with WordPress comment form, Contact Form 7 and WP Forms plugins for your convenience, but can be manually integrated with any type of web-form and can even store consent proofs for consents collected offline (e.g in-store sign-ups) via WP media upload.
98
+
99
+
100
+ * It’s **auto-compatible with and allows super easy mapping** of Contact Form 7, WP Forms, WordPress comment, Mailchimp for WordPress, Germanized for WooCommerce and WooCommerce checkout forms
101
+ * Also allows manual integration with **any type of web-form**
102
+ * For each consent, **track the form/wording the user was prompted** with at the time of the consent collection
103
+ * Accurate **timestamping and recording of consenting action**
104
+ * Flexibly **upload any form of proof of consent or legal notice, including a PDF if consent was collected offline**
105
+ * It provides a **high granularity**: map individual form fields, exclude fields (like password inputs), add legal notices available at the time of consent collection, indicate double opt-in, set preferences and more
106
+ * REST **HTTP API and JS SDK, to give you total control** and how and when consent is stored
107
+ * Store **multiple preferences for each user** (e.g. if you have multiple newsletters or opt-ins)
108
+ * Features an **easy-to-use interface for entering custom scripts and iframes**
109
+ * It provides **API input field for quick and easy activation**
110
 
111
+ == Terms and Conditions ==
112
 
113
+ Create your terms and conditions in minutes.
 
 
 
 
 
 
 
 
 
114
 
115
+ Customizable from hundreds of combinations, available in 9 languages, powerful and precise — our solution is capable of handling even the most complex, individual scenarios. Optimized for e-commerce, marketplace, SaaS, apps and more.
116
 
117
+ * Easy, **guided set-up**
118
+ * Expertly crafted at the hands of our **international legal team**
119
+ * Pre-defined scenarios modules for everything from basic **disclaimers to copyright licenses, account terminations rules, product-comparison, age-related disclaimers, virtual currency,** and more.
120
+ * Plug-and-go **integrations for popular eCommerce solutions like Shopify, Wix, Squarespace, Weebly, WooCommerce, PrestaShop** and more
121
+ * **One-click translation** (9 languages supported EN-US, EN-UK, IT, FR, ES, DE, PT-BR, RU, NL)
122
+ * Compatible with **Google’s Accelerated Mobile Pages** (AMP)
123
+ * Manage documents for **multiple sites from a single dashboard**
124
+ * **White label option** allows you to seamlessly integrate your privacy policy text into the body of your webpage
125
 
126
+ == About iubenda ==
127
 
128
+ We help companies all over the world to keep their websites and apps compliant with international privacy laws for optimal peace of mind. [More here](https://www.iubenda.com/).
129
+
130
+ == Languages ==
131
+
132
+ **Which languages do iubenda work in currently?**
133
+
134
+ * English US and UK
135
  * Italian
136
  * French
137
  * Spanish
140
  * Dutch
141
  * Russian
142
 
143
+ == Support & Updates ==
144
+
145
+ All our solutions and plugins are **regularly updated and well maintained** to ensure that you’re always protected.
146
+
147
+ You can access our friendly support in multiple languages (currently EN, IT, DE, FR, PT-BR) via [info@iubenda.com](mailto:info@iubenda.com), our [onsite chat](https://www.iubenda.com/) *(just click the green Help button on the right side of the page)*.
148
+
149
+ **Other links:**
150
+
151
+ * [Documentation](https://www.iubenda.com/en/help)
152
+ * [Feedback & Support forum](https://support.iubenda.com/)
153
+
154
+ == Screenshots ==
155
+
156
+ 1. Scan and Automate your website's legal requirements
157
+ 2. Easily customize your cookie banner & consent settings to suit your branding and needs
158
+ 3. Cookie banner? Yes, but not only. Meet all the requirements
159
+ 4. If you're already one of 1 M+ iubenda users you can integrate all solutions with WordPress in minutes
160
+ 5. Capture, store and manage GDPR consent records for your webforms
161
+ 6. Auto-detects and blocks all the most common trackers prior to consent
162
 
163
  == Frequently Asked Questions ==
164
 
165
+ = Do you have a Knowledge base or documentation? =
 
166
 
167
+ Our extensive documentation makes it easy for you to learn all you need to know about compliance and how to use iubenda’s products on your site or app. **[You can access it here](https://www.iubenda.com/en/help)**. You can also visit our support forum [here](https://support.iubenda.com/support/home).
 
168
 
 
169
 
170
+ = How do I know which laws apply to me and what I need to comply with? =
171
+
172
+ A good rule of thumb is to always comply with the laws of the region where you are based as well as the region or country in which the users you target are based.
173
+
174
+ 📌 However, for an even easier, more specific way to tell which laws apply to you, you can[simply take this 1-minute quiz](https://www.iubenda.com/en/help#quiz).
175
+
176
+
177
+ = Do I really need a cookie banner or cookie notice? =
178
+
179
+ If you’re based in Europe – including the UK – or target European users, and your website uses [cookies or trackers](https://www.iubenda.com/en/help/22419-how-to-identify-the-cookies-used-by-your-website) (which it most likely does), then, yes, you do need a cookie notice.
180
+
181
+
182
+ = What is the GDPR and UK-GDPR (DSGVO & RGPD) =
183
+
184
+ GDPR stands for General Data Protection Regulation (Regulation (EU) 2016/679). The GDPR specifies how personal data should be lawfully processed (including how it’s collected, used, protected or interacted with in general).
185
+
186
+ While it was still an EU member state, the UK was very instrumental in the creation of the GDPR and therefore, Post-Brexit has adopted the UK-GDPR – which currently is essentially the same as the European GDPR.
187
+
188
+ DSGVO & RGPD are, respectively, the German and Spanish translations of the English acronym of the General Data Protection Regulation (GDPR).
189
+
190
+ [Learn more about the GDPR here.](https://www.iubenda.com/en/help/5428-gdpr-guide)
191
+
192
+ = What is the ePrivacy or Cookie Law? =
193
+
194
+ In effect since 2002, the ePrivacy Directive (Cookie Law) was created to put guidelines in place for electronic privacy, including email marketing and cookie usage.
195
+
196
+ Under the Cookie law, organizations that target users from the EU must **inform users about data collection activities** and give them the option to **choose whether it’s allowed or not**.
197
 
 
198
 
199
+ This means that if **your site/app** (or **any third-party service** used by your site/app) uses cookies or similar technologies, you must first obtain valid consent **prior** to the installation of those cookies, except where they fall into [the exempt category](https://www.iubenda.com/en/help/5525#exemptions).
200
+ In practice, you’ll need to:
201
+
202
+ * show a **cookie banner** at the user’s first visit;
203
+ * implement a **cookie policy** that contains all required information;
204
+ * allow the user to provide or refuse **consent;**
205
+ * block cookie/ tracker scripts from running until consent is provided.
206
+
207
+ You can learn more about [how the ePrivacy and GDPR interact in regards to cookies and trackers here](https://www.iubenda.com/en/help/5525-cookies-gdpr-requirements).
208
+
209
+ = What is PECR =
210
+
211
+ The Privacy and Electronic Communications Regulations 2003(PECR) is the UK's implementation of the EU's ePrivacy directive and set's out rules for electronic privacy
212
+
213
+ = What are the CCPA and CalOPPA =
214
+
215
+ California’s most well known Privacy Laws are some of the most robust in the United States. They are both relevant to you if you likely have users that are based in the state of California.
216
+
217
+ **California Online Privacy Protection Act (CalOPPA) - since 2002**
218
+ Law requires commercial websites and services to have a privacy policy.
219
+ The document:
220
+
221
+ * Must clearly state what info is collected and who it's shared with.
222
+ * Must disclose how a business’s website or online service responds to Do Not Track signals from Web browsers.
223
+ * Must include the effective date of the Privacy Policy and more.
224
+
225
+ **California Consumer Protection Act (CCPA)**
226
+
227
+ * Grants users additional rights such as the right to be informed and the right to access information you’ve collected about them - but perhaps, most relevant to marketing is the right to Opt-out.
228
+ * Under the CCPA, users have the right to opt-out of any processing that can be considered a *sale* of their data. Sale, in this context, is quite broad and simply means *sharing for any profit- monetary or otherwise*.
229
+
230
+ ***Note that in the case of minors, they are granted the right to Opt-in.** *[More about the CCPA here.](https://www.iubenda.com/en/help/19133-ccpa-compliance-guide)
231
+
232
+ = What is the LGPD? =
233
+
234
+ The Brazilian General Data Protection Law, the ***Lei Geral de Proteção de Dados Pessoais*** (LGPD) can be considered as Brazil’s answer to the GDPR – with the Brazilian law aligning with the European Regulation in many ways, while differing in others. [You can learn more about it here](https://www.iubenda.com/en/help/26706-lgpd-guide).
235
+
236
+ * * *
237
 
238
  == Changelog ==
239
 
240
+ = 3.0.0 =
241
+ * New: Support Privacy Policy
242
+ * New: Support Terms and Conditions
243
+ * New: Generate your cookie solution with few clicks
244
+ * New: Use Radar to scan current website
245
+
246
  = 2.5.91 =
247
  * Bugfix: save CF7 Consent
248
 
445
  = 1.15.4 =
446
  * New: Option to block custom scripts and iframes
447
  * Tweak: Update and extend the list of blocked scripts including Google Site Search, Google oAuth, Linkedin widgets, PayPal widgets, Freshchat, Uservoice
448
+ , AdRoll, Olark, Segment, Kissmetrics, Mixpanel, Pingdom, Bing and Elevio
449
 
450
  = 1.15.3 =
451
  * Tweak: Update and extend the list of blocked scripts including Pinterest, AddThis, Disqus, Optimizely, Neodata, Criteo, Outbrain, Headway and Codepen
642
 
643
  == Upgrade Notice ==
644
 
645
+ = 3.0.0 =
646
+ * New: Support Privacy Policy
647
+ * New: Support Terms and Conditions
648
+ * New: Generate your cookie solution with few clicks
649
+ * New: Use Radar to scan current website
views/cons-configuration.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/header.php'; ?>
2
+ <div class="main-box">
3
+
4
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/siteInfo.php'; ?>
5
+
6
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/breadcrumb.php'; ?>
7
+ <form class="ajax-form-to-options">
8
+ <input hidden name="iubenda_section_name" value="iubenda_consent_solution">
9
+ <input hidden name="iubenda_section_key" value="cons">
10
+ <input hidden name="action" value="ajax_save_options">
11
+ <input hidden name="_redirect" value="<?php echo esc_url(add_query_arg(['view' => 'products-page'], iubenda()->base_url)) ?>">
12
+ <div class="p-4 p-lg-5 text-gray">
13
+
14
+ <p><?php _e('Activate <strong>Consent Solution</strong> on our website in your iubenda dashboard and paste here the <strong>API key</strong> to integrate it on your website.', 'iubenda') ?></p>
15
+ <div class="d-flex align-items-center">
16
+ <div class="steps flex-shrink mr-3">1</div>
17
+ <p class="text-bold"> <?php _e('Activate & Configure Consent Solution by', 'iubenda') ?>
18
+ <a target="_blank" href="<?php echo iubenda()->settings->links['flow_page']; ?>" class="link-underline text-gray-lighter"> <?php _e('clicking here', 'iubenda') ?></a>
19
+ </p>
20
+ </div>
21
+ <div class="d-flex align-items-center">
22
+ <div class="steps flex-shrink mr-3">2</div>
23
+ <p class="text-bold"> <?php _e('Paste your public API key here', 'iubenda') ?>
24
+ </p>
25
+ </div>
26
+
27
+ <div class="subOptions">
28
+ <div class="paste-api-form" tabindex="0">
29
+ <input class="paste-api-input" id="public_api_key" name="iubenda_consent_solution[public_api_key]" type="text" placeholder="<?php _e('Your iubenda Javascript library public API key', 'iubenda'); ?>" value="<?php echo array_get(iubenda()->options['cons'], 'public_api_key') ? array_get(iubenda()->options['cons'], 'public_api_key') : false ?>" required>
30
+ <button type="submit" id="public_api_button" class="btn btn-xs btn-green-secondary">
31
+ <span class="button__text"><?php _e('Confirm API', 'iubenda') ?></span>
32
+ </button>
33
+ </div>
34
+ </div>
35
+
36
+ <div class="text-right mt-2">
37
+ <a target="_blank" href="<?php echo iubenda()->settings->links['how_generate_cons']; ?>" class="link link-helper"><span class="tooltip-icon mr-2">?</span><?php _e('Where can I find this code?', 'iubenda') ?></a>
38
+ </div>
39
+
40
+ <div id="public-api-key-div" class="<?php echo array_get(iubenda()->options['cons'], 'public_api_key') ?: 'hidden'; ?>">
41
+ <div class="d-flex align-items-center">
42
+ <div class="steps flex-shrink mr-3">3</div>
43
+ <p class="text-bold">
44
+ <?php _e('Add forms', 'iubenda') ?>
45
+ </p>
46
+ </div>
47
+ <div class="ml-3 pl-4 mb-5">
48
+ <div id="auto-detect-parent-div">
49
+ <section id="auto-detect-forms">
50
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/auto_detect_forms.php'; ?>
51
+ </section>
52
+ </div>
53
+ <a tabindex="-1" href="<?php echo esc_url( add_query_arg( array( 'view' => 'cons-configuration', 'action' => 'autodetect' ), iubenda()->base_url ) ) ?>" class="btn btn-xs btn-gray-outline mt-2 auto-detect-forms"><?php _e('Auto-detect forms', 'iubenda') ?></a>
54
+ </div>
55
+ </div>
56
+
57
+ </div>
58
+ <hr>
59
+ <div class="p-4 d-flex justify-content-end">
60
+ <input class="btn btn-gray-lighter btn-sm mr-2" type="button" value="<?php _e('Cancel', 'iubenda') ?>" onclick="window.location.href = '<?php echo esc_url(add_query_arg(array('view' => 'products-page'), iubenda()->base_url)) ?>'"/>
61
+ <button type="submit" class="btn btn-green-primary btn-sm" value="Save" name="save">
62
+ <span class="button__text"><?php _e('Save settings', 'iubenda') ?></span>
63
+ </button>
64
+ </div>
65
+ </form>
66
+ </div>
67
+
68
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/footer.php'; ?>
views/cons-single-form.php ADDED
@@ -0,0 +1,285 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/header.php'; ?>
2
+ <div class="main-box">
3
+
4
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/siteInfo.php'; ?>
5
+
6
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/breadcrumb.php'; ?>
7
+
8
+ <form id="postbox-container-2" action="options.php" method="post">
9
+ <?php
10
+ settings_fields( $this->tabs['cons']['key'] );
11
+ do_settings_sections( $this->tabs['cons']['key'] );
12
+ add_settings_section( 'iubenda_consent_form', __( 'Field Mapping', 'iubenda' ), array( $this, 'iubenda_consent_form' ), 'iubenda_consent_solution' );
13
+
14
+ $form_id = ! empty( $_GET['form_id'] ) ? absint( $_GET['form_id'] ) : 0;
15
+ $form = ! empty( $form_id ) ? iubenda()->forms->get_form( $form_id ) : false;
16
+
17
+ if ( ! $form )
18
+ return;
19
+
20
+ $status = isset($form->post_status) && in_array($form->post_status, array_keys(iubenda()->forms->statuses)) ? esc_attr($form->post_status) : 'publish';
21
+ $subject = isset($form->form_subject) && is_array($form->form_subject) ? array_map('esc_attr', $form->form_subject) : array();
22
+ $preferences = isset($form->form_preferences) && is_array($form->form_preferences) ? array_map('esc_attr', $form->form_preferences) : array();
23
+ $exclude = isset($form->form_exclude) && is_array($form->form_exclude) ? array_map('esc_attr', $form->form_exclude) : array();
24
+ $legal_notices = isset($form->form_legal_notices) && is_array($form->form_legal_notices) ? array_map('esc_attr', $form->form_legal_notices) : array();
25
+
26
+ $available_fields = array();
27
+
28
+ if (!empty($form->form_fields) && is_array($form->form_fields)) {
29
+ foreach ($form->form_fields as $index => $form_field) {
30
+ if (is_array($form_field)) {
31
+ // print_r( $form_field );
32
+ $available_fields[] = $form_field['label'] . ' (' . $form_field['type'] . ')';
33
+ } else {
34
+ $available_fields[] = $form_field;
35
+ }
36
+ }
37
+ }
38
+ echo '
39
+ <input type="hidden" value="'.$form_id.'" name="form_id">
40
+ <div class="px-4 px-lg-5">
41
+ <div class="py-5">
42
+ <div class="d-block d-lg-flex justify-content-between mb-4">
43
+ <div class="d-block d-lg-flex align-items-center text-center text-lg-left">
44
+ <h3 class="m-0 mb-4">'.__( 'Map fields', 'iubenda' ).'</h3>
45
+ </div>
46
+ <div class="d-block d-lg-flex align-items-center text-center text-lg-right">
47
+ <div class="misc-pub-section misc-pub-post-status p-0">
48
+ <label for="status">' . __( 'Status', 'iubenda' ) . ':</label>
49
+ <div id="status-select" class="" style="margin: 3px 0 0;">
50
+ <select id="status" name="status">';
51
+ foreach ( iubenda()->forms->statuses as $name => $label ) {
52
+ echo '<option value="' . $name . '"' . selected( $form->post_status, $name, true ) . '>' . $label . '</option>';
53
+ }
54
+ echo '
55
+ </select>
56
+ </div>
57
+ </div>
58
+ </div>
59
+ </div>
60
+
61
+ <h4 class="m-0 mb-2">' . __( 'Subject fields', 'iubenda' ) . ' <span class="required">(required)</span></h4>
62
+ <p class="mb-3 description">' . __( 'Subject fields allow you to store a series of identifying values about your individual subjects/users. Please map the subject field with the corresponding form fields where applicable.', 'iubenda' ) . '</p>
63
+ <table class="widefat mb-4 subject-table">
64
+ <thead>
65
+ <td class="label">' . __( 'Subject field', 'iubenda' ) . '</td>
66
+ <td class="label">' . __( 'Form field', 'iubenda' ) . '</td>
67
+ </thead>
68
+ <tbody>';
69
+ foreach ( $this->subject_fields as $field_name => $field_label ) {
70
+ $selected = isset( $subject[$field_name] ) ? $subject[$field_name] : '';
71
+ $none = $field_name == 'id' ? __( 'Autogenerated', 'iubenda' ) : __( 'None', 'iubenda' );
72
+
73
+ echo '
74
+ <tr class="subject-field options-field">
75
+ <td>' . $field_name . ' (' . $field_label . ')' . '</td>
76
+ <td>
77
+ <select class="subject-fields-select select-' . $field_name . '" name="subject[' . $field_name . ']">
78
+ <option value="" ' . selected( $selected, '', false ) . '>' . $none . '</option>';
79
+ if ( ! empty( $form->form_fields ) ) {
80
+ foreach ( $form->form_fields as $index => $form_field ) {
81
+ // get field data
82
+ $form_field_value = is_array( $form_field ) ? $index : $form_field;
83
+ $form_field_label = is_array( $form_field ) ? $form_field['label'] . ' (' . $form_field['type'] . ')' : $form_field;
84
+ $form_field_selected = is_array( $form_field ) ? $index : $form_field;
85
+
86
+ echo '<option value="' . $form_field_value . '" ' . selected( $selected, $form_field_selected, false ) . '>' . $form_field_label . '</option>';
87
+ }
88
+ }
89
+ echo '
90
+ </select>
91
+ </td>
92
+ </tr>';
93
+ }
94
+ echo '
95
+ </tbody>
96
+ </table>
97
+ <br>
98
+ <h4 class="m-0 mb-2">' . __( 'Preferences fields', 'iubenda' ) . '</h4>
99
+ <p class="mb-3 description">' . __( 'Preferences fields allow you to store a record of the various opt-ins points at which the user has agreed or given consent, such as fields for agreeing to terms and conditions, newsletter, profiling, etc.', 'iubenda' ) . '</p>
100
+ <table class="widefat mb-4 preferences-table">
101
+ <thead>
102
+ <td class="label">' . __( 'Preferences field', 'iubenda' ) . '</td>
103
+ <td class="label">' . __( 'Form field', 'iubenda' ) . '</td>
104
+ </thead>
105
+ <tbody>';
106
+ echo '
107
+ <tr id="preferences-field-template" class="template-field" style="display: none;">
108
+ <td><input type="text" class="preferences-inputs regular-text" value="" name="preferences[__PREFERENCE_ID__][field]" placeholder="' . __( 'Enter field name', 'iubenda' ) . '" disabled/></td>
109
+ <td>
110
+ <select class="preferences-inputs preferences-fields-select select-' . $field_name . '" name="preferences[__PREFERENCE_ID__][value]" disabled>';
111
+ if ( ! empty( $form->form_fields ) ) {
112
+ foreach ( $form->form_fields as $index => $form_field ) {
113
+ // get field data
114
+ $form_field_value = is_array( $form_field ) ? $index : $form_field;
115
+ $form_field_label = is_array( $form_field ) ? $form_field['label'] . ' (' . $form_field['type'] . ')' : $form_field;
116
+
117
+ echo '<option value="' . $form_field_value . '">' . $form_field_label . '</option>';
118
+ }
119
+ }
120
+ echo '
121
+ </select>
122
+ <a href="javascript:void(0)" class="remove-preferences-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a>
123
+ </td>
124
+ </tr>';
125
+ if ($preferences) {
126
+ $index = 0;
127
+
128
+ foreach ($preferences as $field_name => $field_value) {
129
+ $selected = isset($preferences[$field_name]) ? $preferences[$field_name] : '';
130
+
131
+ echo '
132
+ <tr class="preferences-field options-field">
133
+ <td><input type="text" class="regular-text" value="' . $field_name . '" name="preferences[' . $index . '][field]" placeholder="' . __('Enter field name', 'iubenda') . '" /></td>
134
+ <td>
135
+ <select class="preferences-fields-select select-' . $field_name . '" name="preferences[' . $index . '][value]">';
136
+ if (!empty($form->form_fields)) {
137
+ foreach ($form->form_fields as $index => $form_field) {
138
+ // get field data
139
+ $form_field_value = is_array($form_field) ? $index : $form_field;
140
+ $form_field_label = is_array($form_field) ? $form_field['label'] . ' (' . $form_field['type'] . ')' : $form_field;
141
+ $form_field_selected = is_array($form_field) ? $index : $form_field;
142
+
143
+ echo '<option value="' . $form_field_value . '" ' . selected($selected, $form_field_selected, false) . '>' . $form_field_label . '</option>';
144
+ }
145
+ }
146
+ echo '
147
+ </select>
148
+ <a href="javascript:void(0)" class="remove-preferences-field button-secondary" title="' . __('Remove', 'iubenda') . '">-</a>
149
+ </td>
150
+ </tr>';
151
+ $index++;
152
+ }
153
+ }
154
+ echo '
155
+ <tr class="submit-field"><td colspan="2"><a href="javascript:void(0)" class="add-preferences-field button-secondary">' . __( 'Add New Preference', 'iubenda' ) . '</a></td></tr>
156
+ </tbody>
157
+ </table>
158
+ <br>
159
+ <h4 class="m-0 mb-2">' . __( 'Exclude fields', 'iubenda' ) . '</h4>
160
+ <p class="mb-3 description">' . __( 'Exclude fields allow you to create a list of fields that you would like to exclude from your Consent Solution recorded proofs (for e.g. password or other fields not related to the consent).', 'iubenda' ) . '</p>
161
+
162
+ <table class="widefat mb-4 exclude-table">
163
+ <thead>
164
+ <td class="label">' . __( 'Exclude field', 'iubenda' ) . '</td>
165
+ <td class="label"></td>
166
+ </thead>
167
+ <tbody>';
168
+ echo '
169
+ <tr id="exclude-field-template" class="template-field" style="display: none;">
170
+ <td>
171
+ <select class="exclude-fields-select select-' . $field_name . '" name="exclude[__EXCLUDE_ID__][field]" disabled>';
172
+ if ( ! empty( $form->form_fields ) ) {
173
+ foreach ( $form->form_fields as $index => $form_field ) {
174
+ // get field data
175
+ $form_field_value = is_array( $form_field ) ? $index : $form_field;
176
+ $form_field_label = is_array( $form_field ) ? $form_field['label'] . ' (' . $form_field['type'] . ')' : $form_field;
177
+
178
+ echo '<option value="' . $form_field_value . '">' . $form_field_label . '</option>';
179
+ }
180
+ }
181
+ echo '
182
+ </select>
183
+ <a href="javascript:void(0)" class="remove-exclude-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a>
184
+ </td>
185
+ </tr>';
186
+ if ( $exclude ) {
187
+ $index = 0;
188
+ foreach ( $exclude as $index => $field_name ) {
189
+ $selected = isset( $exclude[$index] ) ? $exclude[$index] : '';
190
+
191
+ echo '
192
+ <tr class="exclude-field options-field">
193
+ <td>
194
+ <select class="exclude-fields-select select-' . $field_name . '" name="exclude[' . $index . '][field]">';
195
+ if ( ! empty( $form->form_fields ) ) {
196
+ foreach ( $form->form_fields as $index => $form_field ) {
197
+ // get field data
198
+ $form_field_value = is_array( $form_field ) ? $index : $form_field;
199
+ $form_field_label = is_array( $form_field ) ? $form_field['label'] . ' (' . $form_field['type'] . ')' : $form_field;
200
+ $form_field_selected = is_array( $form_field ) ? $index : $form_field;
201
+
202
+ echo '<option value="' . $form_field_value . '" ' . selected( $selected, $form_field_selected, false ) . '>' . $form_field_label . '</option>';
203
+ }
204
+ }
205
+ echo '
206
+ </select>
207
+ <a href="javascript:void(0)" class="remove-exclude-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a>
208
+ </td>
209
+ <td></td>
210
+ </tr>';
211
+
212
+ $index++;
213
+ }
214
+ }
215
+ echo '
216
+ <tr class="submit-field"><td colspan="2"><a href="javascript:void(0)" class="add-exclude-field button-secondary">' . __( 'Add New Exclude', 'iubenda' ) . '</a></td></tr>
217
+ </tbody>
218
+ </table>
219
+
220
+ <br>
221
+ <h4 class="m-0 mb-2">' . __( 'Legal documents', 'iubenda' ) . '</h4>
222
+ <p class="mb-3 description">' . __( 'In general, it\'s important that you declare which legal documents are being agreed upon when each consent is collected. However, if you use iubenda for your legal documents, it is *required* that you identify the documents by selecting them here.', 'iubenda' ) . '</p>
223
+ <table class="widefat mb-4 legal_notices-table">
224
+ <thead>
225
+ <td class="label">' . __( 'Identifier', 'iubenda' ) . '</td>
226
+ <td class="label"></td>
227
+ </thead>
228
+ <tbody>';
229
+
230
+ // default identifiers
231
+ foreach ( $this->legal_notices as $index => $field_name ) {
232
+ echo '
233
+ <tr class="legal_notices-field default-field">
234
+ <td>' . ( $index === 0 ? '<p class="description">' . __( 'Please select each legal document available on your site.', 'iubenda' ) . '</p>' : '' ) . '<label for="legal_notices-default-field=' . $index . '"><input id="legal_notices-default-field=' . $index . '" type="checkbox" value="' . $field_name . '" name="legal_notices[' . $index . '][field]"' . checked( in_array( $field_name, $legal_notices, true ), true, false ) . 'placeholder="' . __( 'Enter field name', 'iubenda' ) . '" />' . $field_name . '</label></td>
235
+ <td></td>
236
+ </tr>';
237
+ }
238
+
239
+ $index++;
240
+
241
+ // custom identifiers
242
+ echo '
243
+ <tr id="legal_notices-field-template" class="template-field" style="display: none;">
244
+ <td><input type="text" value="" name="legal_notices[__LEGAL_NOTICE_ID__][field]" placeholder="' . __( 'Enter field name', 'iubenda' ) . '" class="regular-text legal-notices-inputs" disabled /> <a href="javascript:void(0)" class="remove-legal_notices-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a></td>
245
+ <td></td>
246
+ </tr>';
247
+
248
+ echo '
249
+ <tr>
250
+ <td colspan="2"><p class="description" style="margin-bottom: 0;">' . __( 'Alternatively, you may add your own custom document identifiers.', 'iubenda' ) . '</p></td>
251
+ </tr>';
252
+
253
+ if ( $legal_notices ) {
254
+ foreach ( $legal_notices as $field_name ) {
255
+ if ( in_array( $field_name, $this->legal_notices, true ) )
256
+ continue;
257
+
258
+ echo '
259
+ <tr class="legal_notices-field options-field">
260
+ <td><input type="text" class="regular-text" value="' . $field_name . '" name="legal_notices[' . $index . '][field]" placeholder="' . __( 'Enter field name', 'iubenda' ) . '" /> <a href="javascript:void(0)" class="remove-legal_notices-field button-secondary" title="' . __( 'Remove', 'iubenda' ) . '">-</a></td>
261
+ <td></td>
262
+ </tr>';
263
+
264
+ $index++;
265
+ }
266
+ }
267
+ echo '
268
+ <tr class="submit-field"><td colspan="2"><a href="javascript:void(0)" class="add-legal_notices-field button-secondary">' . __( 'Add New Document', 'iubenda' ) . '</a></td></tr>';
269
+ echo '
270
+ </tbody>
271
+ </table>
272
+ </div>
273
+ </div>';
274
+ ?>
275
+ <hr>
276
+ <div class="p-4 d-flex justify-content-end">
277
+ <input class="btn btn-gray-lighter btn-sm mr-2" type="button" value="<?php _e('Cancel', 'iubenda') ?>" onclick="window.location.href = '<?php echo esc_url(add_query_arg(array('view' => 'cons-configuration'), iubenda()->base_url)) ?>'"/>
278
+ <button type="submit" class="btn btn-green-primary btn-sm" value="Save" name="save">
279
+ <span class="button__text"><?php _e('Save settings', 'iubenda') ?></span>
280
+ </button>
281
+ </div>
282
+ </form>
283
+ </div>
284
+
285
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/footer.php'; ?>
views/cs-configuration.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/header.php'; ?>
2
+ <div class="main-box">
3
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/siteInfo.php'; ?>
4
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/breadcrumb.php'; ?>
5
+ <form class="ajax-form-to-options">
6
+ <input hidden name="iubenda_section_name" value="iubenda_cookie_law_solution">
7
+ <input hidden name="iubenda_section_key" value="cs">
8
+ <input hidden name="action" value="ajax_save_options">
9
+ <input hidden name="_redirect" value="<?php echo esc_url(add_query_arg(['view' => 'products-page'], iubenda()->base_url)) ?>">
10
+ <div>
11
+ <div class="p-4 p-lg-5 cookie-tab-settings">
12
+ <div class="container-cookie-tabs tabs tabs--style1">
13
+
14
+ <ul class="tabs__nav">
15
+ <li class="tabs__nav__item active" data-target="general-settings" data-group="main-settings"><?php _e('General settings', 'iubenda') ?></li>
16
+ <li class="tabs__nav__item" data-target="plugin-settings" data-group="main-settings"><?php _e('Plugin settings', 'iubenda') ?></li>
17
+ </ul>
18
+
19
+ <div data-target="general-settings" class="tabs__target active" data-group="main-settings">
20
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/csGeneralSettings.php'; ?>
21
+ </div>
22
+
23
+ <div data-target="plugin-settings" class="tabs__target plugin-settings-tab" data-group="main-settings">
24
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/csPluginSettings.php'; ?>
25
+ </div>
26
+
27
+ </div>
28
+ </div>
29
+ </div>
30
+ <hr>
31
+ <div class="p-4 d-flex justify-content-end">
32
+ <input class="btn btn-gray-lighter btn-sm mr-2" type="button" value="<?php _e('Cancel', 'iubenda') ?>" onclick="window.location.href = '<?php echo esc_url(add_query_arg(array('view' => 'products-page'), iubenda()->base_url)) ?>'"/>
33
+ <button type="submit" class="btn btn-green-primary btn-sm" value="Save" name="save">
34
+ <span class="button__text"><?php _e('Save settings', 'iubenda') ?></span>
35
+ </button>
36
+ </div>
37
+ </form>
38
+ </div>
39
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/modals/modal_ops_embed_invalid.php'; ?>
40
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/footer.php'; ?>
views/frontpage.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/header.php'; ?>
2
+ <div class="main-box main-box__bg text-center">
3
+ <div id="frontpage-main-box" class="p-5">
4
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/frontpage_main_box.php'; ?>
5
+ </div>
6
+ <hr>
7
+ <div class="welcome-screen-footer p-5">
8
+ <h3 class="text-md text-normal m-0 mb-3"><?php _e("Let's configure your website for compliance.", 'iubenda') ?></h3>
9
+ <a class="btn btn-green-primary btn-lg show-modal" data-modal-name="#modal-setup-screen" href="javascript:void(0)"><?php _e('Help me get compliant!', 'iubenda') ?></a>
10
+ </div>
11
+ </div>
12
+
13
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/footer.php'; ?>
14
+ <div id="modal-setup-screen" class="modal">
15
+ <div class="modal__window modal__window--md p-4 p-lg-5">
16
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/modals/modal_sync.php'; ?>
17
+ </div>
18
+ </div>
19
+
20
+ <!-- Modal pp created-->
21
+ <div id="modal_pp_created" class="modal">
22
+ <div class="modal__window modal__window--md p-4 p-lg-5">
23
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/modals/modal_pp_created.php'; ?>
24
+ </div>
25
+ </div>
26
+
27
+ <!-- Modal Almost There -->
28
+ <div id="modal-have-existing-products" class="modal modal--xs">
29
+ <div class="modal__window modal__window--md p-4 p-lg-5">
30
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/modals/modal_almost_there.php'; ?>
31
+ </div>
32
+ </div>
33
+
34
+ <!-- Modal Select language -->
35
+ <div id="modal-select-language" class="modal modal--xs">
36
+ <div class="modal__window modal__window--md p-4 p-lg-5">
37
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/modals/modal_select_language.php'; ?>
38
+ </div>
39
+ </div>
40
+
41
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/modals/modal_no_website_found.php'; ?>
42
+ <script type="text/javascript" src="https://cdn.iubenda.com/quick_generator/loader.js"></script>
views/integrate-setup.php ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/header.php'; ?>
2
+ <form class="ajax-form">
3
+ <input hidden name="action" value="integrate_setup">
4
+ <input hidden name="_redirect" value="<?php echo esc_url(add_query_arg(['view' => 'products-page'], iubenda()->base_url)) ?>">
5
+ <input hidden name="iubenda_cookie_law_solution[configuration_type]" value="simplified">
6
+ <div class="main-box">
7
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/siteInfo.php'; ?>
8
+
9
+ <div class="p-3 m-3">
10
+ <?php if(iubenda()->settings->print_notices()): ?>
11
+ <div class="p-3 m-3">
12
+ <?php iubenda()->settings->print_notices() ?>
13
+ </div>
14
+ <?php endif; ?>
15
+
16
+ <div class="radio-toggle">
17
+ <div class="switch">
18
+ <input type="checkbox" name="cookie_law" id="toggleAddCookieBanner" class="section-checkbox-control" data-section-name="#section-add-cookie-banner" checked/>
19
+ <label for="toggleAddCookieBanner"></label>
20
+ </div>
21
+ <span><?php _e('Add a cookie banner', 'iubenda') ?></span>
22
+ </div>
23
+ <section id="section-add-cookie-banner">
24
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/csSimplifiedConfiguration.php'; ?>
25
+
26
+ <div class="my-5">
27
+ <label class="checkbox-regular">
28
+ <input type="checkbox" class="mr-2 section-checkbox-control" name="iubenda_cookie_law_solution[amp_support]" value="1" checked data-section-name="#amp_support"/>
29
+ <span><?php _e('Enable Google AMP support', 'iubenda') ?> <a target="_blank" href="<?php echo iubenda()->settings->links["enable_amp_support"]; ?>" class="ml-1 tooltip-icon">?</a></span>
30
+ </label>
31
+ <section id="amp_support" class="subOptions my-2">
32
+ <h4><?php _e('Select the iubenda AMP configuration file location.', 'iubenda') ?></h4>
33
+ <div class="mb-2 d-flex flex-wrap align-items-center">
34
+ <label class="radio-regular mr-4">
35
+ <input type="radio" name="iubenda_cookie_law_solution[amp_source]" value="local" class="mr-2 section-radio-control" data-section-name="#auto_generated_conf_file" data-section-group=".amp_configuration_file" checked>
36
+ <span><?php _e('Auto-generated configuration file', 'iubenda') ?></span>
37
+ </label>
38
+ <label class="mr-4 radio-regular text-xs">
39
+ <input type="radio" name="iubenda_cookie_law_solution[amp_source]" value="remote" class="mr-2 section-radio-control" data-section-name="#custom_conf_file" data-section-group=".amp_configuration_file">
40
+ <span><?php _e('Custom configuration file', 'iubenda') ?></span>
41
+ </label>
42
+ </div>
43
+
44
+ <section id="auto_generated_conf_file" class="text-xs text-gray amp_configuration_file">
45
+ <div class="notice notice--general mt-2 p-3 d-flex flex-wrap align-items-center">
46
+ <?php
47
+ if (empty(iubenda()->options['cs']['amp_template_done'])) {
48
+ echo '
49
+ <p class="description">' . _e('No file available. Save changes to generate iubenda AMP configuration file.', 'iubenda') . '</p>';
50
+ } else {
51
+ ?>
52
+ <table class="table">
53
+ <tbody>
54
+ <?php
55
+ // multilang support
56
+ if (iubenda()->multilang && !empty(iubenda()->languages)) {
57
+ foreach (iubenda()->languages as $lang_id => $lang_name) {
58
+ if(!array_get(iubenda()->options['cs']['amp_template_done'], $lang_id, false) ?: false){
59
+ continue;
60
+ }
61
+ ?>
62
+ <tr>
63
+ <td><p class="text-bold"><?php echo $lang_name ?></p></td>
64
+ <td>
65
+ <a href="<?php echo iubenda()->AMP->get_amp_template_url($lang_id) ?>" target="_blank"><?php echo iubenda()->AMP->get_amp_template_url($lang_id) ?></a>
66
+ </td>
67
+ </tr>
68
+ <?php
69
+ }
70
+ } else {
71
+ ?>
72
+ <tr>
73
+ <td><p class="text-bold"><?php _e('Default language', 'iubenda') ?></p></td>
74
+ <td>
75
+ <a href="<?php echo iubenda()->AMP->get_amp_template_url() ?>" target="_blank"><?php echo iubenda()->AMP->get_amp_template_url() ?></a>
76
+ </td>
77
+ </tr>
78
+ <?php
79
+ }
80
+ }
81
+ ?>
82
+ </tbody>
83
+ </table>
84
+ </div>
85
+ <p class="px-3 mx-4"><?php _e('Seeing the AMP cookie notice when testing from Google but not when visiting your AMP pages directly?', 'iubenda') ?> <a target="_blank" href="<?php echo iubenda()->settings->links["amp_support"]; ?>" class="link-underline"><?php _e('Learn how to fix it', 'iubenda') ?></a></p>
86
+ </section>
87
+ <section id="custom_conf_file" class="text-xs text-gray amp_configuration_file <?php echo array_get(iubenda()->options['cs'], 'amp_source') == 'remote' ?: 'hidden' ?>">
88
+ <table class="table">
89
+ <tbody>
90
+ <?php
91
+ $languages = (iubenda()->multilang && !empty(iubenda()->languages)) ? iubenda()->languages : ['default' => __('Default language', 'iubenda')];
92
+ foreach ($languages as $lang_id => $lang_name) {
93
+ ?>
94
+ <tr>
95
+ <td><label class="text-bold" for="iub_amp_template-<?php echo $lang_id; ?>"><?php echo $lang_name; ?></label></td>
96
+ <td><input id="iub_amp_template-<?php echo $lang_id; ?>" type="text" class="regular-text" name="iubenda_cookie_law_solution[amp_template][<?php echo $lang_id; ?>]" value="<?php echo array_get(iubenda()->options['cs'], "amp_template.{$lang_id}") ?>"/></td>
97
+ </tr>
98
+ <?php } ?>
99
+ </tbody>
100
+ </table>
101
+ </section>
102
+ </section>
103
+ </div>
104
+
105
+ <div class="my-5">
106
+ <label class="checkbox-regular">
107
+ <input type="checkbox" name="iubenda_cookie_law_solution[parse]" value="1" class="mr-2 section-checkbox-control" data-section-name="#iub_parser_engine_container" checked>
108
+ <span><?php _e('Automatically block scripts detected by the plugin', 'iubenda') ?> <a target="_blank" href="<?php echo iubenda()->settings->links['automatic_block_scripts']; ?>" class="ml-1 tooltip-icon">?</a></span>
109
+ </label>
110
+ <section id="iub_parser_engine_container" class="subOptions">
111
+ <div class="mb-3 d-flex flex-wrap align-items-center">
112
+ <label class="radio-regular mr-4">
113
+ <input type="radio" name="iubenda_cookie_law_solution[parser_engine]" value="new" class="mr-2 section-radio-control" checked>
114
+ <span><?php _e('Primary', 'iubenda') ?></span>
115
+ </label>
116
+ <label class="mr-4 radio-regular text-xs">
117
+ <input type="radio" name="iubenda_cookie_law_solution[parser_engine]" value="default" class="mr-2 section-radio-control">
118
+ <span><?php _e('Secondary', 'iubenda') ?></span>
119
+ </label>
120
+ </div>
121
+ <p class="px-3 mx-4"><?php _e("Select Parsing Engine", 'iubenda') ?></p>
122
+ <br>
123
+ <div class="mb-2 d-flex flex-wrap align-items-center">
124
+ <label class="checkbox-regular">
125
+ <input type="checkbox" name="iubenda_cookie_law_solution[skip_parsing]" value="1" class="mr-2 section-checkbox-control" data-section-name="#section-block-script">
126
+ <span><?php _e('Leave scripts untouched on the page if the user has already given consent', 'iubenda') ?></span>
127
+ </label>
128
+ <p class="px-3 mx-4"><?php _e("Enable this option to improve performance <strong>only</strong> if your site does <strong>not</strong> use a cache system or a cache plugin and if you're <strong>not</strong> collecting per-category consent. If you're in doubt, keep this setting disabled", 'iubenda') ?></p>
129
+ </div>
130
+ </section>
131
+ </div>
132
+ </section>
133
+
134
+ <div class="radio-toggle">
135
+ <div class="switch">
136
+ <input type="checkbox" name="privacy_policy" id="toggleAddPrivacyButton" class="section-checkbox-control" data-section-name="#section-privacy-policy-button" checked/>
137
+
138
+ <label for="toggleAddPrivacyButton"></label>
139
+ </div>
140
+ <span><?php _e('Add the privacy policy button', 'iubenda') ?></span>
141
+ </div>
142
+ <section id="section-privacy-policy-button">
143
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/buttonStyle.php'; ?>
144
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/buttonPosition.php'; ?>
145
+ </section>
146
+
147
+ </div>
148
+
149
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/integrateFooter.php'; ?>
150
+
151
+ </div>
152
+ </form>
153
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/footer.php'; ?>
views/partials/alert.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(isset($notices)){ ?>
2
+ <div class="alert alert--<?php echo ( $notice_type === 'error' ? 'failure' : 'success' ); ?> is-dismissible m-4">
3
+ <div class="alert__icon p-4">
4
+ <img src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/banner_<?php echo ( $notice_type === 'error' ? 'failure' : 'success' ); ?>.svg">
5
+ </div>
6
+ <?php
7
+ foreach ( $notices[$notice_type] as $key => $notice ) {
8
+ echo '<p class="text-regular">'.wp_kses_post( $notice ).'</p>';
9
+ }
10
+ ?>
11
+ <button class="btn-close mr-3 notice-dismiss">×</button>
12
+ </div>
13
+ <?php }?>
views/partials/auto_detect_forms.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $cons_page_configuration = get_option('iubenda_consent_solution');
3
+
4
+ if ($cons_page_configuration && array_get($cons_page_configuration, 'public_api_key')){
5
+
6
+ $form_id = ! empty( $_GET['form_id'] ) ? absint( $_GET['form_id'] ) : 0;
7
+ $form = ! empty( $form_id ) ? iubenda()->forms->get_form( $form_id ) : false;
8
+
9
+ $supported_forms = iubenda()->forms->sources;
10
+
11
+ // list screen
12
+ if ( ! class_exists( 'WP_List_Table' ) )
13
+ include_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
14
+
15
+ include_once( IUBENDA_PLUGIN_PATH . '/includes/forms-list-table.php' );
16
+
17
+ $list_table = new iubenda_List_Table_Forms();
18
+
19
+ echo '
20
+ <div id="iubenda-consent-forms">';
21
+ $list_table->views();
22
+ $list_table->prepare_items();
23
+ $list_table->display();
24
+
25
+ echo '
26
+ </div>';
27
+ }else{
28
+ ?>
29
+ <p><?php _e('This section lists the forms available for field mapping. The plugin currently supports & detects: WordPress Comment, Contact Form 7, WooCommerce Checkout and WP Forms.', 'iubenda') ?></p>
30
+
31
+ <?php
32
+
33
+ }
views/partials/bannerPosition.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $positions = [
4
+ 'float-top-left',
5
+ 'float-top-center',
6
+ 'float-top-right',
7
+ 'float-bottom-left',
8
+ 'float-bottom-center',
9
+ 'float-bottom-right',
10
+ 'full-top',
11
+ 'full-bottom',
12
+ 'float-center'
13
+ ];
14
+
15
+ ?>
16
+ <div class="cs_banner_choices mb-5 mb-lg-0">
17
+
18
+ <div class="cs_banner_choices__position mr-4 pr-4">
19
+
20
+ <h4><?php _e('Position', 'iubenda') ?></h4>
21
+
22
+ <div class="position-select">
23
+
24
+ <div id="dropdown">
25
+
26
+ <?php foreach($positions as $v): ?>
27
+ <input type="radio" class="position-select-radio" name="iubenda_cookie_law_solution[simplified][position]" value="<?php echo $v; ?>" id="<?php echo $v ; ?>" <?php
28
+ checked( $v, array_get(iubenda()->options['cs'], 'simplified.position'), true);
29
+ ?> >
30
+ <label for="<?php echo $v ; ?>">
31
+ <div>
32
+ <div class="<?php echo str_replace('-', ' ', $v) ; ?>"><span></span></div>
33
+ </div>
34
+ </label>
35
+ <?php endforeach; ?>
36
+
37
+ <div class="overlaybox p-0">
38
+ <div class="p-3">
39
+ <label class="checkbox-regular">
40
+ <input type="checkbox" class="mr-2" name="iubenda_cookie_law_solution[simplified][background_overlay]" <?php echo checked( true, (bool) array_get(iubenda()->options['cs'], 'simplified.background_overlay'), false); ?>>
41
+ <span><?php _e('Background-overlay', 'iubenda') ?></span>
42
+ </label>
43
+ </div>
44
+ </div>
45
+
46
+ </div>
47
+
48
+ </div>
49
+
50
+ </div>
51
+
52
+ </div>
views/partials/bannerStyle.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="cs_banner_theme">
2
+ <h4><?php _e('Theme', 'iubenda') ?></h4>
3
+ <div class="scrollable gap-fixer">
4
+ <fieldset class="theme-select d-flex">
5
+ <div class="mr-2">
6
+ <label class="radio-theme radio-theme-dark">
7
+ <input type="radio" name="iubenda_cookie_law_solution[simplified][banner_style]" value="dark" <?php echo checked( 'dark', array_get(iubenda()->options['cs'], 'simplified.banner_style'), false) ?>>
8
+ </label>
9
+ <p class="text-xs text-center"><?php _e('Dark', 'iubenda') ?></p>
10
+ </div>
11
+ <div class="mr-2">
12
+ <label class="radio-theme radio-theme-light">
13
+ <input type="radio" name="iubenda_cookie_law_solution[simplified][banner_style]" value="light" <?php echo checked( 'light', array_get(iubenda()->options['cs'], 'simplified.banner_style'), false) ?>>
14
+ </label>
15
+ <p class="text-xs text-center"><?php _e('Light', 'iubenda') ?></p>
16
+ </div>
17
+ </fieldset>
18
+ </div>
19
+ </div>
views/partials/breadcrumb.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <ul class="breadcrumb text-gray">
2
+ <li class="breadcrumb__item"><a href="<?php echo add_query_arg( array('view' => 'products-page'), get_permalink() ); ?>"><?php _e('Products', 'iubenda') ?></a></li>
3
+ <?php
4
+ foreach($pageLabels as $pageLabel){
5
+ if(end($pageLabels) === $pageLabel){
6
+ $textStyle = 'text-bold';
7
+ }else{
8
+ $textStyle = '';
9
+ }
10
+
11
+ $href = array_get($pageLabel, 'href') ?? 'javascript:void(0)';
12
+ echo "<li class='breadcrumb__item {$textStyle}'><a href='{$href}'>".array_get($pageLabel, 'title')."</a></li>";
13
+ }
14
+ ?>
15
+ </ul>
16
+
17
+ <?php if(iubenda()->settings->print_notices()): ?>
18
+ <div class="p-3 m-3">
19
+ <?php iubenda()->settings->print_notices() ?>
20
+ </div>
21
+ <?php endif; ?>
views/partials/buttonPosition.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <h4><?php _e('Button position', 'iubenda') ?></h4>
2
+ <div class="mb-2 d-flex align-items-center flex-wrap">
3
+ <label class="radio-regular mr-3">
4
+ <input type="radio" name="iubenda_privacy_policy_solution[button_position]" value="automatic" class="mr-2 section-radio-control" data-section-group=".pp_button_position" data-section-name="#pp_button_position_automatically" <?php checked( 'automatic', array_get(iubenda()->options['pp'], 'button_position')) ?>>
5
+ <span><?php _e('Add to the footer automatically', 'iubenda') ?></span>
6
+ </label>
7
+ <label class="mr-4 radio-regular text-xs">
8
+ <input type="radio" name="iubenda_privacy_policy_solution[button_position]" value="manual" class="mr-2 section-radio-control" data-section-group=".pp_button_position" data-section-name="#pp_button_position_manually" <?php checked( 'manual', array_get(iubenda()->options['pp'], 'button_position')) ?>>
9
+
10
+ <span><?php _e('Integrate manually', 'iubenda') ?></span>
11
+ </label>
12
+ </div>
13
+ <?php
14
+ global $wp_registered_sidebars;
15
+
16
+ // If sidebar-1 not registered or not activated
17
+ if (!boolval(array_get($wp_registered_sidebars, 'sidebar-1'))) {
18
+ ?>
19
+ <section id="pp_button_position_automatically" class="pp_button_position <?php echo array_get(iubenda()->options['pp'], 'button_position') == 'automatic' ?:'hidden' ; ?>">
20
+ <div class="notice notice--warning mt-2 mb-4 p-3 d-flex align-items-center text-warning text-xs">
21
+ <img class="mr-2" src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/warning-icon.svg">
22
+ <p><?php echo sprintf( __( 'We were not able to add a "Legal" widget to the footer as your theme is not compatible, you can position the "Legal" widget manually from <a href="%s" target="_blank">here</a>.', 'iubenda' ), esc_url( admin_url( 'widgets.php' ) ) ) ?></p>
23
+ </div>
24
+ </section>
25
+ <?php
26
+ }
27
+ ?>
28
+ <section id="pp_button_position_manually" class="pp_button_position <?php echo array_get(iubenda()->options['pp'], 'button_position') == 'manual' ?:'hidden' ; ?>">
29
+ <div class="mb-3 p-0">
30
+ <div class="my-5">
31
+ <h4><?php _e('HTML', 'iubenda') ?></h4>
32
+ <fieldset class="paste_embed_code tabs tabs--style2">
33
+ <ul class="tabs__nav">
34
+ <?php foreach(iubenda()->languages as $k => $v): ?>
35
+ <li class="tabs__nav__item <?php echo $k == iubenda()->lang_default?'active':false ; ?>" data-target="tab-<?php echo $k ; ?>" data-group="language-tabs">
36
+ <?php echo strtoupper($k) ; ?>
37
+ </li>
38
+ <?php endforeach; ?>
39
+ </ul>
40
+ <?php
41
+ $privacyPolicyGenerator = new PrivacyPolicyGenerator();
42
+ $globalOptions = get_option('iubenda_global_options');
43
+
44
+ $languages = (new ProductHelper())->get_languages();
45
+ foreach($languages as $lang_id => $v):
46
+ $code = array_get(iubenda()->options['pp'], "code_{$lang_id}");
47
+
48
+ // if there is no embed code saved generate embed code
49
+ if(!$code){
50
+ $publicIds = array_get($globalOptions, 'public_ids');
51
+ $publicId = array_get($publicIds, $lang_id);
52
+
53
+ $code = $privacyPolicyGenerator->handle($lang_id, $publicId, 'white');
54
+ }
55
+ $code = html_entity_decode(iubenda()->parse_code($code));
56
+ ?>
57
+ <div data-target="tab-<?php echo $lang_id ; ?>" class="tabs__target <?php echo $lang_id == iubenda()->lang_default || $lang_id == 'default'? 'active': '' ; ?>" data-group="language-tabs">
58
+ <textarea readonly class='form-control text-sm m-0 iub-pp-code' placeholder='<?php _e('Your embed code', 'iubenda') ?>' rows='4'><?php echo $code ?></textarea>
59
+ </div>
60
+ <?php endforeach; ?>
61
+
62
+ </fieldset>
63
+ </div>
64
+ </div>
65
+ <div class="mb-3 p-0">
66
+ <div class="my-5">
67
+ <h4><?php _e('Shortcode', 'iubenda') ?></h4>
68
+ <p><?php _e('A shortcode is a tiny bit of code that allows embedding interactive elements or creating complex page layouts with a minimal effort.<br>Just copy and paste the shortcode where you want the button to appear.', 'iubenda') ?></p>
69
+ <p></p>
70
+ <fieldset class="paste_embed_code">
71
+ <div class="notice notice--general mt-2 mb-4 p-3 d-flex text-lg-bold">
72
+ <span>[iub-pp-button]</span>
73
+ </div>
74
+ </fieldset>
75
+ </div>
76
+ </div>
77
+ </section>
views/partials/buttonStyle.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <h4><?php _e('Button style', 'iubenda') ?></h4>
2
+ <div class="scrollable gap-fixer">
3
+ <div class="button-style mb-3 d-flex">
4
+ <div class="m-1 mr-2">
5
+ <label class="radio-btn-style radio-btn-style-light">
6
+ <input type="radio" class="update-button-style" name="iubenda_privacy_policy_solution[button_style]" value="white" <?php echo checked( 'white', array_get(iubenda()->options['pp'], 'button_style'), false) ?>>
7
+ <div>
8
+ <div class="btn-fake"></div>
9
+ </div>
10
+ <p class="text-xs text-center"><?php _e('Light', 'iubenda') ?></p>
11
+ </label>
12
+ </div>
13
+ <div class="m-1 mr-2">
14
+ <label class="radio-btn-style radio-btn-style-dark">
15
+ <input type="radio" class="update-button-style" name="iubenda_privacy_policy_solution[button_style]" value="black" <?php echo checked( 'black', array_get(iubenda()->options['pp'], 'button_style'), false) ?>>
16
+ <div>
17
+ <div class="btn-fake"></div>
18
+ </div>
19
+ <p class="text-xs text-center"><?php _e('Dark', 'iubenda') ?></p>
20
+ </label>
21
+ </div>
22
+ </div>
23
+ </div>
views/partials/csGeneralSettings.php ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="pt-4">
2
+ <div class="tabs">
3
+ <h3 class="text-bold text-gray text-md mb-0"><?php _e('Configuration', 'iubenda') ?></h3>
4
+ <div class="scrollable gap-fixer">
5
+ <fieldset class="radio-large">
6
+ <div class="d-flex tabs__nav">
7
+ <?php
8
+ if (array_get(iubenda()->options['global_options'], 'site_id')) {
9
+ ?>
10
+ <div class="m-1 mr-2 tabs__nav__item <?php echo array_get(iubenda()->options['cs'], 'configuration_type') == 'simplified' ?: 'active' ?>" data-target="configuration-type-simplified-tab" data-group="configuration-type">
11
+ <input class="section-radio-control cs-configuration-type" type="radio" id="radioSimplified" name="iubenda_cookie_law_solution[configuration_type]" value="simplified" <?php checked('simplified', array_get(iubenda()->options['cs'], 'configuration_type')) ?>>
12
+ <label for="radioSimplified">
13
+ <div class=" d-flex align-items-center">
14
+ <svg xmlns="http://www.w3.org/2000/svg" width="29" height="27" viewBox="0 0 29 27">
15
+ <title><?php _e('Simplified', 'iubenda') ?></title>
16
+ <g fill="none" fill-rule="evenodd" transform="translate(1 1)">
17
+ <rect width="25" height="11" stroke="currentColor" rx="5.5"/>
18
+ <rect width="25" height="11" y="14" fill="currentColor" stroke="currentColor" rx="5.5"/>
19
+ <rect width="7" height="7" x="2" y="2" fill="currentColor" rx="3.5"/>
20
+ <rect width="7" height="7" x="16" y="16" fill="#FFF" rx="3.5"/>
21
+ <rect width="25" height="11" x="3" y="2" fill="currentColor" fill-opacity=".119" rx="5.5"/>
22
+ </g>
23
+ </svg>
24
+ <span href="#tab-3" class="ml-2"><?php _e('Simplified', 'iubenda') ?></span>
25
+ </div>
26
+ </label>
27
+ </div>
28
+ <?php
29
+ }
30
+ ?>
31
+ <div class="m-1 mr-2 tabs__nav__item <?php echo array_get(iubenda()->options['cs'], 'configuration_type') == 'manual' ?: 'active' ?>" data-target="configuration-type-manual-tab" data-group="configuration-type">
32
+ <input type="radio" id="radioManual" class="section-radio-control cs-configuration-type" name="iubenda_cookie_law_solution[configuration_type]" value="manual" <?php checked( 'manual', array_get(iubenda()->options['cs'], 'configuration_type') ) ?>>
33
+ <label for="radioManual">
34
+ <div class="d-flex align-items-center">
35
+ <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25">
36
+ <title><?php _e('Manual embed', 'iubenda') ?></title>
37
+ <g fill="none" fill-rule="evenodd" transform="translate(1 1)">
38
+ <rect width="21" height="21" x="3" y="3" fill="currentColor" fill-opacity=".119" rx="2" />
39
+ <rect width="21" height="21" stroke="currentColor" rx="2" />
40
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M5.818 6.406l5.657 4-5.657 4M11.5 14.5h4" />
41
+ </g>
42
+ </svg>
43
+ <span href="#tab-4" class="ml-2"><?php _e('Manual embed', 'iubenda') ?></span>
44
+ </div>
45
+ </label>
46
+ </div>
47
+
48
+ </div>
49
+ </fieldset>
50
+ </div>
51
+ <div class="my-4 subOptions">
52
+ <?php
53
+ if (array_get(iubenda()->options['global_options'], 'site_id')) {
54
+ ?>
55
+ <section class="tabs__target <?php echo array_get(iubenda()->options['cs'], 'configuration_type') != 'simplified' ?: 'active' ?>" data-target="configuration-type-simplified-tab" data-group="configuration-type">
56
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/csSimplifiedConfiguration.php'; ?>
57
+ </section>
58
+ <?php
59
+ }
60
+ ?>
61
+ <section class="tabs__target <?php echo array_get(iubenda()->options['cs'], 'configuration_type') != 'manual' ?: 'active' ?>" data-target="configuration-type-manual-tab" data-group="configuration-type">
62
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/csManualConfiguration.php'; ?>
63
+ </section>
64
+ </div>
65
+ </div>
66
+
67
+ <div class="d-flex align-items-center pt-3">
68
+ <label class="checkbox-regular">
69
+ <input type="checkbox" class="mr-2 section-checkbox-control" name="iubenda_cookie_law_solution[amp_support]" value="1" <?php checked( true, (bool) iubenda()->options['cs']['amp_support'] ) ?> data-section-name="#amp_support"/>
70
+ <span><?php _e('Enable Google AMP support', 'iubenda') ?> <a target="_blank" href="<?php echo iubenda()->settings->links["enable_amp_support"]; ?>" class="ml-1 tooltip-icon">?</a></span>
71
+ </label>
72
+ </div>
73
+ <section id="amp_support" class="subOptions my-2 <?php echo (bool) iubenda()->options['cs']['amp_support'] ?: 'hidden' ?>">
74
+ <h4><?php _e('Select the iubenda AMP configuration file location.', 'iubenda') ?></h4>
75
+ <div class="mb-2 d-flex flex-wrap align-items-center">
76
+ <label class="radio-regular mr-4">
77
+ <input type="radio" name="iubenda_cookie_law_solution[amp_source]" value="local" class="mr-2 section-radio-control" data-section-name="#auto_generated_conf_file" data-section-group=".amp_configuration_file" <?php checked( 'local', array_get(iubenda()->options['cs'], 'amp_source')) ?>>
78
+ <span><?php _e('Auto-generated configuration file', 'iubenda') ?></span>
79
+ </label>
80
+ <label class="mr-4 radio-regular text-xs">
81
+ <input type="radio" name="iubenda_cookie_law_solution[amp_source]" value="remote" class="mr-2 section-radio-control" data-section-name="#custom_conf_file" data-section-group=".amp_configuration_file" <?php checked( 'remote', array_get(iubenda()->options['cs'], 'amp_source')) ?>>
82
+ <span><?php _e('Custom configuration file', 'iubenda') ?></span>
83
+ </label>
84
+ </div>
85
+
86
+ <section id="auto_generated_conf_file" class="text-xs text-gray amp_configuration_file <?php echo array_get(iubenda()->options['cs'], 'amp_source') == 'local' ?: 'hidden' ?>">
87
+ <div class="notice notice--general mt-2 p-3 d-flex flex-wrap align-items-center">
88
+ <?php
89
+
90
+ if (empty(iubenda()->options['cs']['amp_template_done'])) {
91
+ echo '
92
+ <p class="description">' . _e('No file available. Save changes to generate iubenda AMP configuration file.', 'iubenda') . '</p>';
93
+ } else {
94
+ ?>
95
+ <table class="table">
96
+ <tbody>
97
+ <?php
98
+ // multilang support
99
+ if (iubenda()->multilang && !empty(iubenda()->languages)) {
100
+ foreach (iubenda()->languages as $lang_id => $lang_name) {
101
+ if(!array_get(iubenda()->options['cs']['amp_template_done'], $lang_id, false) ?: false){
102
+ continue;
103
+ }
104
+ ?>
105
+ <tr>
106
+ <td><p class="text-bold"><?php echo $lang_name ?></p></td>
107
+ <td>
108
+ <a href="<?php echo iubenda()->AMP->get_amp_template_url($lang_id) ?>" target="_blank"><?php echo iubenda()->AMP->get_amp_template_url($lang_id) ?></a>
109
+ </td>
110
+ </tr>
111
+ <?php
112
+ }
113
+ } else {
114
+ ?>
115
+ <tr>
116
+ <td><p class="text-bold"><?php _e('Default language', 'iubenda') ?></p></td>
117
+ <td>
118
+ <a href="<?php echo iubenda()->AMP->get_amp_template_url() ?>" target="_blank"><?php echo iubenda()->AMP->get_amp_template_url() ?></a>
119
+ </td>
120
+ </tr>
121
+ <?php
122
+ }
123
+ }
124
+ ?>
125
+ </tbody>
126
+ </table>
127
+ </div>
128
+ <p class="px-3 mx-4"><?php _e('Seeing the AMP cookie notice when testing from Google but not when visiting your AMP pages directly?', 'iubenda') ?> <a target="_blank" href="<?php echo iubenda()->settings->links["amp_support"]; ?>" class="link-underline"><?php _e('Learn how to fix it', 'iubenda') ?></a></p>
129
+ </section>
130
+ <section id="custom_conf_file" class="text-xs text-gray amp_configuration_file <?php echo array_get(iubenda()->options['cs'], 'amp_source') == 'remote' ?: 'hidden' ?>">
131
+ <table class="table">
132
+ <tbody>
133
+ <?php
134
+ $languages = (new ProductHelper())->get_languages();
135
+ foreach ($languages as $lang_id => $lang_name){
136
+ ?>
137
+ <tr>
138
+ <td><label class="text-bold" for="iub_amp_template-<?php echo $lang_id; ?>"><?php echo $lang_name; ?></label></td>
139
+ <td><input id="iub_amp_template-<?php echo $lang_id; ?>" type="text" class="regular-text" name="iubenda_cookie_law_solution[amp_template][<?php echo $lang_id; ?>]" value="<?php echo array_get(iubenda()->options['cs'], "amp_template.{$lang_id}") ?>"/></td>
140
+ </tr>
141
+ <?php } ?>
142
+ </tbody>
143
+ </table>
144
+ </section>
145
+ </section>
146
+ </div>
views/partials/csManualConfiguration.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="text-gray">
2
+ <p><?php _e('Configure your cookie banner on our website and paste here the embed code to integrate it to your website.', 'iubenda') ?></p>
3
+ <div class="d-flex align-items-center">
4
+ <div class="steps flex-shrink mr-2">1</div>
5
+ <p class="text-bold"> <?php _e('Configure cookie banner by', 'iubenda') ?>
6
+ <a target="_blank" href="<?php echo iubenda()->settings->links['flow_page']; ?>" class="link-underline text-gray-lighter"> <?php _e('clicking here', 'iubenda') ?></a>
7
+ </p>
8
+ </div>
9
+ <div class="d-flex align-items-center">
10
+ <div class="steps flex-shrink mr-2">2</div>
11
+ <p class="text-bold"> <?php _e('Paste your cookie solution embed code here', 'iubenda') ?>
12
+ </p>
13
+ </div>
14
+ <div class="pl-5 mt-3">
15
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/languagesTabs.php'; ?>
16
+ </div>
17
+ </div>
views/partials/csPluginSettings.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="py-5">
2
+ <label class="checkbox-regular">
3
+ <input type="checkbox" name="iubenda_cookie_law_solution[parse]" value="1" class="mr-2 section-checkbox-control" data-section-name="#iub_parser_engine_container" <?php checked( true, (bool) iubenda()->options['cs']['parse'] ) ?>>
4
+ <span><?php _e('Automatically block scripts detected by the plugin', 'iubenda') ?> <a target="_blank" href="<?php echo iubenda()->settings->links['automatic_block_scripts']; ?>" class="ml-1 tooltip-icon">?</a></span>
5
+ </label>
6
+ <section id="iub_parser_engine_container" class="subOptions <?php echo (bool) iubenda()->options['cs']['parse']?: 'hidden' ?>">
7
+ <div class="mb-3 d-flex flex-wrap align-items-center">
8
+ <label class="radio-regular mr-4">
9
+ <input type="radio" name="iubenda_cookie_law_solution[parser_engine]" value="new" class="mr-2 section-radio-control" <?php checked( 'new', iubenda()->options['cs']['parser_engine'] ) ?>>
10
+ <span><?php _e('Primary', 'iubenda') ?></span>
11
+ </label>
12
+ <label class="mr-4 radio-regular text-xs">
13
+ <input type="radio" name="iubenda_cookie_law_solution[parser_engine]" value="default" class="mr-2 section-radio-control" <?php checked( 'default', iubenda()->options['cs']['parser_engine'] ) ?>>
14
+ <span><?php _e('Secondary', 'iubenda') ?></span>
15
+ </label>
16
+ </div>
17
+ <p class="px-3 mx-4"><?php _e("Select Parsing Engine", 'iubenda') ?></p>
18
+ <br>
19
+ <div class="mb-2 d-flex flex-wrap align-items-center">
20
+ <label class="checkbox-regular">
21
+ <input type="checkbox" name="iubenda_cookie_law_solution[skip_parsing]" value="1" class="mr-2 section-checkbox-control" data-section-name="#section-block-script" <?php checked( true, (bool) iubenda()->options['cs']['skip_parsing'] ) ?>>
22
+ <span><?php _e('Leave scripts untouched on the page if the user has already given consent', 'iubenda') ?></span>
23
+ </label>
24
+ <p class="px-3 mx-4"><?php _e("Enable this option to improve performance <strong>only</strong> if your site does <strong>not</strong> use a cache system or a cache plugin and if you're <strong>not</strong> collecting per-category consent. If you're in doubt, keep this setting disabled", 'iubenda') ?></p>
25
+ </div>
26
+ </section>
27
+ <label class="checkbox-regular">
28
+ <input type="checkbox" class="mr-2" name="iubenda_cookie_law_solution[ctype]" value="1" <?php checked( true, (bool) iubenda()->options['cs']['ctype'] ) ?>>
29
+ <span><?php _e('Restrict the plugin to run only for requests that have "Content-type: text / html" (recommended)', 'iubenda') ?></span>
30
+ </label>
31
+ <label class="checkbox-regular">
32
+ <input type="checkbox" class="mr-2" name="iubenda_cookie_law_solution[output_feed]" value="1" <?php checked( true, (bool) iubenda()->options['cs']['output_feed'] ) ?>>
33
+ <span><?php _e('Do not run the plugin inside the RSS feed (recommended)', 'iubenda') ?></span>
34
+ </label>
35
+ <label class="checkbox-regular">
36
+ <input type="checkbox" class="mr-2" name="iubenda_cookie_law_solution[output_post]" value="1" <?php checked( true, (bool) iubenda()->options['cs']['output_post'] ) ?>>
37
+ <span><?php _e('Do not run the plugin on POST requests (recommended)', 'iubenda') ?></span>
38
+ </label>
39
+ <label class="checkbox-regular">
40
+ <input type="checkbox" class="mr-2" name="iubenda_cookie_law_solution[deactivation]" value="1" <?php checked( true, (bool) iubenda()->options['cs']['deactivation'] ) ?>>
41
+ <span><?php _e('Delete all plugin data upon deactivation', 'iubenda') ?></span>
42
+ </label>
43
+ </div>
44
+ <div class="mb-5">
45
+ <h4><?php _e('Menu position', 'iubenda') ?></h4>
46
+ <div class="mb-2 d-flex align-items-center flex-wrap">
47
+ <label class="radio-regular mr-3">
48
+ <input type="radio" name="iubenda_cookie_law_solution[menu_position]" value="topmenu" class="mr-2" <?php checked( 'topmenu', iubenda()->options['cs']['menu_position'] ) ?>>
49
+ <span><?php _e('Top menu', 'iubenda') ?></span>
50
+ </label>
51
+ <label class="mr-4 radio-regular text-xs">
52
+ <input type="radio" name="iubenda_cookie_law_solution[menu_position]" value="submenu" class="mr-2" <?php checked( 'submenu', iubenda()->options['cs']['menu_position'] ) ?>>
53
+ <span><?php _e('Submenu', 'iubenda') ?></span>
54
+ </label>
55
+ </div>
56
+ <p class="description"><?php _e('Select whether to display iubenda in a top admin menu or the Settings submenu.', 'iubenda') ?></p>
57
+ </div>
58
+
59
+ <h4><?php _e('Custom settings', 'iubenda') ?></h4>
60
+ <fieldset class="custom-scripts mb-3 p-0 tabs tabs--style2">
61
+ <ul class="tabs__nav text-xs">
62
+ <li data-target="tab-custom-scripts" data-group="custom-scripts" class="tabs__nav__item active"><?php _e('Custom scripts', 'iubenda') ?></li>
63
+ <li data-target="tab-custom-iframes" data-group="custom-scripts" class="tabs__nav__item"><?php _e('Custom iframes', 'iubenda') ?></li>
64
+ </ul>
65
+ <div data-target="tab-custom-scripts" data-group="custom-scripts" class="tabs__target p-3 active">
66
+ <section id="custom-script-field" class="custom-script-field hidden">
67
+ <input type="text" class="regular-text" name="iubenda_cookie_law_solution[custom_scripts][script][]" placeholder="Enter custom script" disabled>
68
+ <select name="iubenda_cookie_law_solution[custom_scripts][type][]" disabled>
69
+ <option value="0" selected="selected"><?php _e('Not set', 'iubenda') ?></option>
70
+ <option value="1"><?php _e('Strictly necessary', 'iubenda') ?></option>
71
+ <option value="2"><?php _e('Basic interactions &amp; functionalities', 'iubenda') ?></option>
72
+ <option value="3"><?php _e('Experience enhancement', 'iubenda') ?></option>
73
+ <option value="4"><?php _e('Analytics', 'iubenda') ?></option>
74
+ <option value="5"><?php _e('Targeting &amp; Advertising', 'iubenda') ?></option>
75
+ </select>
76
+ <a target="_blank" href="javascript:void(0)" class="remove-custom-script-field button-secondary remove-custom-section" data-remove-section=".custom-script-field" title="Remove">-</a>
77
+ </section>
78
+ <div id="custom-script-fields">
79
+ <?php
80
+ foreach (iubenda()->options['cs']['custom_scripts'] as $script => $type){
81
+ ?>
82
+ <section class="custom-script-field">
83
+ <input type="text" class="regular-text" name="iubenda_cookie_law_solution[custom_scripts][script][]" placeholder="Enter custom script" value="<?php echo esc_attr( stripslashes($script) ); ?>">
84
+ <select name="iubenda_cookie_law_solution[custom_scripts][type][]">
85
+ <option value="0" <?php selected( $type, 0 ); ?>><?php _e('Not set', 'iubenda') ?></option>
86
+ <option value="1" <?php selected( $type, 1 ); ?>><?php _e('Strictly necessary', 'iubenda') ?></option>
87
+ <option value="2" <?php selected( $type, 2 ); ?>><?php _e('Basic interactions &amp; functionalities', 'iubenda') ?></option>
88
+ <option value="3" <?php selected( $type, 3 ); ?>><?php _e('Experience enhancement', 'iubenda') ?></option>
89
+ <option value="4" <?php selected( $type, 4 ); ?>><?php _e('Analytics', 'iubenda') ?></option>
90
+ <option value="5" <?php selected( $type, 5 ); ?>><?php _e('Targeting &amp; Advertising', 'iubenda') ?></option>
91
+ </select>
92
+ <a target="_blank" href="javascript:void(0)" class="remove-custom-script-field button-secondary remove-custom-section" data-remove-section=".custom-script-field" title="Remove">-</a>
93
+ </section>
94
+ <?php }?>
95
+ </div>
96
+
97
+ <p class=" text-gray-lighter m-0 mb-3"><?php _e("Provide a list of domains for any custom scripts you'd like to block, and assign their purposes. To make sure they are blocked correctly, please add domains in the same format as 'example.com', without any protocols e.g. 'http://' or 'https://'. You may also use wildcards (*) to include parent domains or subdomains.", 'iubenda') ?></p>
98
+ <button class="btn btn-gray-outline btn-xs add-custom-section" data-append-section="#custom-script-fields" data-clone-section="#custom-script-field"><?php _e('Add New Script', 'iubenda') ?></button>
99
+ </div>
100
+ <div data-target="tab-custom-iframes" data-group="custom-scripts" class="tabs__target p-3">
101
+ <section id="custom-iframe-field" class="custom-iframe-field hidden">
102
+ <input type="text" class="regular-text" name="iubenda_cookie_law_solution[custom_iframes][iframe][]" placeholder="Enter custom iframe" disabled>
103
+ <select name="iubenda_cookie_law_solution[custom_iframes][type][]" disabled>
104
+ <option value="0" selected="selected"><?php _e('Not set', 'iubenda') ?></option>
105
+ <option value="1"><?php _e('Strictly necessary', 'iubenda') ?></option>
106
+ <option value="2"><?php _e('Basic interactions &amp; functionalities', 'iubenda') ?></option>
107
+ <option value="3"><?php _e('Experience enhancement', 'iubenda') ?></option>
108
+ <option value="4"><?php _e('Analytics', 'iubenda') ?></option>
109
+ <option value="5"><?php _e('Targeting &amp; Advertising', 'iubenda') ?></option>
110
+ </select>
111
+ <a target="_blank" href="javascript:void(0)" class="remove-custom-iframe-field button-secondary remove-custom-section" data-remove-section=".custom-iframe-field" title="Remove">-</a>
112
+ </section>
113
+ <div id="custom-iframe-fields">
114
+ <?php
115
+ foreach (array_get(iubenda()->options['cs'],'custom_iframes') as $iframe => $type){
116
+ ?>
117
+ <section id="custom-iframe-field" class="custom-iframe-field">
118
+ <input type="text" class="regular-text" name="iubenda_cookie_law_solution[custom_iframes][iframe][]" placeholder="Enter custom iframe" value='<?php echo esc_attr( stripslashes($iframe) ); ?>'>
119
+ <select name="iubenda_cookie_law_solution[custom_iframes][type][]">
120
+ <option value="0" <?php selected( $type, 0 ); ?>><?php _e('Not set', 'iubenda') ?></option>
121
+ <option value="1" <?php selected( $type, 1 ); ?>><?php _e('Strictly necessary', 'iubenda') ?></option>
122
+ <option value="2" <?php selected( $type, 2 ); ?>><?php _e('Basic interactions &amp; functionalities', 'iubenda') ?></option>
123
+ <option value="3" <?php selected( $type, 3 ); ?>><?php _e('Experience enhancement', 'iubenda') ?></option>
124
+ <option value="4" <?php selected( $type, 4 ); ?>><?php _e('Analytics', 'iubenda') ?></option>
125
+ <option value="5" <?php selected( $type, 5 ); ?>><?php _e('Targeting &amp; Advertising', 'iubenda') ?></option>
126
+ </select>
127
+ <a target="_blank" href="javascript:void(0)" class="remove-custom-iframe-field button-secondary remove-custom-section" data-remove-section=".custom-iframe-field" title="Remove">-</a>
128
+ </section>
129
+ <?php }?>
130
+
131
+ </div>
132
+ <p class="text-gray-lighter m-0 mb-3"><?php _e("Provide a list of domains for any custom iframes you'd like to block, and assign their purposes. To make sure they are blocked correctly, please add domains in the same format as 'example.com', without any protocols e.g. 'http://' or 'https://'. You may also use wildcards (*) to include parent domains or subdomains.", 'iubenda') ?></p>
133
+ <button class="btn btn-gray-outline btn-xs add-custom-section" data-append-section="#custom-iframe-fields" data-clone-section="#custom-iframe-field"><?php _e('Add New iframe', 'iubenda') ?></button>
134
+ </div>
135
+ </fieldset>
views/partials/csSimplifiedConfiguration.php ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="d-lg-flex">
2
+
3
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/bannerPosition.php'; ?>
4
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/bannerStyle.php'; ?>
5
+
6
+ </div>
7
+
8
+ <div class="mb-5">
9
+ <h4><?php _e('Legislation', 'iubenda') ?></h4>
10
+ <div class="scrollable gap-fixer">
11
+ <fieldset class="d-flex radio-large">
12
+ <div class="radio-controller">
13
+ <input type="radio" id="radioGdpr" name="iubenda_cookie_law_solution[simplified][legislation]" value="gdpr" <?php checked( 'gdpr', array_get(iubenda()->options['cs'], 'simplified.legislation'), true ) ?>>
14
+ <label for="radioGdpr"><?php _e('GDPR Only', 'iubenda') ?></label>
15
+ </div>
16
+ <div class="radio-controller">
17
+ <input type="radio" id="radioCcpa" name="iubenda_cookie_law_solution[simplified][legislation]" value="ccpa" <?php checked( 'ccpa', array_get(iubenda()->options['cs'], 'simplified.legislation'), true ) ?>>
18
+ <label for="radioCcpa"><?php _e('CCPA Only', 'iubenda') ?></label>
19
+ </div>
20
+ <div class="radio-controller">
21
+ <input type="radio" id="radioBoth" name="iubenda_cookie_law_solution[simplified][legislation]" value="both" <?php checked( 'both', array_get(iubenda()->options['cs'], 'simplified.legislation'), true ) ?>>
22
+ <label for="radioBoth"><?php _e('Both', 'iubenda') ?></label>
23
+ </div>
24
+ </fieldset>
25
+ </div>
26
+ </div>
27
+
28
+ <div class="mb-5">
29
+ <h4><?php _e('Require consent from', 'iubenda') ?></h4>
30
+ <div class="scrollable gap-fixer">
31
+ <fieldset class="d-flex radio-large">
32
+ <div class="radio-controller">
33
+ <input type="radio" id="radioWorldwide" name="iubenda_cookie_law_solution[simplified][require_consent]" value="worldwide" <?php checked( 'worldwide', array_get(iubenda()->options['cs'], 'simplified.require_consent') ) ?>>
34
+ <label for="radioWorldwide">
35
+ <div class="d-flex align-items-center">
36
+ <svg xmlns="http://www.w3.org/2000/svg" width="32" height="30" viewBox="0 0 32 30">
37
+ <g fill="none" fill-rule="evenodd" transform="translate(1 1.632)">
38
+ <circle cx="18" cy="14.368" r="13" fill="currentColor" fill-opacity=".1" />
39
+ <circle cx="13" cy="13.368" r="13" stroke="currentColor" />
40
+ <path stroke="currentColor" d="M17.545 4.368h-3.409l-2.045 1.715v1.143h-2.046L8 8.368v1.143h3.409l.682.572h1.364l1.363 1.143h2.727l1.364 1.142 1.364-1.142H23M15.5 15.243h-1.25l-1.875-1.875h-2.5L8 15.243l1.25 3.125h1.875l1.25 1.25v3.125l.625.625h1.25l1.875-1.875v-1.875L18 17.743z" />
41
+ </g>
42
+ </svg>
43
+ <span class="ml-2"><?php _e('Worldwide', 'iubenda') ?></span>
44
+ </div>
45
+ </label>
46
+ </div>
47
+ <div class="radio-controller">
48
+ <input type="radio" id="radioEU" name="iubenda_cookie_law_solution[simplified][require_consent]" value="eu_only" <?php checked( 'eu_only', array_get(iubenda()->options['cs'], 'simplified.require_consent'), true ) ?>>
49
+ <label for="radioEU">
50
+ <div class=" d-flex align-items-center">
51
+ <svg xmlns="http://www.w3.org/2000/svg" width="30" height="28" viewBox="0 0 30 28">
52
+ <g fill="none" fill-rule="evenodd">
53
+ <path fill="currentColor" fill-opacity=".1" d="M4.5 5.5H30v18H4.5z" />
54
+ <path fill="currentColor" d="M13.5 7a.75.75 0 100-1.5.75.75 0 000 1.5zM13.5 17.5a.75.75 0 100-1.5.75.75 0 000 1.5zM18 11.5a.75.75 0 101.5 0 .75.75 0 00-1.5 0zM7.5 11.5a.75.75 0 101.5 0 .75.75 0 00-1.5 0zM16.682 14.682a.75.75 0 101.06 1.06.75.75 0 00-1.06-1.06zM9.257 7.257a.75.75 0 101.061 1.061.75.75 0 00-1.06-1.06zM10.318 14.682a.75.75 0 10-1.06 1.06.75.75 0 001.06-1.06zM17.743 7.257a.75.75 0 10-1.061 1.061.75.75 0 001.06-1.06z" />
55
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M.75 2.5h25.391v18H.75z" />
56
+ <path class="svg-stroke" fill="#D8D8D8" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M.75 1v26.027" />
57
+ </g>
58
+ </svg>
59
+ <span class="ml-2"><?php _e('EU Only', 'iubenda') ?></span>
60
+ </div>
61
+ </label>
62
+ </div>
63
+ </fieldset>
64
+ </div>
65
+ </div>
66
+
67
+ <div class="my-5">
68
+ <h4><?php _e('Banner buttons', 'iubenda') ?></h4>
69
+ <fieldset>
70
+ <label class="checkbox-regular">
71
+ <input type="checkbox" class="mr-2 tcf-dependency" name="iubenda_cookie_law_solution[simplified][explicit_accept]" <?php checked( true, (bool) array_get(iubenda()->options['cs'], 'simplified.explicit_accept')); ?> <?php echo true == (bool) array_get(iubenda()->options['cs'], 'simplified.tcf') ? 'disabled':null ?>>
72
+ <span><?php _e('Explicit Accept and Customize buttons', 'iubenda') ?></span>
73
+ </label>
74
+
75
+ <label class="checkbox-regular">
76
+ <input type="checkbox" class="mr-2 tcf-dependency" name="iubenda_cookie_law_solution[simplified][explicit_reject]" <?php checked( true, (bool) array_get(iubenda()->options['cs'], 'simplified.explicit_reject')); ?> <?php echo true == (bool) array_get(iubenda()->options['cs'], 'simplified.tcf') ? 'disabled':null ?>>
77
+ <span><?php _e('Explicit Reject button', 'iubenda') ?></span>
78
+ </label>
79
+ </fieldset>
80
+ </div>
81
+
82
+ <div class="my-5">
83
+ <h4><?php _e('Other options', 'iubenda') ?></h4>
84
+ <label class="checkbox-regular">
85
+ <input type="checkbox" class="mr-2 iub-toggle-elements-status" data-group=".tcf-dependency" name="iubenda_cookie_law_solution[simplified][tcf]" <?php checked( true, (bool) array_get(iubenda()->options['cs'], 'simplified.tcf')); ?>>
86
+ <span>
87
+ <div>
88
+ <?php _e('Enable IAB Transparency and Consent Framework', 'iubenda') ?> - <a target="_blank" href="<?php echo iubenda()->settings->links['enable_iab']; ?>" class="link-underline"><?php _e('Learn More', 'iubenda') ?></a></div>
89
+ <div class="notice notice--warning mt-2 p-3 d-flex align-items-center text-warning text-xs">
90
+ <img class="mr-2" src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/warning-icon.svg">
91
+
92
+ <p><?php _e('You should activate this feature if you show ads on your website', 'iubenda') ?></p>
93
+ </div>
94
+ </span>
95
+ </label>
96
+
97
+ </div>
views/partials/footer.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <footer class="py-4">
2
+ <div class="d-flex justify-content-center ">
3
+ <a target="_blank" class="text-bold text-xs text-gray mr-4" href="<?php echo iubenda()->settings->links['documentation']; ?>"><?php _e('Documentation', 'iubenda') ?></a>
4
+ </div>
5
+ </footer>
views/partials/frontpage_main_box.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div id="alert-div-container" class="hidden">
2
+ <div id="alert-div" class="alert is-dismissible m-4" >
3
+ <div class="alert__icon p-4">
4
+ <img id="alert-image" src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/banner_failure.svg">
5
+ </div>
6
+ <p id="alert-message" class="text-regular text-left"></p>
7
+ <button class="btn-close mr-3 notice-dismiss">×</button>
8
+ </div>
9
+ </div>
10
+
11
+ <?php require_once (IUBENDA_PLUGIN_PATH . 'views/partials/welcomeScreenHeader.php'); ?>
12
+
13
+ <?php
14
+ $radar = new RadarService();
15
+
16
+ $services['cs'] = [
17
+ 'status' => array_get($radar->apiConfiguration, 'result.meta.cp_installed'),
18
+ 'label' => __('Set up a cookie banner', 'iubenda')
19
+ ];
20
+ $services['cons'] = [
21
+ 'status' => array_get($radar->apiConfiguration, 'result.meta.cp_installed'),
22
+ 'label' => __('Only track users that give consent', 'iubenda')
23
+ ];
24
+ $services['pp'] = [
25
+ 'status' => array_get($radar->apiConfiguration, 'result.meta.pp_installed'),
26
+ 'label' => __('Set up a privacy policy', 'iubenda')
27
+ ];
28
+ $services['tc'] = [
29
+ 'status' => array_get($radar->apiConfiguration, 'result.meta.tc_installed'),
30
+ 'label' => __('Set up terms and conditions', 'iubenda')
31
+ ];
32
+
33
+ if (!empty($radar->apiConfiguration) && array_get($radar->apiConfiguration, 'status') == 'completed') {
34
+ require_once IUBENDA_PLUGIN_PATH . '/views/partials/header_scanned.php';
35
+ } else {
36
+ ?>
37
+ <div class="p-4 my-5 text-center">
38
+ <span class="inline-spinner lg text-gray"></span>
39
+ <p class="m-0 mt-3 text-md"><?php _e('Analyzing your website', 'iubenda') ?>...</p>
40
+ </div>
41
+
42
+ <div class="mt-4 pt-4">
43
+ <h2 class="text-md m-0 mb-4"><?php _e('This is what you may need to be compliant', 'iubenda') ?>:</h2>
44
+ </div>
45
+ <?php
46
+ }
47
+ ?>
48
+
49
+
50
+ <div>
51
+ <ul class="list_radar m-0 mt-4 px-4">
52
+ <?php foreach ($services as $key => $service) : ?>
53
+ <li id="<?php echo $key ?>-item" class="list_radar__item my-5 my-lg-0 mx-lg-3 list_radar__item--<?php echo array_get($radar->apiConfiguration, 'status') == 'completed' ? array_get($service, 'status') == true ? 'on':'off' : null; ?>">
54
+ <figure><img src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/list_radar_<?php echo $key; ?>.svg"></figure>
55
+ <p class="text-bold m-0 mx-4"><?php echo $service['label']; ?></p>
56
+ </li>
57
+ <?php endforeach; ?>
58
+ </ul>
59
+ </div>
views/partials/header.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <header class="text-center">
2
+ <a href="https://www.iubenda.com" target="_blank">
3
+ <img src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/iubenda_logo.svg" alt="iubenda logo">
4
+ </a>
5
+ </header>
6
+
7
+ <div id="iubenda-alert" class="p-2 hidden" style="width: 90%;max-width: 1140px;margin: 0 auto;" >
8
+ <div class="alert alert--failure">
9
+ <div class="alert__icon p-4">
10
+ <img src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/banner_failure.svg">
11
+ </div>
12
+ <p class="text-md text-lg-left" id="iubenda-alert-content"></p>
13
+ </div>
14
+ </div>
views/partials/header_scanned.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <div class="my-5">
2
+ <div class="circularBar" id="iubendaRadarCircularBar" data-perc="<?php echo iubenda()->serviceRating->servicesPercentage() ?>"></div>
3
+ <h2 class="text-md mt-2 mb-1"><?php _e('Your rating', 'iubenda') ?></h2>
4
+ <p class="m-0"><?php _e('We have analyzed your website in background and this is the result.', 'iubenda') ?></p>
5
+ </div>
views/partials/integrateFooter.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <hr>
2
+ <div class="px-3 m-4 d-flex align-items-center justify-content-between">
3
+ <button type='reset' class="btn btn-gray-lighter btn-sm"><?php _e('Reset settings', 'iubenda') ?></button>
4
+ <button type="submit" class="btn btn-green-primary btn-sm"><span class="button__text"><?php _e('Integrate', 'iubenda') ?></span></button>
5
+ </div>
views/partials/languagesTabs.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="mb-3 p-0">
2
+
3
+ <fieldset class="paste_embed_code tabs tabs--style2">
4
+
5
+ <ul class="tabs__nav">
6
+ <?php foreach(iubenda()->languages as $k => $v): ?>
7
+ <li id="<?php echo "code_{$k}-iubenda_{$service['name']}_solution_tab" ?>" class="tabs__nav__item <?php echo $k == iubenda()->lang_default?'active':false ; ?>" data-target="tab-<?php echo $k ; ?>" data-group="language-tabs">
8
+ <?php echo strtoupper($k) ; ?>
9
+ </li>
10
+ <?php endforeach; ?>
11
+ </ul>
12
+
13
+ <?php
14
+ $product_helper = new ProductHelper();
15
+
16
+ foreach($product_helper->get_languages() as $lang_id => $v):
17
+ $method = "get_{$key}_embed_code_by_lang";
18
+ $code = $product_helper->{$method}($lang_id);
19
+ ?>
20
+ <div data-target="tab-<?php echo $lang_id ; ?>" class="tabs__target <?php echo $lang_id == iubenda()->lang_default || $lang_id == 'default'? 'active': '' ; ?>" data-group="language-tabs">
21
+ <textarea class='form-control text-sm m-0 iub-language-code iub-embed-code-<?php echo $key; ?>' data-language="<?php echo $lang_id; ?>" placeholder='<?php _e('Paste your embed code here', 'iubenda') ?>' name='iubenda_<?php echo $service['name']; ?>_solution[code_<?php echo $lang_id ; ?>]' rows='4'><?php echo $code ?></textarea>
22
+ </div>
23
+ <?php endforeach; ?>
24
+
25
+ </fieldset>
26
+ <div class="text-right mt-2">
27
+ <a target="_blank" href="<?php echo iubenda()->settings->links["how_generate_{$key}"]; ?>" class="link link-helper"><span class="tooltip-icon mr-2">?</span><?php _e('Where can I find this code?', 'iubenda') ?></a>
28
+ </div>
29
+ </div>
views/partials/modals/modal_almost_there.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="modalAlmostThere">
2
+
3
+ <div class="text-center">
4
+ <img src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/modals/modal_almost_there.svg" alt="" />
5
+ <h2 class="text-lg"><?php _e('Nice! We are almost there.', 'iubenda') ?></h2>
6
+ <p class="text-regular pb-3"><?php _e('Since you already activated some products for this website, we just ask you to copy and paste the embedding code of the product you already have to syncronize your iubenda acount with WP plugin.', 'iubenda') ?></p>
7
+ </div>
8
+
9
+ <form class="ajax-form">
10
+ <input hidden name="action" value="update_options">
11
+ <input hidden name="_redirect" value="<?php echo esc_url(add_query_arg(['view' => 'products-page'], iubenda()->base_url)) ?>">
12
+
13
+ <h4 class="mb-3"><?php _e('Select products you have already activated', 'iubenda') ?></h4>
14
+ <div class="radio-cards pb-3 mb-4">
15
+
16
+ <?php foreach(iubenda()->settings->services as $key => $service): ?>
17
+ <label for="radio-card-<?php echo $key; ?>" class="radio-card">
18
+ <input type="checkbox" name="iubenda_<?php echo $service['name']; ?>_solution_status" class="select-product-checkbox section-checkbox-control<?php if($key == 'cs'): echo ' required-control'; endif;?>" data-section-name="#section-<?php echo $key; ?>" <?php if($key == 'cs'): echo 'data-required-control="#submit-btn"'; endif;?> value="true" id="radio-card-<?php echo $key; ?>" <?php echo $service['status']=='true' ? 'checked':''; ?>/>
19
+ <span class="check-icon"></span>
20
+
21
+ <div>
22
+ <img src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/checkboxes/<?php echo $key; ?>_icon.svg" alt="<?php echo $service['label']; ?>" />
23
+ <span>
24
+ <?php echo $service['label']; ?>
25
+ <?php if ($key == 'cs'): echo __('(required)', 'iubenda'); endif; ?>
26
+ </span>
27
+ </div>
28
+ </label>
29
+
30
+ <?php endforeach; ?>
31
+
32
+ </div>
33
+
34
+ <?php foreach(iubenda()->settings->services as $key => $service): ?>
35
+ <?php if ($key == 'cons'): ?>
36
+ <section id="section-<?php echo $key; ?>" class="<?php echo $service['status']=='true' ? '':'hidden'; ?>">
37
+ <h4 class="mb-3"><?php _e('Consent Solution API key', 'iubenda') ?></h4>
38
+ <fieldset class="paste_embed_code">
39
+ <input name="public_api_key" class="form field-input" type="text" value="<?php echo iubenda()->options['cons']['public_api_key'] ?>" placeholder="<?php _e('Paste your API key here', 'iubenda') ?>">
40
+ </fieldset>
41
+ <div class="text-right mt-2">
42
+ <a target="_blank" href="<?php echo iubenda()->settings->links['how_generate_cons']; ?>" class="link link-helper"><span class="tooltip-icon mr-2">?</span><?php _e('Where can I find this code?', 'iubenda') ?></a>
43
+ </div>
44
+ </section>
45
+ <?php else: ?>
46
+ <section id="section-<?php echo $key; ?>" class="<?php echo $service['status']=='true' ? '':'hidden'; ?>">
47
+ <h4 class="mb-3"><?php echo $service['label']; ?></h4>
48
+ <?php
49
+ global $wp_registered_sidebars;
50
+
51
+ // If sidebar-1 not registered or not activated
52
+ if (in_array($key, ['pp', 'tc']) && !boolval(array_get($wp_registered_sidebars, 'sidebar-1'))) {
53
+ ?>
54
+ <div class="notice notice--warning mt-2 mb-4 p-3 d-flex align-items-center text-warning text-xs">
55
+ <img class="mr-2" style="width: 3rem !important" src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/warning-icon.svg">
56
+ <p><?php echo sprintf( __( 'We were not able to add a "Legal" widget to the footer as your theme is not compatible, you can position the "Legal" widget manually from <a href="%s" target="_blank">here</a>.', 'iubenda' ), esc_url( admin_url( 'widgets.php' ) ) ) ?></p>
57
+ </div>
58
+ <?php
59
+ }
60
+ ?>
61
+ <?php require IUBENDA_PLUGIN_PATH . '/views/partials/languagesTabs.php'; ?>
62
+ </section>
63
+ <?php endif; ?>
64
+
65
+ <?php endforeach; ?>
66
+
67
+ <div class="text-center">
68
+ <button type="submit" class="btn btn-green-primary btn-sm mt-5 hidden" id="submit-btn">
69
+ <span class="button__text"><?php _e('Synchronize products', 'iubenda') ?></span>
70
+ </button>
71
+ </div>
72
+
73
+ </form>
74
+
75
+ </div>
views/partials/modals/modal_no_website_found.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div id="modal-no-website-found" class="modal" style="z-index: 999999 !important;">
2
+ <div class="modal__window modal__window--md p-4 p-lg-5">
3
+ <div class="modalSync">
4
+ <img class="ml-4" src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/modals/modal_no_website_found.svg" alt="" />
5
+ <h1 class="text-lg">
6
+ <?php _e('Ooops! <br> No website found with this embed code.', 'iubenda') ?>
7
+ </h1>
8
+ <p class="mb-4"><?php _e('It seems that it is not possible to access your data with the code you pasted, do you want to try again or do you prefer to start configuring your website from scratch?', 'iubenda') ?></p>
9
+
10
+ <button class="btn btn-gray-lighter btn-block btn-sm mb-3 hide-modal" data-modal-name="#modal-no-website-found" href="javascript:void(0)"><?php _e('Try again', 'iubenda') ?></button>
11
+ <div class="btn btn-gray-lighter btn-block btn-sm show-modal" data-modal-name="#modal-setup-screen"> <?php _e('I want to start from scratch', 'iubenda') ?></div>
12
+ </div>
13
+ </div>
14
+ </div>
views/partials/modals/modal_ops_embed_invalid.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div id="modal-no-website-found" class="modal" style="z-index: 999999 !important;">
2
+ <div class="modal__window modal__window--md p-4 p-lg-5">
3
+ <div class="modalSync">
4
+ <img class="ml-4" src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/modals/modal_no_website_found.svg" alt="" />
5
+ <h1 class="text-lg">
6
+ <?php _e('Ooops! <br> No website found with this embed code.', 'iubenda') ?>
7
+ </h1>
8
+ <p class="mb-4"><?php _e('It seems that it is not possible to access your data with the code you pasted, do you want to try again.', 'iubenda') ?></p>
9
+
10
+ <button class="btn btn-gray-lighter btn-block btn-sm mb-3 hide-modal" data-modal-name="#modal-no-website-found" href="javascript:void(0)"><?php _e('Try again', 'iubenda') ?></button>
11
+ </div>
12
+ </div>
13
+ </div>
views/partials/modals/modal_pp_created.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="modalSync">
2
+ <img src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/modals/modal_pp_created.svg" alt="" />
3
+
4
+ <h1 class="text-xl">
5
+ <?php _e('Your privacy policy has been created!', 'iubenda') ?>
6
+ </h1>
7
+ <p class="mb-4"><?php _e('From here you can customize your privacy policy by adding the services you use within your website or you can customize the style of the button that displays your privacy policy.', 'iubenda') ?></p>
8
+
9
+ <a class="btn-green-primary btn-block btn-sm" href="<?php echo add_query_arg( array('view' => "integrate-setup"), get_permalink() ); ?>"><?php _e('Got it', 'iubenda') ?></a>
10
+
11
+ </div>
views/partials/modals/modal_select_language.php ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="modalSync">
2
+ <img src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/modals/modal_sync.svg" alt="" />
3
+ <h1 class="text-lg mb-4">
4
+ <?php _e('Now, select your website language', 'iubenda') ?>
5
+ </h1>
6
+ <div>
7
+ <?php
8
+ $iubenda_intersect_supported_langs = [];
9
+ $selected_language = '';
10
+
11
+ if (iubenda()->multilang && ! empty( iubenda()->languages )) {
12
+ $local_languages = array_keys(iubenda()->languages_locale) ?? [];
13
+ $local_languages = iubenda()->language_unification_locale_to_iub($local_languages);
14
+
15
+ $iubenda_intersect_supported_langs = array_intersect($local_languages, array_keys(iubenda()->supported_languages)) ?: [];
16
+ } else {
17
+ $iubenda_intersect_supported_langs = array_intersect([array_get(iubenda()->lang_mapping, get_locale())], array_values(iubenda()->lang_mapping)) ?: [];
18
+ }
19
+
20
+ // Check if the current language is supported from Iubenda or not
21
+ if(in_array(iubenda()->lang_current, $iubenda_intersect_supported_langs)){
22
+ $selected_language = iubenda()->lang_current;
23
+ }
24
+ ?>
25
+ <select class="custom-script-field" id="iub-website-language" name="website-language" required>
26
+ <?php foreach (iubenda()->supported_languages as $key => $label): ?>
27
+ <option <?php echo ($selected_language == $key) ? 'selected' : ''; ?> <?php echo (!in_array($key, $iubenda_intersect_supported_langs)) ?'disabled' : ''; ?> value=<?php echo $key; ?>><?php echo $label; ?></option>
28
+ <?php endforeach; ?>
29
+ </select>
30
+ </div>
31
+ <br>
32
+ <div id="iubenda-policy-config-start"></div>
33
+ </div>
34
+ <script>
35
+ var _iub = _iub || [];
36
+
37
+ _iub.quick_generator = {
38
+ input:{
39
+ privacy_policy:{
40
+ type: 'web_site',
41
+ url: '<?php echo get_site_url() ?>',
42
+ langs: ['<?php echo $selected_language ?>']
43
+ },
44
+ user:{
45
+ email: '<?php echo get_bloginfo( "admin_email" ) ?>',
46
+ },
47
+ },
48
+ no_style:true,
49
+ css:"background-color:#e7e7e7;cursor:pointer;color: #585858;padding: 0.5rem 1.7rem;font-size: .95rem;border: 0;border-radius: 3rem;font-weight: bold;width: 100%;",
50
+ placeholder:document.getElementById("iubenda-policy-config-start"),
51
+ callback:iubendaQuickGeneratorCallback,
52
+ api_key:"a6639fe1f277bbdad9ef1d92065a9da88cda008d",
53
+ caption:"<?php echo __('Continue' ,'iubenda')?>"
54
+ };
55
+
56
+ function iubendaQuickGeneratorCallback(payload) {
57
+ jQuery.ajax({
58
+ type: "POST",
59
+ dataType: "json",
60
+ url: iub_js_vars['site_url'] + "/wp-admin/admin-ajax.php",
61
+ data : {action: "quick_generator_api", payload: payload},
62
+ success: function(result){
63
+ if (result.status === 'done') {
64
+ window.location = result.redirect
65
+ }else{
66
+
67
+ }
68
+ },
69
+ error: function(response) { // if error occured
70
+ jQuery("#alert-div").addClass("alert--failure");
71
+ jQuery("#alert-image").attr('src',iub_js_vars['site_url'] + '/wp-content/plugins/iubenda-cookie-wp-solution/assets/images/banner_failure.svg');
72
+ jQuery("#alert-message").text(response.responseText);
73
+
74
+ jQuery("#alert-div").removeClass("hidden");
75
+ },
76
+ });
77
+ }
78
+
79
+ </script>
views/partials/modals/modal_sync.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <div class="modalSync">
2
+ <img src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/modals/modal_sync.svg" alt="" />
3
+ <h1 class="text-lg mb-4">
4
+ <?php _e('First of all, tell us if you already use our products for this website or if you want to start from scratch', 'iubenda') ?>
5
+ </h1>
6
+ <button class="btn btn-gray-lighter btn-block btn-sm mb-3 show-modal" data-modal-name="#modal-have-existing-products"><?php _e('I’ve already made the set up on iubenda.com', 'iubenda') ?></button>
7
+ <div class="mb-3"><?php _e('or', 'iubenda') ?></div>
8
+ <button class="btn btn-gray-lighter btn-block btn-sm mb-3 show-modal" data-modal-name="#modal-select-language"><?php _e('I want to start from scratch', 'iubenda') ?></button>
9
+ </div>
views/partials/product-card.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="service-card">
2
+
3
+ <div class="flex-fill d-flex flex-direction-column">
4
+
5
+ <div class="d-flex justify-content-end p-3">
6
+ <a target="_blank" href="<?php echo iubenda()->settings->links["about_{$serviceKey}"]; ?>" class="tooltip-icon">?</a>
7
+ </div>
8
+
9
+ <div class="text-center pb-4 flex-fill d-flex align-items-center justify-content-center flex-direction-column">
10
+ <img src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/service_cards/<?php echo $serviceKey; ?>_icon.svg">
11
+ <h3 class="text-regular text-bold text-gray m-0"><?php echo $serviceOptions['label']; ?></h3>
12
+ </div>
13
+
14
+ <?php if(isset($serviceOptions['settings'])): ?>
15
+ <ul id="configiration-iubenda-<?php echo $serviceKey ?>" class="service-on text-gray text-xs " <?php echo $serviceOptions['status']!='true' ? 'style="display: none;"':''; ?> id="toggleServiceOn">
16
+ <?php
17
+ foreach (array_get($serviceOptions, 'settings') as $setting) {
18
+ $value = '';
19
+ if ($setting['label'] === 'Version') {
20
+ continue;
21
+ }
22
+
23
+ if($setting['value'] == 'black'){
24
+ $value = 'Dark';
25
+ }elseif($setting['value'] == 'white'){
26
+ $value = 'Light';
27
+ }else{
28
+ $value = $setting['value'];
29
+ }
30
+ ?>
31
+ <li class="mr-3"><span class="text-bold"><?php echo ucfirst($setting['label']); ?>:</span> <?php echo ucfirst($value); ?></li>
32
+ <?php } ?>
33
+ </ul>
34
+ <?php endif; ?>
35
+
36
+ <hr>
37
+
38
+ <div class="d-flex align-items-center justify-content-between p-3">
39
+ <div class="switch align-items-center">
40
+ <input type="checkbox" class="service-checkbox" data-redirect="<?php echo add_query_arg(array('view' => "$serviceKey-configuration"), get_permalink()); ?>" data-service-key="iubenda-<?php echo $serviceKey; ?>" data-service-name="iubenda_<?php echo $serviceOptions['name']; ?>_solution" id="toggle-<?php echo $serviceKey; ?>" <?php echo $serviceOptions['status']=='true' ? 'checked':' '; ?> />
41
+ <label for="toggle-<?php echo $serviceKey; ?>"></label>
42
+ <p class="notification text-xs text-bold text-gray-lighter ml-2"><?php _e('Service', 'iubenda') ?><span class="selected"></span></p>
43
+ </div>
44
+ <a class="btn btn-gray-lighter btn-xs" href="<?php echo add_query_arg(array('view' => "$serviceKey-configuration"), get_permalink()); ?>"><?php _e('Configure', 'iubenda') ?></a>
45
+ </div>
46
+
47
+ </div>
48
+ </div>
views/partials/siteInfo.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="siteinfo p-4 d-block d-lg-flex justify-content-between">
2
+ <div class="d-block d-lg-flex align-items-center text-center text-lg-left">
3
+ <div class="siteinfo--icon"><img src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/pc_screen_icon.svg"></div>
4
+ <?php
5
+ $url = 'https://www.iubenda.com/account';
6
+
7
+ if (!empty(iubenda()->settings->links['privacy_policy_generator_edit'])) {
8
+ $url = iubenda()->settings->links['privacy_policy_generator_edit'];
9
+ }
10
+ ?>
11
+ <div>
12
+ <h1 class="text-bold text-lg m-0"><?php echo parse_url(home_url())['host']; ?></h1>
13
+ </div>
14
+ </div>
15
+ <div class="d-block d-lg-flex align-items-center text-center text-lg-right">
16
+ <p class="mr-lg-3"><?php _e('Your rating', 'iubenda') ?> </p>
17
+ <div class="circularBar sm" id="iubendaRadarCircularBar" data-perc="<?php echo iubenda()->serviceRating->servicesPercentage() ?>"></div>
18
+ </div>
19
+ </div>
20
+ <hr>
views/partials/welcomeScreenHeader.php ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <div>
2
+ <h1 class="text-xl mb-1 m-0"><?php _e('Welcome to iubenda!', 'iubenda') ?></h1>
3
+ <p class="text-md m-0"><?php _e('Our plugin will help you to make your website compliant in minutes.', 'iubenda') ?></p>
4
+ </div>
views/pp-configuration.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/header.php'; ?>
2
+
3
+ <div class="main-box">
4
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/siteInfo.php'; ?>
5
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/breadcrumb.php'; ?>
6
+ <form class="ajax-form-to-options">
7
+ <input hidden name="iubenda_section_name" value="iubenda_privacy_policy_solution">
8
+ <input hidden name="iubenda_section_key" value="pp">
9
+ <input hidden name="action" value="ajax_save_options">
10
+ <input hidden name="_redirect" value="<?php echo esc_url(add_query_arg(['view' => 'products-page'], iubenda()->base_url)) ?>">
11
+ <div class="px-4 px-lg-5">
12
+ <?php
13
+ $url = 'javascript:void(0)';
14
+
15
+ if (!empty(iubenda()->settings->links['privacy_policy_generator_edit'])) {
16
+ $url = iubenda()->settings->links['privacy_policy_generator_edit'];
17
+ }elseif(array_get(iubenda()->options['global_options'], 'site_id')){
18
+ $url = iubenda()->settings->links['flow_page'];
19
+ }
20
+ ?>
21
+ <div class="text-center py-5">
22
+ <a target="_blank" href="<?php echo $url ?>" class="btn btn-green-secondary btn-sm"><?php _e('Setup your privacy and cookie policy on iubenda.com', 'iubenda') ?></a>
23
+ </div>
24
+ <hr>
25
+ <div class="py-5">
26
+ <h3 class="m-0 mb-4"><?php _e('Integration', 'iubenda') ?></h3>
27
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/buttonStyle.php'; ?>
28
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/buttonPosition.php'; ?>
29
+ </div>
30
+ </div>
31
+ <hr>
32
+ <div class="p-4 d-flex justify-content-end">
33
+ <input class="btn btn-gray-lighter btn-sm mr-2" type="button" value="<?php _e('Cancel', 'iubenda') ?>" onclick="window.location.href = '<?php echo esc_url(add_query_arg(array('view' => 'products-page'), iubenda()->base_url)) ?>'"/>
34
+ <button type="submit" class="btn btn-green-primary btn-sm" value="Save" name="save">
35
+ <span class="button__text"><?php _e('Save settings', 'iubenda') ?></span>
36
+ </button>
37
+ </div>
38
+ </form>
39
+ </div>
40
+
41
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/footer.php'; ?>
views/products-page.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/header.php'; ?>
2
+ <div class="main-box">
3
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/siteInfo.php'; ?>
4
+ <div class="p-3 m-3">
5
+ <?php
6
+ $result = array_filter(array_column($this->services, 'status'), function ($service) {
7
+ return (stripos($service, 'false') === false);
8
+ });
9
+ if (!$result) {
10
+ ?>
11
+ <div class="alert alert--failure is-dismissible m-4">
12
+ <div class="alert__icon p-4">
13
+ <img src="<?php echo IUBENDA_PLUGIN_URL . '/assets/images/banner_failure.svg' ?>">
14
+ </div>
15
+ <p id="products-page-alert-text" class="text-regular"><?php _e('It seems that you have not activated any of our services, we recommend you to activate them and increase your level of compliance and avoid risking fines.', 'iubenda') ?></p>
16
+ <button class="btn-close mr-3 notice-dismiss">×</button>
17
+ </div>
18
+ <?php
19
+ }
20
+
21
+ if(iubenda()->settings->print_notices()){
22
+ iubenda()->settings->print_notices();
23
+ }
24
+ ?>
25
+ <div class="configure-services-cards">
26
+ <?php
27
+ foreach (iubenda()->settings->services as $serviceKey => $serviceOptions) :
28
+ require IUBENDA_PLUGIN_PATH . '/views/partials/product-card.php';
29
+ endforeach;
30
+ ?>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ <?php require_once IUBENDA_PLUGIN_PATH . 'views/partials/footer.php'; ?>
views/tc-configuration.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/header.php'; ?>
2
+ <div class="main-box">
3
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/siteInfo.php'; ?>
4
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/breadcrumb.php'; ?>
5
+ <form class="ajax-form-to-options">
6
+ <input hidden name="iubenda_section_name" value="iubenda_terms_conditions_solution">
7
+ <input hidden name="iubenda_section_key" value="tc">
8
+ <input hidden name="action" value="ajax_save_options">
9
+ <input hidden name="_redirect" value="<?php echo esc_url(add_query_arg(['view' => 'products-page'], iubenda()->base_url)) ?>">
10
+ <div class="mx-4 mx-lg-5">
11
+ <div class="py-4 py-lg-5 text-gray">
12
+ <p class=""><?php _e('Configure your terms and conditions on our website and paste here the embed code to integrate the button on your website.', 'iubenda') ?></p>
13
+ <div class="d-flex align-items-center ">
14
+ <div class="steps flex-shrink mr-2">1</div>
15
+ <p class="text-bold"> <?php _e('Configure terms and conditions by', 'iubenda') ?>
16
+ <a target="_blank" href="<?php echo iubenda()->settings->links['about_tc']; ?>" class="link-underline text-gray-lighter"> <?php _e('clicking here', 'iubenda') ?></a>
17
+ </p>
18
+ </div>
19
+ <div class="d-flex align-items-center ">
20
+ <div class="steps flex-shrink mr-2">2</div>
21
+ <p class="text-bold"> <?php _e('Paste your terms and conditions embed code here', 'iubenda') ?>
22
+ </p>
23
+ </div>
24
+ <div class="ml-5 mt-3">
25
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/languagesTabs.php'; ?>
26
+ </div>
27
+ </div>
28
+ <hr>
29
+ <div class="py-5">
30
+ <h3 class="m-0 mb-4"><?php _e('Integration', 'iubenda') ?></h3>
31
+ <!-- Button Style -->
32
+ <h4><?php _e('Button style', 'iubenda') ?></h4>
33
+ <div class="scrollable gap-fixer">
34
+ <div class="button-style mb-3 d-flex">
35
+ <div class="m-1 mr-2">
36
+ <label class="radio-btn-style radio-btn-style-light">
37
+ <input type="radio" class="update-button-style" name="iubenda_terms_conditions_solution[button_style]" value="white" <?php echo checked( 'white', array_get(iubenda()->options['tc'], 'button_style'), false) ?>>
38
+ <div>
39
+ <div class="btn-fake"></div>
40
+ </div>
41
+ <p class="text-xs text-center"><?php _e('Light', 'iubenda') ?></p>
42
+ </label>
43
+ </div>
44
+ <div class="m-1 mr-2">
45
+ <label class="radio-btn-style radio-btn-style-dark">
46
+ <input type="radio" class="update-button-style" name="iubenda_terms_conditions_solution[button_style]" value="black" <?php echo checked( 'black', array_get(iubenda()->options['tc'], 'button_style'), false) ?>>
47
+ <div>
48
+ <div class="btn-fake"></div>
49
+ </div>
50
+ <p class="text-xs text-center"><?php _e('Dark', 'iubenda') ?></p>
51
+ </label>
52
+ </div>
53
+ </div>
54
+ </div>
55
+
56
+ <!-- Button Position -->
57
+ <h4><?php _e('Button position', 'iubenda') ?></h4>
58
+ <div class="mb-2 d-flex align-items-center flex-wrap">
59
+ <label class="radio-regular mr-3">
60
+ <input type="radio" name="iubenda_terms_conditions_solution[button_position]" value="automatic" class="mr-2 section-radio-control" data-section-group=".tc_button_position" data-section-name="#tc_button_position_automatic" <?php checked( 'automatic', array_get(iubenda()->options['tc'], 'button_position')) ?>>
61
+ <span><?php _e('Add to the footer automatically', 'iubenda') ?></span>
62
+ </label>
63
+ <label class="mr-4 radio-regular text-xs">
64
+ <input type="radio" name="iubenda_terms_conditions_solution[button_position]" value="manual" class="mr-2 section-radio-control" data-section-group=".tc_button_position" data-section-name="#tc_button_position_manually" <?php checked( 'manual', array_get(iubenda()->options['tc'], 'button_position')) ?>>
65
+ <span><?php _e('Integrate manually', 'iubenda') ?></span>
66
+ </label>
67
+ </div>
68
+ <?php
69
+ global $wp_registered_sidebars;
70
+
71
+ // If sidebar-1 not registered or not activated
72
+ if (!boolval(array_get($wp_registered_sidebars, 'sidebar-1'))){
73
+ ?>
74
+ <section id="tc_button_position_automatic" class="tc_button_position <?php echo array_get(iubenda()->options['tc'], 'button_position') == 'automatic' ?:'hidden' ; ?>">
75
+ <div class="notice notice--warning mt-2 mb-4 p-3 d-flex align-items-center text-warning text-xs">
76
+ <img class="mr-2" src="<?php echo IUBENDA_PLUGIN_URL ?>/assets/images/warning-icon.svg">
77
+ <p><?php echo sprintf( __( 'We were not able to add a "Legal" widget to the footer as your theme is not compatible, you can position the "Legal" widget manually from <a href="%s" target="_blank">here</a>.', 'iubenda' ), esc_url( admin_url( 'widgets.php' ) ) ) ?></p>
78
+ </div>
79
+ </section>
80
+ <?php
81
+ }
82
+ ?>
83
+ <section id="tc_button_position_manually" class="tc_button_position <?php echo array_get(iubenda()->options['tc'], 'button_position') == 'manual' ?:'hidden' ; ?>">
84
+ <div class="mb-3 p-0">
85
+ <div class="my-5">
86
+ <h4><?php _e('HTML', 'iubenda') ?></h4>
87
+ <fieldset class="paste_embed_code tabs tabs--style2">
88
+ <ul class="tabs__nav">
89
+ <?php foreach(iubenda()->languages as $k => $v): ?>
90
+ <li class="tabs__nav__item <?php echo $k == iubenda()->lang_default?'active':false ; ?>" data-target="tab-<?php echo $k ; ?>" data-group="language-tabs">
91
+ <?php echo strtoupper($k) ; ?>
92
+ </li>
93
+ <?php endforeach; ?>
94
+ </ul>
95
+ <?php
96
+ $languages = (new ProductHelper())->get_languages();
97
+ foreach($languages as $lang_id => $v):
98
+ $code = array_get(iubenda()->options['tc'], "code_{$lang_id}");
99
+ $code = html_entity_decode(iubenda()->parse_code($code));
100
+ ?>
101
+ <div data-target="tab-<?php echo $lang_id ; ?>" class="tabs__target <?php echo $lang_id == iubenda()->lang_default || $lang_id == 'default'? 'active': '' ; ?>" data-group="language-tabs">
102
+ <textarea readonly class='form-control text-sm m-0 iub-tc-code' id="iub-tc-code-<?php echo $lang_id; ?>" placeholder='<?php _e('Your embed code', 'iubenda') ?>' rows='4'><?php echo $code ?></textarea>
103
+ </div>
104
+ <?php endforeach; ?>
105
+
106
+ </fieldset>
107
+ </div>
108
+ </div>
109
+ <div class="mb-3 p-0">
110
+ <div class="my-5">
111
+ <h4><?php _e('Shortcode', 'iubenda') ?></h4>
112
+ <p>A shortcode is a tiny bit of code that allows embedding interactive elements or creating complex page layouts with a minimal effort.<br>Just copy and paste the shortcode where you want the button to appear.</p>
113
+ <fieldset class="paste_embed_code">
114
+ <div class="notice notice--general mt-2 mb-4 p-3 d-flex text-lg-bold">
115
+ <span>[iub-tc-button]</span>
116
+ </div>
117
+ </fieldset>
118
+ </div>
119
+ </div>
120
+ </section>
121
+ </div>
122
+ </div>
123
+ <hr>
124
+ <div class="p-4 d-flex justify-content-end">
125
+ <input class="btn btn-gray-lighter btn-sm mr-2" type="button" value="<?php _e('Cancel', 'iubenda') ?>" onclick="window.location.href = '<?php echo esc_url(add_query_arg(array('view' => 'products-page'), iubenda()->base_url)) ?>'"/>
126
+ <button type="submit" class="btn btn-green-primary btn-sm" value="Save" name="save">
127
+ <span class="button__text"><?php _e('Save settings', 'iubenda') ?></span>
128
+ </button>
129
+ </div>
130
+ </form>
131
+ </div>
132
+
133
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/modals/modal_ops_embed_invalid.php'; ?>
134
+ <?php require_once IUBENDA_PLUGIN_PATH . '/views/partials/footer.php'; ?>
135
+