Version Description
- translation fixes
- popup "all details" language fix
- popup css compatibility improved
- popup button alignment fixed
- darkmode improvements
- added hoster
Download this release
Release Info
Developer | shapepress |
Plugin | WP DSGVO Tools |
Version | 3.0.20 |
Comparing to | |
See all releases |
Code changes from version 2.2.24 to 3.0.20
- .buildpath +0 -5
- .project +0 -22
- Licensing/GPL.txt +84 -84
- Licensing/README_License.txt +4 -4
- README.txt +168 -330
- README_DE.txt +0 -245
- admin/base.php +61 -109
- admin/class-sp-dsgvo-admin-action.php +24 -24
- admin/class-sp-dsgvo-admin-tab.php +59 -45
- admin/class-sp-dsgvo-admin.php +303 -315
- admin/css/bootstrap.min.css +13 -0
- admin/css/fonts/open-sans/opensans-bold-webfont.woff2 +0 -0
- admin/css/fonts/open-sans/opensans-bolditalic-webfont.woff2 +0 -0
- admin/css/fonts/open-sans/opensans-italic-webfont.woff2 +0 -0
- admin/css/fonts/open-sans/opensans-light-webfont.woff2 +0 -0
- admin/css/fonts/open-sans/opensans-lightitalic-webfont.woff2 +0 -0
- admin/css/fonts/open-sans/opensans-regular-webfont.woff2 +0 -0
- admin/css/fonts/open-sans/opensans-semibold-webfont.woff2 +0 -0
- admin/css/fonts/open-sans/opensans-semibolditalic-webfont.woff2 +0 -0
- admin/css/sp-dsgvo-admin.css +584 -158
- admin/images/cookies/Cookie1.png +0 -0
- admin/images/cookies/Cookie10.png +0 -0
- admin/images/cookies/Cookie11.png +0 -0
- admin/images/cookies/Cookie12.png +0 -0
- admin/images/cookies/Cookie13.png +0 -0
- admin/images/cookies/Cookie14.png +0 -0
- admin/images/cookies/Cookie2.png +0 -0
- admin/images/cookies/Cookie3.png +0 -0
- admin/images/cookies/Cookie4.png +0 -0
- admin/images/cookies/Cookie5.png +0 -0
- admin/images/cookies/Cookie6.png +0 -0
- admin/images/cookies/Cookie7.png +0 -0
- admin/images/cookies/Cookie8.png +0 -0
- admin/images/cookies/Cookie9.png +0 -0
- admin/images/logobackupsvg +9 -9
- admin/js/bootstrap.min.js +7 -0
- admin/js/sp-dsgvo-admin.js +466 -186
- admin/tabs/common-settings/class-sp-dsgvo-common-settings-action.php +0 -46
- admin/tabs/common-settings/page.php +0 -254
- admin/tabs/cookie-notice/class-sp-dsgvo-cookie-notice-action.php +0 -88
- admin/tabs/cookie-notice/page.php +0 -729
- admin/tabs/gravity-forms/class-sp-dsgvo-gravity-forms-action.php +23 -23
- admin/tabs/gravity-forms/class-sp-dsgvo-gravity-forms-tab.php +34 -34
- admin/tabs/gravity-forms/page.php +60 -60
- admin/tabs/imprint/class-sp-dsgvo-imprint-action.php +0 -27
- admin/tabs/imprint/class-sp-dsgvo-imprint-tab.php +0 -17
- admin/tabs/imprint/page.php +0 -69
- admin/tabs/integrations/class-sp-dsgvo-integrations-action.php +22 -22
- admin/tabs/integrations/class-sp-dsgvo-integrations-tab.php +16 -16
- admin/tabs/integrations/page.php +45 -45
- admin/tabs/premium/class-sp-dsgvo-premium-action.php +0 -15
- admin/tabs/premium/class-sp-dsgvo-premium-tab.php +0 -15
- admin/tabs/premium/page.php +0 -1
- admin/tabs/privacy-policy/class-sp-dsgvo-privacy-policy-tab.php +0 -17
- admin/tabs/privacy-policy/page.php +0 -97
- admin/tabs/services/class-sp-dsgvo-add-service-action.php +0 -41
- admin/tabs/services/class-sp-dsgvo-delete-service-action.php +0 -30
- admin/tabs/services/class-sp-dsgvo-services-action.php +0 -44
- admin/tabs/services/class-sp-dsgvo-services-tab.php +0 -16
- admin/tabs/services/page.php +0 -200
- admin/tabs/setup/class-sp-dsgvo-create-page-action.php +101 -128
- admin/tabs/setup/class-sp-dsgvo-setup-tab.php +15 -15
- admin/tabs/setup/page.php +8 -8
- admin/tabs/subject-access-request/class-sp-dsgvo-subject-access-request-action.php +0 -43
- admin/tabs/subject-access-request/page.php +0 -230
- admin/tabs/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-action.php +0 -56
- admin/tabs/super-unsubscribe/page.php +0 -345
- admin/tabs/terms-conditions/class-sp-dsgvo-terms-conditions-action.php +0 -54
- admin/tabs/terms-conditions/class-sp-dsgvo-terms-conditions-tab.php +0 -14
- admin/tabs/terms-conditions/page.php +0 -129
- admin/tabs/v3/common-settings/class-sp-dsgvo-common-settings-action.php +41 -0
- admin/tabs/{common-settings → v3/common-settings}/class-sp-dsgvo-common-settings-activate-action.php +123 -118
- admin/tabs/{common-settings → v3/common-settings}/class-sp-dsgvo-common-settings-tab.php +17 -17
- admin/tabs/{common-settings → v3/common-settings}/class-sp-dsgvo-common-settings-validate-license-action.php +85 -81
- admin/tabs/{privacy-policy → v3/common-settings}/class-sp-dsgvo-privacy-policy-action.php +49 -40
- admin/tabs/v3/common-settings/page.php +352 -0
- admin/tabs/v3/info/class-sp-dsgvo-info-tab.php +17 -0
- admin/tabs/v3/info/page.php +85 -0
- admin/tabs/v3/operator/class-sp-dsgvo-imprint-action.php +34 -0
- admin/tabs/v3/operator/class-sp-dsgvo-operator-action.php +83 -0
- admin/tabs/v3/operator/class-sp-dsgvo-operator-tab.php +17 -0
- admin/tabs/v3/operator/page.php +557 -0
- admin/tabs/v3/page-basics/class-sp-dsgvo-page-basics-action.php +60 -0
- admin/tabs/v3/page-basics/class-sp-dsgvo-page-basics-tab.php +17 -0
- admin/tabs/v3/page-basics/page.php +467 -0
- admin/tabs/v3/popup-notice/class-sp-dsgvo-cookie-notice-action.php +49 -0
- admin/tabs/{cookie-notice → v3/popup-notice}/class-sp-dsgvo-cookie-notice-tab.php +17 -17
- admin/tabs/v3/popup-notice/page.php +375 -0
- admin/tabs/v3/stats/class-sp-dsgvo-stats-action.php +19 -0
- admin/tabs/v3/stats/class-sp-dsgvo-stats-tab.php +17 -0
- admin/tabs/v3/stats/page.php +50 -0
- admin/tabs/v3/subject-access-request/class-sp-dsgvo-subject-access-request-action.php +52 -0
- admin/tabs/{subject-access-request → v3/subject-access-request}/class-sp-dsgvo-subject-access-request-tab.php +16 -16
- admin/tabs/v3/subject-access-request/page.php +298 -0
- admin/tabs/{super-unsubscribe → v3/super-unsubscribe}/class-sp-dsgvo-dismiss-unsubscribe-action.php +16 -20
- admin/tabs/v3/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-action.php +75 -0
- admin/tabs/{super-unsubscribe → v3/super-unsubscribe}/class-sp-dsgvo-super-unsubscribe-tab.php +15 -15
- admin/tabs/v3/super-unsubscribe/page.php +433 -0
- admin/tabs/v3/targeting/class-sp-dsgvo-targeting-action.php +19 -0
- admin/tabs/v3/targeting/class-sp-dsgvo-targeting-tab.php +17 -0
- admin/tabs/v3/targeting/page.php +34 -0
- imprint.txt +0 -18
- includes/class-sp-dsgvo-activator.php +35 -35
- includes/class-sp-dsgvo-ajax-action.php +220 -240
- includes/class-sp-dsgvo-cache-manager.php +50 -0
- includes/class-sp-dsgvo-constants.php +418 -0
- includes/class-sp-dsgvo-cookie-category-api.php +75 -0
- includes/class-sp-dsgvo-cron.php +88 -88
- includes/class-sp-dsgvo-data-collecter.php +469 -469
- includes/class-sp-dsgvo-deactivator.php +36 -36
- includes/class-sp-dsgvo-integration-api-base.php +291 -0
- includes/class-sp-dsgvo-integration.php +103 -97
- includes/class-sp-dsgvo-javascript.php +102 -0
- includes/class-sp-dsgvo-language-tools.php +219 -0
- includes/class-sp-dsgvo-loader.php +128 -128
- includes/class-sp-dsgvo-log.php +146 -146
- includes/class-sp-dsgvo-mail.php +399 -399
- includes/class-sp-dsgvo-migrator.php +99 -0
- includes/class-sp-dsgvo-pdf.php +70 -70
- includes/class-sp-dsgvo-settings-polylang.php +89 -68
- includes/class-sp-dsgvo-settings.php +289 -319
- includes/class-sp-dsgvo-slim-model.php +654 -655
- includes/class-sp-dsgvo-upgrade-notice-tools.php +101 -0
- includes/class-sp-dsgvo.php +444 -399
- includes/cron/do-check-privacy-policy-texts.php +78 -0
- includes/cron/do-delete-data-request.php +34 -34
- includes/cron/do-subject-access-request.php +34 -34
- includes/cron/do-validate-license.php +81 -77
- includes/emails/feedback.html +16 -16
- includes/emails/footer.html +10 -10
- includes/emails/header.html +214 -219
.buildpath
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
-
<buildpath>
|
3 |
-
<buildpathentry kind="src" path=""/>
|
4 |
-
<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
|
5 |
-
</buildpath>
|
|
|
|
|
|
|
|
|
|
.project
DELETED
@@ -1,22 +0,0 @@
|
|
1 |
-
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
-
<projectDescription>
|
3 |
-
<name>shapepress-dsgvo</name>
|
4 |
-
<comment></comment>
|
5 |
-
<projects>
|
6 |
-
</projects>
|
7 |
-
<buildSpec>
|
8 |
-
<buildCommand>
|
9 |
-
<name>org.eclipse.wst.validation.validationbuilder</name>
|
10 |
-
<arguments>
|
11 |
-
</arguments>
|
12 |
-
</buildCommand>
|
13 |
-
<buildCommand>
|
14 |
-
<name>org.eclipse.dltk.core.scriptbuilder</name>
|
15 |
-
<arguments>
|
16 |
-
</arguments>
|
17 |
-
</buildCommand>
|
18 |
-
</buildSpec>
|
19 |
-
<natures>
|
20 |
-
<nature>org.eclipse.php.core.PHPNature</nature>
|
21 |
-
</natures>
|
22 |
-
</projectDescription>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Licensing/GPL.txt
CHANGED
@@ -1,85 +1,85 @@
|
|
1 |
-
GNU GENERAL PUBLIC LICENSE
|
2 |
-
Version 2, June 1991
|
3 |
-
|
4 |
-
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
5 |
-
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
6 |
-
|
7 |
-
Everyone is permitted to copy and distribute verbatim copies
|
8 |
-
of this license document, but changing it is not allowed.
|
9 |
-
|
10 |
-
Preamble
|
11 |
-
|
12 |
-
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.
|
13 |
-
|
14 |
-
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
|
15 |
-
|
16 |
-
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
|
17 |
-
|
18 |
-
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
|
19 |
-
|
20 |
-
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
|
21 |
-
|
22 |
-
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
|
23 |
-
|
24 |
-
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
|
25 |
-
|
26 |
-
The precise terms and conditions for copying, distribution and modification follow.
|
27 |
-
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
28 |
-
|
29 |
-
0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
|
30 |
-
|
31 |
-
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
|
32 |
-
|
33 |
-
1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
|
34 |
-
|
35 |
-
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
|
36 |
-
|
37 |
-
2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
|
38 |
-
|
39 |
-
a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
|
40 |
-
b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
|
41 |
-
c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
|
42 |
-
|
43 |
-
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
|
44 |
-
|
45 |
-
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
|
46 |
-
|
47 |
-
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
|
48 |
-
|
49 |
-
3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
|
50 |
-
|
51 |
-
a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
|
52 |
-
b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
|
53 |
-
c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
|
54 |
-
|
55 |
-
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
|
56 |
-
|
57 |
-
If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
|
58 |
-
|
59 |
-
4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
|
60 |
-
|
61 |
-
5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
|
62 |
-
|
63 |
-
6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
|
64 |
-
|
65 |
-
7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
|
66 |
-
|
67 |
-
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
|
68 |
-
|
69 |
-
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
|
70 |
-
|
71 |
-
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
|
72 |
-
|
73 |
-
8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
|
74 |
-
|
75 |
-
9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
|
76 |
-
|
77 |
-
Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
|
78 |
-
|
79 |
-
10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
|
80 |
-
|
81 |
-
NO WARRANTY
|
82 |
-
|
83 |
-
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
84 |
-
|
85 |
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
1 |
+
GNU GENERAL PUBLIC LICENSE
|
2 |
+
Version 2, June 1991
|
3 |
+
|
4 |
+
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
5 |
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
6 |
+
|
7 |
+
Everyone is permitted to copy and distribute verbatim copies
|
8 |
+
of this license document, but changing it is not allowed.
|
9 |
+
|
10 |
+
Preamble
|
11 |
+
|
12 |
+
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.
|
13 |
+
|
14 |
+
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
|
15 |
+
|
16 |
+
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
|
17 |
+
|
18 |
+
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
|
19 |
+
|
20 |
+
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
|
21 |
+
|
22 |
+
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
|
23 |
+
|
24 |
+
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
|
25 |
+
|
26 |
+
The precise terms and conditions for copying, distribution and modification follow.
|
27 |
+
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
28 |
+
|
29 |
+
0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
|
30 |
+
|
31 |
+
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
|
32 |
+
|
33 |
+
1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
|
34 |
+
|
35 |
+
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
|
36 |
+
|
37 |
+
2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
|
38 |
+
|
39 |
+
a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
|
40 |
+
b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
|
41 |
+
c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
|
42 |
+
|
43 |
+
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
|
44 |
+
|
45 |
+
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
|
46 |
+
|
47 |
+
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
|
48 |
+
|
49 |
+
3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
|
50 |
+
|
51 |
+
a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
|
52 |
+
b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
|
53 |
+
c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
|
54 |
+
|
55 |
+
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
|
56 |
+
|
57 |
+
If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
|
58 |
+
|
59 |
+
4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
|
60 |
+
|
61 |
+
5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
|
62 |
+
|
63 |
+
6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
|
64 |
+
|
65 |
+
7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
|
66 |
+
|
67 |
+
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
|
68 |
+
|
69 |
+
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
|
70 |
+
|
71 |
+
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
|
72 |
+
|
73 |
+
8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
|
74 |
+
|
75 |
+
9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
|
76 |
+
|
77 |
+
Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
|
78 |
+
|
79 |
+
10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
|
80 |
+
|
81 |
+
NO WARRANTY
|
82 |
+
|
83 |
+
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
84 |
+
|
85 |
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
Licensing/README_License.txt
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
-
This theme or plugin is comprised of two parts.
|
2 |
-
|
3 |
-
(1) the PHP code and integrated HTML are licensed under the General Public
|
4 |
-
License (GPL). You will find a copy of the GPL in the same directory as this
|
5 |
text file.
|
1 |
+
This theme or plugin is comprised of two parts.
|
2 |
+
|
3 |
+
(1) the PHP code and integrated HTML are licensed under the General Public
|
4 |
+
License (GPL). You will find a copy of the GPL in the same directory as this
|
5 |
text file.
|
README.txt
CHANGED
@@ -1,330 +1,168 @@
|
|
1 |
-
=== WP DSGVO Tools (GDPR) ===
|
2 |
-
Contributors:
|
3 |
-
Donate link: https://
|
4 |
-
Tags: gdpr, dsgvo, datenschutz, wordpress, compliance,
|
5 |
-
Requires at least: 3.0.1
|
6 |
-
Tested up to: 5.3.
|
7 |
-
Stable tag:
|
8 |
-
Requires PHP: 5.6.0
|
9 |
-
License: GPLv2 or later
|
10 |
-
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
-
|
12 |
-
WP DSGVO Tools (GDPR) help you to fulfill the GDPR (
|
13 |
-
|
14 |
-
== Description ==
|
15 |
-
|
16 |
-
|
17 |
-
Easy installation, dozens of useful features, and lots of information on how to make your website compliant.
|
18 |
-
Try it for free and expand your
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
*
|
23 |
-
* Cookie Notice with selective Opt-In & Opt-Out
|
24 |
-
*
|
25 |
-
*
|
26 |
-
*
|
27 |
-
*
|
28 |
-
*
|
29 |
-
*
|
30 |
-
*
|
31 |
-
|
32 |
-
|
33 |
-
*
|
34 |
-
|
35 |
-
|
36 |
-
*
|
37 |
-
*
|
38 |
-
*
|
39 |
-
*
|
40 |
-
*
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
*
|
85 |
-
*
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
*
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
*
|
105 |
-
|
106 |
-
|
107 |
-
*
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
*
|
114 |
-
|
115 |
-
|
116 |
-
*
|
117 |
-
*
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
*
|
124 |
-
*
|
125 |
-
|
126 |
-
|
127 |
-
*
|
128 |
-
|
129 |
-
|
130 |
-
* updated
|
131 |
-
* fixed
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
*
|
138 |
-
*
|
139 |
-
*
|
140 |
-
*
|
141 |
-
|
142 |
-
|
143 |
-
*
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
*
|
155 |
-
|
156 |
-
|
157 |
-
=
|
158 |
-
*
|
159 |
-
|
160 |
-
|
161 |
-
*
|
162 |
-
|
163 |
-
|
164 |
-
*
|
165 |
-
|
166 |
-
|
167 |
-
*
|
168 |
-
*
|
169 |
-
* Moved comment checkbox before "Send-Button" and improved validation
|
170 |
-
* Moved Woocommerce privacy-policy checkbox before "Send-Button"
|
171 |
-
* Improved uninstall method
|
172 |
-
* Cleaned logging
|
173 |
-
* Bugfix at saving custom tracker scripts
|
174 |
-
|
175 |
-
= 2.1.3 =
|
176 |
-
* Bugfixes at PDF generation
|
177 |
-
|
178 |
-
= 2.1.2 =
|
179 |
-
* Bugfix Woocommerce checkout checkbox: default text now gets displayed correct.
|
180 |
-
|
181 |
-
= 2.1.1 =
|
182 |
-
* Änderung des TCPDF PDF Creator String da manche Virenscanner diesen als bedrohlich einstuften und dies zu Fehler beim Laden führte
|
183 |
-
* Verbesserung des Cookie Popups
|
184 |
-
* Fehlerbehebung bei den Datenschutzeinstellungen der Benutzer in Kombination mit dem Cookie Popups
|
185 |
-
* Fehlerbehebung bei der Polylang Integration
|
186 |
-
|
187 |
-
= 2.1.0 =
|
188 |
-
* Bugfix Sprachdateien/Mehrsprachigkeit
|
189 |
-
* Geschwindigkeit des Cookie Poups verbessert
|
190 |
-
* Möglichkeit zum Umbennen der Buttons im Cookie Popup ergänzt
|
191 |
-
* Fehlerbehebung bei Cookie Opt-Out
|
192 |
-
* Debugwarnungen korrigiert bzw. entfernt
|
193 |
-
* Fehlerbehebung: Eigener Trackingcode wird nun korrekt übernommen.
|
194 |
-
* TCPDF Konflikt behoben
|
195 |
-
* Security verbessert
|
196 |
-
* Polylang Plugin Kompatibilität verbessert
|
197 |
-
* Bugfix Buddypress Integration
|
198 |
-
|
199 |
-
= 2.0.4 =
|
200 |
-
* Bugfix: Abschalten der Cookie Notice
|
201 |
-
|
202 |
-
= 2.0.3 =
|
203 |
-
* Sprachdateien für Deutsch (Sie) ergänzt
|
204 |
-
* Fehler beim Akzeptieren des Cookie Popups behoben
|
205 |
-
|
206 |
-
= 2.0.2 =
|
207 |
-
* Fehler beim Laden der Email Templates behoben falls die eingestellte Sprache de_DE_formal ist.
|
208 |
-
|
209 |
-
= 2.0.1 =
|
210 |
-
* Standardwert für die Cookie Notice Art
|
211 |
-
|
212 |
-
= 2.0.0 =
|
213 |
-
* Cookie Notice Popup (Premium Edition)
|
214 |
-
* HTML nun im Hinweisfeld für Kommentare möglich
|
215 |
-
* Bugfix: mehr als 10 Anfragen in der Liste bei Datenauszug und Löschanfrage möglich
|
216 |
-
* Bugfix: Kompatibilität zum Divi Theme hergestellt
|
217 |
-
* Text bei WooCommerce Datenschutzcheckbox nun editierbar
|
218 |
-
* Benutzerdefinierte Trackerscripts für Google Analytics und FB Pixel (ab Blog Edition)
|
219 |
-
* kleinere Bugfixes und Verbesserungen
|
220 |
-
|
221 |
-
= 1.5.6 =
|
222 |
-
* Aktivierungsprobleme behoben
|
223 |
-
|
224 |
-
= 1.5.1 =
|
225 |
-
* Bugfixes
|
226 |
-
|
227 |
-
= 1.5.0 =
|
228 |
-
* WPML Unterstützung (nur Premium) inkl. englischer Datenschutztexte
|
229 |
-
* WooCommerce Option zur Zustimmung der Datenschutzbestimmungen beim Checkout (nur Premium)
|
230 |
-
* Kleine Fehlerbehebungen
|
231 |
-
|
232 |
-
= 1.4.6 =
|
233 |
-
* CSS Verbeserung bei Cookie Notice
|
234 |
-
* Konfigurierbare Checkboxen bei Datenauszug- und Löschanfrage zur Zustimmung der Datenspeicherung
|
235 |
-
|
236 |
-
= 1.4.5 =
|
237 |
-
* CF7 Fehlerbehebung
|
238 |
-
* CF7 Möglichkeit zur Ersetzung des Texts bei Acceptance Checkboxen mit dem DSGVO Zustimmungstext
|
239 |
-
* Flamingo Integration für; CF7 beim Datenauszug und Löschanfrage
|
240 |
-
* diverse CSS Verbesserungen zur besseren Themekompatibilität
|
241 |
-
* Fehlerbehebung beim Datenauszug mit WooCommerce
|
242 |
-
* Link zu den FB Terms aktualisiert
|
243 |
-
* Fehlerbehebung bei Speicherung der Animationseinstellung der Cookie Notice
|
244 |
-
* Option zum Verhindern des Setzens eines Cookies bei Ablehnung und Weiterleitung
|
245 |
-
|
246 |
-
= 1.4.4 =
|
247 |
-
* Korrektur Email Betreff bei Löschanfrage
|
248 |
-
|
249 |
-
= 1.4.3 =
|
250 |
-
* Feature Request: Overlay bei Cookie Notice um ein Agieren vor Zustimmung/Ablehnung zu verhindern
|
251 |
-
|
252 |
-
= 1.4.2 =
|
253 |
-
* Problem mit Cookie Notice behoben
|
254 |
-
|
255 |
-
= 1.4.1 =
|
256 |
-
* Umlaute in den Betreffzeilen der Mails korrigiert
|
257 |
-
|
258 |
-
= 1.4.0 =
|
259 |
-
* bbPress Integration bei Datenauszug und Lö:schanfrage (nur Premium)
|
260 |
-
* buddyPress Integration (Felder, Nachrichten) bei Datenauszug und Lö:schanfrage (nur Premium)
|
261 |
-
* Styles der Formulare und Buttons werden nun hauptsächlich vom Theme übernommen
|
262 |
-
* Placeholder bei Datenauszug und Löschanfrage angepasst
|
263 |
-
* [user_privacy_settings] Cache Problem gelöst
|
264 |
-
* [user_privacy_settings] nun responsive
|
265 |
-
* Absenderemailadresse bei generierten Mails wird nun von den Einstellungen übernommen
|
266 |
-
* Kleinere Fehlerbehebungen
|
267 |
-
|
268 |
-
= 1.3.8 =
|
269 |
-
* Kosmetik
|
270 |
-
|
271 |
-
= 1.3.7 =
|
272 |
-
* Diverese Fehlerbehebungen
|
273 |
-
|
274 |
-
= 1.3.6 =
|
275 |
-
* Überarbeitung des Datenauszug Templates
|
276 |
-
* Ergänzung der Kommentartexte bei eingeloggten User beim Datenauszug
|
277 |
-
* Skriptverbesserung Kommentarcheckbox
|
278 |
-
* Filter zur Erweiterung des Datenauszugs und der Löschanfrage
|
279 |
-
|
280 |
-
= 1.3.5 =
|
281 |
-
* Verbesserung bei Kommentarcheckbox
|
282 |
-
|
283 |
-
= 1.3.4 =
|
284 |
-
* UTF-8 Codierungsoptimierung
|
285 |
-
|
286 |
-
= 1.3.3 =
|
287 |
-
* Verbesserung beim Opt-Out von GA
|
288 |
-
|
289 |
-
= 1.3.2 =
|
290 |
-
* Kleine Fehlerbehebungen und Korrekturen
|
291 |
-
|
292 |
-
= 1.3.1 =
|
293 |
-
* Fehlerbehebung Texte der Kommentar Checkbox
|
294 |
-
|
295 |
-
= 1.3.0 =
|
296 |
-
* automatische Benachrichtigung via Email bei neuen Datenauszugs- und Löschanfragen (nur Premium)
|
297 |
-
* Fehlerbehebung Cookie Notice: Ablehnen Button mit der Weiterleitung
|
298 |
-
* Fehlerbehung Cookie Notice: Icon ausblenden
|
299 |
-
* Fehlerbehebung: Allgemein mit Sonderzeichen und Schreibfehler
|
300 |
-
* Fehlerbebehung Email Templates: Sonderzeichen nun html codiert
|
301 |
-
* diverse Fehlerbehebungen
|
302 |
-
|
303 |
-
= 1.2.2 =
|
304 |
-
* Lizenzierung angepasst
|
305 |
-
|
306 |
-
= 1.2.1 =
|
307 |
-
* Texte der Checkbox bei den Kommentaren nun anpassbar (ab Blog Edition)
|
308 |
-
* Cookie Notice Validierung im Zusammenhang mit div. Caches behoben
|
309 |
-
* Administratoren von Löschanfragen ausgenommen
|
310 |
-
|
311 |
-
= 1.2.0 =
|
312 |
-
* Problemen mit CSS Styles der Cookie Notice behoben
|
313 |
-
* Möglichkeit zur farblichen Anpassung der Cookie Notice hinzugefügt (ab Blog Edition)
|
314 |
-
* Fehler beim Opt-In von Google Analytics behoben
|
315 |
-
|
316 |
-
= 1.1.2 =
|
317 |
-
* Funktionsnamenskonflikt behoben (manche User erhielten einen HTTP 500 in Kombination mit anderen Plugins)
|
318 |
-
|
319 |
-
= 1.1.1 =
|
320 |
-
* Verbesserungen bei der Tracker-Einbindung
|
321 |
-
|
322 |
-
= 1.1.0 =
|
323 |
-
* Diverse Fehlerbehebungen und Optimierungen
|
324 |
-
|
325 |
-
= 1.0.0 =
|
326 |
-
* Initiale Version von WP DSGVO Tools.
|
327 |
-
|
328 |
-
== Upgrade Notice ==
|
329 |
-
= 2.2.23 =
|
330 |
-
* Our big update - version 3 coming soon
|
1 |
+
=== WP DSGVO Tools (GDPR) ===
|
2 |
+
Contributors: legalweb
|
3 |
+
Donate link: https://legalweb.io
|
4 |
+
Tags: gdpr, dsgvo, datenschutz, privacy, privacy policy, imprint, impressum, wordpress, compliance, privacy, woocommerce, law
|
5 |
+
Requires at least: 3.0.1
|
6 |
+
Tested up to: 5.3.3
|
7 |
+
Stable tag: 3.0.20
|
8 |
+
Requires PHP: 5.6.0
|
9 |
+
License: GPLv2 or later
|
10 |
+
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
+
|
12 |
+
WP DSGVO Tools (GDPR) by <a target="_blank" href="https://www.legalweb.io">legalweb.io</a> help you to fulfill the GDPR (DSGVO) compliance guidance (<a target="_blank" href="https://ico.org.uk/for-organisations/data-protection-reform/overview-of-the-gdpr/">GDPR</a>)
|
13 |
+
|
14 |
+
== Description ==
|
15 |
+
|
16 |
+
Make WordPress Website & WooCommerce Shop GDPR compliant and provide legally compliant privacy policy texts.
|
17 |
+
Easy installation, dozens of useful features, and lots of information on how to make your website compliant. Made by IT professionals and lawyers (Visit <a target="_blank" href="https://www.legalweb.io">legalweb.io</a> for more information).
|
18 |
+
Try it for free and expand your features with our premium version.
|
19 |
+
Important note: This plugin only supports/helps you to fulfill GDPR (DSGVO) compliance guidance. Installing is not enough - a correct configuration of this plugin by a site administrator is mandatory to be to achieve conformity. 100% conformity only by the plugin can't be guaranteed because it depends on several other aspects.
|
20 |
+
|
21 |
+
Free Features
|
22 |
+
* Legally compliant privacy texts for AT, DE and third states
|
23 |
+
* Cookie Notice and Cookie Popup with selective Opt-In & Opt-Out
|
24 |
+
* Google Analytics, Matomo & WP Statistics GDPR compliant integration
|
25 |
+
* Right to be forgotten (with time management)
|
26 |
+
* Automated directory query (as PDF and JSON) & deletion
|
27 |
+
* Translatable, multi language support - officially WPML certified
|
28 |
+
* Pseudonymization
|
29 |
+
* Catalog to list data processing activities
|
30 |
+
* PHP 7.3 compatibility
|
31 |
+
|
32 |
+
**Premium Edition**
|
33 |
+
* All features of Free Edition
|
34 |
+
* Cookie Notice and Cookie Popup styling
|
35 |
+
* Cookie Notice style templates
|
36 |
+
* Automatic update of privacy policy texts
|
37 |
+
* Google Tag Manager compatibility (Opt-In for Tags)
|
38 |
+
* Customizable scripts of supported integrations
|
39 |
+
* More integrations: Facebook Pixel, Criteo, Clicky, Piwik, Etracker, Hotjar, Bing Ads, LinkedIn Pixel - will be continuously expanded
|
40 |
+
* Dozens of integrations for subject access request and delete request (WooCommerce, Gravity Forms, bbPress, buddyPress
|
41 |
+
* Get email notifications on new requests
|
42 |
+
* 12 months subscription of premium features
|
43 |
+
|
44 |
+
A full list of all features you can find at <a href="https://legalweb.io" target="_blank">https://legalweb.io</a>.
|
45 |
+
|
46 |
+
**SUPPORT**
|
47 |
+
Support requests only at <a href="https://legalweb.freshdesk.com/">https://legalweb.freshdesk.com</a>
|
48 |
+
|
49 |
+
== Installation ==
|
50 |
+
|
51 |
+
Just install via wordpress plugin feature or upload zip and activate it.
|
52 |
+
|
53 |
+
Important: Disable other cookie notice plugins and Google Analytics or FB Pixel plugins before installing.
|
54 |
+
|
55 |
+
== Screenshots ==
|
56 |
+
|
57 |
+
1. The Cookie Popup window
|
58 |
+
2. Common Settings
|
59 |
+
3. Settings for Cookie Popup and Notice
|
60 |
+
4. Settings for page operator which are used for privacy policy and imprint
|
61 |
+
5. Settings about the page basics
|
62 |
+
6. Statistic integrations
|
63 |
+
7. Targeting integrations
|
64 |
+
8. SAR settings
|
65 |
+
9. Pseudonymization Settings
|
66 |
+
|
67 |
+
== Changelog ==
|
68 |
+
= 3.0.20 =
|
69 |
+
* translation fixes
|
70 |
+
* popup "all details" language fix
|
71 |
+
* popup css compatibility improved
|
72 |
+
* popup button alignment fixed
|
73 |
+
* darkmode improvements
|
74 |
+
* added hoster
|
75 |
+
|
76 |
+
= 3.0.19 =
|
77 |
+
* popup logo fixes
|
78 |
+
* js bug fixes
|
79 |
+
* operator tab saving fixes
|
80 |
+
* gtag manager fix
|
81 |
+
|
82 |
+
= 3.0.18 =
|
83 |
+
* improved the text notification of free license
|
84 |
+
* optional email notification when new privacy texts are downloadable
|
85 |
+
* renamed icon file names to avoid a broken image link
|
86 |
+
* fixed translation errors
|
87 |
+
* darkmode color compatibility improved
|
88 |
+
|
89 |
+
= 3.0.17 =
|
90 |
+
* GTAG Manager fix
|
91 |
+
|
92 |
+
= 3.0.16 =
|
93 |
+
* fallback language for legal texts
|
94 |
+
* added LinkedIn Pixel, Bing Ads UET as targeting integration
|
95 |
+
* added Hotjar as statistic integration
|
96 |
+
* added SiteGround (Hosting) and Mailpoet (newslettering)
|
97 |
+
|
98 |
+
= 3.0.15 =
|
99 |
+
* translation improvement
|
100 |
+
* js script bugfix
|
101 |
+
|
102 |
+
= 3.0.14 =
|
103 |
+
* js frontenend fix
|
104 |
+
* clear caches of common plugin on saving of cookie notice/popup relevant data
|
105 |
+
* added techn. necessary integrations feature to popup
|
106 |
+
* allow "auto opt-in" for piwik and matomo according to latest gdpr facts
|
107 |
+
* updated legal texts
|
108 |
+
* added "no integration mode" for popup, just do display text and ok button
|
109 |
+
* newsletter provider added to backend and privacy policy
|
110 |
+
|
111 |
+
= 3.0.13 =
|
112 |
+
* fixes in imprint and privacy policy shortcode
|
113 |
+
* fixes casing of included fonts
|
114 |
+
* added WP Statistics
|
115 |
+
* added new hoster: lima city
|
116 |
+
* removed duplicated header in privacy policy
|
117 |
+
* css compatibility improvements
|
118 |
+
* improved translations
|
119 |
+
|
120 |
+
= 3.0.12 =
|
121 |
+
* down to 3.0.1
|
122 |
+
* moved styling functionality to Free version
|
123 |
+
* compatibility improvements to themes used by our users
|
124 |
+
* translation updates & fixes
|
125 |
+
* backend fix at delete request page actions
|
126 |
+
* css & html fixes of the frontend
|
127 |
+
* option to show popup although it's not needed
|
128 |
+
* fixed http 500 error at some installations with endless loop
|
129 |
+
* fixed casing of included fonts
|
130 |
+
* updated legal texts
|
131 |
+
* fixed click handler on mobile devices
|
132 |
+
* reacted to a lot of user wishes
|
133 |
+
|
134 |
+
= 3.0.0 =
|
135 |
+
* Redesigned the backend, separated functions, improved usability, added more help texts
|
136 |
+
* Redesigned frontend to ensure GDPR compliance - full opt-in for supported services/integrations
|
137 |
+
* Dynamic generation of valid and compliant privacy policy for AT, DE and third states + privacy policy text upgrade service
|
138 |
+
* Added Matomo in Free version, moved FB Pixel to Premium/Blog
|
139 |
+
* Sorted out unneeded or non mandatory functions in case of GDPR
|
140 |
+
* Cookie Popup now in all versions/editions
|
141 |
+
* Styles for cookie notice
|
142 |
+
* Dark mode for cookie popup
|
143 |
+
* TCPDF update to latest bits + improvement of compatibility to other plugins
|
144 |
+
* a lot of other bugfixes and improvements
|
145 |
+
|
146 |
+
= 2.2.24 =
|
147 |
+
* prepared info for v3
|
148 |
+
* added arial to TCPDF fonts
|
149 |
+
|
150 |
+
= 2.0.0 =
|
151 |
+
* A short time after v1, version 2 arrived with a lot of improvements & new features
|
152 |
+
|
153 |
+
= 1.0.0 =
|
154 |
+
* In the beginning there was a version 1
|
155 |
+
|
156 |
+
== Upgrade Notice ==
|
157 |
+
= 3.0.14 =
|
158 |
+
* Important: In V3 a lot of important changes have been made. Please check all your settings after updating to ensure correct functionality
|
159 |
+
* THE PLUGIN NEEDS A COMPLETE RECONFIGURATION TO FULFILL THE LATEST GDPR LAWS
|
160 |
+
* Changes:
|
161 |
+
* Redesigned the backend, separated functions, improved usability, added more help texts
|
162 |
+
* Redesigned frontend to ensure GDPR compliance - full opt-in for supported services/integrations
|
163 |
+
* Dynamic generation of valid and compliant privacy policy for AT and DE and third states + policy text upgrade service
|
164 |
+
* Matomo Integration in Free version, Facebook Pixel moved to Premium but still exists in Blog
|
165 |
+
* Sorted out unneeded or non mandatory functions in case of GDPR
|
166 |
+
* Cookie Popup now in all versions/editions
|
167 |
+
* WP DSGVO Tools (GDPR) now gets maintained by legalweb.io
|
168 |
+
* and much more
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
README_DE.txt
DELETED
@@ -1,245 +0,0 @@
|
|
1 |
-
=== WP DSGVO Tools ===
|
2 |
-
Contributors: Shapepress
|
3 |
-
Donate link: https://wp-dsgvo.eu
|
4 |
-
Tags: gdpr, dsgvo, datenschutz, wordpress, compliance, data
|
5 |
-
Requires at least: 3.0.1
|
6 |
-
Tested up to: 5.0.0
|
7 |
-
Stable tag: 2.1.4
|
8 |
-
Requires PHP: 5.6.0
|
9 |
-
License: GPLv2 or later
|
10 |
-
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
-
|
12 |
-
WP DSGVO Tools (GDPR) helfen beim Erfüllen der Richtlinien der Datenschutzgrundverordnung, spezialisiert auf Österreich und Deutschland.
|
13 |
-
|
14 |
-
== Description ==
|
15 |
-
|
16 |
-
Bereiten Sie Ihre WordPress Website auf die DSGVO vor und sichern Sie Ihre Userdaten ganz einfach mit unserem Plugin ab. Einfache Installation, dutzende nützliche Funktionen und schon sind die wichtigsten Maßnahmen für Ihre Website gesetzt.
|
17 |
-
Immer dann wenn Sie Personenbezogene Daten verarbeiten, müssen Sie sich um die sichere Verarbeitung, Handhabung & Verwaltung dieser kümmern. Unsere Plugin hilft Ihnen bei dieser aufwendigen Aufgabe.
|
18 |
-
**Auf Deutsches & Österreichisches Recht geprüft**.
|
19 |
-
Unser Plugin ist unverbindlich, wurde aber **mit Rechtsanwälten gemeinsam entwickelt**.
|
20 |
-
|
21 |
-
Features
|
22 |
-
* Rechtskonforme Datenschutztexte
|
23 |
-
* Google Analytics & FB-Pixel konform einrichten
|
24 |
-
* Cookie Notice mit selektiven Opt-In & Opt-Out
|
25 |
-
* Recht auf Vergessenheit (mit Zeit Option)
|
26 |
-
* Userdaten Auskunft (als PDF und JSON) & Löschung
|
27 |
-
* **WPML** Unterstützung inkl. englischer Datenschutztexte (String Translations)
|
28 |
-
* Contact Form 7 Integration
|
29 |
-
* Blog Kommentare Checkbox für DSGVO Zustimmung
|
30 |
-
* Pseudonomisierung
|
31 |
-
* VdV (Verzeichnis der Verarbeitungstätigkeiten)
|
32 |
-
* Tipps & Hilfe
|
33 |
-
* Kostenlose Updates
|
34 |
-
* PHP 7.2 Kompatibiltität
|
35 |
-
|
36 |
-
**Blog Edition**
|
37 |
-
* Alle Features der Free Edition
|
38 |
-
* **anpassbare Cookie Notice**
|
39 |
-
* Texte der Checkbox bei den Kommentaren anpassbar
|
40 |
-
* **Benutzerdefinierte Trackerscripts für Google Analytics und FB Pixel möglich**
|
41 |
-
* **Overlay** bei Cookie Notice um ein Agieren vor Zustimmung/Ablehnung zu verhindern
|
42 |
-
|
43 |
-
**Premium Edition**
|
44 |
-
* Alle Features der Free und Blog Edition
|
45 |
-
* Popup für Cookie Notice
|
46 |
-
* **Woocommerce Integration**
|
47 |
-
* Gravity Forms Integration
|
48 |
-
* Mailchimp Integration
|
49 |
-
* **bbPress** Integration
|
50 |
-
* **buddyPress** Integration
|
51 |
-
* **Cookie Notice anpassbar**
|
52 |
-
* **Email Benachrichtigung bei neuen Anfragen**
|
53 |
-
* Support Forum & professioneller Support
|
54 |
-
* 12 Monate Premium Updates
|
55 |
-
|
56 |
-
Optionale Features
|
57 |
-
* Expertenberatung
|
58 |
-
|
59 |
-
Eine detailierte Liste aller Funktionen finden Sie auf <a href="https://wp-dsgvo.eu/funktionen/" target="_blank">https://wp-dsgvo.eu/funktionen/</a>.
|
60 |
-
|
61 |
-
**SUPPORT**
|
62 |
-
Supportanfragen bitte ausschließlich per Email an <a href="mailto:support@wp-dsgvo.eu">support@wp-dsgvo.eu</a>
|
63 |
-
|
64 |
-
== Installation ==
|
65 |
-
|
66 |
-
Das Plugin per ZIP hochladen bzw. über den Wordpress Plugin-Installer installieren und aktivieren. Danach können alle Einstellungen angepasst werden.
|
67 |
-
|
68 |
-
WICHTIG: Vor der Installation bitte alle bisher aktivierten Cookie Notice/Google Analytics/FB Pixel Plugins deaktivieren bzw. deinstallieren. Ansonsten kann des zu Kompatibiltätsproblemen kommen.
|
69 |
-
|
70 |
-
== Screenshots ==
|
71 |
-
|
72 |
-
1. Das Cookie Popup Fenster
|
73 |
-
2. Einstellungen zum Cookie Popup
|
74 |
-
3. Einstellungen zur Cookie Notice
|
75 |
-
4. Einstellungen zu den Unternehmensdaten die als Basis für Impressum und Datenschutzvereinbarung gelten
|
76 |
-
5. Ansicht im Dashboard der Datenauszuganfragen
|
77 |
-
6. Einstellungen zur Checkbox bei Kommentaren
|
78 |
-
7. Einstellungen zum generierten Impressum
|
79 |
-
8. Einstellungen zur generierten Datenschutzvereinbarung
|
80 |
-
9. Benutzerdefinierte Einstellungen der Tracker der Benutzer/Besucher
|
81 |
-
10. Einstellungen zu den Trackern (Google Analytics, FB Pixel)
|
82 |
-
|
83 |
-
== Changelog ==
|
84 |
-
|
85 |
-
= 2.2.0 =
|
86 |
-
* Templates für en_GB
|
87 |
-
* WPML Stabilisierung
|
88 |
-
* Checkbox bei Kommentaren nun vor dem "Senden-Button", sowie Verbesserung der Validierung
|
89 |
-
* Woocommerce Checkbox zur Zustimmung der Datenschutzbestimmungen vor den Senden-Button verschoben
|
90 |
-
* Verbesserung der Plugin-Deinstallationsroutine
|
91 |
-
* Logging bereinigt
|
92 |
-
* Fehlerbehebung des ben. def. Tracking Codes
|
93 |
-
|
94 |
-
= 2.1.3 =
|
95 |
-
* Fehlerbehebung beim Datenauszug bei der PDF Generierung
|
96 |
-
|
97 |
-
= 2.1.2 =
|
98 |
-
* Bugfix Woocommerce Checkout Checkbox: Standardtext wird nun korrekt angezeigt.
|
99 |
-
|
100 |
-
= 2.1.1 =
|
101 |
-
* Änderung des TCPDF PDF Creator String da manche Virenscanner diesen als bedrohlich einstuften und dies zu Fehler beim Laden führte
|
102 |
-
* Verbesserung des Cookie Popups
|
103 |
-
* Fehlerbehebung bei den Datenschutzeinstellungen der Benutzer in Kombination mit dem Cookie Popups
|
104 |
-
* Fehlerbehebung bei der Polylang Integration
|
105 |
-
|
106 |
-
= 2.1.0 =
|
107 |
-
* Bugfix Sprachdateien/Mehrsprachigkeit
|
108 |
-
* Geschwindigkeit des Cookie Poups verbessert
|
109 |
-
* Möglichkeit zum Umbennen der Buttons im Cookie Popup ergänzt
|
110 |
-
* Fehlerbehebung bei Cookie Opt-Out
|
111 |
-
* Debugwarnungen korrigiert bzw. entfernt
|
112 |
-
* Fehlerbehebung: Eigener Trackingcode wird nun korrekt übernommen.
|
113 |
-
* TCPDF Konflikt behoben
|
114 |
-
* Security verbessert
|
115 |
-
* Polylang Plugin Kompatibilität verbessert
|
116 |
-
* Bugfix Buddypress Integration
|
117 |
-
|
118 |
-
= 2.0.4 =
|
119 |
-
* Bugfix: Abschalten der Cookie Notice
|
120 |
-
|
121 |
-
= 2.0.3 =
|
122 |
-
* Sprachdateien für Deutsch (Sie) ergänzt
|
123 |
-
* Fehler beim Akzeptieren des Cookie Popups behoben
|
124 |
-
|
125 |
-
= 2.0.2 =
|
126 |
-
* Fehler beim Laden der Email Templates behoben falls die eingestellte Sprache de_DE_formal ist.
|
127 |
-
|
128 |
-
= 2.0.1 =
|
129 |
-
* Standardwert für die Cookie Notice Art
|
130 |
-
|
131 |
-
= 2.0.0 =
|
132 |
-
* Cookie Notice Popup (Premium Edition)
|
133 |
-
* HTML nun im Hinweisfeld für Kommentare möglich
|
134 |
-
* Bugfix: mehr als 10 Anfragen in der Liste bei Datenauszug und Löschanfrage möglich
|
135 |
-
* Bugfix: Kompatibilität zum Divi Theme hergestellt
|
136 |
-
* Text bei WooCommerce Datenschutzcheckbox nun editierbar
|
137 |
-
* Benutzerdefinierte Trackerscripts für Google Analytics und FB Pixel (ab Blog Edition)
|
138 |
-
* kleinere Bugfixes und Verbesserungen
|
139 |
-
|
140 |
-
= 1.5.6 =
|
141 |
-
* Aktivierungsprobleme behoben
|
142 |
-
|
143 |
-
= 1.5.1 =
|
144 |
-
* Bugfixes
|
145 |
-
|
146 |
-
= 1.5.0 =
|
147 |
-
* WPML Unterstützung (nur Premium) inkl. englischer Datenschutztexte
|
148 |
-
* WooCommerce Option zur Zustimmung der Datenschutzbestimmungen beim Checkout (nur Premium)
|
149 |
-
* Kleine Fehlerbehebungen
|
150 |
-
|
151 |
-
= 1.4.6 =
|
152 |
-
* CSS Verbeserung bei Cookie Notice
|
153 |
-
* Konfigurierbare Checkboxen bei Datenauszug- und Löschanfrage zur Zustimmung der Datenspeicherung
|
154 |
-
|
155 |
-
= 1.4.5 =
|
156 |
-
* CF7 Fehlerbehebung
|
157 |
-
* CF7 Möglichkeit zur Ersetzung des Texts bei Acceptance Checkboxen mit dem DSGVO Zustimmungstext
|
158 |
-
* Flamingo Integration für; CF7 beim Datenauszug und Löschanfrage
|
159 |
-
* diverse CSS Verbesserungen zur besseren Themekompatibilität
|
160 |
-
* Fehlerbehebung beim Datenauszug mit WooCommerce
|
161 |
-
* Link zu den FB Terms aktualisiert
|
162 |
-
* Fehlerbehebung bei Speicherung der Animationseinstellung der Cookie Notice
|
163 |
-
* Option zum Verhindern des Setzens eines Cookies bei Ablehnung und Weiterleitung
|
164 |
-
|
165 |
-
= 1.4.4 =
|
166 |
-
* Korrektur Email Betreff bei Löschanfrage
|
167 |
-
|
168 |
-
= 1.4.3 =
|
169 |
-
* Feature Request: Overlay bei Cookie Notice um ein Agieren vor Zustimmung/Ablehnung zu verhindern
|
170 |
-
|
171 |
-
= 1.4.2 =
|
172 |
-
* Problem mit Cookie Notice behoben
|
173 |
-
|
174 |
-
= 1.4.1 =
|
175 |
-
* Umlaute in den Betreffzeilen der Mails korrigiert
|
176 |
-
|
177 |
-
= 1.4.0 =
|
178 |
-
* bbPress Integration bei Datenauszug und Lö:schanfrage (nur Premium)
|
179 |
-
* buddyPress Integration (Felder, Nachrichten) bei Datenauszug und Lö:schanfrage (nur Premium)
|
180 |
-
* Styles der Formulare und Buttons werden nun hauptsächlich vom Theme übernommen
|
181 |
-
* Placeholder bei Datenauszug und Löschanfrage angepasst
|
182 |
-
* [user_privacy_settings] Cache Problem gelöst
|
183 |
-
* [user_privacy_settings] nun responsive
|
184 |
-
* Absenderemailadresse bei generierten Mails wird nun von den Einstellungen übernommen
|
185 |
-
* Kleinere Fehlerbehebungen
|
186 |
-
|
187 |
-
= 1.3.8 =
|
188 |
-
* Kosmetik
|
189 |
-
|
190 |
-
= 1.3.7 =
|
191 |
-
* Diverese Fehlerbehebungen
|
192 |
-
|
193 |
-
= 1.3.6 =
|
194 |
-
* Überarbeitung des Datenauszug Templates
|
195 |
-
* Ergänzung der Kommentartexte bei eingeloggten User beim Datenauszug
|
196 |
-
* Skriptverbesserung Kommentarcheckbox
|
197 |
-
* Filter zur Erweiterung des Datenauszugs und der Löschanfrage
|
198 |
-
|
199 |
-
= 1.3.5 =
|
200 |
-
* Verbesserung bei Kommentarcheckbox
|
201 |
-
|
202 |
-
= 1.3.4 =
|
203 |
-
* UTF-8 Codierungsoptimierung
|
204 |
-
|
205 |
-
= 1.3.3 =
|
206 |
-
* Verbesserung beim Opt-Out von GA
|
207 |
-
|
208 |
-
= 1.3.2 =
|
209 |
-
* Kleine Fehlerbehebungen und Korrekturen
|
210 |
-
|
211 |
-
= 1.3.1 =
|
212 |
-
* Fehlerbehebung Texte der Kommentar Checkbox
|
213 |
-
|
214 |
-
= 1.3.0 =
|
215 |
-
* automatische Benachrichtigung via Email bei neuen Datenauszugs- und Löschanfragen (nur Premium)
|
216 |
-
* Fehlerbehebung Cookie Notice: Ablehnen Button mit der Weiterleitung
|
217 |
-
* Fehlerbehung Cookie Notice: Icon ausblenden
|
218 |
-
* Fehlerbehebung: Allgemein mit Sonderzeichen und Schreibfehler
|
219 |
-
* Fehlerbebehung Email Templates: Sonderzeichen nun html codiert
|
220 |
-
* diverse Fehlerbehebungen
|
221 |
-
|
222 |
-
= 1.2.2 =
|
223 |
-
* Lizenzierung angepasst
|
224 |
-
|
225 |
-
= 1.2.1 =
|
226 |
-
* Texte der Checkbox bei den Kommentaren nun anpassbar (ab Blog Edition)
|
227 |
-
* Cookie Notice Validierung im Zusammenhang mit div. Caches behoben
|
228 |
-
* Administratoren von Löschanfragen ausgenommen
|
229 |
-
|
230 |
-
= 1.2.0 =
|
231 |
-
* Problemen mit CSS Styles der Cookie Notice behoben
|
232 |
-
* Möglichkeit zur farblichen Anpassung der Cookie Notice hinzugefügt (ab Blog Edition)
|
233 |
-
* Fehler beim Opt-In von Google Analytics behoben
|
234 |
-
|
235 |
-
= 1.1.2 =
|
236 |
-
* Funktionsnamenskonflikt behoben (manche User erhielten einen HTTP 500 in Kombination mit anderen Plugins)
|
237 |
-
|
238 |
-
= 1.1.1 =
|
239 |
-
* Verbesserungen bei der Tracker-Einbindung
|
240 |
-
|
241 |
-
= 1.1.0 =
|
242 |
-
* Diverse Fehlerbehebungen und Optimierungen
|
243 |
-
|
244 |
-
= 1.0.0 =
|
245 |
-
* Initiale Version von WP DSGVO Tools.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/base.php
CHANGED
@@ -1,109 +1,61 @@
|
|
1 |
-
<div class="wrap
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
</span></li>
|
63 |
-
<li><input id="cb_spdsgvo_cl_plugins" name="cb_spdsgvo_cl_plugins"
|
64 |
-
type="checkbox" class="cbChecklist" value="1"
|
65 |
-
<?= (SPDSGVOSettings::get('cb_spdsgvo_cl_plugins') === '1')? ' checked ' : ''; ?> /><span>
|
66 |
-
<?php _e('Check the security of unsupported plugins','shapepress-dsgvo')?></span></li>
|
67 |
-
<li><input id="cb_spdsgvo_cl_experts" name="cb_spdsgvo_cl_experts"
|
68 |
-
type="checkbox" class="cbChecklist" value="1"
|
69 |
-
<?= (SPDSGVOSettings::get('cb_spdsgvo_cl_experts') === '1')? ' checked ' : ''; ?> /><span>
|
70 |
-
<a href="https://www.wp-dsgvo.eu/experten/"
|
71 |
-
target="_blank"><?php _e('Expert advice','shapepress-dsgvo')?></a> <?php _e('requested','shapepress-dsgvo')?>
|
72 |
-
</span></li>
|
73 |
-
</ul>
|
74 |
-
<?php if (isValidPremiumEdition() == false && isValidBlogEdition() == false) : ?>
|
75 |
-
<h1 style="margin-top: 1em"><?php _e('Blog Edition','shapepress-dsgvo')?></h1>
|
76 |
-
<ul id="dsgvo-premium-featurelist">
|
77 |
-
<li><?php _e('Stylish Cookie Notice: Customize the look & feel of your Wordpress Page!','shapepress-dsgvo')?></li>
|
78 |
-
<li><?php _e('Texts customizable with comment checkbox','shapepress-dsgvo')?></li>
|
79 |
-
</ul>
|
80 |
-
<div>
|
81 |
-
<a href="https://www.wp-dsgvo.eu/shop" target="_blank"
|
82 |
-
class="button button-primary" style="font-size: 1rem"><?php _e('Get the Blog Edition now','shapepress-dsgvo')?></a>
|
83 |
-
</div>
|
84 |
-
<?php endif;?>
|
85 |
-
<?php if(isValidPremiumEdition() == false):?>
|
86 |
-
<h1 style="margin-top: 1em"><?php _e('Upgrade to Premium','shapepress-dsgvo')?></h1>
|
87 |
-
<ul id="dsgvo-premium-featurelist">
|
88 |
-
<li><?php _e('Cookie Notice Popup','shapepress-dsgvo')?></li>
|
89 |
-
<li><?php _e('Support & Community','shapepress-dsgvo')?></li>
|
90 |
-
<li><?php _e('More Integrations','shapepress-dsgvo')?></li>
|
91 |
-
<li><?php _e('Automatic user data reports','shapepress-dsgvo')?></li>
|
92 |
-
<li><?php _e('Email notifications','shapepress-dsgvo')?></li>
|
93 |
-
<li><?php _e('Style & Customization (from Blog Edition)','shapepress-dsgvo')?></li>
|
94 |
-
<li><?php _e('and much more','shapepress-dsgvo')?></li>
|
95 |
-
</ul>
|
96 |
-
<div>
|
97 |
-
<a href="https://www.wp-dsgvo.eu/shop" target="_blank"
|
98 |
-
class="button button-primary" style="font-size: 1rem"><?php _e('Get Premium version now','shapepress-dsgvo')?></a>
|
99 |
-
</div>
|
100 |
-
<ul id="dsgvo-premium-featurelist-tipps">
|
101 |
-
<li><?php _e('FAQ & checklists','shapepress-dsgvo')?></li>
|
102 |
-
<li><?php _e('GDPR experts booking','shapepress-dsgvo')?></li>
|
103 |
-
<li><?php _e('Book legal advice','shapepress-dsgvo')?></li>
|
104 |
-
</ul>
|
105 |
-
<?php endif;?>
|
106 |
-
|
107 |
-
|
108 |
-
</form>
|
109 |
-
</div>
|
1 |
+
<div class="wrap"></div>
|
2 |
+
|
3 |
+
<div class="sp-dsgvo" style="padding-right: 15px">
|
4 |
+
<nav class="navbar navbar-expand-lg navbar-dark bg-primary mb-2 text-white">
|
5 |
+
<a class="navbar-brand" href="#">
|
6 |
+
<img src="<?php echo SPDSGVO::pluginURI('public\images\legalwebio-logo-icon-white.svg'); ?>" width="30" height="30" class="d-inline-block align-top" alt="">
|
7 |
+
<a class="navbar-brand"><?php _e('WP DSGVO Tools (GDPR) by legalweb.io', 'shapepress-dsgvo'); ?></a>
|
8 |
+
</a>
|
9 |
+
</nav>
|
10 |
+
|
11 |
+
<!--
|
12 |
+
<div class="jumbotron">
|
13 |
+
<div class="container">
|
14 |
+
<h1 class="display-3">Hello, world!</h1>
|
15 |
+
<p>This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.</p>
|
16 |
+
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more »</a></p>
|
17 |
+
</div>
|
18 |
+
</div>
|
19 |
+
-->
|
20 |
+
<nav aria-label="breadcrumb">
|
21 |
+
<ol class="breadcrumb">
|
22 |
+
<li class="breadcrumb-item"><a href="#"><?php _e('WP DSGVO Tools (GDPR)', 'shapepress-dsgvo'); ?></a></li>
|
23 |
+
<li class="breadcrumb-item active" aria-current="page"><?= __($tabs[$tab]->getTabTitle(),'shapepress-dsgvo');;?></li>
|
24 |
+
</ol>
|
25 |
+
</nav>
|
26 |
+
<div class="row">
|
27 |
+
<div class="col-12 col-sm-12 col-md-12 col-lg-9 container-fluid sp-dsgvo-content-container">
|
28 |
+
<?php
|
29 |
+
|
30 |
+
if (isset($tabs[$tab])) {
|
31 |
+
$tabs[$tab]->page();
|
32 |
+
?>
|
33 |
+
<script>
|
34 |
+
var spDsgvoActiveAdminSubmenu = '<?= $tabs[$tab]->slug ?>';
|
35 |
+
|
36 |
+
</script>
|
37 |
+
<?php
|
38 |
+
} else {
|
39 |
+
$tabs['common-settings']->page();
|
40 |
+
}
|
41 |
+
|
42 |
+
?>
|
43 |
+
</div>
|
44 |
+
<div class="col-12 col-sm-12 col-md-12 col-lg-3 sp-dsgvo-side-container">
|
45 |
+
<div class="card border-info bg-light" style="">
|
46 |
+
<div class="card-header"><?= __("What's new, what has changed in V3",'shapepress-dsgvo')?></div>
|
47 |
+
<div class="card-body">
|
48 |
+
|
49 |
+
<h4 class="card-subtitle"><?= __("What has changed",'shapepress-dsgvo')?></h4>
|
50 |
+
<p class="card-text"><?= __('Since the confusion over GDPR among the website operators became more and more and the number of GDPR warnings increased, we decided to get IT and legal experts directly into the team, so that we can provide WP DSGVO Tools as full GDPR compliant solution for Wordpress. WP DSGVO Tools by Shapepress has thus become WP DSGVO Tools (GDPR) by legalweb.io','shapepress-dsgvo')?></p>
|
51 |
+
|
52 |
+
<h4 class="card-subtitle"><?= __("What's new",'shapepress-dsgvo')?></h4>
|
53 |
+
<p class="card-text"><?= __('In general, the whole plugin has been redesigned from the ground up, features needed improved (integration of trackers, integration of the popup or the notice), unnecessary features removed (eg checkboxes for comments, registration, ..), the backend is more user-friendly and much more. One of our newest and for you one of the most important features is that we generate due to their settings / configuration individual, legally compliant data protection regulations, valid for the supported destination countries (at present AT and DE)','shapepress-dsgvo')?></p>
|
54 |
+
|
55 |
+
<h4 class="card-subtitle"><?= __("A look into the future",'shapepress-dsgvo')?></h4>
|
56 |
+
<p class="card-text"><?= __('In order to increase the compatibility of WP DSGVO tools (GDPR) many more integration are planned (YouTube, Google Maps, Facebook, ...) and also under development. In order to further and better support you in the topic of data protection, we will provide FAQs with the most common questions about data protection and GDPR, explanatory videos exclusively for premium customers in the future.','shapepress-dsgvo')?></p>
|
57 |
+
</div>
|
58 |
+
</div>
|
59 |
+
</div>
|
60 |
+
</div>
|
61 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/class-sp-dsgvo-admin-action.php
CHANGED
@@ -1,24 +1,24 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOAdminAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'admin-common-action';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->requireAdmin();
|
9 |
-
|
10 |
-
SPDSGVOSettings::set('cb_spdsgvo_cl_vdv', $this->get('cb_spdsgvo_cl_vdv', '0'));
|
11 |
-
SPDSGVOSettings::set('cb_spdsgvo_cl_filled_out', $this->get('cb_spdsgvo_cl_filled_out', '0'));
|
12 |
-
SPDSGVOSettings::set('cb_spdsgvo_cl_maintainance', $this->get('cb_spdsgvo_cl_maintainance', '0'));
|
13 |
-
SPDSGVOSettings::set('cb_spdsgvo_cl_security', $this->get('cb_spdsgvo_cl_security', '0'));
|
14 |
-
SPDSGVOSettings::set('cb_spdsgvo_cl_hosting', $this->get('cb_spdsgvo_cl_hosting', '0'));
|
15 |
-
SPDSGVOSettings::set('cb_spdsgvo_cl_plugins', $this->get('cb_spdsgvo_cl_plugins', '0'));
|
16 |
-
SPDSGVOSettings::set('cb_spdsgvo_cl_experts', $this->get('cb_spdsgvo_cl_experts', '0'));
|
17 |
-
|
18 |
-
$this->returnBack();
|
19 |
-
}
|
20 |
-
}
|
21 |
-
|
22 |
-
SPDSGVOAdminAction::listen();
|
23 |
-
|
24 |
-
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOAdminAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'admin-common-action';
|
6 |
+
|
7 |
+
protected function run(){
|
8 |
+
$this->requireAdmin();
|
9 |
+
|
10 |
+
SPDSGVOSettings::set('cb_spdsgvo_cl_vdv', $this->get('cb_spdsgvo_cl_vdv', '0'));
|
11 |
+
SPDSGVOSettings::set('cb_spdsgvo_cl_filled_out', $this->get('cb_spdsgvo_cl_filled_out', '0'));
|
12 |
+
SPDSGVOSettings::set('cb_spdsgvo_cl_maintainance', $this->get('cb_spdsgvo_cl_maintainance', '0'));
|
13 |
+
SPDSGVOSettings::set('cb_spdsgvo_cl_security', $this->get('cb_spdsgvo_cl_security', '0'));
|
14 |
+
SPDSGVOSettings::set('cb_spdsgvo_cl_hosting', $this->get('cb_spdsgvo_cl_hosting', '0'));
|
15 |
+
SPDSGVOSettings::set('cb_spdsgvo_cl_plugins', $this->get('cb_spdsgvo_cl_plugins', '0'));
|
16 |
+
SPDSGVOSettings::set('cb_spdsgvo_cl_experts', $this->get('cb_spdsgvo_cl_experts', '0'));
|
17 |
+
|
18 |
+
$this->returnBack();
|
19 |
+
}
|
20 |
+
}
|
21 |
+
|
22 |
+
SPDSGVOAdminAction::listen();
|
23 |
+
|
24 |
+
|
admin/class-sp-dsgvo-admin-tab.php
CHANGED
@@ -1,46 +1,60 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Abstract class that provides boilerplate methods for an extension.
|
5 |
-
*
|
6 |
-
* @link https://wp-dsgvo.eu
|
7 |
-
* @since 1.0.0
|
8 |
-
*
|
9 |
-
* @package WP DSGVO Tools
|
10 |
-
* @subpackage WP DSGVO Tools/includes
|
11 |
-
*/
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Abstract class that provides boilerplate methods for an extension.
|
15 |
-
*
|
16 |
-
*
|
17 |
-
* @since 1.0.0
|
18 |
-
* @package WP DSGVO Tools
|
19 |
-
* @subpackage WP DSGVO Tools/includes
|
20 |
-
* @author Shapepress eU
|
21 |
-
*/
|
22 |
-
abstract class SPDSGVOAdminTab{
|
23 |
-
|
24 |
-
public $isHidden = false;
|
25 |
-
public $isHighlighted = false;
|
26 |
-
|
27 |
-
public function uri(){
|
28 |
-
return sprintf('%sadmin.php?page=sp-dsgvo&tab=%s', get_admin_url(), $this->slug);
|
29 |
-
}
|
30 |
-
|
31 |
-
public function isHidden(){
|
32 |
-
if(!isset($this->isHidden)){
|
33 |
-
return false;
|
34 |
-
}
|
35 |
-
|
36 |
-
return $this->isHidden;
|
37 |
-
}
|
38 |
-
|
39 |
-
public function isHighlighted(){
|
40 |
-
if(!isset($this->isHighlighted)){
|
41 |
-
return false;
|
42 |
-
}
|
43 |
-
|
44 |
-
return $this->isHighlighted;
|
45 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Abstract class that provides boilerplate methods for an extension.
|
5 |
+
*
|
6 |
+
* @link https://wp-dsgvo.eu
|
7 |
+
* @since 1.0.0
|
8 |
+
*
|
9 |
+
* @package WP DSGVO Tools
|
10 |
+
* @subpackage WP DSGVO Tools/includes
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Abstract class that provides boilerplate methods for an extension.
|
15 |
+
*
|
16 |
+
*
|
17 |
+
* @since 1.0.0
|
18 |
+
* @package WP DSGVO Tools
|
19 |
+
* @subpackage WP DSGVO Tools/includes
|
20 |
+
* @author Shapepress eU
|
21 |
+
*/
|
22 |
+
abstract class SPDSGVOAdminTab{
|
23 |
+
|
24 |
+
public $isHidden = false;
|
25 |
+
public $isHighlighted = false;
|
26 |
+
|
27 |
+
public function uri(){
|
28 |
+
return sprintf('%sadmin.php?page=sp-dsgvo&tab=%s', get_admin_url(), $this->slug);
|
29 |
+
}
|
30 |
+
|
31 |
+
public function isHidden(){
|
32 |
+
if(!isset($this->isHidden)){
|
33 |
+
return false;
|
34 |
+
}
|
35 |
+
|
36 |
+
return $this->isHidden;
|
37 |
+
}
|
38 |
+
|
39 |
+
public function isHighlighted(){
|
40 |
+
if(!isset($this->isHighlighted)){
|
41 |
+
return false;
|
42 |
+
}
|
43 |
+
|
44 |
+
return $this->isHighlighted;
|
45 |
+
}
|
46 |
+
|
47 |
+
public static function getClassName(){
|
48 |
+
return get_called_class();
|
49 |
+
}
|
50 |
+
|
51 |
+
public static function getTabTitle(){
|
52 |
+
$class = self::getClassName();
|
53 |
+
$reflection = new ReflectionClass($class);
|
54 |
+
$tab = $reflection->newInstanceWithoutConstructor();
|
55 |
+
if(!isset($tab->title)){
|
56 |
+
throw new Exception(__("Public property \$action not provied", 'shapepress-dsgvo'));
|
57 |
+
}
|
58 |
+
return $tab->title;
|
59 |
+
}
|
60 |
}
|
admin/class-sp-dsgvo-admin.php
CHANGED
@@ -1,315 +1,303 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* The admin-specific functionality of the plugin.
|
5 |
-
*
|
6 |
-
* @link https://wp-dsgvo.eu
|
7 |
-
* @since 1.0.0
|
8 |
-
*
|
9 |
-
* @package WP DSGVO Tools
|
10 |
-
* @subpackage WP DSGVO Tools/admin
|
11 |
-
*/
|
12 |
-
|
13 |
-
/**
|
14 |
-
* The admin-specific functionality of the plugin.
|
15 |
-
*
|
16 |
-
* Defines the plugin name, version, and two examples hooks for how to
|
17 |
-
* enqueue the admin-specific stylesheet and JavaScript.
|
18 |
-
*
|
19 |
-
* @package WP DSGVO Tools
|
20 |
-
* @subpackage WP DSGVO Tools/admin
|
21 |
-
* @author Shapepress eU
|
22 |
-
*/
|
23 |
-
class SPDSGVOAdmin{
|
24 |
-
|
25 |
-
|
26 |
-
public $tabs = array();
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Initialize the class and set its properties.
|
30 |
-
*
|
31 |
-
* @since 1.0.0
|
32 |
-
* @param string $sp_dsgvo The name of this plugin.
|
33 |
-
* @param string $version The version of this plugin.
|
34 |
-
*/
|
35 |
-
public function __construct(){
|
36 |
-
$this->tabs = array_merge(array(
|
37 |
-
//'overview' => new SPDSGVOOverviewTab,
|
38 |
-
'common-settings' => new SPDSGVOCommonSettingsTab,
|
39 |
-
'cookie-notice' => new SPDSGVOCookieNoticeTab,
|
40 |
-
'
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
'
|
45 |
-
|
46 |
-
'integrations' => new SPDSGVOIntegrationsTab
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
if (isValidPremiumEdition())
|
51 |
-
{
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
public function
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
return
|
195 |
-
}
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
}
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
}
|
305 |
-
|
306 |
-
function showUpgradeMessage($currentPluginMetadata, $newPluginMetadata)
|
307 |
-
{
|
308 |
-
if (isset($newPluginMetadata->upgrade_notice) && strlen(trim($newPluginMetadata->upgrade_notice)) > 0){
|
309 |
-
$output = '<div class="sp-dsgvo_plugin_upgrade_notice"><div class="header">'. __('Important Upgrade Notice:','shapepress-dsgvo') .'</div> ';
|
310 |
-
$output .= $newPluginMetadata->upgrade_notice . '</div>';
|
311 |
-
$output = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $output);
|
312 |
-
echo $output;
|
313 |
-
}
|
314 |
-
}
|
315 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* The admin-specific functionality of the plugin.
|
5 |
+
*
|
6 |
+
* @link https://wp-dsgvo.eu
|
7 |
+
* @since 1.0.0
|
8 |
+
*
|
9 |
+
* @package WP DSGVO Tools
|
10 |
+
* @subpackage WP DSGVO Tools/admin
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
* The admin-specific functionality of the plugin.
|
15 |
+
*
|
16 |
+
* Defines the plugin name, version, and two examples hooks for how to
|
17 |
+
* enqueue the admin-specific stylesheet and JavaScript.
|
18 |
+
*
|
19 |
+
* @package WP DSGVO Tools
|
20 |
+
* @subpackage WP DSGVO Tools/admin
|
21 |
+
* @author Shapepress eU
|
22 |
+
*/
|
23 |
+
class SPDSGVOAdmin{
|
24 |
+
|
25 |
+
|
26 |
+
public $tabs = array();
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Initialize the class and set its properties.
|
30 |
+
*
|
31 |
+
* @since 1.0.0
|
32 |
+
* @param string $sp_dsgvo The name of this plugin.
|
33 |
+
* @param string $version The version of this plugin.
|
34 |
+
*/
|
35 |
+
public function __construct(){
|
36 |
+
$this->tabs = array_merge(array(
|
37 |
+
//'overview' => new SPDSGVOOverviewTab,
|
38 |
+
'common-settings' => new SPDSGVOCommonSettingsTab,
|
39 |
+
'cookie-notice' => new SPDSGVOCookieNoticeTab,
|
40 |
+
'operator' => new SPDSGVOOperatorTab,
|
41 |
+
'page-basics' => new SPDSGVOPageBasicsTab,
|
42 |
+
'statistic-integrations' => new SPDSGVOStatisticIntegrationsTab,
|
43 |
+
'targeting-integrations' => new SPDSGVOTargetingIntegrationsTab,
|
44 |
+
'subject-access-request' => new SPDSGVOSubjectAccessRequestTab,
|
45 |
+
'super-unsubscribe' => new SPDSGVOSuperUnsubscribeTab,
|
46 |
+
'integrations' => new SPDSGVOIntegrationsTab,
|
47 |
+
'info' => new SPDSGVOInfoTab
|
48 |
+
));
|
49 |
+
|
50 |
+
if (isValidPremiumEdition())
|
51 |
+
{
|
52 |
+
// Gravity Forms Tab
|
53 |
+
if(class_exists('GFAPI')){
|
54 |
+
$this->tabs = array_merge( $this->tabs, array('gravity-forms' => new SPDSGVOGravityFormsTab) );
|
55 |
+
}
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
public function menuItem()
|
60 |
+
{
|
61 |
+
global $submenu;
|
62 |
+
|
63 |
+
$user = wp_get_current_user();
|
64 |
+
$allowed_roles = array('administrator');
|
65 |
+
|
66 |
+
if( array_intersect($allowed_roles, $user->roles ) || is_super_admin() ) {
|
67 |
+
|
68 |
+
|
69 |
+
$svg = 'data:image/svg+xml;base64,'. base64_encode(file_get_contents(SPDSGVO::pluginDir('public/images/legalwebio-logo-icon-white.svg')));
|
70 |
+
add_menu_page('WP DSGVO Tools', 'WP DSGVO Tools', 'manage_options', 'sp-dsgvo', array($this, 'adminPage'), $svg, null);
|
71 |
+
|
72 |
+
//add_submenu_page('sp-dsgvo', __('V3 definitely read','shapepress-dsgvo'), __('V3 definitely read','shapepress-dsgvo'), 'manage_options', 'admin.php?page=sp-dsgvo&tab=info');
|
73 |
+
|
74 |
+
add_submenu_page('sp-dsgvo', __('Common','shapepress-dsgvo'), __('Common','shapepress-dsgvo'), 'manage_options', 'sp-dsgvo', array($this, 'adminPage'));
|
75 |
+
|
76 |
+
|
77 |
+
$first = true;
|
78 |
+
foreach($this->tabs as $t):
|
79 |
+
if ($first === true) {
|
80 |
+
$first = false;
|
81 |
+
continue;
|
82 |
+
}
|
83 |
+
if(!$t->isHidden()):
|
84 |
+
add_submenu_page('sp-dsgvo', $t->title, $t->title, 'manage_options', 'admin.php?page=sp-dsgvo&tab='.$t->slug);
|
85 |
+
|
86 |
+
endif;
|
87 |
+
endforeach;
|
88 |
+
|
89 |
+
//add_submenu_page('sp-dsgvo', 'Terms & Conditions', 'Terms & Conditions', 'manage_options', 'admin.php?page=sp-dsgvo&tab=terms-conditions');
|
90 |
+
//add_submenu_page('sp-dsgvo', __('Privacy policy','shapepress-dsgvo'), __('Privacy policy','shapepress-dsgvo'), 'manage_options', 'admin.php?page=sp-dsgvo&tab=privacy-policy');
|
91 |
+
//add_submenu_page('sp-dsgvo', __('Imprint','shapepress-dsgvo'), __('Imprint','shapepress-dsgvo'), 'manage_options', 'admin.php?page=sp-dsgvo&tab=imprint');
|
92 |
+
//add_submenu_page('sp-dsgvo', 'Integrations', 'Integrations', 'manage_options', 'admin.php?page=sp-dsgvo&tab=integrations');
|
93 |
+
|
94 |
+
|
95 |
+
|
96 |
+
$index = 6 + count($this->tabs);
|
97 |
+
$menu_slug = 'sp-dsgvo';
|
98 |
+
|
99 |
+
//$submenu[$menu_slug][$index++] = array(__('Experts Info','shapepress-dsgvo'), 'manage_options', 'https://wp-dsgvo.eu/experten');
|
100 |
+
//$submenu[$menu_slug][$index++] = array(__('Legal advice','shapepress-dsgvo'), 'manage_options', 'https://wp-dsgvo.eu/tipps-hilfe');
|
101 |
+
$submenu[$menu_slug][$index++] = array(__('FAQ','shapepress-dsgvo'), 'manage_options', 'https://legalweb.io/wp-content/uploads/2019/11/mr-legalweb_web.pdf');
|
102 |
+
//$submenu[$menu_slug][$index++] = array(__('About WP DSGVO Tools','shapepress-dsgvo'), 'manage_options', 'https://wp-dsgvo.eu/about');
|
103 |
+
$submenu[$menu_slug][$index++] = array(__('About legal web','shapepress-dsgvo'), 'manage_options', 'https://legalweb.io');
|
104 |
+
}
|
105 |
+
}
|
106 |
+
|
107 |
+
|
108 |
+
public function adminPage(){
|
109 |
+
$tabs = $this->tabs;
|
110 |
+
|
111 |
+
if(isset($_GET['tab'])){
|
112 |
+
$tab = sanitize_text_field($_GET['tab']);
|
113 |
+
}else{
|
114 |
+
$tab = 'common-settings';
|
115 |
+
// if(in_array('setup', array_keys($this->tabs))){
|
116 |
+
// $tab = 'setup';
|
117 |
+
// }else{
|
118 |
+
// $tab = 'overview';
|
119 |
+
// }
|
120 |
+
}
|
121 |
+
|
122 |
+
include SPDSGVO::pluginDir('admin/base.php');
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Register the stylesheets for the admin area.
|
127 |
+
*
|
128 |
+
* @since 1.0.0
|
129 |
+
*/
|
130 |
+
public function enqueue_styles(){
|
131 |
+
wp_enqueue_style(sp_dsgvo_NAME.'-bootstrap', plugin_dir_url(__FILE__). 'css/bootstrap.min.css', array(), sp_dsgvo_VERSION, 'all' );
|
132 |
+
wp_enqueue_style(sp_dsgvo_NAME, plugin_dir_url(__FILE__). 'css/sp-dsgvo-admin.css', array(), sp_dsgvo_VERSION, 'all' );
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Register the JavaScript for the admin area.
|
137 |
+
*
|
138 |
+
* @since 1.0.0
|
139 |
+
*/
|
140 |
+
public function enqueue_scripts(){
|
141 |
+
/* i592995 */
|
142 |
+
wp_enqueue_media();
|
143 |
+
/* i592995 */
|
144 |
+
wp_enqueue_script(sp_dsgvo_NAME, plugin_dir_url(__FILE__). 'js/sp-dsgvo-admin.js', array('jquery'), sp_dsgvo_VERSION, false );
|
145 |
+
|
146 |
+
/* i592995 */
|
147 |
+
wp_localize_script(sp_dsgvo_NAME, 'args', array(
|
148 |
+
'ajaxurl' => admin_url('admin-ajax.php'),
|
149 |
+
'dismiss_confirm' => __('Are you sure you want to dismiss this request?', 'shapepress-dsgvo')
|
150 |
+
));
|
151 |
+
|
152 |
+
// wp_enqueue_script(sp_dsgvo_NAME.'-bootstrap', plugin_dir_url(__FILE__). 'js/bootstrap-min.js', array('jquery'), sp_dsgvo_VERSION, false );
|
153 |
+
|
154 |
+
|
155 |
+
}
|
156 |
+
|
157 |
+
|
158 |
+
|
159 |
+
public function enqueueColorPicker($hook_suffix){
|
160 |
+
wp_enqueue_style( 'wp-color-picker' );
|
161 |
+
wp_enqueue_script( 'wp-color-picker');
|
162 |
+
}
|
163 |
+
|
164 |
+
|
165 |
+
public function addCustomPostStates($states, $post){
|
166 |
+
|
167 |
+
$pages = array(
|
168 |
+
SPDSGVOSettings::get('user_permissions_page') => __('Privacy settings user page','shapepress-dsgvo'),
|
169 |
+
SPDSGVOSettings::get('super_unsubscribe_page') => __('Delete request page','shapepress-dsgvo'),
|
170 |
+
SPDSGVOSettings::get('terms_conditions_page') => __('Terms page','shapepress-dsgvo'),
|
171 |
+
SPDSGVOSettings::get('explicit_permission_page') => __('Explicit permissions page','shapepress-dsgvo'),
|
172 |
+
SPDSGVOSettings::get('opt_out_page') => __('Opt Out page','shapepress-dsgvo'),
|
173 |
+
SPDSGVOSettings::get('privacy_policy_page') => __('Privacy policy page','shapepress-dsgvo'),
|
174 |
+
SPDSGVOSettings::get('sar_page') => __('Subject access request page','shapepress-dsgvo'),
|
175 |
+
SPDSGVOSettings::get('imprint_page') => __('Imprint page','shapepress-dsgvo')
|
176 |
+
);
|
177 |
+
|
178 |
+
if(in_array($post->ID, array_keys($pages))){
|
179 |
+
$states[] = $pages[$post->ID];
|
180 |
+
}
|
181 |
+
|
182 |
+
return $states;
|
183 |
+
}
|
184 |
+
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Filter: Adds Extra Column to users table
|
188 |
+
*
|
189 |
+
* @since 1.0.0
|
190 |
+
* @author Shapepress eU
|
191 |
+
*/
|
192 |
+
public function addExplicitPermissionColumn($column){
|
193 |
+
$column['terms'] = 'Terms';
|
194 |
+
return $column;
|
195 |
+
}
|
196 |
+
|
197 |
+
|
198 |
+
/*
|
199 |
+
* Gravity Forms Action
|
200 |
+
*/
|
201 |
+
public function gf_after_submisison_cleanse( $entry, $form ){
|
202 |
+
|
203 |
+
// DELETE ALL ENTRIES
|
204 |
+
if( SPDSGVOSettings::get('gf_save_no_data') ){
|
205 |
+
GFAPI::delete_entry( $entry['id'] );
|
206 |
+
return;
|
207 |
+
}
|
208 |
+
|
209 |
+
// DELETE IP and USER AGENT
|
210 |
+
if( SPDSGVOSettings::get('gf_no_ip_meta') ){
|
211 |
+
GFAPI::update_entry_property( $entry['id'], 'ip', '' );
|
212 |
+
GFAPI::update_entry_property( $entry['id'], 'user_agent', '' );
|
213 |
+
}
|
214 |
+
|
215 |
+
// update fields to 'removed' that have been selected as 'do not save'
|
216 |
+
$fields_to_delete = SPDSGVOSettings::get('gf_save_no_');
|
217 |
+
if( !is_array($fields_to_delete) ){
|
218 |
+
return;
|
219 |
+
}
|
220 |
+
if( isset($fields_to_delete[$form['id']]) ){
|
221 |
+
foreach($fields_to_delete[$form['id']] as $field_id=>$check){
|
222 |
+
if(!$check){
|
223 |
+
continue;
|
224 |
+
}
|
225 |
+
|
226 |
+
if( isset($entry[$field_id]) ){
|
227 |
+
// single level data
|
228 |
+
GFAPI::update_entry_field( $entry['id'], $field_id, 'Removed' );
|
229 |
+
} else {
|
230 |
+
// multi level data (eg checkbox)
|
231 |
+
$fields = preg_grep("/^".$field_id.".([0-9]*)$/", array_keys($entry)); // find keys like 2.1, 2.2 etc
|
232 |
+
|
233 |
+
foreach( $fields as $field_id_key){
|
234 |
+
if( $entry[$field_id_key] != '' ){
|
235 |
+
GFAPI::update_entry_field( $entry['id'], $field_id_key, 'Removed' );
|
236 |
+
}
|
237 |
+
}
|
238 |
+
}
|
239 |
+
|
240 |
+
}
|
241 |
+
}
|
242 |
+
|
243 |
+
}
|
244 |
+
|
245 |
+
function dsvgvo_admin_notices() {
|
246 |
+
|
247 |
+
if (SPDSGVOSettings::get('google_gdpr_refresh_notice') != '1') {
|
248 |
+
$class = 'notice notice-warning is-dismissible google-gdpr-refresh-notice';
|
249 |
+
$message = __( 'Attention. Google has changed his GDPR texts. Please refresh your Privacy Policy by pressing "Reload ... template" button under privacy policy settings.', 'shapepress-dsgvo' );
|
250 |
+
|
251 |
+
printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), esc_html( $message ) );
|
252 |
+
}
|
253 |
+
|
254 |
+
if (isPremiumEdition() && SPDSGVOSettings::get('show_invalid_license_notice') != '0')
|
255 |
+
{
|
256 |
+
$class = 'notice notice-warning is-dismissible license-invalid-notice';
|
257 |
+
$message = __( 'Attention. Your license is not valid any more. Please check WP DSGVO Tools settings to extend your license or visit <a href="URL_HERE" target="_blank">https://wp-dsgvo.eu/shop</a> to extend it.', 'shapepress-dsgvo' );
|
258 |
+
$message = str_replace('URL_HERE', getExtensionProductUrl(), $message);
|
259 |
+
|
260 |
+
printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), $message );
|
261 |
+
}
|
262 |
+
|
263 |
+
if (isPremiumEdition() && SPDSGVOSettings::get('show_revoke_license_notice') === '1')
|
264 |
+
{
|
265 |
+
$class = 'notice notice-warning is-dismissible license-revoke-notice';
|
266 |
+
$message = __( 'Attention. Your license is going to get invalid in a few days. Please check WP DSGVO Tools settings to extend your license or visit <a href="URL_HERE" target="_blank">https://wp-dsgvo.eu/shop</a> to extend it.', 'shapepress-dsgvo' );
|
267 |
+
$message = str_replace('URL_HERE', getExtensionProductUrl(), $message);
|
268 |
+
|
269 |
+
printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), $message );
|
270 |
+
}
|
271 |
+
|
272 |
+
if (SPDSGVOSettings::get('show_notice_privacy_policy_texts_outdated') === '1')
|
273 |
+
{
|
274 |
+
$class = 'notice notice-warning is-dismissible privacy-policy-texts-outdated-notice';
|
275 |
+
$message = __( 'Attention. There are newer texts for the privacy policy. Please refresh them ensure compliance. <a href="#" class="privacy-policy-texts-refresh-link">Refresh Texts</a>', 'shapepress-dsgvo' );
|
276 |
+
//$url = admin_url( '/admin.php?page=sp-dsgvo&action='.SPDSGVOUpdatePrivacyPolicyTextsAction::getActionName(), 'https' );
|
277 |
+
//$message = str_replace('URL_HERE', $url, $message);
|
278 |
+
|
279 |
+
printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), $message );
|
280 |
+
}
|
281 |
+
|
282 |
+
if (SPDSGVOSettings::get('show_notice_update_check_settings') === '1')
|
283 |
+
{
|
284 |
+
$class = 'notice notice-warning is-dismissible update-check-settings-notice';
|
285 |
+
$message = __( 'Attention. Due to our mayor update you need to check all settings of WP DSGVO Tools (GDPR), especially page opator setting to ensure that the plugin outputs legal compliant texts. Also select the correct country to ensure to get the corect text base. We are sorry for this additional work, but otherwise we cant produce legal compliant texts for privacy policy, popup and the imprint.', 'shapepress-dsgvo' );
|
286 |
+
|
287 |
+
printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), $message );
|
288 |
+
}
|
289 |
+
}
|
290 |
+
|
291 |
+
function showUpgradeMessage($currentPluginMetadata, $newPluginMetadata)
|
292 |
+
{
|
293 |
+
// currently we use the inbuilt methods for displaying the notice
|
294 |
+
//(new SPDSGVOUpgradeNoticeTools())->in_plugin_update_message($data, $response);
|
295 |
+
if (isset($newPluginMetadata->upgrade_notice) && strlen(trim($newPluginMetadata->upgrade_notice)) > 0){
|
296 |
+
$output = '<div class="sp-dsgvo_plugin_upgrade_notice"><div class="header">'. __('Important Upgrade Notice:','shapepress-dsgvo') .'</div> ';
|
297 |
+
$output .= $newPluginMetadata->upgrade_notice . '</div>';
|
298 |
+
$output = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $output);
|
299 |
+
echo $output;
|
300 |
+
}
|
301 |
+
}
|
302 |
+
|
303 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/css/bootstrap.min.css
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootswatch v4.3.1
|
3 |
+
* Homepage: https://bootswatch.com
|
4 |
+
* Copyright 2012-2019 Thomas Park
|
5 |
+
* Licensed under MIT
|
6 |
+
* Based on Bootstrap
|
7 |
+
@import url("https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,700italic,400,300,700");.sp-dsgvo{/*!
|
8 |
+
* Bootstrap v4.3.1 (https://getbootstrap.com/)
|
9 |
+
* Copyright 2011-2019 The Bootstrap Authors
|
10 |
+
* Copyright 2011-2019 Twitter, Inc.
|
11 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
12 |
+
|
13 |
+
*/}.sp-dsgvo :root{--blue: #008cba;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #F04124;--orange: #fd7e14;--yellow: #E99002;--green: #43ac6a;--teal: #20c997;--cyan: #5bc0de;--white: #fff;--gray: #888;--gray-dark: #333;--primary: #008cba;--secondary: #eee;--success: #43ac6a;--info: #5bc0de;--warning: #E99002;--danger: #F04124;--light: #eee;--dark: #222;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}.sp-dsgvo *,.sp-dsgvo *::before,.sp-dsgvo *::after{-webkit-box-sizing:border-box;box-sizing:border-box}.sp-dsgvo html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sp-dsgvo article,.sp-dsgvo aside,.sp-dsgvo figcaption,.sp-dsgvo figure,.sp-dsgvo footer,.sp-dsgvo header,.sp-dsgvo hgroup,.sp-dsgvo main,.sp-dsgvo nav,.sp-dsgvo section{display:block}.sp-dsgvo body{margin:0;font-family:"Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size:0.9375rem;font-weight:400;line-height:1.5;color:#222;text-align:left;background-color:#fff}.sp-dsgvo [tabindex="-1"]:focus{outline:0 !important}.sp-dsgvo hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}.sp-dsgvo h1,.sp-dsgvo h2,.sp-dsgvo h3,.sp-dsgvo h4,.sp-dsgvo h5,.sp-dsgvo h6{margin-top:0;margin-bottom:0.5rem}.sp-dsgvo p{margin-top:0;margin-bottom:1rem}.sp-dsgvo abbr[title],.sp-dsgvo abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}.sp-dsgvo address{margin-bottom:1rem;font-style:normal;line-height:inherit}.sp-dsgvo ol,.sp-dsgvo ul,.sp-dsgvo dl{margin-top:0;margin-bottom:1rem}.sp-dsgvo ol ol,.sp-dsgvo ul ul,.sp-dsgvo ol ul,.sp-dsgvo ul ol{margin-bottom:0}.sp-dsgvo dt{font-weight:700}.sp-dsgvo dd{margin-bottom:.5rem;margin-left:0}.sp-dsgvo blockquote{margin:0 0 1rem}.sp-dsgvo b,.sp-dsgvo strong{font-weight:bolder}.sp-dsgvo small{font-size:80%}.sp-dsgvo sub,.sp-dsgvo sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.sp-dsgvo sub{bottom:-.25em}.sp-dsgvo sup{top:-.5em}.sp-dsgvo a{color:#008cba;text-decoration:none;background-color:transparent}.sp-dsgvo a:hover{color:#00526e;text-decoration:underline}.sp-dsgvo a:not([href]):not([tabindex]){color:inherit;text-decoration:none}.sp-dsgvo a:not([href]):not([tabindex]):hover,.sp-dsgvo a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}.sp-dsgvo a:not([href]):not([tabindex]):focus{outline:0}.sp-dsgvo pre,.sp-dsgvo code,.sp-dsgvo kbd,.sp-dsgvo samp{font-family:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;font-size:1em}.sp-dsgvo pre{margin-top:0;margin-bottom:1rem;overflow:auto}.sp-dsgvo figure{margin:0 0 1rem}.sp-dsgvo img{vertical-align:middle;border-style:none}.sp-dsgvo svg{overflow:hidden;vertical-align:middle}.sp-dsgvo table{border-collapse:collapse}.sp-dsgvo caption{padding-top:0.75rem;padding-bottom:0.75rem;color:#888;text-align:left;caption-side:bottom}.sp-dsgvo th{text-align:inherit}.sp-dsgvo label{display:inline-block;margin-bottom:0.5rem}.sp-dsgvo button{border-radius:0}.sp-dsgvo button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.sp-dsgvo input,.sp-dsgvo button,.sp-dsgvo select,.sp-dsgvo optgroup,.sp-dsgvo textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}.sp-dsgvo button,.sp-dsgvo input{overflow:visible}.sp-dsgvo button,.sp-dsgvo select{text-transform:none}.sp-dsgvo select{word-wrap:normal}.sp-dsgvo button,.sp-dsgvo [type="button"],.sp-dsgvo [type="reset"],.sp-dsgvo [type="submit"]{-webkit-appearance:button}.sp-dsgvo button:not(:disabled),.sp-dsgvo [type="button"]:not(:disabled),.sp-dsgvo [type="reset"]:not(:disabled),.sp-dsgvo [type="submit"]:not(:disabled){cursor:pointer}.sp-dsgvo button::-moz-focus-inner,.sp-dsgvo [type="button"]::-moz-focus-inner,.sp-dsgvo [type="reset"]::-moz-focus-inner,.sp-dsgvo [type="submit"]::-moz-focus-inner{padding:0;border-style:none}.sp-dsgvo input[type="radio"],.sp-dsgvo input[type="checkbox"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}.sp-dsgvo input[type="date"],.sp-dsgvo input[type="time"],.sp-dsgvo input[type="datetime-local"],.sp-dsgvo input[type="month"]{-webkit-appearance:listbox}.sp-dsgvo textarea{overflow:auto;resize:vertical}.sp-dsgvo fieldset{min-width:0;padding:0;margin:0;border:0}.sp-dsgvo legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}.sp-dsgvo progress{vertical-align:baseline}.sp-dsgvo [type="number"]::-webkit-inner-spin-button,.sp-dsgvo [type="number"]::-webkit-outer-spin-button{height:auto}.sp-dsgvo [type="search"]{outline-offset:-2px;-webkit-appearance:none}.sp-dsgvo [type="search"]::-webkit-search-decoration{-webkit-appearance:none}.sp-dsgvo ::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}.sp-dsgvo output{display:inline-block}.sp-dsgvo summary{display:list-item;cursor:pointer}.sp-dsgvo template{display:none}.sp-dsgvo [hidden]{display:none !important}.sp-dsgvo h1,.sp-dsgvo h2,.sp-dsgvo h3,.sp-dsgvo h4,.sp-dsgvo h5,.sp-dsgvo h6,.sp-dsgvo .h1,.sp-dsgvo .h2,.sp-dsgvo .h3,.sp-dsgvo .h4,.sp-dsgvo .h5,.sp-dsgvo .h6{margin-bottom:0.5rem;font-weight:300;line-height:1.2}.sp-dsgvo h1,.sp-dsgvo .h1{font-size:2.34375rem}.sp-dsgvo h2,.sp-dsgvo .h2{font-size:1.875rem}.sp-dsgvo h3,.sp-dsgvo .h3{font-size:1.640625rem}.sp-dsgvo h4,.sp-dsgvo .h4{font-size:1.40625rem}.sp-dsgvo h5,.sp-dsgvo .h5{font-size:1.171875rem}.sp-dsgvo h6,.sp-dsgvo .h6{font-size:0.9375rem}.sp-dsgvo .lead{font-size:1.171875rem;font-weight:300}.sp-dsgvo .display-1{font-size:6rem;font-weight:300;line-height:1.2}.sp-dsgvo .display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.sp-dsgvo .display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.sp-dsgvo .display-4{font-size:3.5rem;font-weight:300;line-height:1.2}.sp-dsgvo hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}.sp-dsgvo small,.sp-dsgvo .small{font-size:80%;font-weight:400}.sp-dsgvo mark,.sp-dsgvo .mark{padding:0.2em;background-color:#fcf8e3}.sp-dsgvo .list-unstyled{padding-left:0;list-style:none}.sp-dsgvo .list-inline{padding-left:0;list-style:none}.sp-dsgvo .list-inline-item{display:inline-block}.sp-dsgvo .list-inline-item:not(:last-child){margin-right:0.5rem}.sp-dsgvo .initialism{font-size:90%;text-transform:uppercase}.sp-dsgvo .blockquote{margin-bottom:1rem;font-size:1.171875rem}.sp-dsgvo .blockquote-footer{display:block;font-size:80%;color:#888}.sp-dsgvo .blockquote-footer::before{content:"\2014\00A0"}.sp-dsgvo .img-fluid{max-width:100%;height:auto}.sp-dsgvo .img-thumbnail{padding:0.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:0px;max-width:100%;height:auto}.sp-dsgvo .figure{display:inline-block}.sp-dsgvo .figure-img{margin-bottom:0.5rem;line-height:1}.sp-dsgvo .figure-caption{font-size:90%;color:#888}.sp-dsgvo code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>.sp-dsgvo code{color:inherit}.sp-dsgvo kbd{padding:0.2rem 0.4rem;font-size:87.5%;color:#fff;background-color:#222;border-radius:0px}.sp-dsgvo kbd kbd{padding:0;font-size:100%;font-weight:700}.sp-dsgvo pre{display:block;font-size:87.5%;color:#222}.sp-dsgvo pre code{font-size:inherit;color:inherit;word-break:normal}.sp-dsgvo .pre-scrollable{max-height:340px;overflow-y:scroll}.sp-dsgvo .container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width: 576px){.sp-dsgvo .container{max-width:540px}}@media (min-width: 768px){.sp-dsgvo .container{max-width:720px}}@media (min-width: 992px){.sp-dsgvo .container{max-width:960px}}@media (min-width: 1200px){.sp-dsgvo .container{max-width:1140px}}.sp-dsgvo .container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.sp-dsgvo .row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.sp-dsgvo .no-gutters{margin-right:0;margin-left:0}.sp-dsgvo .no-gutters>.col,.sp-dsgvo .no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.sp-dsgvo .col-1,.sp-dsgvo .col-2,.sp-dsgvo .col-3,.sp-dsgvo .col-4,.sp-dsgvo .col-5,.sp-dsgvo .col-6,.sp-dsgvo .col-7,.sp-dsgvo .col-8,.sp-dsgvo .col-9,.sp-dsgvo .col-10,.sp-dsgvo .col-11,.sp-dsgvo .col-12,.sp-dsgvo .col,.sp-dsgvo .col-auto,.sp-dsgvo .col-sm-1,.sp-dsgvo .col-sm-2,.sp-dsgvo .col-sm-3,.sp-dsgvo .col-sm-4,.sp-dsgvo .col-sm-5,.sp-dsgvo .col-sm-6,.sp-dsgvo .col-sm-7,.sp-dsgvo .col-sm-8,.sp-dsgvo .col-sm-9,.sp-dsgvo .col-sm-10,.sp-dsgvo .col-sm-11,.sp-dsgvo .col-sm-12,.sp-dsgvo .col-sm,.sp-dsgvo .col-sm-auto,.sp-dsgvo .col-md-1,.sp-dsgvo .col-md-2,.sp-dsgvo .col-md-3,.sp-dsgvo .col-md-4,.sp-dsgvo .col-md-5,.sp-dsgvo .col-md-6,.sp-dsgvo .col-md-7,.sp-dsgvo .col-md-8,.sp-dsgvo .col-md-9,.sp-dsgvo .col-md-10,.sp-dsgvo .col-md-11,.sp-dsgvo .col-md-12,.sp-dsgvo .col-md,.sp-dsgvo .col-md-auto,.sp-dsgvo .col-lg-1,.sp-dsgvo .col-lg-2,.sp-dsgvo .col-lg-3,.sp-dsgvo .col-lg-4,.sp-dsgvo .col-lg-5,.sp-dsgvo .col-lg-6,.sp-dsgvo .col-lg-7,.sp-dsgvo .col-lg-8,.sp-dsgvo .col-lg-9,.sp-dsgvo .col-lg-10,.sp-dsgvo .col-lg-11,.sp-dsgvo .col-lg-12,.sp-dsgvo .col-lg,.sp-dsgvo .col-lg-auto,.sp-dsgvo .col-xl-1,.sp-dsgvo .col-xl-2,.sp-dsgvo .col-xl-3,.sp-dsgvo .col-xl-4,.sp-dsgvo .col-xl-5,.sp-dsgvo .col-xl-6,.sp-dsgvo .col-xl-7,.sp-dsgvo .col-xl-8,.sp-dsgvo .col-xl-9,.sp-dsgvo .col-xl-10,.sp-dsgvo .col-xl-11,.sp-dsgvo .col-xl-12,.sp-dsgvo .col-xl,.sp-dsgvo .col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.sp-dsgvo .col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.sp-dsgvo .col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.sp-dsgvo .col-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.sp-dsgvo .col-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.sp-dsgvo .col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.sp-dsgvo .col-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.sp-dsgvo .col-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.sp-dsgvo .col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.sp-dsgvo .col-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.sp-dsgvo .col-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.sp-dsgvo .col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.sp-dsgvo .col-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.sp-dsgvo .col-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.sp-dsgvo .col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.sp-dsgvo .order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.sp-dsgvo .order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.sp-dsgvo .order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.sp-dsgvo .order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.sp-dsgvo .order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.sp-dsgvo .order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.sp-dsgvo .order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.sp-dsgvo .order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.sp-dsgvo .order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.sp-dsgvo .order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.sp-dsgvo .order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.sp-dsgvo .order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.sp-dsgvo .order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.sp-dsgvo .order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.sp-dsgvo .order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.sp-dsgvo .offset-1{margin-left:8.3333333333%}.sp-dsgvo .offset-2{margin-left:16.6666666667%}.sp-dsgvo .offset-3{margin-left:25%}.sp-dsgvo .offset-4{margin-left:33.3333333333%}.sp-dsgvo .offset-5{margin-left:41.6666666667%}.sp-dsgvo .offset-6{margin-left:50%}.sp-dsgvo .offset-7{margin-left:58.3333333333%}.sp-dsgvo .offset-8{margin-left:66.6666666667%}.sp-dsgvo .offset-9{margin-left:75%}.sp-dsgvo .offset-10{margin-left:83.3333333333%}.sp-dsgvo .offset-11{margin-left:91.6666666667%}@media (min-width: 576px){.sp-dsgvo .col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.sp-dsgvo .col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.sp-dsgvo .col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.sp-dsgvo .col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.sp-dsgvo .col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.sp-dsgvo .col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.sp-dsgvo .col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.sp-dsgvo .col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.sp-dsgvo .col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.sp-dsgvo .col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.sp-dsgvo .col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.sp-dsgvo .col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.sp-dsgvo .col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.sp-dsgvo .col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.sp-dsgvo .order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.sp-dsgvo .order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.sp-dsgvo .order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.sp-dsgvo .order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.sp-dsgvo .order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.sp-dsgvo .order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.sp-dsgvo .order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.sp-dsgvo .order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.sp-dsgvo .order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.sp-dsgvo .order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.sp-dsgvo .order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.sp-dsgvo .order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.sp-dsgvo .order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.sp-dsgvo .order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.sp-dsgvo .order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.sp-dsgvo .offset-sm-0{margin-left:0}.sp-dsgvo .offset-sm-1{margin-left:8.3333333333%}.sp-dsgvo .offset-sm-2{margin-left:16.6666666667%}.sp-dsgvo .offset-sm-3{margin-left:25%}.sp-dsgvo .offset-sm-4{margin-left:33.3333333333%}.sp-dsgvo .offset-sm-5{margin-left:41.6666666667%}.sp-dsgvo .offset-sm-6{margin-left:50%}.sp-dsgvo .offset-sm-7{margin-left:58.3333333333%}.sp-dsgvo .offset-sm-8{margin-left:66.6666666667%}.sp-dsgvo .offset-sm-9{margin-left:75%}.sp-dsgvo .offset-sm-10{margin-left:83.3333333333%}.sp-dsgvo .offset-sm-11{margin-left:91.6666666667%}}@media (min-width: 768px){.sp-dsgvo .col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.sp-dsgvo .col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.sp-dsgvo .col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.sp-dsgvo .col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.sp-dsgvo .col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.sp-dsgvo .col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.sp-dsgvo .col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.sp-dsgvo .col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.sp-dsgvo .col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.sp-dsgvo .col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.sp-dsgvo .col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.sp-dsgvo .col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.sp-dsgvo .col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.sp-dsgvo .col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.sp-dsgvo .order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.sp-dsgvo .order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.sp-dsgvo .order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.sp-dsgvo .order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.sp-dsgvo .order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.sp-dsgvo .order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.sp-dsgvo .order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.sp-dsgvo .order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.sp-dsgvo .order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.sp-dsgvo .order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.sp-dsgvo .order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.sp-dsgvo .order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.sp-dsgvo .order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.sp-dsgvo .order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.sp-dsgvo .order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.sp-dsgvo .offset-md-0{margin-left:0}.sp-dsgvo .offset-md-1{margin-left:8.3333333333%}.sp-dsgvo .offset-md-2{margin-left:16.6666666667%}.sp-dsgvo .offset-md-3{margin-left:25%}.sp-dsgvo .offset-md-4{margin-left:33.3333333333%}.sp-dsgvo .offset-md-5{margin-left:41.6666666667%}.sp-dsgvo .offset-md-6{margin-left:50%}.sp-dsgvo .offset-md-7{margin-left:58.3333333333%}.sp-dsgvo .offset-md-8{margin-left:66.6666666667%}.sp-dsgvo .offset-md-9{margin-left:75%}.sp-dsgvo .offset-md-10{margin-left:83.3333333333%}.sp-dsgvo .offset-md-11{margin-left:91.6666666667%}}@media (min-width: 992px){.sp-dsgvo .col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.sp-dsgvo .col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.sp-dsgvo .col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.sp-dsgvo .col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.sp-dsgvo .col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.sp-dsgvo .col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.sp-dsgvo .col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.sp-dsgvo .col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.sp-dsgvo .col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.sp-dsgvo .col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.sp-dsgvo .col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.sp-dsgvo .col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.sp-dsgvo .col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.sp-dsgvo .col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.sp-dsgvo .order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.sp-dsgvo .order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.sp-dsgvo .order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.sp-dsgvo .order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.sp-dsgvo .order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.sp-dsgvo .order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.sp-dsgvo .order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.sp-dsgvo .order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.sp-dsgvo .order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.sp-dsgvo .order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.sp-dsgvo .order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.sp-dsgvo .order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.sp-dsgvo .order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.sp-dsgvo .order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.sp-dsgvo .order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.sp-dsgvo .offset-lg-0{margin-left:0}.sp-dsgvo .offset-lg-1{margin-left:8.3333333333%}.sp-dsgvo .offset-lg-2{margin-left:16.6666666667%}.sp-dsgvo .offset-lg-3{margin-left:25%}.sp-dsgvo .offset-lg-4{margin-left:33.3333333333%}.sp-dsgvo .offset-lg-5{margin-left:41.6666666667%}.sp-dsgvo .offset-lg-6{margin-left:50%}.sp-dsgvo .offset-lg-7{margin-left:58.3333333333%}.sp-dsgvo .offset-lg-8{margin-left:66.6666666667%}.sp-dsgvo .offset-lg-9{margin-left:75%}.sp-dsgvo .offset-lg-10{margin-left:83.3333333333%}.sp-dsgvo .offset-lg-11{margin-left:91.6666666667%}}@media (min-width: 1200px){.sp-dsgvo .col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.sp-dsgvo .col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.sp-dsgvo .col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.sp-dsgvo .col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.sp-dsgvo .col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.sp-dsgvo .col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.sp-dsgvo .col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.sp-dsgvo .col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.sp-dsgvo .col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.sp-dsgvo .col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.sp-dsgvo .col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.sp-dsgvo .col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.sp-dsgvo .col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.sp-dsgvo .col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.sp-dsgvo .order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.sp-dsgvo .order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.sp-dsgvo .order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.sp-dsgvo .order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.sp-dsgvo .order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.sp-dsgvo .order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.sp-dsgvo .order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.sp-dsgvo .order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.sp-dsgvo .order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.sp-dsgvo .order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.sp-dsgvo .order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.sp-dsgvo .order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.sp-dsgvo .order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.sp-dsgvo .order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.sp-dsgvo .order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.sp-dsgvo .offset-xl-0{margin-left:0}.sp-dsgvo .offset-xl-1{margin-left:8.3333333333%}.sp-dsgvo .offset-xl-2{margin-left:16.6666666667%}.sp-dsgvo .offset-xl-3{margin-left:25%}.sp-dsgvo .offset-xl-4{margin-left:33.3333333333%}.sp-dsgvo .offset-xl-5{margin-left:41.6666666667%}.sp-dsgvo .offset-xl-6{margin-left:50%}.sp-dsgvo .offset-xl-7{margin-left:58.3333333333%}.sp-dsgvo .offset-xl-8{margin-left:66.6666666667%}.sp-dsgvo .offset-xl-9{margin-left:75%}.sp-dsgvo .offset-xl-10{margin-left:83.3333333333%}.sp-dsgvo .offset-xl-11{margin-left:91.6666666667%}}.sp-dsgvo .table{width:100%;margin-bottom:1rem;color:#222}.sp-dsgvo .table th,.sp-dsgvo .table td{padding:0.75rem;vertical-align:top;border-top:1px solid #dee2e6}.sp-dsgvo .table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.sp-dsgvo .table tbody+tbody{border-top:2px solid #dee2e6}.sp-dsgvo .table-sm th,.sp-dsgvo .table-sm td{padding:0.3rem}.sp-dsgvo .table-bordered{border:1px solid #dee2e6}.sp-dsgvo .table-bordered th,.sp-dsgvo .table-bordered td{border:1px solid #dee2e6}.sp-dsgvo .table-bordered thead th,.sp-dsgvo .table-bordered thead td{border-bottom-width:2px}.sp-dsgvo .table-borderless th,.sp-dsgvo .table-borderless td,.sp-dsgvo .table-borderless thead th,.sp-dsgvo .table-borderless tbody+tbody{border:0}.sp-dsgvo .table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.05)}.sp-dsgvo .table-hover tbody tr:hover{color:#222;background-color:rgba(0,0,0,0.075)}.sp-dsgvo .table-primary,.sp-dsgvo .table-primary>th,.sp-dsgvo .table-primary>td{background-color:#b8dfec}.sp-dsgvo .table-primary th,.sp-dsgvo .table-primary td,.sp-dsgvo .table-primary thead th,.sp-dsgvo .table-primary tbody+tbody{border-color:#7ac3db}.sp-dsgvo .table-hover .table-primary:hover{background-color:#a4d6e7}.sp-dsgvo .table-hover .table-primary:hover>td,.sp-dsgvo .table-hover .table-primary:hover>th{background-color:#a4d6e7}.sp-dsgvo .table-secondary,.sp-dsgvo .table-secondary>th,.sp-dsgvo .table-secondary>td{background-color:#fafafa}.sp-dsgvo .table-secondary th,.sp-dsgvo .table-secondary td,.sp-dsgvo .table-secondary thead th,.sp-dsgvo .table-secondary tbody+tbody{border-color:#f6f6f6}.sp-dsgvo .table-hover .table-secondary:hover{background-color:#ededed}.sp-dsgvo .table-hover .table-secondary:hover>td,.sp-dsgvo .table-hover .table-secondary:hover>th{background-color:#ededed}.sp-dsgvo .table-success,.sp-dsgvo .table-success>th,.sp-dsgvo .table-success>td{background-color:#cae8d5}.sp-dsgvo .table-success th,.sp-dsgvo .table-success td,.sp-dsgvo .table-success thead th,.sp-dsgvo .table-success tbody+tbody{border-color:#9dd4b2}.sp-dsgvo .table-hover .table-success:hover{background-color:#b8e0c7}.sp-dsgvo .table-hover .table-success:hover>td,.sp-dsgvo .table-hover .table-success:hover>th{background-color:#b8e0c7}.sp-dsgvo .table-info,.sp-dsgvo .table-info>th,.sp-dsgvo .table-info>td{background-color:#d1edf6}.sp-dsgvo .table-info th,.sp-dsgvo .table-info td,.sp-dsgvo .table-info thead th,.sp-dsgvo .table-info tbody+tbody{border-color:#aadeee}.sp-dsgvo .table-hover .table-info:hover{background-color:#bce5f2}.sp-dsgvo .table-hover .table-info:hover>td,.sp-dsgvo .table-hover .table-info:hover>th{background-color:#bce5f2}.sp-dsgvo .table-warning,.sp-dsgvo .table-warning>th,.sp-dsgvo .table-warning>td{background-color:#f9e0b8}.sp-dsgvo .table-warning th,.sp-dsgvo .table-warning td,.sp-dsgvo .table-warning thead th,.sp-dsgvo .table-warning tbody+tbody{border-color:#f4c57b}.sp-dsgvo .table-hover .table-warning:hover{background-color:#f7d6a0}.sp-dsgvo .table-hover .table-warning:hover>td,.sp-dsgvo .table-hover .table-warning:hover>th{background-color:#f7d6a0}.sp-dsgvo .table-danger,.sp-dsgvo .table-danger>th,.sp-dsgvo .table-danger>td{background-color:#fbcac2}.sp-dsgvo .table-danger th,.sp-dsgvo .table-danger td,.sp-dsgvo .table-danger thead th,.sp-dsgvo .table-danger tbody+tbody{border-color:#f79c8d}.sp-dsgvo .table-hover .table-danger:hover{background-color:#f9b5aa}.sp-dsgvo .table-hover .table-danger:hover>td,.sp-dsgvo .table-hover .table-danger:hover>th{background-color:#f9b5aa}.sp-dsgvo .table-light,.sp-dsgvo .table-light>th,.sp-dsgvo .table-light>td{background-color:#fafafa}.sp-dsgvo .table-light th,.sp-dsgvo .table-light td,.sp-dsgvo .table-light thead th,.sp-dsgvo .table-light tbody+tbody{border-color:#f6f6f6}.sp-dsgvo .table-hover .table-light:hover{background-color:#ededed}.sp-dsgvo .table-hover .table-light:hover>td,.sp-dsgvo .table-hover .table-light:hover>th{background-color:#ededed}.sp-dsgvo .table-dark,.sp-dsgvo .table-dark>th,.sp-dsgvo .table-dark>td{background-color:#c1c1c1}.sp-dsgvo .table-dark th,.sp-dsgvo .table-dark td,.sp-dsgvo .table-dark thead th,.sp-dsgvo .table-dark tbody+tbody{border-color:#8c8c8c}.sp-dsgvo .table-hover .table-dark:hover{background-color:#b4b4b4}.sp-dsgvo .table-hover .table-dark:hover>td,.sp-dsgvo .table-hover .table-dark:hover>th{background-color:#b4b4b4}.sp-dsgvo .table-active,.sp-dsgvo .table-active>th,.sp-dsgvo .table-active>td{background-color:rgba(0,0,0,0.075)}.sp-dsgvo .table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.sp-dsgvo .table-hover .table-active:hover>td,.sp-dsgvo .table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.sp-dsgvo .table .thead-dark th{color:#fff;background-color:#333;border-color:#464646}.sp-dsgvo .table .thead-light th{color:#495057;background-color:#eee;border-color:#dee2e6}.sp-dsgvo .table-dark{color:#fff;background-color:#333}.sp-dsgvo .table-dark th,.sp-dsgvo .table-dark td,.sp-dsgvo .table-dark thead th{border-color:#464646}.sp-dsgvo .table-dark.table-bordered{border:0}.sp-dsgvo .table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.sp-dsgvo .table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,0.075)}@media (max-width: 575.98px){.sp-dsgvo .table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.sp-dsgvo .table-responsive-sm>.table-bordered{border:0}}@media (max-width: 767.98px){.sp-dsgvo .table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.sp-dsgvo .table-responsive-md>.table-bordered{border:0}}@media (max-width: 991.98px){.sp-dsgvo .table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.sp-dsgvo .table-responsive-lg>.table-bordered{border:0}}@media (max-width: 1199.98px){.sp-dsgvo .table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.sp-dsgvo .table-responsive-xl>.table-bordered{border:0}}.sp-dsgvo .table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.sp-dsgvo .table-responsive>.table-bordered{border:0}.sp-dsgvo .form-control{display:block;width:100%;height:calc(1.5em + 0.75rem + 2px);padding:0.375rem 0.5rem;font-size:0.9375rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border-radius:0px;-webkit-transition:border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.sp-dsgvo .form-control{-webkit-transition:none;transition:none}}.sp-dsgvo .form-control::-ms-expand{background-color:transparent;border:0}.sp-dsgvo .form-control:focus{color:#495057;background-color:#fff;border-color:#3bceff;outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(0,140,186,0.25);box-shadow:0 0 0 0.2rem rgba(0,140,186,0.25)}.sp-dsgvo .form-control::-webkit-input-placeholder{color:#888;opacity:1}.sp-dsgvo .form-control::-ms-input-placeholder{color:#888;opacity:1}.sp-dsgvo .form-control::placeholder{color:#888;opacity:1}.sp-dsgvo .form-control:disabled,.sp-dsgvo .form-control[readonly]{background-color:#eee;opacity:1}.sp-dsgvo select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.sp-dsgvo .form-control-file,.sp-dsgvo .form-control-range{display:block;width:100%}.sp-dsgvo .col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.sp-dsgvo .col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.171875rem;line-height:1.5}.sp-dsgvo .col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.8203125rem;line-height:1.5}.sp-dsgvo .form-control-plaintext{display:block;width:100%;padding-top:0.375rem;padding-bottom:0.375rem;margin-bottom:0;line-height:1.5;color:#222;background-color:transparent;border:solid transparent;border-width:1px 0}.sp-dsgvo .form-control-plaintext.form-control-sm,.sp-dsgvo .form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.sp-dsgvo .form-control-sm{height:calc(1.5em + 0.5rem + 2px);padding:0.25rem 0.5rem;font-size:0.8203125rem;line-height:1.5;border-radius:0px}.sp-dsgvo .form-control-lg{height:calc(1.5em + 1rem + 2px);padding:0.5rem 1rem;font-size:1.171875rem;line-height:1.5;border-radius:0px}.sp-dsgvo select.form-control[size],.sp-dsgvo select.form-control[multiple]{height:auto}.sp-dsgvo textarea.form-control{height:auto}.sp-dsgvo .form-group{margin-bottom:1rem}.sp-dsgvo .form-text{display:block;margin-top:0.25rem}.sp-dsgvo .form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.sp-dsgvo .form-row>.col,.sp-dsgvo .form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.sp-dsgvo .form-check{position:relative;display:block;padding-left:1.25rem}.sp-dsgvo .form-check-input{position:absolute;margin-top:0.3rem;margin-left:-1.25rem}.sp-dsgvo .form-check-input:disabled ~ .form-check-label{color:#888}.sp-dsgvo .form-check-label{margin-bottom:0}.sp-dsgvo .form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:0.75rem}.sp-dsgvo .form-check-inline .form-check-input{position:static;margin-top:0;margin-right:0.3125rem;margin-left:0}.sp-dsgvo .valid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:80%;color:#43ac6a}.sp-dsgvo .valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:.1rem;font-size:0.8203125rem;line-height:1.5;color:#fff;background-color:rgba(67,172,106,0.9);border-radius:0px}.was-validated .sp-dsgvo .form-control:valid,.sp-dsgvo .form-control.is-valid{border-color:#43ac6a;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2343ac6a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(0.375em + 0.1875rem);background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .sp-dsgvo .form-control:valid:focus,.sp-dsgvo .form-control.is-valid:focus{border-color:#43ac6a;-webkit-box-shadow:0 0 0 0.2rem rgba(67,172,106,0.25);box-shadow:0 0 0 0.2rem rgba(67,172,106,0.25)}.was-validated .sp-dsgvo .form-control:valid ~ .valid-feedback,.was-validated .sp-dsgvo .form-control:valid ~ .valid-tooltip,.sp-dsgvo .form-control.is-valid ~ .valid-feedback,.sp-dsgvo .form-control.is-valid ~ .valid-tooltip{display:block}.was-validated .sp-dsgvo textarea.form-control:valid,.sp-dsgvo textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .sp-dsgvo .custom-select:valid,.sp-dsgvo .custom-select.is-valid{border-color:#43ac6a;padding-right:calc((1em + 0.75rem) * 3 / 4 + 1.5rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.5rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2343ac6a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.5rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .sp-dsgvo .custom-select:valid:focus,.sp-dsgvo .custom-select.is-valid:focus{border-color:#43ac6a;-webkit-box-shadow:0 0 0 0.2rem rgba(67,172,106,0.25);box-shadow:0 0 0 0.2rem rgba(67,172,106,0.25)}.was-validated .sp-dsgvo .custom-select:valid ~ .valid-feedback,.was-validated .sp-dsgvo .custom-select:valid ~ .valid-tooltip,.sp-dsgvo .custom-select.is-valid ~ .valid-feedback,.sp-dsgvo .custom-select.is-valid ~ .valid-tooltip{display:block}.was-validated .sp-dsgvo .form-control-file:valid ~ .valid-feedback,.was-validated .sp-dsgvo .form-control-file:valid ~ .valid-tooltip,.sp-dsgvo .form-control-file.is-valid ~ .valid-feedback,.sp-dsgvo .form-control-file.is-valid ~ .valid-tooltip{display:block}.was-validated .sp-dsgvo .form-check-input:valid ~ .form-check-label,.sp-dsgvo .form-check-input.is-valid ~ .form-check-label{color:#43ac6a}.was-validated .sp-dsgvo .form-check-input:valid ~ .valid-feedback,.was-validated .sp-dsgvo .form-check-input:valid ~ .valid-tooltip,.sp-dsgvo .form-check-input.is-valid ~ .valid-feedback,.sp-dsgvo .form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .sp-dsgvo .custom-control-input:valid ~ .custom-control-label,.sp-dsgvo .custom-control-input.is-valid ~ .custom-control-label{color:#43ac6a}.was-validated .sp-dsgvo .custom-control-input:valid ~ .custom-control-label::before,.sp-dsgvo .custom-control-input.is-valid ~ .custom-control-label::before{border-color:#43ac6a}.was-validated .sp-dsgvo .custom-control-input:valid ~ .valid-feedback,.was-validated .sp-dsgvo .custom-control-input:valid ~ .valid-tooltip,.sp-dsgvo .custom-control-input.is-valid ~ .valid-feedback,.sp-dsgvo .custom-control-input.is-valid ~ .valid-tooltip{display:block}.was-validated .sp-dsgvo .custom-control-input:valid:checked ~ .custom-control-label::before,.sp-dsgvo .custom-control-input.is-valid:checked ~ .custom-control-label::before{border-color:#61c185;background-color:#61c185}.was-validated .sp-dsgvo .custom-control-input:valid:focus ~ .custom-control-label::before,.sp-dsgvo .custom-control-input.is-valid:focus ~ .custom-control-label::before{-webkit-box-shadow:0 0 0 0.2rem rgba(67,172,106,0.25);box-shadow:0 0 0 0.2rem rgba(67,172,106,0.25)}.was-validated .sp-dsgvo .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before,.sp-dsgvo .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before{border-color:#43ac6a}.was-validated .sp-dsgvo .custom-file-input:valid ~ .custom-file-label,.sp-dsgvo .custom-file-input.is-valid ~ .custom-file-label{border-color:#43ac6a}.was-validated .sp-dsgvo .custom-file-input:valid ~ .valid-feedback,.was-validated .sp-dsgvo .custom-file-input:valid ~ .valid-tooltip,.sp-dsgvo .custom-file-input.is-valid ~ .valid-feedback,.sp-dsgvo .custom-file-input.is-valid ~ .valid-tooltip{display:block}.was-validated .sp-dsgvo .custom-file-input:valid:focus ~ .custom-file-label,.sp-dsgvo .custom-file-input.is-valid:focus ~ .custom-file-label{border-color:#43ac6a;-webkit-box-shadow:0 0 0 0.2rem rgba(67,172,106,0.25);box-shadow:0 0 0 0.2rem rgba(67,172,106,0.25)}.sp-dsgvo .invalid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:80%;color:#F04124}.sp-dsgvo .invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:.1rem;font-size:0.8203125rem;line-height:1.5;color:#fff;background-color:rgba(240,65,36,0.9);border-radius:0px}.was-validated .sp-dsgvo .form-control:invalid,.sp-dsgvo .form-control.is-invalid{border-color:#F04124;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23F04124' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23F04124' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(0.375em + 0.1875rem);background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .sp-dsgvo .form-control:invalid:focus,.sp-dsgvo .form-control.is-invalid:focus{border-color:#F04124;-webkit-box-shadow:0 0 0 0.2rem rgba(240,65,36,0.25);box-shadow:0 0 0 0.2rem rgba(240,65,36,0.25)}.was-validated .sp-dsgvo .form-control:invalid ~ .invalid-feedback,.was-validated .sp-dsgvo .form-control:invalid ~ .invalid-tooltip,.sp-dsgvo .form-control.is-invalid ~ .invalid-feedback,.sp-dsgvo .form-control.is-invalid ~ .invalid-tooltip{display:block}.was-validated .sp-dsgvo textarea.form-control:invalid,.sp-dsgvo textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .sp-dsgvo .custom-select:invalid,.sp-dsgvo .custom-select.is-invalid{border-color:#F04124;padding-right:calc((1em + 0.75rem) * 3 / 4 + 1.5rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.5rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23F04124' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23F04124' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.5rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .sp-dsgvo .custom-select:invalid:focus,.sp-dsgvo .custom-select.is-invalid:focus{border-color:#F04124;-webkit-box-shadow:0 0 0 0.2rem rgba(240,65,36,0.25);box-shadow:0 0 0 0.2rem rgba(240,65,36,0.25)}.was-validated .sp-dsgvo .custom-select:invalid ~ .invalid-feedback,.was-validated .sp-dsgvo .custom-select:invalid ~ .invalid-tooltip,.sp-dsgvo .custom-select.is-invalid ~ .invalid-feedback,.sp-dsgvo .custom-select.is-invalid ~ .invalid-tooltip{display:block}.was-validated .sp-dsgvo .form-control-file:invalid ~ .invalid-feedback,.was-validated .sp-dsgvo .form-control-file:invalid ~ .invalid-tooltip,.sp-dsgvo .form-control-file.is-invalid ~ .invalid-feedback,.sp-dsgvo .form-control-file.is-invalid ~ .invalid-tooltip{display:block}.was-validated .sp-dsgvo .form-check-input:invalid ~ .form-check-label,.sp-dsgvo .form-check-input.is-invalid ~ .form-check-label{color:#F04124}.was-validated .sp-dsgvo .form-check-input:invalid ~ .invalid-feedback,.was-validated .sp-dsgvo .form-check-input:invalid ~ .invalid-tooltip,.sp-dsgvo .form-check-input.is-invalid ~ .invalid-feedback,.sp-dsgvo .form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .sp-dsgvo .custom-control-input:invalid ~ .custom-control-label,.sp-dsgvo .custom-control-input.is-invalid ~ .custom-control-label{color:#F04124}.was-validated .sp-dsgvo .custom-control-input:invalid ~ .custom-control-label::before,.sp-dsgvo .custom-control-input.is-invalid ~ .custom-control-label::before{border-color:#F04124}.was-validated .sp-dsgvo .custom-control-input:invalid ~ .invalid-feedback,.was-validated .sp-dsgvo .custom-control-input:invalid ~ .invalid-tooltip,.sp-dsgvo .custom-control-input.is-invalid ~ .invalid-feedback,.sp-dsgvo .custom-control-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .sp-dsgvo .custom-control-input:invalid:checked ~ .custom-control-label::before,.sp-dsgvo .custom-control-input.is-invalid:checked ~ .custom-control-label::before{border-color:#f36a54;background-color:#f36a54}.was-validated .sp-dsgvo .custom-control-input:invalid:focus ~ .custom-control-label::before,.sp-dsgvo .custom-control-input.is-invalid:focus ~ .custom-control-label::before{-webkit-box-shadow:0 0 0 0.2rem rgba(240,65,36,0.25);box-shadow:0 0 0 0.2rem rgba(240,65,36,0.25)}.was-validated .sp-dsgvo .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before,.sp-dsgvo .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before{border-color:#F04124}.was-validated .sp-dsgvo .custom-file-input:invalid ~ .custom-file-label,.sp-dsgvo .custom-file-input.is-invalid ~ .custom-file-label{border-color:#F04124}.was-validated .sp-dsgvo .custom-file-input:invalid ~ .invalid-feedback,.was-validated .sp-dsgvo .custom-file-input:invalid ~ .invalid-tooltip,.sp-dsgvo .custom-file-input.is-invalid ~ .invalid-feedback,.sp-dsgvo .custom-file-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .sp-dsgvo .custom-file-input:invalid:focus ~ .custom-file-label,.sp-dsgvo .custom-file-input.is-invalid:focus ~ .custom-file-label{border-color:#F04124;-webkit-box-shadow:0 0 0 0.2rem rgba(240,65,36,0.25);box-shadow:0 0 0 0.2rem rgba(240,65,36,0.25)}.sp-dsgvo .form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.sp-dsgvo .form-inline .form-check{width:100%}@media (min-width: 576px){.sp-dsgvo .form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.sp-dsgvo .form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.sp-dsgvo .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.sp-dsgvo .form-inline .form-control-plaintext{display:inline-block}.sp-dsgvo .form-inline .input-group,.sp-dsgvo .form-inline .custom-select{width:auto}.sp-dsgvo .form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.sp-dsgvo .form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:0.25rem;margin-left:0}.sp-dsgvo .form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.sp-dsgvo .form-inline .custom-control-label{margin-bottom:0}}.sp-dsgvo .btn{display:inline-block;font-weight:300;color:#222;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:0.375rem 0.5rem;font-size:0.9375rem;line-height:1.5;border-radius:0px;-webkit-transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.sp-dsgvo .btn{-webkit-transition:none;transition:none}}.sp-dsgvo .btn:hover{color:#222;text-decoration:none}.sp-dsgvo .btn:focus,.sp-dsgvo .btn.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(0,140,186,0.25);box-shadow:0 0 0 0.2rem rgba(0,140,186,0.25)}.sp-dsgvo .btn.disabled,.sp-dsgvo .btn:disabled{opacity:0.65}.sp-dsgvo a.btn.disabled,.sp-dsgvo fieldset:disabled a.btn{pointer-events:none}.sp-dsgvo .btn-primary{color:#fff;background-color:#008cba;border-color:#008cba}.sp-dsgvo .btn-primary:hover{color:#fff;background-color:#006f94;border-color:#006687}.sp-dsgvo .btn-primary:focus,.sp-dsgvo .btn-primary.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(38,157,196,0.5);box-shadow:0 0 0 0.2rem rgba(38,157,196,0.5)}.sp-dsgvo .btn-primary.disabled,.sp-dsgvo .btn-primary:disabled{color:#fff;background-color:#008cba;border-color:#008cba}.sp-dsgvo .btn-primary:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-primary:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-primary.dropdown-toggle{color:#fff;background-color:#006687;border-color:#005c7a}.sp-dsgvo .btn-primary:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-primary:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(38,157,196,0.5);box-shadow:0 0 0 0.2rem rgba(38,157,196,0.5)}.sp-dsgvo .btn-secondary{color:#222;background-color:#eee;border-color:#eee}.sp-dsgvo .btn-secondary:hover{color:#222;background-color:#dbdbdb;border-color:#d5d4d4}.sp-dsgvo .btn-secondary:focus,.sp-dsgvo .btn-secondary.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(207,207,207,0.5);box-shadow:0 0 0 0.2rem rgba(207,207,207,0.5)}.sp-dsgvo .btn-secondary.disabled,.sp-dsgvo .btn-secondary:disabled{color:#222;background-color:#eee;border-color:#eee}.sp-dsgvo .btn-secondary:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-secondary:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-secondary.dropdown-toggle{color:#222;background-color:#d5d4d4;border-color:#cecece}.sp-dsgvo .btn-secondary:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(207,207,207,0.5);box-shadow:0 0 0 0.2rem rgba(207,207,207,0.5)}.sp-dsgvo .btn-success{color:#fff;background-color:#43ac6a;border-color:#43ac6a}.sp-dsgvo .btn-success:hover{color:#fff;background-color:#389059;border-color:#358753}.sp-dsgvo .btn-success:focus,.sp-dsgvo .btn-success.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(95,184,128,0.5);box-shadow:0 0 0 0.2rem rgba(95,184,128,0.5)}.sp-dsgvo .btn-success.disabled,.sp-dsgvo .btn-success:disabled{color:#fff;background-color:#43ac6a;border-color:#43ac6a}.sp-dsgvo .btn-success:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-success:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-success.dropdown-toggle{color:#fff;background-color:#358753;border-color:#317e4e}.sp-dsgvo .btn-success:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-success:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(95,184,128,0.5);box-shadow:0 0 0 0.2rem rgba(95,184,128,0.5)}.sp-dsgvo .btn-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.sp-dsgvo .btn-info:hover{color:#fff;background-color:#3bb4d8;border-color:#31b0d5}.sp-dsgvo .btn-info:focus,.sp-dsgvo .btn-info.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(116,201,227,0.5);box-shadow:0 0 0 0.2rem rgba(116,201,227,0.5)}.sp-dsgvo .btn-info.disabled,.sp-dsgvo .btn-info:disabled{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.sp-dsgvo .btn-info:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-info:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#2aaacf}.sp-dsgvo .btn-info:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-info:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(116,201,227,0.5);box-shadow:0 0 0 0.2rem rgba(116,201,227,0.5)}.sp-dsgvo .btn-warning{color:#fff;background-color:#E99002;border-color:#E99002}.sp-dsgvo .btn-warning:hover{color:#fff;background-color:#c37902;border-color:#b67102}.sp-dsgvo .btn-warning:focus,.sp-dsgvo .btn-warning.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(236,161,40,0.5);box-shadow:0 0 0 0.2rem rgba(236,161,40,0.5)}.sp-dsgvo .btn-warning.disabled,.sp-dsgvo .btn-warning:disabled{color:#fff;background-color:#E99002;border-color:#E99002}.sp-dsgvo .btn-warning:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-warning:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-warning.dropdown-toggle{color:#fff;background-color:#b67102;border-color:#aa6901}.sp-dsgvo .btn-warning:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-warning:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(236,161,40,0.5);box-shadow:0 0 0 0.2rem rgba(236,161,40,0.5)}.sp-dsgvo .btn-danger{color:#fff;background-color:#F04124;border-color:#F04124}.sp-dsgvo .btn-danger:hover{color:#fff;background-color:#df2d0f;border-color:#d32a0e}.sp-dsgvo .btn-danger:focus,.sp-dsgvo .btn-danger.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(242,94,69,0.5);box-shadow:0 0 0 0.2rem rgba(242,94,69,0.5)}.sp-dsgvo .btn-danger.disabled,.sp-dsgvo .btn-danger:disabled{color:#fff;background-color:#F04124;border-color:#F04124}.sp-dsgvo .btn-danger:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-danger:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-danger.dropdown-toggle{color:#fff;background-color:#d32a0e;border-color:#c7280e}.sp-dsgvo .btn-danger:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-danger:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(242,94,69,0.5);box-shadow:0 0 0 0.2rem rgba(242,94,69,0.5)}.sp-dsgvo .btn-light{color:#222;background-color:#eee;border-color:#eee}.sp-dsgvo .btn-light:hover{color:#222;background-color:#dbdbdb;border-color:#d5d4d4}.sp-dsgvo .btn-light:focus,.sp-dsgvo .btn-light.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(207,207,207,0.5);box-shadow:0 0 0 0.2rem rgba(207,207,207,0.5)}.sp-dsgvo .btn-light.disabled,.sp-dsgvo .btn-light:disabled{color:#222;background-color:#eee;border-color:#eee}.sp-dsgvo .btn-light:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-light:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-light.dropdown-toggle{color:#222;background-color:#d5d4d4;border-color:#cecece}.sp-dsgvo .btn-light:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-light:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(207,207,207,0.5);box-shadow:0 0 0 0.2rem rgba(207,207,207,0.5)}.sp-dsgvo .btn-dark{color:#fff;background-color:#222;border-color:#222}.sp-dsgvo .btn-dark:hover{color:#fff;background-color:#0f0f0f;border-color:#090808}.sp-dsgvo .btn-dark:focus,.sp-dsgvo .btn-dark.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(67,67,67,0.5);box-shadow:0 0 0 0.2rem rgba(67,67,67,0.5)}.sp-dsgvo .btn-dark.disabled,.sp-dsgvo .btn-dark:disabled{color:#fff;background-color:#222;border-color:#222}.sp-dsgvo .btn-dark:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-dark:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-dark.dropdown-toggle{color:#fff;background-color:#090808;border-color:#020202}.sp-dsgvo .btn-dark:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-dark:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(67,67,67,0.5);box-shadow:0 0 0 0.2rem rgba(67,67,67,0.5)}.sp-dsgvo .btn-outline-primary{color:#008cba;border-color:#008cba}.sp-dsgvo .btn-outline-primary:hover{color:#fff;background-color:#008cba;border-color:#008cba}.sp-dsgvo .btn-outline-primary:focus,.sp-dsgvo .btn-outline-primary.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(0,140,186,0.5);box-shadow:0 0 0 0.2rem rgba(0,140,186,0.5)}.sp-dsgvo .btn-outline-primary.disabled,.sp-dsgvo .btn-outline-primary:disabled{color:#008cba;background-color:transparent}.sp-dsgvo .btn-outline-primary:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-outline-primary:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-outline-primary.dropdown-toggle{color:#fff;background-color:#008cba;border-color:#008cba}.sp-dsgvo .btn-outline-primary:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(0,140,186,0.5);box-shadow:0 0 0 0.2rem rgba(0,140,186,0.5)}.sp-dsgvo .btn-outline-secondary{color:#eee;border-color:#eee}.sp-dsgvo .btn-outline-secondary:hover{color:#222;background-color:#eee;border-color:#eee}.sp-dsgvo .btn-outline-secondary:focus,.sp-dsgvo .btn-outline-secondary.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(238,238,238,0.5);box-shadow:0 0 0 0.2rem rgba(238,238,238,0.5)}.sp-dsgvo .btn-outline-secondary.disabled,.sp-dsgvo .btn-outline-secondary:disabled{color:#eee;background-color:transparent}.sp-dsgvo .btn-outline-secondary:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-outline-secondary.dropdown-toggle{color:#222;background-color:#eee;border-color:#eee}.sp-dsgvo .btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(238,238,238,0.5);box-shadow:0 0 0 0.2rem rgba(238,238,238,0.5)}.sp-dsgvo .btn-outline-success{color:#43ac6a;border-color:#43ac6a}.sp-dsgvo .btn-outline-success:hover{color:#fff;background-color:#43ac6a;border-color:#43ac6a}.sp-dsgvo .btn-outline-success:focus,.sp-dsgvo .btn-outline-success.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(67,172,106,0.5);box-shadow:0 0 0 0.2rem rgba(67,172,106,0.5)}.sp-dsgvo .btn-outline-success.disabled,.sp-dsgvo .btn-outline-success:disabled{color:#43ac6a;background-color:transparent}.sp-dsgvo .btn-outline-success:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-outline-success:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-outline-success.dropdown-toggle{color:#fff;background-color:#43ac6a;border-color:#43ac6a}.sp-dsgvo .btn-outline-success:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(67,172,106,0.5);box-shadow:0 0 0 0.2rem rgba(67,172,106,0.5)}.sp-dsgvo .btn-outline-info{color:#5bc0de;border-color:#5bc0de}.sp-dsgvo .btn-outline-info:hover{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.sp-dsgvo .btn-outline-info:focus,.sp-dsgvo .btn-outline-info.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5);box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5)}.sp-dsgvo .btn-outline-info.disabled,.sp-dsgvo .btn-outline-info:disabled{color:#5bc0de;background-color:transparent}.sp-dsgvo .btn-outline-info:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-outline-info:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-outline-info.dropdown-toggle{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.sp-dsgvo .btn-outline-info:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5);box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5)}.sp-dsgvo .btn-outline-warning{color:#E99002;border-color:#E99002}.sp-dsgvo .btn-outline-warning:hover{color:#fff;background-color:#E99002;border-color:#E99002}.sp-dsgvo .btn-outline-warning:focus,.sp-dsgvo .btn-outline-warning.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(233,144,2,0.5);box-shadow:0 0 0 0.2rem rgba(233,144,2,0.5)}.sp-dsgvo .btn-outline-warning.disabled,.sp-dsgvo .btn-outline-warning:disabled{color:#E99002;background-color:transparent}.sp-dsgvo .btn-outline-warning:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-outline-warning:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-outline-warning.dropdown-toggle{color:#fff;background-color:#E99002;border-color:#E99002}.sp-dsgvo .btn-outline-warning:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(233,144,2,0.5);box-shadow:0 0 0 0.2rem rgba(233,144,2,0.5)}.sp-dsgvo .btn-outline-danger{color:#F04124;border-color:#F04124}.sp-dsgvo .btn-outline-danger:hover{color:#fff;background-color:#F04124;border-color:#F04124}.sp-dsgvo .btn-outline-danger:focus,.sp-dsgvo .btn-outline-danger.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(240,65,36,0.5);box-shadow:0 0 0 0.2rem rgba(240,65,36,0.5)}.sp-dsgvo .btn-outline-danger.disabled,.sp-dsgvo .btn-outline-danger:disabled{color:#F04124;background-color:transparent}.sp-dsgvo .btn-outline-danger:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-outline-danger:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-outline-danger.dropdown-toggle{color:#fff;background-color:#F04124;border-color:#F04124}.sp-dsgvo .btn-outline-danger:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(240,65,36,0.5);box-shadow:0 0 0 0.2rem rgba(240,65,36,0.5)}.sp-dsgvo .btn-outline-light{color:#eee;border-color:#eee}.sp-dsgvo .btn-outline-light:hover{color:#222;background-color:#eee;border-color:#eee}.sp-dsgvo .btn-outline-light:focus,.sp-dsgvo .btn-outline-light.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(238,238,238,0.5);box-shadow:0 0 0 0.2rem rgba(238,238,238,0.5)}.sp-dsgvo .btn-outline-light.disabled,.sp-dsgvo .btn-outline-light:disabled{color:#eee;background-color:transparent}.sp-dsgvo .btn-outline-light:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-outline-light:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-outline-light.dropdown-toggle{color:#222;background-color:#eee;border-color:#eee}.sp-dsgvo .btn-outline-light:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(238,238,238,0.5);box-shadow:0 0 0 0.2rem rgba(238,238,238,0.5)}.sp-dsgvo .btn-outline-dark{color:#222;border-color:#222}.sp-dsgvo .btn-outline-dark:hover{color:#fff;background-color:#222;border-color:#222}.sp-dsgvo .btn-outline-dark:focus,.sp-dsgvo .btn-outline-dark.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(34,34,34,0.5);box-shadow:0 0 0 0.2rem rgba(34,34,34,0.5)}.sp-dsgvo .btn-outline-dark.disabled,.sp-dsgvo .btn-outline-dark:disabled{color:#222;background-color:transparent}.sp-dsgvo .btn-outline-dark:not(:disabled):not(.disabled):active,.sp-dsgvo .btn-outline-dark:not(:disabled):not(.disabled).active,.show>.sp-dsgvo .btn-outline-dark.dropdown-toggle{color:#fff;background-color:#222;border-color:#222}.sp-dsgvo .btn-outline-dark:not(:disabled):not(.disabled):active:focus,.sp-dsgvo .btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.sp-dsgvo .btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(34,34,34,0.5);box-shadow:0 0 0 0.2rem rgba(34,34,34,0.5)}.sp-dsgvo .btn-link{font-weight:400;color:#008cba;text-decoration:none}.sp-dsgvo .btn-link:hover{color:#00526e;text-decoration:underline}.sp-dsgvo .btn-link:focus,.sp-dsgvo .btn-link.focus{text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}.sp-dsgvo .btn-link:disabled,.sp-dsgvo .btn-link.disabled{color:#888;pointer-events:none}.sp-dsgvo .btn-lg,.sp-dsgvo .btn-group-lg>.btn{padding:0.5rem 1rem;font-size:1.171875rem;line-height:1.5;border-radius:0px}.sp-dsgvo .btn-sm,.sp-dsgvo .btn-group-sm>.btn{padding:0.25rem 0.5rem;font-size:0.8203125rem;line-height:1.5;border-radius:0px}.sp-dsgvo .btn-block{display:block;width:100%}.sp-dsgvo .btn-block+.btn-block{margin-top:0.5rem}.sp-dsgvo input[type="submit"].btn-block,.sp-dsgvo input[type="reset"].btn-block,.sp-dsgvo input[type="button"].btn-block{width:100%}.sp-dsgvo .fade{-webkit-transition:opacity 0.15s linear;transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.sp-dsgvo .fade{-webkit-transition:none;transition:none}}.sp-dsgvo .fade:not(.show){opacity:0}.sp-dsgvo .collapse:not(.show){display:none}.sp-dsgvo .collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.sp-dsgvo .collapsing{-webkit-transition:none;transition:none}}.sp-dsgvo .dropup,.sp-dsgvo .dropright,.sp-dsgvo .dropdown,.sp-dsgvo .dropleft{position:relative}.sp-dsgvo .dropdown-toggle{white-space:nowrap}.sp-dsgvo .dropdown-toggle::after{display:inline-block;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid;border-right:0.3em solid transparent;border-bottom:0;border-left:0.3em solid transparent}.sp-dsgvo .dropdown-toggle:empty::after{margin-left:0}.sp-dsgvo .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:0.5rem 0;margin:0.125rem 0 0;font-size:0.9375rem;color:#222;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.1);border-radius:0px}.sp-dsgvo .dropdown-menu-left{right:auto;left:0}.sp-dsgvo .dropdown-menu-right{right:0;left:auto}@media (min-width: 576px){.sp-dsgvo .dropdown-menu-sm-left{right:auto;left:0}.sp-dsgvo .dropdown-menu-sm-right{right:0;left:auto}}@media (min-width: 768px){.sp-dsgvo .dropdown-menu-md-left{right:auto;left:0}.sp-dsgvo .dropdown-menu-md-right{right:0;left:auto}}@media (min-width: 992px){.sp-dsgvo .dropdown-menu-lg-left{right:auto;left:0}.sp-dsgvo .dropdown-menu-lg-right{right:0;left:auto}}@media (min-width: 1200px){.sp-dsgvo .dropdown-menu-xl-left{right:auto;left:0}.sp-dsgvo .dropdown-menu-xl-right{right:0;left:auto}}.sp-dsgvo .dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:0.125rem}.sp-dsgvo .dropup .dropdown-toggle::after{display:inline-block;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0;border-right:0.3em solid transparent;border-bottom:0.3em solid;border-left:0.3em solid transparent}.sp-dsgvo .dropup .dropdown-toggle:empty::after{margin-left:0}.sp-dsgvo .dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:0.125rem}.sp-dsgvo .dropright .dropdown-toggle::after{display:inline-block;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid transparent;border-right:0;border-bottom:0.3em solid transparent;border-left:0.3em solid}.sp-dsgvo .dropright .dropdown-toggle:empty::after{margin-left:0}.sp-dsgvo .dropright .dropdown-toggle::after{vertical-align:0}.sp-dsgvo .dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:0.125rem}.sp-dsgvo .dropleft .dropdown-toggle::after{display:inline-block;margin-left:0.255em;vertical-align:0.255em;content:""}.sp-dsgvo .dropleft .dropdown-toggle::after{display:none}.sp-dsgvo .dropleft .dropdown-toggle::before{display:inline-block;margin-right:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid transparent;border-right:0.3em solid;border-bottom:0.3em solid transparent}.sp-dsgvo .dropleft .dropdown-toggle:empty::after{margin-left:0}.sp-dsgvo .dropleft .dropdown-toggle::before{vertical-align:0}.sp-dsgvo .dropdown-menu[x-placement^="top"],.sp-dsgvo .dropdown-menu[x-placement^="right"],.sp-dsgvo .dropdown-menu[x-placement^="bottom"],.sp-dsgvo .dropdown-menu[x-placement^="left"]{right:auto;bottom:auto}.sp-dsgvo .dropdown-divider{height:0;margin:0.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,0.1)}.sp-dsgvo .dropdown-item{display:block;width:100%;padding:0.25rem 1.5rem;clear:both;font-weight:400;color:#222;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.sp-dsgvo .dropdown-item:hover,.sp-dsgvo .dropdown-item:focus{color:#151515;text-decoration:none;background-color:#f8f9fa}.sp-dsgvo .dropdown-item.active,.sp-dsgvo .dropdown-item:active{color:#fff;text-decoration:none;background-color:#008cba}.sp-dsgvo .dropdown-item.disabled,.sp-dsgvo .dropdown-item:disabled{color:#888;pointer-events:none;background-color:transparent}.sp-dsgvo .dropdown-menu.show{display:block}.sp-dsgvo .dropdown-header{display:block;padding:0.5rem 1.5rem;margin-bottom:0;font-size:0.8203125rem;color:#888;white-space:nowrap}.sp-dsgvo .dropdown-item-text{display:block;padding:0.25rem 1.5rem;color:#222}.sp-dsgvo .btn-group,.sp-dsgvo .btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.sp-dsgvo .btn-group>.btn,.sp-dsgvo .btn-group-vertical>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.sp-dsgvo .btn-group>.btn:hover,.sp-dsgvo .btn-group-vertical>.btn:hover{z-index:1}.sp-dsgvo .btn-group>.btn:focus,.sp-dsgvo .btn-group>.btn:active,.sp-dsgvo .btn-group>.btn.active,.sp-dsgvo .btn-group-vertical>.btn:focus,.sp-dsgvo .btn-group-vertical>.btn:active,.sp-dsgvo .btn-group-vertical>.btn.active{z-index:1}.sp-dsgvo .btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.sp-dsgvo .btn-toolbar .input-group{width:auto}.sp-dsgvo .btn-group>.btn:not(:first-child),.sp-dsgvo .btn-group>.btn-group:not(:first-child){margin-left:-1px}.sp-dsgvo .btn-group>.btn:not(:last-child):not(.dropdown-toggle),.sp-dsgvo .btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.sp-dsgvo .btn-group>.btn:not(:first-child),.sp-dsgvo .btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.sp-dsgvo .dropdown-toggle-split{padding-right:0.375rem;padding-left:0.375rem}.sp-dsgvo .dropdown-toggle-split::after,.dropup .sp-dsgvo .dropdown-toggle-split::after,.dropright .sp-dsgvo .dropdown-toggle-split::after{margin-left:0}.dropleft .sp-dsgvo .dropdown-toggle-split::before{margin-right:0}.sp-dsgvo .btn-sm+.dropdown-toggle-split,.sp-dsgvo .btn-group-sm>.btn+.dropdown-toggle-split{padding-right:0.375rem;padding-left:0.375rem}.sp-dsgvo .btn-lg+.dropdown-toggle-split,.sp-dsgvo .btn-group-lg>.btn+.dropdown-toggle-split{padding-right:0.75rem;padding-left:0.75rem}.sp-dsgvo .btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.sp-dsgvo .btn-group-vertical>.btn,.sp-dsgvo .btn-group-vertical>.btn-group{width:100%}.sp-dsgvo .btn-group-vertical>.btn:not(:first-child),.sp-dsgvo .btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.sp-dsgvo .btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.sp-dsgvo .btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.sp-dsgvo .btn-group-vertical>.btn:not(:first-child),.sp-dsgvo .btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.sp-dsgvo .btn-group-toggle>.btn,.sp-dsgvo .btn-group-toggle>.btn-group>.btn{margin-bottom:0}.sp-dsgvo .btn-group-toggle>.btn input[type="radio"],.sp-dsgvo .btn-group-toggle>.btn input[type="checkbox"],.sp-dsgvo .btn-group-toggle>.btn-group>.btn input[type="radio"],.sp-dsgvo .btn-group-toggle>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.sp-dsgvo .input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.sp-dsgvo .input-group>.form-control,.sp-dsgvo .input-group>.form-control-plaintext,.sp-dsgvo .input-group>.custom-select,.sp-dsgvo .input-group>.custom-file{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.sp-dsgvo .input-group>.form-control+.form-control,.sp-dsgvo .input-group>.form-control+.custom-select,.sp-dsgvo .input-group>.form-control+.custom-file,.sp-dsgvo .input-group>.form-control-plaintext+.form-control,.sp-dsgvo .input-group>.form-control-plaintext+.custom-select,.sp-dsgvo .input-group>.form-control-plaintext+.custom-file,.sp-dsgvo .input-group>.custom-select+.form-control,.sp-dsgvo .input-group>.custom-select+.custom-select,.sp-dsgvo .input-group>.custom-select+.custom-file,.sp-dsgvo .input-group>.custom-file+.form-control,.sp-dsgvo .input-group>.custom-file+.custom-select,.sp-dsgvo .input-group>.custom-file+.custom-file{margin-left:-1px}.sp-dsgvo .input-group>.form-control:focus,.sp-dsgvo .input-group>.custom-select:focus,.sp-dsgvo .input-group>.custom-file .custom-file-input:focus ~ .custom-file-label{z-index:3}.sp-dsgvo .input-group>.custom-file .custom-file-input:focus{z-index:4}.sp-dsgvo .input-group>.form-control:not(:last-child),.sp-dsgvo .input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.sp-dsgvo .input-group>.form-control:not(:first-child),.sp-dsgvo .input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.sp-dsgvo .input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.sp-dsgvo .input-group>.custom-file:not(:last-child) .custom-file-label,.sp-dsgvo .input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.sp-dsgvo .input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.sp-dsgvo .input-group-prepend,.sp-dsgvo .input-group-append{display:-webkit-box;display:-ms-flexbox;display:flex}.sp-dsgvo .input-group-prepend .btn,.sp-dsgvo .input-group-append .btn{position:relative;z-index:2}.sp-dsgvo .input-group-prepend .btn:focus,.sp-dsgvo .input-group-append .btn:focus{z-index:3}.sp-dsgvo .input-group-prepend .btn+.btn,.sp-dsgvo .input-group-prepend .btn+.input-group-text,.sp-dsgvo .input-group-prepend .input-group-text+.input-group-text,.sp-dsgvo .input-group-prepend .input-group-text+.btn,.sp-dsgvo .input-group-append .btn+.btn,.sp-dsgvo .input-group-append .btn+.input-group-text,.sp-dsgvo .input-group-append .input-group-text+.input-group-text,.sp-dsgvo .input-group-append .input-group-text+.btn{margin-left:-1px}.sp-dsgvo .input-group-prepend{margin-right:-1px}.sp-dsgvo .input-group-append{margin-left:-1px}.sp-dsgvo .input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0.375rem 0.5rem;margin-bottom:0;font-size:0.9375rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#eee;border:1px solid #ccc;border-radius:0px}.sp-dsgvo .input-group-text input[type="radio"],.sp-dsgvo .input-group-text input[type="checkbox"]{margin-top:0}.sp-dsgvo .input-group-lg>.form-control:not(textarea),.sp-dsgvo .input-group-lg>.custom-select{height:calc(1.5em + 1rem + 2px)}.sp-dsgvo .input-group-lg>.form-control,.sp-dsgvo .input-group-lg>.custom-select,.sp-dsgvo .input-group-lg>.input-group-prepend>.input-group-text,.sp-dsgvo .input-group-lg>.input-group-append>.input-group-text,.sp-dsgvo .input-group-lg>.input-group-prepend>.btn,.sp-dsgvo .input-group-lg>.input-group-append>.btn{padding:0.5rem 1rem;font-size:1.171875rem;line-height:1.5;border-radius:0px}.sp-dsgvo .input-group-sm>.form-control:not(textarea),.sp-dsgvo .input-group-sm>.custom-select{height:calc(1.5em + 0.5rem + 2px)}.sp-dsgvo .input-group-sm>.form-control,.sp-dsgvo .input-group-sm>.custom-select,.sp-dsgvo .input-group-sm>.input-group-prepend>.input-group-text,.sp-dsgvo .input-group-sm>.input-group-append>.input-group-text,.sp-dsgvo .input-group-sm>.input-group-prepend>.btn,.sp-dsgvo .input-group-sm>.input-group-append>.btn{padding:0.25rem 0.5rem;font-size:0.8203125rem;line-height:1.5;border-radius:0px}.sp-dsgvo .input-group-lg>.custom-select,.sp-dsgvo .input-group-sm>.custom-select{padding-right:1.5rem}.sp-dsgvo .input-group>.input-group-prepend>.btn,.sp-dsgvo .input-group>.input-group-prepend>.input-group-text,.sp-dsgvo .input-group>.input-group-append:not(:last-child)>.btn,.sp-dsgvo .input-group>.input-group-append:not(:last-child)>.input-group-text,.sp-dsgvo .input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.sp-dsgvo .input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.sp-dsgvo .input-group>.input-group-append>.btn,.sp-dsgvo .input-group>.input-group-append>.input-group-text,.sp-dsgvo .input-group>.input-group-prepend:not(:first-child)>.btn,.sp-dsgvo .input-group>.input-group-prepend:not(:first-child)>.input-group-text,.sp-dsgvo .input-group>.input-group-prepend:first-child>.btn:not(:first-child),.sp-dsgvo .input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.sp-dsgvo .custom-control{position:relative;display:block;min-height:1.40625rem;padding-left:1.5rem}.sp-dsgvo .custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.sp-dsgvo .custom-control-input{position:absolute;z-index:-1;opacity:0}.sp-dsgvo .custom-control-input:checked ~ .custom-control-label::before{color:#fff;border-color:#008cba;background-color:#008cba}.sp-dsgvo .custom-control-input:focus ~ .custom-control-label::before{-webkit-box-shadow:0 0 0 0.2rem rgba(0,140,186,0.25);box-shadow:0 0 0 0.2rem rgba(0,140,186,0.25)}.sp-dsgvo .custom-control-input:focus:not(:checked) ~ .custom-control-label::before{border-color:#3bceff}.sp-dsgvo .custom-control-input:not(:disabled):active ~ .custom-control-label::before{color:#fff;background-color:#6edbff;border-color:#6edbff}.sp-dsgvo .custom-control-input:disabled ~ .custom-control-label{color:#888}.sp-dsgvo .custom-control-input:disabled ~ .custom-control-label::before{background-color:#eee}.sp-dsgvo .custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.sp-dsgvo .custom-control-label::before{position:absolute;top:0.203125rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.sp-dsgvo .custom-control-label::after{position:absolute;top:0.203125rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50% / 50% 50%}.sp-dsgvo .custom-checkbox .custom-control-label::before{border-radius:0px}.sp-dsgvo .custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.sp-dsgvo .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{border-color:#008cba;background-color:#008cba}.sp-dsgvo .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.sp-dsgvo .custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0,140,186,0.5)}.sp-dsgvo .custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(0,140,186,0.5)}.sp-dsgvo .custom-radio .custom-control-label::before{border-radius:50%}.sp-dsgvo .custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.sp-dsgvo .custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0,140,186,0.5)}.sp-dsgvo .custom-switch{padding-left:2.25rem}.sp-dsgvo .custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:0.5rem}.sp-dsgvo .custom-switch .custom-control-label::after{top:calc(0.203125rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:0.5rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.sp-dsgvo .custom-switch .custom-control-label::after{-webkit-transition:none;transition:none}}.sp-dsgvo .custom-switch .custom-control-input:checked ~ .custom-control-label::after{background-color:#fff;-webkit-transform:translateX(0.75rem);transform:translateX(0.75rem)}.sp-dsgvo .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0,140,186,0.5)}.sp-dsgvo .custom-select{display:inline-block;width:100%;height:calc(1.5em + 0.75rem + 2px);padding:0.375rem 1.5rem 0.375rem 0.5rem;font-size:0.9375rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.5rem center/8px 10px;background-color:#fff;border:1px solid #ccc;border-radius:0px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.sp-dsgvo .custom-select:focus{border-color:#3bceff;outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(0,140,186,0.25);box-shadow:0 0 0 0.2rem rgba(0,140,186,0.25)}.sp-dsgvo .custom-select:focus::-ms-value{color:#495057;background-color:#fff}.sp-dsgvo .custom-select[multiple],.sp-dsgvo .custom-select[size]:not([size="1"]){height:auto;padding-right:0.5rem;background-image:none}.sp-dsgvo .custom-select:disabled{color:#888;background-color:#eee}.sp-dsgvo .custom-select::-ms-expand{display:none}.sp-dsgvo .custom-select-sm{height:calc(1.5em + 0.5rem + 2px);padding-top:0.25rem;padding-bottom:0.25rem;padding-left:0.5rem;font-size:0.8203125rem}.sp-dsgvo .custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:0.5rem;padding-bottom:0.5rem;padding-left:1rem;font-size:1.171875rem}.sp-dsgvo .custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + 0.75rem + 2px);margin-bottom:0}.sp-dsgvo .custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + 0.75rem + 2px);margin:0;opacity:0}.sp-dsgvo .custom-file-input:focus ~ .custom-file-label{border-color:#3bceff;-webkit-box-shadow:0 0 0 0.2rem rgba(0,140,186,0.25);box-shadow:0 0 0 0.2rem rgba(0,140,186,0.25)}.sp-dsgvo .custom-file-input:disabled ~ .custom-file-label{background-color:#eee}.sp-dsgvo .custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.sp-dsgvo .custom-file-input ~ .custom-file-label[data-browse]::after{content:attr(data-browse)}.sp-dsgvo .custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + 0.75rem + 2px);padding:0.375rem 0.5rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ccc;border-radius:0px}.sp-dsgvo .custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + 0.75rem);padding:0.375rem 0.5rem;line-height:1.5;color:#495057;content:"Browse";background-color:#eee;border-left:inherit;border-radius:0 0px 0px 0}.sp-dsgvo .custom-range{width:100%;height:calc(1rem + 0.4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.sp-dsgvo .custom-range:focus{outline:none}.sp-dsgvo .custom-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 0.2rem rgba(0,140,186,0.25);box-shadow:0 0 0 1px #fff,0 0 0 0.2rem rgba(0,140,186,0.25)}.sp-dsgvo .custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 0.2rem rgba(0,140,186,0.25)}.sp-dsgvo .custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 0.2rem rgba(0,140,186,0.25)}.sp-dsgvo .custom-range::-moz-focus-outer{border:0}.sp-dsgvo .custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#008cba;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion: reduce){.sp-dsgvo .custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.sp-dsgvo .custom-range::-webkit-slider-thumb:active{background-color:#6edbff}.sp-dsgvo .custom-range::-webkit-slider-runnable-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.sp-dsgvo .custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#008cba;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion: reduce){.sp-dsgvo .custom-range::-moz-range-thumb{-webkit-transition:none;transition:none}}.sp-dsgvo .custom-range::-moz-range-thumb:active{background-color:#6edbff}.sp-dsgvo .custom-range::-moz-range-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.sp-dsgvo .custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:0.2rem;margin-left:0.2rem;background-color:#008cba;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.sp-dsgvo .custom-range::-ms-thumb{-webkit-transition:none;transition:none}}.sp-dsgvo .custom-range::-ms-thumb:active{background-color:#6edbff}.sp-dsgvo .custom-range::-ms-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:0.5rem}.sp-dsgvo .custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.sp-dsgvo .custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.sp-dsgvo .custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.sp-dsgvo .custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.sp-dsgvo .custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.sp-dsgvo .custom-range:disabled::-moz-range-track{cursor:default}.sp-dsgvo .custom-range:disabled::-ms-thumb{background-color:#adb5bd}.sp-dsgvo .custom-control-label::before,.sp-dsgvo .custom-file-label,.sp-dsgvo .custom-select{-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.sp-dsgvo .custom-control-label::before,.sp-dsgvo .custom-file-label,.sp-dsgvo .custom-select{-webkit-transition:none;transition:none}}.sp-dsgvo .nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.sp-dsgvo .nav-link{display:block;padding:0.5rem 1rem}.sp-dsgvo .nav-link:hover,.sp-dsgvo .nav-link:focus{text-decoration:none}.sp-dsgvo .nav-link.disabled{color:#ccc;pointer-events:none;cursor:default}.sp-dsgvo .nav-tabs{border-bottom:1px solid rgba(0,0,0,0.1)}.sp-dsgvo .nav-tabs .nav-item{margin-bottom:-1px}.sp-dsgvo .nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:0px;border-top-right-radius:0px}.sp-dsgvo .nav-tabs .nav-link:hover,.sp-dsgvo .nav-tabs .nav-link:focus{border-color:rgba(0,0,0,0.1)}.sp-dsgvo .nav-tabs .nav-link.disabled{color:#ccc;background-color:transparent;border-color:transparent}.sp-dsgvo .nav-tabs .nav-link.active,.sp-dsgvo .nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:rgba(0,0,0,0.1)}.sp-dsgvo .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.sp-dsgvo .nav-pills .nav-link{border-radius:0px}.sp-dsgvo .nav-pills .nav-link.active,.sp-dsgvo .nav-pills .show>.nav-link{color:#fff;background-color:#008cba}.sp-dsgvo .nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.sp-dsgvo .nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.sp-dsgvo .tab-content>.tab-pane{display:none}.sp-dsgvo .tab-content>.active{display:block}.sp-dsgvo .navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0.5rem 1rem}.sp-dsgvo .navbar>.container,.sp-dsgvo .navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.sp-dsgvo .navbar-brand{display:inline-block;padding-top:0.32421875rem;padding-bottom:0.32421875rem;margin-right:1rem;font-size:1.171875rem;line-height:inherit;white-space:nowrap}.sp-dsgvo .navbar-brand:hover,.sp-dsgvo .navbar-brand:focus{text-decoration:none}.sp-dsgvo .navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.sp-dsgvo .navbar-nav .nav-link{padding-right:0;padding-left:0}.sp-dsgvo .navbar-nav .dropdown-menu{position:static;float:none}.sp-dsgvo .navbar-text{display:inline-block;padding-top:0.5rem;padding-bottom:0.5rem}.sp-dsgvo .navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.sp-dsgvo .navbar-toggler{padding:0.25rem 0.75rem;font-size:1.171875rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:0px}.sp-dsgvo .navbar-toggler:hover,.sp-dsgvo .navbar-toggler:focus{text-decoration:none}.sp-dsgvo .navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width: 575.98px){.sp-dsgvo .navbar-expand-sm>.container,.sp-dsgvo .navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 576px){.sp-dsgvo .navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.sp-dsgvo .navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.sp-dsgvo .navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.sp-dsgvo .navbar-expand-sm .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.sp-dsgvo .navbar-expand-sm>.container,.sp-dsgvo .navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.sp-dsgvo .navbar-expand-sm .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.sp-dsgvo .navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 767.98px){.sp-dsgvo .navbar-expand-md>.container,.sp-dsgvo .navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 768px){.sp-dsgvo .navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.sp-dsgvo .navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.sp-dsgvo .navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.sp-dsgvo .navbar-expand-md .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.sp-dsgvo .navbar-expand-md>.container,.sp-dsgvo .navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.sp-dsgvo .navbar-expand-md .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.sp-dsgvo .navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 991.98px){.sp-dsgvo .navbar-expand-lg>.container,.sp-dsgvo .navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 992px){.sp-dsgvo .navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.sp-dsgvo .navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.sp-dsgvo .navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.sp-dsgvo .navbar-expand-lg .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.sp-dsgvo .navbar-expand-lg>.container,.sp-dsgvo .navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.sp-dsgvo .navbar-expand-lg .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.sp-dsgvo .navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 1199.98px){.sp-dsgvo .navbar-expand-xl>.container,.sp-dsgvo .navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 1200px){.sp-dsgvo .navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.sp-dsgvo .navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.sp-dsgvo .navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.sp-dsgvo .navbar-expand-xl .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.sp-dsgvo .navbar-expand-xl>.container,.sp-dsgvo .navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.sp-dsgvo .navbar-expand-xl .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.sp-dsgvo .navbar-expand-xl .navbar-toggler{display:none}}.sp-dsgvo .navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.sp-dsgvo .navbar-expand>.container,.sp-dsgvo .navbar-expand>.container-fluid{padding-right:0;padding-left:0}.sp-dsgvo .navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.sp-dsgvo .navbar-expand .navbar-nav .dropdown-menu{position:absolute}.sp-dsgvo .navbar-expand .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.sp-dsgvo .navbar-expand>.container,.sp-dsgvo .navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.sp-dsgvo .navbar-expand .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.sp-dsgvo .navbar-expand .navbar-toggler{display:none}.sp-dsgvo .navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.sp-dsgvo .navbar-light .navbar-brand:hover,.sp-dsgvo .navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.sp-dsgvo .navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.sp-dsgvo .navbar-light .navbar-nav .nav-link:hover,.sp-dsgvo .navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.sp-dsgvo .navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.sp-dsgvo .navbar-light .navbar-nav .show>.nav-link,.sp-dsgvo .navbar-light .navbar-nav .active>.nav-link,.sp-dsgvo .navbar-light .navbar-nav .nav-link.show,.sp-dsgvo .navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.sp-dsgvo .navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.sp-dsgvo .navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.sp-dsgvo .navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.sp-dsgvo .navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.sp-dsgvo .navbar-light .navbar-text a:hover,.sp-dsgvo .navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.sp-dsgvo .navbar-dark .navbar-brand{color:#fff}.sp-dsgvo .navbar-dark .navbar-brand:hover,.sp-dsgvo .navbar-dark .navbar-brand:focus{color:#fff}.sp-dsgvo .navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.7)}.sp-dsgvo .navbar-dark .navbar-nav .nav-link:hover,.sp-dsgvo .navbar-dark .navbar-nav .nav-link:focus{color:#fff}.sp-dsgvo .navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.sp-dsgvo .navbar-dark .navbar-nav .show>.nav-link,.sp-dsgvo .navbar-dark .navbar-nav .active>.nav-link,.sp-dsgvo .navbar-dark .navbar-nav .nav-link.show,.sp-dsgvo .navbar-dark .navbar-nav .nav-link.active{color:#fff}.sp-dsgvo .navbar-dark .navbar-toggler{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.1)}.sp-dsgvo .navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.7)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.sp-dsgvo .navbar-dark .navbar-text{color:rgba(255,255,255,0.7)}.sp-dsgvo .navbar-dark .navbar-text a{color:#fff}.sp-dsgvo .navbar-dark .navbar-text a:hover,.sp-dsgvo .navbar-dark .navbar-text a:focus{color:#fff}.sp-dsgvo .card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:0px}.sp-dsgvo .card>hr{margin-right:0;margin-left:0}.sp-dsgvo .card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:0px;border-top-right-radius:0px}.sp-dsgvo .card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:0px;border-bottom-left-radius:0px}.sp-dsgvo .card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.sp-dsgvo .card-title{margin-bottom:0.75rem}.sp-dsgvo .card-subtitle{margin-top:-0.375rem;margin-bottom:0}.sp-dsgvo .card-text:last-child{margin-bottom:0}.sp-dsgvo .card-link:hover{text-decoration:none}.sp-dsgvo .card-link+.card-link{margin-left:1.25rem}.sp-dsgvo .card-header{padding:0.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.sp-dsgvo .card-header:first-child{border-radius:0px 0px 0 0}.sp-dsgvo .card-header+.list-group .list-group-item:first-child{border-top:0}.sp-dsgvo .card-footer{padding:0.75rem 1.25rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.sp-dsgvo .card-footer:last-child{border-radius:0 0 0px 0px}.sp-dsgvo .card-header-tabs{margin-right:-0.625rem;margin-bottom:-0.75rem;margin-left:-0.625rem;border-bottom:0}.sp-dsgvo .card-header-pills{margin-right:-0.625rem;margin-left:-0.625rem}.sp-dsgvo .card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.sp-dsgvo .card-img{width:100%;border-radius:0px}.sp-dsgvo .card-img-top{width:100%;border-top-left-radius:0px;border-top-right-radius:0px}.sp-dsgvo .card-img-bottom{width:100%;border-bottom-right-radius:0px;border-bottom-left-radius:0px}.sp-dsgvo .card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.sp-dsgvo .card-deck .card{margin-bottom:15px}@media (min-width: 576px){.sp-dsgvo .card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.sp-dsgvo .card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.sp-dsgvo .card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.sp-dsgvo .card-group>.card{margin-bottom:15px}@media (min-width: 576px){.sp-dsgvo .card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.sp-dsgvo .card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.sp-dsgvo .card-group>.card+.card{margin-left:0;border-left:0}.sp-dsgvo .card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.sp-dsgvo .card-group>.card:not(:last-child) .card-img-top,.sp-dsgvo .card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.sp-dsgvo .card-group>.card:not(:last-child) .card-img-bottom,.sp-dsgvo .card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.sp-dsgvo .card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.sp-dsgvo .card-group>.card:not(:first-child) .card-img-top,.sp-dsgvo .card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.sp-dsgvo .card-group>.card:not(:first-child) .card-img-bottom,.sp-dsgvo .card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.sp-dsgvo .card-columns .card{margin-bottom:0.75rem}@media (min-width: 576px){.sp-dsgvo .card-columns{-webkit-column-count:3;column-count:3;-webkit-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.sp-dsgvo .card-columns .card{display:inline-block;width:100%}}.sp-dsgvo .accordion>.card{overflow:hidden}.sp-dsgvo .accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.sp-dsgvo .accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.sp-dsgvo .accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.sp-dsgvo .accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.sp-dsgvo .accordion>.card .card-header{margin-bottom:-1px}.sp-dsgvo .breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#eee;border-radius:0px}.sp-dsgvo .breadcrumb-item+.breadcrumb-item{padding-left:0.5rem}.sp-dsgvo .breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:0.5rem;color:#888;content:"/"}.sp-dsgvo .breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.sp-dsgvo .breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.sp-dsgvo .breadcrumb-item.active{color:#888}.sp-dsgvo .pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:0px}.sp-dsgvo .page-link{position:relative;display:block;padding:0.5rem 0.75rem;margin-left:-1px;line-height:1.25;color:#888;background-color:#fff;border:1px solid rgba(0,0,0,0.1)}.sp-dsgvo .page-link:hover{z-index:2;color:#00526e;text-decoration:none;background-color:#eee;border-color:#dee2e6}.sp-dsgvo .page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(0,140,186,0.25);box-shadow:0 0 0 0.2rem rgba(0,140,186,0.25)}.sp-dsgvo .page-item:first-child .page-link{margin-left:0;border-top-left-radius:0px;border-bottom-left-radius:0px}.sp-dsgvo .page-item:last-child .page-link{border-top-right-radius:0px;border-bottom-right-radius:0px}.sp-dsgvo .page-item.active .page-link{z-index:1;color:#fff;background-color:#008cba;border-color:#0079a1}.sp-dsgvo .page-item.disabled .page-link{color:#eee;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.sp-dsgvo .pagination-lg .page-link{padding:0.75rem 1.5rem;font-size:1.171875rem;line-height:1.5}.sp-dsgvo .pagination-lg .page-item:first-child .page-link{border-top-left-radius:0px;border-bottom-left-radius:0px}.sp-dsgvo .pagination-lg .page-item:last-child .page-link{border-top-right-radius:0px;border-bottom-right-radius:0px}.sp-dsgvo .pagination-sm .page-link{padding:0.25rem 0.5rem;font-size:0.8203125rem;line-height:1.5}.sp-dsgvo .pagination-sm .page-item:first-child .page-link{border-top-left-radius:0px;border-bottom-left-radius:0px}.sp-dsgvo .pagination-sm .page-item:last-child .page-link{border-top-right-radius:0px;border-bottom-right-radius:0px}.sp-dsgvo .badge{display:inline-block;padding:0.25em 1rem;font-size:75%;font-weight:300;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0px;-webkit-transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.sp-dsgvo .badge{-webkit-transition:none;transition:none}}a.sp-dsgvo .badge:hover,a.sp-dsgvo .badge:focus{text-decoration:none}.sp-dsgvo .badge:empty{display:none}.sp-dsgvo .btn .badge{position:relative;top:-1px}.sp-dsgvo .badge-pill{padding-right:0.6em;padding-left:0.6em;border-radius:10rem}.sp-dsgvo .badge-primary{color:#fff;background-color:#008cba}a.sp-dsgvo .badge-primary:hover,a.sp-dsgvo .badge-primary:focus{color:#fff;background-color:#006687}a.sp-dsgvo .badge-primary:focus,a.sp-dsgvo .badge-primary.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(0,140,186,0.5);box-shadow:0 0 0 0.2rem rgba(0,140,186,0.5)}.sp-dsgvo .badge-secondary{color:#222;background-color:#eee}a.sp-dsgvo .badge-secondary:hover,a.sp-dsgvo .badge-secondary:focus{color:#222;background-color:#d5d4d4}a.sp-dsgvo .badge-secondary:focus,a.sp-dsgvo .badge-secondary.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(238,238,238,0.5);box-shadow:0 0 0 0.2rem rgba(238,238,238,0.5)}.sp-dsgvo .badge-success{color:#fff;background-color:#43ac6a}a.sp-dsgvo .badge-success:hover,a.sp-dsgvo .badge-success:focus{color:#fff;background-color:#358753}a.sp-dsgvo .badge-success:focus,a.sp-dsgvo .badge-success.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(67,172,106,0.5);box-shadow:0 0 0 0.2rem rgba(67,172,106,0.5)}.sp-dsgvo .badge-info{color:#fff;background-color:#5bc0de}a.sp-dsgvo .badge-info:hover,a.sp-dsgvo .badge-info:focus{color:#fff;background-color:#31b0d5}a.sp-dsgvo .badge-info:focus,a.sp-dsgvo .badge-info.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5);box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5)}.sp-dsgvo .badge-warning{color:#fff;background-color:#E99002}a.sp-dsgvo .badge-warning:hover,a.sp-dsgvo .badge-warning:focus{color:#fff;background-color:#b67102}a.sp-dsgvo .badge-warning:focus,a.sp-dsgvo .badge-warning.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(233,144,2,0.5);box-shadow:0 0 0 0.2rem rgba(233,144,2,0.5)}.sp-dsgvo .badge-danger{color:#fff;background-color:#F04124}a.sp-dsgvo .badge-danger:hover,a.sp-dsgvo .badge-danger:focus{color:#fff;background-color:#d32a0e}a.sp-dsgvo .badge-danger:focus,a.sp-dsgvo .badge-danger.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(240,65,36,0.5);box-shadow:0 0 0 0.2rem rgba(240,65,36,0.5)}.sp-dsgvo .badge-light{color:#222;background-color:#eee}a.sp-dsgvo .badge-light:hover,a.sp-dsgvo .badge-light:focus{color:#222;background-color:#d5d4d4}a.sp-dsgvo .badge-light:focus,a.sp-dsgvo .badge-light.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(238,238,238,0.5);box-shadow:0 0 0 0.2rem rgba(238,238,238,0.5)}.sp-dsgvo .badge-dark{color:#fff;background-color:#222}a.sp-dsgvo .badge-dark:hover,a.sp-dsgvo .badge-dark:focus{color:#fff;background-color:#090808}a.sp-dsgvo .badge-dark:focus,a.sp-dsgvo .badge-dark.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(34,34,34,0.5);box-shadow:0 0 0 0.2rem rgba(34,34,34,0.5)}.sp-dsgvo .jumbotron{padding:4rem 2rem;margin-bottom:4rem;background-color:#eee;border-radius:0px}@media (min-width: 576px){.sp-dsgvo .jumbotron{padding:8rem 4rem}}.sp-dsgvo .jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.sp-dsgvo .alert{position:relative;padding:0.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:0px}.sp-dsgvo .alert-heading{color:inherit}.sp-dsgvo .alert-link{font-weight:700}.sp-dsgvo .alert-dismissible{padding-right:3.90625rem}.sp-dsgvo .alert-dismissible .close{position:absolute;top:0;right:0;padding:0.75rem 1.25rem;color:inherit}.sp-dsgvo .alert-primary{color:#004961;background-color:#cce8f1;border-color:#b8dfec}.sp-dsgvo .alert-primary hr{border-top-color:#a4d6e7}.sp-dsgvo .alert-primary .alert-link{color:#00232e}.sp-dsgvo .alert-secondary{color:#7c7c7c;background-color:#fcfcfc;border-color:#fafafa}.sp-dsgvo .alert-secondary hr{border-top-color:#ededed}.sp-dsgvo .alert-secondary .alert-link{color:#636262}.sp-dsgvo .alert-success{color:#235937;background-color:#d9eee1;border-color:#cae8d5}.sp-dsgvo .alert-success hr{border-top-color:#b8e0c7}.sp-dsgvo .alert-success .alert-link{color:#153420}.sp-dsgvo .alert-info{color:#2f6473;background-color:#def2f8;border-color:#d1edf6}.sp-dsgvo .alert-info hr{border-top-color:#bce5f2}.sp-dsgvo .alert-info .alert-link{color:#20454f}.sp-dsgvo .alert-warning{color:#794b01;background-color:#fbe9cc;border-color:#f9e0b8}.sp-dsgvo .alert-warning hr{border-top-color:#f7d6a0}.sp-dsgvo .alert-warning .alert-link{color:#462c01}.sp-dsgvo .alert-danger{color:#7d2213;background-color:#fcd9d3;border-color:#fbcac2}.sp-dsgvo .alert-danger hr{border-top-color:#f9b5aa}.sp-dsgvo .alert-danger .alert-link{color:#51160c}.sp-dsgvo .alert-light{color:#7c7c7c;background-color:#fcfcfc;border-color:#fafafa}.sp-dsgvo .alert-light hr{border-top-color:#ededed}.sp-dsgvo .alert-light .alert-link{color:#636262}.sp-dsgvo .alert-dark{color:#121212;background-color:lightgray;border-color:#c1c1c1}.sp-dsgvo .alert-dark hr{border-top-color:#b4b4b4}.sp-dsgvo .alert-dark .alert-link{color:black}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.sp-dsgvo .progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:0.703125rem;background-color:#ccc;border-radius:0px}.sp-dsgvo .progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#008cba;-webkit-transition:width 0.6s ease;transition:width 0.6s ease}@media (prefers-reduced-motion: reduce){.sp-dsgvo .progress-bar{-webkit-transition:none;transition:none}}.sp-dsgvo .progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.sp-dsgvo .progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion: reduce){.sp-dsgvo .progress-bar-animated{-webkit-animation:none;animation:none}}.sp-dsgvo .media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.sp-dsgvo .media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.sp-dsgvo .list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.sp-dsgvo .list-group-item-action{width:100%;color:#495057;text-align:inherit}.sp-dsgvo .list-group-item-action:hover,.sp-dsgvo .list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.sp-dsgvo .list-group-item-action:active{color:#222;background-color:#eee}.sp-dsgvo .list-group-item{position:relative;display:block;padding:0.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}.sp-dsgvo .list-group-item:first-child{border-top-left-radius:0px;border-top-right-radius:0px}.sp-dsgvo .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0px;border-bottom-left-radius:0px}.sp-dsgvo .list-group-item.disabled,.sp-dsgvo .list-group-item:disabled{color:#888;pointer-events:none;background-color:#eee}.sp-dsgvo .list-group-item.active{z-index:2;color:#fff;background-color:#008cba;border-color:#008cba}.sp-dsgvo .list-group-horizontal{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.sp-dsgvo .list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.sp-dsgvo .list-group-horizontal .list-group-item:first-child{border-top-left-radius:0px;border-bottom-left-radius:0px;border-top-right-radius:0}.sp-dsgvo .list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0}@media (min-width: 576px){.sp-dsgvo .list-group-horizontal-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.sp-dsgvo .list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.sp-dsgvo .list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:0px;border-bottom-left-radius:0px;border-top-right-radius:0}.sp-dsgvo .list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0}}@media (min-width: 768px){.sp-dsgvo .list-group-horizontal-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.sp-dsgvo .list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.sp-dsgvo .list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:0px;border-bottom-left-radius:0px;border-top-right-radius:0}.sp-dsgvo .list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0}}@media (min-width: 992px){.sp-dsgvo .list-group-horizontal-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.sp-dsgvo .list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.sp-dsgvo .list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:0px;border-bottom-left-radius:0px;border-top-right-radius:0}.sp-dsgvo .list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0}}@media (min-width: 1200px){.sp-dsgvo .list-group-horizontal-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.sp-dsgvo .list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.sp-dsgvo .list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:0px;border-bottom-left-radius:0px;border-top-right-radius:0}.sp-dsgvo .list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0}}.sp-dsgvo .list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.sp-dsgvo .list-group-flush .list-group-item:last-child{margin-bottom:-1px}.sp-dsgvo .list-group-flush:first-child .list-group-item:first-child{border-top:0}.sp-dsgvo .list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.sp-dsgvo .list-group-item-primary{color:#004961;background-color:#b8dfec}.sp-dsgvo .list-group-item-primary.list-group-item-action:hover,.sp-dsgvo .list-group-item-primary.list-group-item-action:focus{color:#004961;background-color:#a4d6e7}.sp-dsgvo .list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004961;border-color:#004961}.sp-dsgvo .list-group-item-secondary{color:#7c7c7c;background-color:#fafafa}.sp-dsgvo .list-group-item-secondary.list-group-item-action:hover,.sp-dsgvo .list-group-item-secondary.list-group-item-action:focus{color:#7c7c7c;background-color:#ededed}.sp-dsgvo .list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#7c7c7c;border-color:#7c7c7c}.sp-dsgvo .list-group-item-success{color:#235937;background-color:#cae8d5}.sp-dsgvo .list-group-item-success.list-group-item-action:hover,.sp-dsgvo .list-group-item-success.list-group-item-action:focus{color:#235937;background-color:#b8e0c7}.sp-dsgvo .list-group-item-success.list-group-item-action.active{color:#fff;background-color:#235937;border-color:#235937}.sp-dsgvo .list-group-item-info{color:#2f6473;background-color:#d1edf6}.sp-dsgvo .list-group-item-info.list-group-item-action:hover,.sp-dsgvo .list-group-item-info.list-group-item-action:focus{color:#2f6473;background-color:#bce5f2}.sp-dsgvo .list-group-item-info.list-group-item-action.active{color:#fff;background-color:#2f6473;border-color:#2f6473}.sp-dsgvo .list-group-item-warning{color:#794b01;background-color:#f9e0b8}.sp-dsgvo .list-group-item-warning.list-group-item-action:hover,.sp-dsgvo .list-group-item-warning.list-group-item-action:focus{color:#794b01;background-color:#f7d6a0}.sp-dsgvo .list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#794b01;border-color:#794b01}.sp-dsgvo .list-group-item-danger{color:#7d2213;background-color:#fbcac2}.sp-dsgvo .list-group-item-danger.list-group-item-action:hover,.sp-dsgvo .list-group-item-danger.list-group-item-action:focus{color:#7d2213;background-color:#f9b5aa}.sp-dsgvo .list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#7d2213;border-color:#7d2213}.sp-dsgvo .list-group-item-light{color:#7c7c7c;background-color:#fafafa}.sp-dsgvo .list-group-item-light.list-group-item-action:hover,.sp-dsgvo .list-group-item-light.list-group-item-action:focus{color:#7c7c7c;background-color:#ededed}.sp-dsgvo .list-group-item-light.list-group-item-action.active{color:#fff;background-color:#7c7c7c;border-color:#7c7c7c}.sp-dsgvo .list-group-item-dark{color:#121212;background-color:#c1c1c1}.sp-dsgvo .list-group-item-dark.list-group-item-action:hover,.sp-dsgvo .list-group-item-dark.list-group-item-action:focus{color:#121212;background-color:#b4b4b4}.sp-dsgvo .list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#121212;border-color:#121212}.sp-dsgvo .close{float:right;font-size:1.40625rem;font-weight:700;line-height:1;color:#888;text-shadow:none;opacity:.5}.sp-dsgvo .close:hover{color:#888;text-decoration:none}.sp-dsgvo .close:not(:disabled):not(.disabled):hover,.sp-dsgvo .close:not(:disabled):not(.disabled):focus{opacity:.75}.sp-dsgvo button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.sp-dsgvo a.close.disabled{pointer-events:none}.sp-dsgvo .toast{max-width:350px;overflow:hidden;font-size:0.875rem;background-color:rgba(255,255,255,0.85);background-clip:padding-box;border:1px solid rgba(0,0,0,0.1);-webkit-box-shadow:0 0.25rem 0.75rem rgba(0,0,0,0.1);box-shadow:0 0.25rem 0.75rem rgba(0,0,0,0.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:0.25rem}.sp-dsgvo .toast:not(:last-child){margin-bottom:0.75rem}.sp-dsgvo .toast.showing{opacity:1}.sp-dsgvo .toast.show{display:block;opacity:1}.sp-dsgvo .toast.hide{display:none}.sp-dsgvo .toast-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0.25rem 0.75rem;color:#888;background-color:rgba(255,255,255,0.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,0.05)}.sp-dsgvo .toast-body{padding:0.75rem}.sp-dsgvo .modal-open{overflow:hidden}.sp-dsgvo .modal-open .modal{overflow-x:hidden;overflow-y:auto}.sp-dsgvo .modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.sp-dsgvo .modal-dialog{position:relative;width:auto;margin:0.5rem;pointer-events:none}.modal.fade .sp-dsgvo .modal-dialog{-webkit-transition:-webkit-transform 0.3s ease-out;transition:-webkit-transform 0.3s ease-out;transition:transform 0.3s ease-out;transition:transform 0.3s ease-out, -webkit-transform 0.3s ease-out;-webkit-transform:translate(0, -50px);transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .sp-dsgvo .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .sp-dsgvo .modal-dialog{-webkit-transform:none;transform:none}.sp-dsgvo .modal-dialog-scrollable{display:-webkit-box;display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.sp-dsgvo .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.sp-dsgvo .modal-dialog-scrollable .modal-header,.sp-dsgvo .modal-dialog-scrollable .modal-footer{-ms-flex-negative:0;flex-shrink:0}.sp-dsgvo .modal-dialog-scrollable .modal-body{overflow-y:auto}.sp-dsgvo .modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.sp-dsgvo .modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.sp-dsgvo .modal-dialog-centered.modal-dialog-scrollable{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.sp-dsgvo .modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.sp-dsgvo .modal-dialog-centered.modal-dialog-scrollable::before{content:none}.sp-dsgvo .modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:0px;outline:0}.sp-dsgvo .modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.sp-dsgvo .modal-backdrop.fade{opacity:0}.sp-dsgvo .modal-backdrop.show{opacity:0.5}.sp-dsgvo .modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:0px;border-top-right-radius:0px}.sp-dsgvo .modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.sp-dsgvo .modal-title{margin-bottom:0;line-height:1.5}.sp-dsgvo .modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.sp-dsgvo .modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:0px;border-bottom-left-radius:0px}.sp-dsgvo .modal-footer>:not(:first-child){margin-left:.25rem}.sp-dsgvo .modal-footer>:not(:last-child){margin-right:.25rem}.sp-dsgvo .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.sp-dsgvo .modal-dialog{max-width:500px;margin:1.75rem auto}.sp-dsgvo .modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.sp-dsgvo .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.sp-dsgvo .modal-dialog-centered{min-height:calc(100% - 3.5rem)}.sp-dsgvo .modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.sp-dsgvo .modal-sm{max-width:300px}}@media (min-width: 992px){.sp-dsgvo .modal-lg,.sp-dsgvo .modal-xl{max-width:800px}}@media (min-width: 1200px){.sp-dsgvo .modal-xl{max-width:1140px}}.sp-dsgvo .tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.8203125rem;word-wrap:break-word;opacity:0}.sp-dsgvo .tooltip.show{opacity:0.9}.sp-dsgvo .tooltip .arrow{position:absolute;display:block;width:0.8rem;height:0.4rem}.sp-dsgvo .tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.sp-dsgvo .bs-tooltip-top,.sp-dsgvo .bs-tooltip-auto[x-placement^="top"]{padding:0.4rem 0}.sp-dsgvo .bs-tooltip-top .arrow,.sp-dsgvo .bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.sp-dsgvo .bs-tooltip-top .arrow::before,.sp-dsgvo .bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:0.4rem 0.4rem 0;border-top-color:#000}.sp-dsgvo .bs-tooltip-right,.sp-dsgvo .bs-tooltip-auto[x-placement^="right"]{padding:0 0.4rem}.sp-dsgvo .bs-tooltip-right .arrow,.sp-dsgvo .bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:0.4rem;height:0.8rem}.sp-dsgvo .bs-tooltip-right .arrow::before,.sp-dsgvo .bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:0.4rem 0.4rem 0.4rem 0;border-right-color:#000}.sp-dsgvo .bs-tooltip-bottom,.sp-dsgvo .bs-tooltip-auto[x-placement^="bottom"]{padding:0.4rem 0}.sp-dsgvo .bs-tooltip-bottom .arrow,.sp-dsgvo .bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.sp-dsgvo .bs-tooltip-bottom .arrow::before,.sp-dsgvo .bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 0.4rem 0.4rem;border-bottom-color:#000}.sp-dsgvo .bs-tooltip-left,.sp-dsgvo .bs-tooltip-auto[x-placement^="left"]{padding:0 0.4rem}.sp-dsgvo .bs-tooltip-left .arrow,.sp-dsgvo .bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:0.4rem;height:0.8rem}.sp-dsgvo .bs-tooltip-left .arrow::before,.sp-dsgvo .bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:0.4rem 0 0.4rem 0.4rem;border-left-color:#000}.sp-dsgvo .tooltip-inner{max-width:200px;padding:0.25rem 0.5rem;color:#fff;text-align:center;background-color:#000;border-radius:0px}.sp-dsgvo .popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:"Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.8203125rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:0px}.sp-dsgvo .popover .arrow{position:absolute;display:block;width:1rem;height:0.5rem;margin:0 0px}.sp-dsgvo .popover .arrow::before,.sp-dsgvo .popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.sp-dsgvo .bs-popover-top,.sp-dsgvo .bs-popover-auto[x-placement^="top"]{margin-bottom:0.5rem}.sp-dsgvo .bs-popover-top>.arrow,.sp-dsgvo .bs-popover-auto[x-placement^="top"]>.arrow{bottom:calc((0.5rem + 1px) * -1)}.sp-dsgvo .bs-popover-top>.arrow::before,.sp-dsgvo .bs-popover-auto[x-placement^="top"]>.arrow::before{bottom:0;border-width:0.5rem 0.5rem 0;border-top-color:rgba(0,0,0,0.25)}.sp-dsgvo .bs-popover-top>.arrow::after,.sp-dsgvo .bs-popover-auto[x-placement^="top"]>.arrow::after{bottom:1px;border-width:0.5rem 0.5rem 0;border-top-color:#fff}.sp-dsgvo .bs-popover-right,.sp-dsgvo .bs-popover-auto[x-placement^="right"]{margin-left:0.5rem}.sp-dsgvo .bs-popover-right>.arrow,.sp-dsgvo .bs-popover-auto[x-placement^="right"]>.arrow{left:calc((0.5rem + 1px) * -1);width:0.5rem;height:1rem;margin:0px 0}.sp-dsgvo .bs-popover-right>.arrow::before,.sp-dsgvo .bs-popover-auto[x-placement^="right"]>.arrow::before{left:0;border-width:0.5rem 0.5rem 0.5rem 0;border-right-color:rgba(0,0,0,0.25)}.sp-dsgvo .bs-popover-right>.arrow::after,.sp-dsgvo .bs-popover-auto[x-placement^="right"]>.arrow::after{left:1px;border-width:0.5rem 0.5rem 0.5rem 0;border-right-color:#fff}.sp-dsgvo .bs-popover-bottom,.sp-dsgvo .bs-popover-auto[x-placement^="bottom"]{margin-top:0.5rem}.sp-dsgvo .bs-popover-bottom>.arrow,.sp-dsgvo .bs-popover-auto[x-placement^="bottom"]>.arrow{top:calc((0.5rem + 1px) * -1)}.sp-dsgvo .bs-popover-bottom>.arrow::before,.sp-dsgvo .bs-popover-auto[x-placement^="bottom"]>.arrow::before{top:0;border-width:0 0.5rem 0.5rem 0.5rem;border-bottom-color:rgba(0,0,0,0.25)}.sp-dsgvo .bs-popover-bottom>.arrow::after,.sp-dsgvo .bs-popover-auto[x-placement^="bottom"]>.arrow::after{top:1px;border-width:0 0.5rem 0.5rem 0.5rem;border-bottom-color:#fff}.sp-dsgvo .bs-popover-bottom .popover-header::before,.sp-dsgvo .bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-0.5rem;content:"";border-bottom:1px solid #f7f7f7}.sp-dsgvo .bs-popover-left,.sp-dsgvo .bs-popover-auto[x-placement^="left"]{margin-right:0.5rem}.sp-dsgvo .bs-popover-left>.arrow,.sp-dsgvo .bs-popover-auto[x-placement^="left"]>.arrow{right:calc((0.5rem + 1px) * -1);width:0.5rem;height:1rem;margin:0px 0}.sp-dsgvo .bs-popover-left>.arrow::before,.sp-dsgvo .bs-popover-auto[x-placement^="left"]>.arrow::before{right:0;border-width:0.5rem 0 0.5rem 0.5rem;border-left-color:rgba(0,0,0,0.25)}.sp-dsgvo .bs-popover-left>.arrow::after,.sp-dsgvo .bs-popover-auto[x-placement^="left"]>.arrow::after{right:1px;border-width:0.5rem 0 0.5rem 0.5rem;border-left-color:#fff}.sp-dsgvo .popover-header{padding:0.5rem 0.75rem;margin-bottom:0;font-size:0.9375rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(0px - 1px);border-top-right-radius:calc(0px - 1px)}.sp-dsgvo .popover-header:empty{display:none}.sp-dsgvo .popover-body{padding:0.5rem 0.75rem;color:#222}.sp-dsgvo .carousel{position:relative}.sp-dsgvo .carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.sp-dsgvo .carousel-inner{position:relative;width:100%;overflow:hidden}.sp-dsgvo .carousel-inner::after{display:block;clear:both;content:""}.sp-dsgvo .carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform 0.6s ease-in-out;transition:-webkit-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out}@media (prefers-reduced-motion: reduce){.sp-dsgvo .carousel-item{-webkit-transition:none;transition:none}}.sp-dsgvo .carousel-item.active,.sp-dsgvo .carousel-item-next,.sp-dsgvo .carousel-item-prev{display:block}.sp-dsgvo .carousel-item-next:not(.carousel-item-left),.sp-dsgvo .active.carousel-item-right{-webkit-transform:translateX(100%);transform:translateX(100%)}.sp-dsgvo .carousel-item-prev:not(.carousel-item-right),.sp-dsgvo .active.carousel-item-left{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.sp-dsgvo .carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.sp-dsgvo .carousel-fade .carousel-item.active,.sp-dsgvo .carousel-fade .carousel-item-next.carousel-item-left,.sp-dsgvo .carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.sp-dsgvo .carousel-fade .active.carousel-item-left,.sp-dsgvo .carousel-fade .active.carousel-item-right{z-index:0;opacity:0;-webkit-transition:0s 0.6s opacity;transition:0s 0.6s opacity}@media (prefers-reduced-motion: reduce){.sp-dsgvo .carousel-fade .active.carousel-item-left,.sp-dsgvo .carousel-fade .active.carousel-item-right{-webkit-transition:none;transition:none}}.sp-dsgvo .carousel-control-prev,.sp-dsgvo .carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:0.5;-webkit-transition:opacity 0.15s ease;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.sp-dsgvo .carousel-control-prev,.sp-dsgvo .carousel-control-next{-webkit-transition:none;transition:none}}.sp-dsgvo .carousel-control-prev:hover,.sp-dsgvo .carousel-control-prev:focus,.sp-dsgvo .carousel-control-next:hover,.sp-dsgvo .carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:0.9}.sp-dsgvo .carousel-control-prev{left:0}.sp-dsgvo .carousel-control-next{right:0}.sp-dsgvo .carousel-control-prev-icon,.sp-dsgvo .carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50% / 100% 100%}.sp-dsgvo .carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.sp-dsgvo .carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.sp-dsgvo .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.sp-dsgvo .carousel-indicators li{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity 0.6s ease;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.sp-dsgvo .carousel-indicators li{-webkit-transition:none;transition:none}}.sp-dsgvo .carousel-indicators .active{opacity:1}.sp-dsgvo .carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.sp-dsgvo .spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:0.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.sp-dsgvo .spinner-border-sm{width:1rem;height:1rem;border-width:0.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.sp-dsgvo .spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.sp-dsgvo .spinner-grow-sm{width:1rem;height:1rem}.sp-dsgvo .align-baseline{vertical-align:baseline !important}.sp-dsgvo .align-top{vertical-align:top !important}.sp-dsgvo .align-middle{vertical-align:middle !important}.sp-dsgvo .align-bottom{vertical-align:bottom !important}.sp-dsgvo .align-text-bottom{vertical-align:text-bottom !important}.sp-dsgvo .align-text-top{vertical-align:text-top !important}.sp-dsgvo .bg-primary{background-color:#008cba !important}.sp-dsgvo a.bg-primary:hover,.sp-dsgvo a.bg-primary:focus,.sp-dsgvo button.bg-primary:hover,.sp-dsgvo button.bg-primary:focus{background-color:#006687 !important}.sp-dsgvo .bg-secondary{background-color:#eee !important}.sp-dsgvo a.bg-secondary:hover,.sp-dsgvo a.bg-secondary:focus,.sp-dsgvo button.bg-secondary:hover,.sp-dsgvo button.bg-secondary:focus{background-color:#d5d4d4 !important}.sp-dsgvo .bg-success{background-color:#43ac6a !important}.sp-dsgvo a.bg-success:hover,.sp-dsgvo a.bg-success:focus,.sp-dsgvo button.bg-success:hover,.sp-dsgvo button.bg-success:focus{background-color:#358753 !important}.sp-dsgvo .bg-info{background-color:#5bc0de !important}.sp-dsgvo a.bg-info:hover,.sp-dsgvo a.bg-info:focus,.sp-dsgvo button.bg-info:hover,.sp-dsgvo button.bg-info:focus{background-color:#31b0d5 !important}.sp-dsgvo .bg-warning{background-color:#E99002 !important}.sp-dsgvo a.bg-warning:hover,.sp-dsgvo a.bg-warning:focus,.sp-dsgvo button.bg-warning:hover,.sp-dsgvo button.bg-warning:focus{background-color:#b67102 !important}.sp-dsgvo .bg-danger{background-color:#F04124 !important}.sp-dsgvo a.bg-danger:hover,.sp-dsgvo a.bg-danger:focus,.sp-dsgvo button.bg-danger:hover,.sp-dsgvo button.bg-danger:focus{background-color:#d32a0e !important}.sp-dsgvo .bg-light{background-color:#eee !important}.sp-dsgvo a.bg-light:hover,.sp-dsgvo a.bg-light:focus,.sp-dsgvo button.bg-light:hover,.sp-dsgvo button.bg-light:focus{background-color:#d5d4d4 !important}.sp-dsgvo .bg-dark{background-color:#222 !important}.sp-dsgvo a.bg-dark:hover,.sp-dsgvo a.bg-dark:focus,.sp-dsgvo button.bg-dark:hover,.sp-dsgvo button.bg-dark:focus{background-color:#090808 !important}.sp-dsgvo .bg-white{background-color:#fff !important}.sp-dsgvo .bg-transparent{background-color:transparent !important}.sp-dsgvo .border{border:1px solid #dee2e6 !important}.sp-dsgvo .border-top{border-top:1px solid #dee2e6 !important}.sp-dsgvo .border-right{border-right:1px solid #dee2e6 !important}.sp-dsgvo .border-bottom{border-bottom:1px solid #dee2e6 !important}.sp-dsgvo .border-left{border-left:1px solid #dee2e6 !important}.sp-dsgvo .border-0{border:0 !important}.sp-dsgvo .border-top-0{border-top:0 !important}.sp-dsgvo .border-right-0{border-right:0 !important}.sp-dsgvo .border-bottom-0{border-bottom:0 !important}.sp-dsgvo .border-left-0{border-left:0 !important}.sp-dsgvo .border-primary{border-color:#008cba !important}.sp-dsgvo .border-secondary{border-color:#eee !important}.sp-dsgvo .border-success{border-color:#43ac6a !important}.sp-dsgvo .border-info{border-color:#5bc0de !important}.sp-dsgvo .border-warning{border-color:#E99002 !important}.sp-dsgvo .border-danger{border-color:#F04124 !important}.sp-dsgvo .border-light{border-color:#eee !important}.sp-dsgvo .border-dark{border-color:#222 !important}.sp-dsgvo .border-white{border-color:#fff !important}.sp-dsgvo .rounded-sm{border-radius:0px !important}.sp-dsgvo .rounded{border-radius:0px !important}.sp-dsgvo .rounded-top{border-top-left-radius:0px !important;border-top-right-radius:0px !important}.sp-dsgvo .rounded-right{border-top-right-radius:0px !important;border-bottom-right-radius:0px !important}.sp-dsgvo .rounded-bottom{border-bottom-right-radius:0px !important;border-bottom-left-radius:0px !important}.sp-dsgvo .rounded-left{border-top-left-radius:0px !important;border-bottom-left-radius:0px !important}.sp-dsgvo .rounded-lg{border-radius:0px !important}.sp-dsgvo .rounded-circle{border-radius:50% !important}.sp-dsgvo .rounded-pill{border-radius:50rem !important}.sp-dsgvo .rounded-0{border-radius:0 !important}.sp-dsgvo .clearfix::after{display:block;clear:both;content:""}.sp-dsgvo .d-none{display:none !important}.sp-dsgvo .d-inline{display:inline !important}.sp-dsgvo .d-inline-block{display:inline-block !important}.sp-dsgvo .d-block{display:block !important}.sp-dsgvo .d-table{display:table !important}.sp-dsgvo .d-table-row{display:table-row !important}.sp-dsgvo .d-table-cell{display:table-cell !important}.sp-dsgvo .d-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.sp-dsgvo .d-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}@media (min-width: 576px){.sp-dsgvo .d-sm-none{display:none !important}.sp-dsgvo .d-sm-inline{display:inline !important}.sp-dsgvo .d-sm-inline-block{display:inline-block !important}.sp-dsgvo .d-sm-block{display:block !important}.sp-dsgvo .d-sm-table{display:table !important}.sp-dsgvo .d-sm-table-row{display:table-row !important}.sp-dsgvo .d-sm-table-cell{display:table-cell !important}.sp-dsgvo .d-sm-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.sp-dsgvo .d-sm-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media (min-width: 768px){.sp-dsgvo .d-md-none{display:none !important}.sp-dsgvo .d-md-inline{display:inline !important}.sp-dsgvo .d-md-inline-block{display:inline-block !important}.sp-dsgvo .d-md-block{display:block !important}.sp-dsgvo .d-md-table{display:table !important}.sp-dsgvo .d-md-table-row{display:table-row !important}.sp-dsgvo .d-md-table-cell{display:table-cell !important}.sp-dsgvo .d-md-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.sp-dsgvo .d-md-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media (min-width: 992px){.sp-dsgvo .d-lg-none{display:none !important}.sp-dsgvo .d-lg-inline{display:inline !important}.sp-dsgvo .d-lg-inline-block{display:inline-block !important}.sp-dsgvo .d-lg-block{display:block !important}.sp-dsgvo .d-lg-table{display:table !important}.sp-dsgvo .d-lg-table-row{display:table-row !important}.sp-dsgvo .d-lg-table-cell{display:table-cell !important}.sp-dsgvo .d-lg-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.sp-dsgvo .d-lg-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media (min-width: 1200px){.sp-dsgvo .d-xl-none{display:none !important}.sp-dsgvo .d-xl-inline{display:inline !important}.sp-dsgvo .d-xl-inline-block{display:inline-block !important}.sp-dsgvo .d-xl-block{display:block !important}.sp-dsgvo .d-xl-table{display:table !important}.sp-dsgvo .d-xl-table-row{display:table-row !important}.sp-dsgvo .d-xl-table-cell{display:table-cell !important}.sp-dsgvo .d-xl-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.sp-dsgvo .d-xl-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media print{.sp-dsgvo .d-print-none{display:none !important}.sp-dsgvo .d-print-inline{display:inline !important}.sp-dsgvo .d-print-inline-block{display:inline-block !important}.sp-dsgvo .d-print-block{display:block !important}.sp-dsgvo .d-print-table{display:table !important}.sp-dsgvo .d-print-table-row{display:table-row !important}.sp-dsgvo .d-print-table-cell{display:table-cell !important}.sp-dsgvo .d-print-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.sp-dsgvo .d-print-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}.sp-dsgvo .embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.sp-dsgvo .embed-responsive::before{display:block;content:""}.sp-dsgvo .embed-responsive .embed-responsive-item,.sp-dsgvo .embed-responsive iframe,.sp-dsgvo .embed-responsive embed,.sp-dsgvo .embed-responsive object,.sp-dsgvo .embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.sp-dsgvo .embed-responsive-21by9::before{padding-top:42.8571428571%}.sp-dsgvo .embed-responsive-16by9::before{padding-top:56.25%}.sp-dsgvo .embed-responsive-4by3::before{padding-top:75%}.sp-dsgvo .embed-responsive-1by1::before{padding-top:100%}.sp-dsgvo .flex-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.sp-dsgvo .flex-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.sp-dsgvo .flex-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.sp-dsgvo .flex-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.sp-dsgvo .flex-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.sp-dsgvo .flex-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.sp-dsgvo .flex-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.sp-dsgvo .flex-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.sp-dsgvo .flex-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.sp-dsgvo .flex-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.sp-dsgvo .flex-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.sp-dsgvo .flex-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.sp-dsgvo .justify-content-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.sp-dsgvo .justify-content-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.sp-dsgvo .justify-content-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.sp-dsgvo .justify-content-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.sp-dsgvo .justify-content-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.sp-dsgvo .align-items-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.sp-dsgvo .align-items-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.sp-dsgvo .align-items-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.sp-dsgvo .align-items-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.sp-dsgvo .align-items-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.sp-dsgvo .align-content-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.sp-dsgvo .align-content-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.sp-dsgvo .align-content-center{-ms-flex-line-pack:center !important;align-content:center !important}.sp-dsgvo .align-content-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.sp-dsgvo .align-content-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.sp-dsgvo .align-content-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.sp-dsgvo .align-self-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.sp-dsgvo .align-self-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.sp-dsgvo .align-self-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.sp-dsgvo .align-self-center{-ms-flex-item-align:center !important;align-self:center !important}.sp-dsgvo .align-self-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.sp-dsgvo .align-self-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}@media (min-width: 576px){.sp-dsgvo .flex-sm-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.sp-dsgvo .flex-sm-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.sp-dsgvo .flex-sm-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.sp-dsgvo .flex-sm-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.sp-dsgvo .flex-sm-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.sp-dsgvo .flex-sm-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.sp-dsgvo .flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.sp-dsgvo .flex-sm-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.sp-dsgvo .flex-sm-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.sp-dsgvo .flex-sm-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.sp-dsgvo .flex-sm-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.sp-dsgvo .flex-sm-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.sp-dsgvo .justify-content-sm-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.sp-dsgvo .justify-content-sm-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.sp-dsgvo .justify-content-sm-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.sp-dsgvo .justify-content-sm-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.sp-dsgvo .justify-content-sm-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.sp-dsgvo .align-items-sm-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.sp-dsgvo .align-items-sm-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.sp-dsgvo .align-items-sm-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.sp-dsgvo .align-items-sm-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.sp-dsgvo .align-items-sm-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.sp-dsgvo .align-content-sm-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.sp-dsgvo .align-content-sm-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.sp-dsgvo .align-content-sm-center{-ms-flex-line-pack:center !important;align-content:center !important}.sp-dsgvo .align-content-sm-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.sp-dsgvo .align-content-sm-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.sp-dsgvo .align-content-sm-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.sp-dsgvo .align-self-sm-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.sp-dsgvo .align-self-sm-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.sp-dsgvo .align-self-sm-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.sp-dsgvo .align-self-sm-center{-ms-flex-item-align:center !important;align-self:center !important}.sp-dsgvo .align-self-sm-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.sp-dsgvo .align-self-sm-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}@media (min-width: 768px){.sp-dsgvo .flex-md-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.sp-dsgvo .flex-md-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.sp-dsgvo .flex-md-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.sp-dsgvo .flex-md-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.sp-dsgvo .flex-md-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.sp-dsgvo .flex-md-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.sp-dsgvo .flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.sp-dsgvo .flex-md-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.sp-dsgvo .flex-md-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.sp-dsgvo .flex-md-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.sp-dsgvo .flex-md-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.sp-dsgvo .flex-md-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.sp-dsgvo .justify-content-md-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.sp-dsgvo .justify-content-md-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.sp-dsgvo .justify-content-md-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.sp-dsgvo .justify-content-md-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.sp-dsgvo .justify-content-md-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.sp-dsgvo .align-items-md-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.sp-dsgvo .align-items-md-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.sp-dsgvo .align-items-md-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.sp-dsgvo .align-items-md-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.sp-dsgvo .align-items-md-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.sp-dsgvo .align-content-md-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.sp-dsgvo .align-content-md-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.sp-dsgvo .align-content-md-center{-ms-flex-line-pack:center !important;align-content:center !important}.sp-dsgvo .align-content-md-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.sp-dsgvo .align-content-md-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.sp-dsgvo .align-content-md-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.sp-dsgvo .align-self-md-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.sp-dsgvo .align-self-md-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.sp-dsgvo .align-self-md-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.sp-dsgvo .align-self-md-center{-ms-flex-item-align:center !important;align-self:center !important}.sp-dsgvo .align-self-md-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.sp-dsgvo .align-self-md-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}@media (min-width: 992px){.sp-dsgvo .flex-lg-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.sp-dsgvo .flex-lg-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.sp-dsgvo .flex-lg-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.sp-dsgvo .flex-lg-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.sp-dsgvo .flex-lg-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.sp-dsgvo .flex-lg-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.sp-dsgvo .flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.sp-dsgvo .flex-lg-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.sp-dsgvo .flex-lg-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.sp-dsgvo .flex-lg-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.sp-dsgvo .flex-lg-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.sp-dsgvo .flex-lg-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.sp-dsgvo .justify-content-lg-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.sp-dsgvo .justify-content-lg-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.sp-dsgvo .justify-content-lg-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.sp-dsgvo .justify-content-lg-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.sp-dsgvo .justify-content-lg-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.sp-dsgvo .align-items-lg-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.sp-dsgvo .align-items-lg-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.sp-dsgvo .align-items-lg-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.sp-dsgvo .align-items-lg-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.sp-dsgvo .align-items-lg-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.sp-dsgvo .align-content-lg-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.sp-dsgvo .align-content-lg-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.sp-dsgvo .align-content-lg-center{-ms-flex-line-pack:center !important;align-content:center !important}.sp-dsgvo .align-content-lg-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.sp-dsgvo .align-content-lg-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.sp-dsgvo .align-content-lg-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.sp-dsgvo .align-self-lg-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.sp-dsgvo .align-self-lg-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.sp-dsgvo .align-self-lg-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.sp-dsgvo .align-self-lg-center{-ms-flex-item-align:center !important;align-self:center !important}.sp-dsgvo .align-self-lg-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.sp-dsgvo .align-self-lg-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}@media (min-width: 1200px){.sp-dsgvo .flex-xl-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.sp-dsgvo .flex-xl-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.sp-dsgvo .flex-xl-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.sp-dsgvo .flex-xl-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.sp-dsgvo .flex-xl-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.sp-dsgvo .flex-xl-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.sp-dsgvo .flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.sp-dsgvo .flex-xl-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.sp-dsgvo .flex-xl-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.sp-dsgvo .flex-xl-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.sp-dsgvo .flex-xl-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.sp-dsgvo .flex-xl-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.sp-dsgvo .justify-content-xl-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.sp-dsgvo .justify-content-xl-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.sp-dsgvo .justify-content-xl-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.sp-dsgvo .justify-content-xl-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.sp-dsgvo .justify-content-xl-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.sp-dsgvo .align-items-xl-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.sp-dsgvo .align-items-xl-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.sp-dsgvo .align-items-xl-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.sp-dsgvo .align-items-xl-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.sp-dsgvo .align-items-xl-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.sp-dsgvo .align-content-xl-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.sp-dsgvo .align-content-xl-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.sp-dsgvo .align-content-xl-center{-ms-flex-line-pack:center !important;align-content:center !important}.sp-dsgvo .align-content-xl-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.sp-dsgvo .align-content-xl-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.sp-dsgvo .align-content-xl-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.sp-dsgvo .align-self-xl-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.sp-dsgvo .align-self-xl-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.sp-dsgvo .align-self-xl-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.sp-dsgvo .align-self-xl-center{-ms-flex-item-align:center !important;align-self:center !important}.sp-dsgvo .align-self-xl-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.sp-dsgvo .align-self-xl-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}.sp-dsgvo .float-left{float:left !important}.sp-dsgvo .float-right{float:right !important}.sp-dsgvo .float-none{float:none !important}@media (min-width: 576px){.sp-dsgvo .float-sm-left{float:left !important}.sp-dsgvo .float-sm-right{float:right !important}.sp-dsgvo .float-sm-none{float:none !important}}@media (min-width: 768px){.sp-dsgvo .float-md-left{float:left !important}.sp-dsgvo .float-md-right{float:right !important}.sp-dsgvo .float-md-none{float:none !important}}@media (min-width: 992px){.sp-dsgvo .float-lg-left{float:left !important}.sp-dsgvo .float-lg-right{float:right !important}.sp-dsgvo .float-lg-none{float:none !important}}@media (min-width: 1200px){.sp-dsgvo .float-xl-left{float:left !important}.sp-dsgvo .float-xl-right{float:right !important}.sp-dsgvo .float-xl-none{float:none !important}}.sp-dsgvo .overflow-auto{overflow:auto !important}.sp-dsgvo .overflow-hidden{overflow:hidden !important}.sp-dsgvo .position-static{position:static !important}.sp-dsgvo .position-relative{position:relative !important}.sp-dsgvo .position-absolute{position:absolute !important}.sp-dsgvo .position-fixed{position:fixed !important}.sp-dsgvo .position-sticky{position:-webkit-sticky !important;position:sticky !important}.sp-dsgvo .fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.sp-dsgvo .fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: -webkit-sticky) or (position: sticky){.sp-dsgvo .sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sp-dsgvo .sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sp-dsgvo .sr-only-focusable:active,.sp-dsgvo .sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.sp-dsgvo .shadow-sm{-webkit-box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important;box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.sp-dsgvo .shadow{-webkit-box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important;box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.sp-dsgvo .shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important;box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.sp-dsgvo .shadow-none{-webkit-box-shadow:none !important;box-shadow:none !important}.sp-dsgvo .w-25{width:25% !important}.sp-dsgvo .w-50{width:50% !important}.sp-dsgvo .w-75{width:75% !important}.sp-dsgvo .w-100{width:100% !important}.sp-dsgvo .w-auto{width:auto !important}.sp-dsgvo .h-25{height:25% !important}.sp-dsgvo .h-50{height:50% !important}.sp-dsgvo .h-75{height:75% !important}.sp-dsgvo .h-100{height:100% !important}.sp-dsgvo .h-auto{height:auto !important}.sp-dsgvo .mw-100{max-width:100% !important}.sp-dsgvo .mh-100{max-height:100% !important}.sp-dsgvo .min-vw-100{min-width:100vw !important}.sp-dsgvo .min-vh-100{min-height:100vh !important}.sp-dsgvo .vw-100{width:100vw !important}.sp-dsgvo .vh-100{height:100vh !important}.sp-dsgvo .stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.sp-dsgvo .m-0{margin:0 !important}.sp-dsgvo .mt-0,.sp-dsgvo .my-0{margin-top:0 !important}.sp-dsgvo .mr-0,.sp-dsgvo .mx-0{margin-right:0 !important}.sp-dsgvo .mb-0,.sp-dsgvo .my-0{margin-bottom:0 !important}.sp-dsgvo .ml-0,.sp-dsgvo .mx-0{margin-left:0 !important}.sp-dsgvo .m-1{margin:0.25rem !important}.sp-dsgvo .mt-1,.sp-dsgvo .my-1{margin-top:0.25rem !important}.sp-dsgvo .mr-1,.sp-dsgvo .mx-1{margin-right:0.25rem !important}.sp-dsgvo .mb-1,.sp-dsgvo .my-1{margin-bottom:0.25rem !important}.sp-dsgvo .ml-1,.sp-dsgvo .mx-1{margin-left:0.25rem !important}.sp-dsgvo .m-2{margin:0.5rem !important}.sp-dsgvo .mt-2,.sp-dsgvo .my-2{margin-top:0.5rem !important}.sp-dsgvo .mr-2,.sp-dsgvo .mx-2{margin-right:0.5rem !important}.sp-dsgvo .mb-2,.sp-dsgvo .my-2{margin-bottom:0.5rem !important}.sp-dsgvo .ml-2,.sp-dsgvo .mx-2{margin-left:0.5rem !important}.sp-dsgvo .m-3{margin:1rem !important}.sp-dsgvo .mt-3,.sp-dsgvo .my-3{margin-top:1rem !important}.sp-dsgvo .mr-3,.sp-dsgvo .mx-3{margin-right:1rem !important}.sp-dsgvo .mb-3,.sp-dsgvo .my-3{margin-bottom:1rem !important}.sp-dsgvo .ml-3,.sp-dsgvo .mx-3{margin-left:1rem !important}.sp-dsgvo .m-4{margin:1.5rem !important}.sp-dsgvo .mt-4,.sp-dsgvo .my-4{margin-top:1.5rem !important}.sp-dsgvo .mr-4,.sp-dsgvo .mx-4{margin-right:1.5rem !important}.sp-dsgvo .mb-4,.sp-dsgvo .my-4{margin-bottom:1.5rem !important}.sp-dsgvo .ml-4,.sp-dsgvo .mx-4{margin-left:1.5rem !important}.sp-dsgvo .m-5{margin:3rem !important}.sp-dsgvo .mt-5,.sp-dsgvo .my-5{margin-top:3rem !important}.sp-dsgvo .mr-5,.sp-dsgvo .mx-5{margin-right:3rem !important}.sp-dsgvo .mb-5,.sp-dsgvo .my-5{margin-bottom:3rem !important}.sp-dsgvo .ml-5,.sp-dsgvo .mx-5{margin-left:3rem !important}.sp-dsgvo .p-0{padding:0 !important}.sp-dsgvo .pt-0,.sp-dsgvo .py-0{padding-top:0 !important}.sp-dsgvo .pr-0,.sp-dsgvo .px-0{padding-right:0 !important}.sp-dsgvo .pb-0,.sp-dsgvo .py-0{padding-bottom:0 !important}.sp-dsgvo .pl-0,.sp-dsgvo .px-0{padding-left:0 !important}.sp-dsgvo .p-1{padding:0.25rem !important}.sp-dsgvo .pt-1,.sp-dsgvo .py-1{padding-top:0.25rem !important}.sp-dsgvo .pr-1,.sp-dsgvo .px-1{padding-right:0.25rem !important}.sp-dsgvo .pb-1,.sp-dsgvo .py-1{padding-bottom:0.25rem !important}.sp-dsgvo .pl-1,.sp-dsgvo .px-1{padding-left:0.25rem !important}.sp-dsgvo .p-2{padding:0.5rem !important}.sp-dsgvo .pt-2,.sp-dsgvo .py-2{padding-top:0.5rem !important}.sp-dsgvo .pr-2,.sp-dsgvo .px-2{padding-right:0.5rem !important}.sp-dsgvo .pb-2,.sp-dsgvo .py-2{padding-bottom:0.5rem !important}.sp-dsgvo .pl-2,.sp-dsgvo .px-2{padding-left:0.5rem !important}.sp-dsgvo .p-3{padding:1rem !important}.sp-dsgvo .pt-3,.sp-dsgvo .py-3{padding-top:1rem !important}.sp-dsgvo .pr-3,.sp-dsgvo .px-3{padding-right:1rem !important}.sp-dsgvo .pb-3,.sp-dsgvo .py-3{padding-bottom:1rem !important}.sp-dsgvo .pl-3,.sp-dsgvo .px-3{padding-left:1rem !important}.sp-dsgvo .p-4{padding:1.5rem !important}.sp-dsgvo .pt-4,.sp-dsgvo .py-4{padding-top:1.5rem !important}.sp-dsgvo .pr-4,.sp-dsgvo .px-4{padding-right:1.5rem !important}.sp-dsgvo .pb-4,.sp-dsgvo .py-4{padding-bottom:1.5rem !important}.sp-dsgvo .pl-4,.sp-dsgvo .px-4{padding-left:1.5rem !important}.sp-dsgvo .p-5{padding:3rem !important}.sp-dsgvo .pt-5,.sp-dsgvo .py-5{padding-top:3rem !important}.sp-dsgvo .pr-5,.sp-dsgvo .px-5{padding-right:3rem !important}.sp-dsgvo .pb-5,.sp-dsgvo .py-5{padding-bottom:3rem !important}.sp-dsgvo .pl-5,.sp-dsgvo .px-5{padding-left:3rem !important}.sp-dsgvo .m-n1{margin:-0.25rem !important}.sp-dsgvo .mt-n1,.sp-dsgvo .my-n1{margin-top:-0.25rem !important}.sp-dsgvo .mr-n1,.sp-dsgvo .mx-n1{margin-right:-0.25rem !important}.sp-dsgvo .mb-n1,.sp-dsgvo .my-n1{margin-bottom:-0.25rem !important}.sp-dsgvo .ml-n1,.sp-dsgvo .mx-n1{margin-left:-0.25rem !important}.sp-dsgvo .m-n2{margin:-0.5rem !important}.sp-dsgvo .mt-n2,.sp-dsgvo .my-n2{margin-top:-0.5rem !important}.sp-dsgvo .mr-n2,.sp-dsgvo .mx-n2{margin-right:-0.5rem !important}.sp-dsgvo .mb-n2,.sp-dsgvo .my-n2{margin-bottom:-0.5rem !important}.sp-dsgvo .ml-n2,.sp-dsgvo .mx-n2{margin-left:-0.5rem !important}.sp-dsgvo .m-n3{margin:-1rem !important}.sp-dsgvo .mt-n3,.sp-dsgvo .my-n3{margin-top:-1rem !important}.sp-dsgvo .mr-n3,.sp-dsgvo .mx-n3{margin-right:-1rem !important}.sp-dsgvo .mb-n3,.sp-dsgvo .my-n3{margin-bottom:-1rem !important}.sp-dsgvo .ml-n3,.sp-dsgvo .mx-n3{margin-left:-1rem !important}.sp-dsgvo .m-n4{margin:-1.5rem !important}.sp-dsgvo .mt-n4,.sp-dsgvo .my-n4{margin-top:-1.5rem !important}.sp-dsgvo .mr-n4,.sp-dsgvo .mx-n4{margin-right:-1.5rem !important}.sp-dsgvo .mb-n4,.sp-dsgvo .my-n4{margin-bottom:-1.5rem !important}.sp-dsgvo .ml-n4,.sp-dsgvo .mx-n4{margin-left:-1.5rem !important}.sp-dsgvo .m-n5{margin:-3rem !important}.sp-dsgvo .mt-n5,.sp-dsgvo .my-n5{margin-top:-3rem !important}.sp-dsgvo .mr-n5,.sp-dsgvo .mx-n5{margin-right:-3rem !important}.sp-dsgvo .mb-n5,.sp-dsgvo .my-n5{margin-bottom:-3rem !important}.sp-dsgvo .ml-n5,.sp-dsgvo .mx-n5{margin-left:-3rem !important}.sp-dsgvo .m-auto{margin:auto !important}.sp-dsgvo .mt-auto,.sp-dsgvo .my-auto{margin-top:auto !important}.sp-dsgvo .mr-auto,.sp-dsgvo .mx-auto{margin-right:auto !important}.sp-dsgvo .mb-auto,.sp-dsgvo .my-auto{margin-bottom:auto !important}.sp-dsgvo .ml-auto,.sp-dsgvo .mx-auto{margin-left:auto !important}@media (min-width: 576px){.sp-dsgvo .m-sm-0{margin:0 !important}.sp-dsgvo .mt-sm-0,.sp-dsgvo .my-sm-0{margin-top:0 !important}.sp-dsgvo .mr-sm-0,.sp-dsgvo .mx-sm-0{margin-right:0 !important}.sp-dsgvo .mb-sm-0,.sp-dsgvo .my-sm-0{margin-bottom:0 !important}.sp-dsgvo .ml-sm-0,.sp-dsgvo .mx-sm-0{margin-left:0 !important}.sp-dsgvo .m-sm-1{margin:0.25rem !important}.sp-dsgvo .mt-sm-1,.sp-dsgvo .my-sm-1{margin-top:0.25rem !important}.sp-dsgvo .mr-sm-1,.sp-dsgvo .mx-sm-1{margin-right:0.25rem !important}.sp-dsgvo .mb-sm-1,.sp-dsgvo .my-sm-1{margin-bottom:0.25rem !important}.sp-dsgvo .ml-sm-1,.sp-dsgvo .mx-sm-1{margin-left:0.25rem !important}.sp-dsgvo .m-sm-2{margin:0.5rem !important}.sp-dsgvo .mt-sm-2,.sp-dsgvo .my-sm-2{margin-top:0.5rem !important}.sp-dsgvo .mr-sm-2,.sp-dsgvo .mx-sm-2{margin-right:0.5rem !important}.sp-dsgvo .mb-sm-2,.sp-dsgvo .my-sm-2{margin-bottom:0.5rem !important}.sp-dsgvo .ml-sm-2,.sp-dsgvo .mx-sm-2{margin-left:0.5rem !important}.sp-dsgvo .m-sm-3{margin:1rem !important}.sp-dsgvo .mt-sm-3,.sp-dsgvo .my-sm-3{margin-top:1rem !important}.sp-dsgvo .mr-sm-3,.sp-dsgvo .mx-sm-3{margin-right:1rem !important}.sp-dsgvo .mb-sm-3,.sp-dsgvo .my-sm-3{margin-bottom:1rem !important}.sp-dsgvo .ml-sm-3,.sp-dsgvo .mx-sm-3{margin-left:1rem !important}.sp-dsgvo .m-sm-4{margin:1.5rem !important}.sp-dsgvo .mt-sm-4,.sp-dsgvo .my-sm-4{margin-top:1.5rem !important}.sp-dsgvo .mr-sm-4,.sp-dsgvo .mx-sm-4{margin-right:1.5rem !important}.sp-dsgvo .mb-sm-4,.sp-dsgvo .my-sm-4{margin-bottom:1.5rem !important}.sp-dsgvo .ml-sm-4,.sp-dsgvo .mx-sm-4{margin-left:1.5rem !important}.sp-dsgvo .m-sm-5{margin:3rem !important}.sp-dsgvo .mt-sm-5,.sp-dsgvo .my-sm-5{margin-top:3rem !important}.sp-dsgvo .mr-sm-5,.sp-dsgvo .mx-sm-5{margin-right:3rem !important}.sp-dsgvo .mb-sm-5,.sp-dsgvo .my-sm-5{margin-bottom:3rem !important}.sp-dsgvo .ml-sm-5,.sp-dsgvo .mx-sm-5{margin-left:3rem !important}.sp-dsgvo .p-sm-0{padding:0 !important}.sp-dsgvo .pt-sm-0,.sp-dsgvo .py-sm-0{padding-top:0 !important}.sp-dsgvo .pr-sm-0,.sp-dsgvo .px-sm-0{padding-right:0 !important}.sp-dsgvo .pb-sm-0,.sp-dsgvo .py-sm-0{padding-bottom:0 !important}.sp-dsgvo .pl-sm-0,.sp-dsgvo .px-sm-0{padding-left:0 !important}.sp-dsgvo .p-sm-1{padding:0.25rem !important}.sp-dsgvo .pt-sm-1,.sp-dsgvo .py-sm-1{padding-top:0.25rem !important}.sp-dsgvo .pr-sm-1,.sp-dsgvo .px-sm-1{padding-right:0.25rem !important}.sp-dsgvo .pb-sm-1,.sp-dsgvo .py-sm-1{padding-bottom:0.25rem !important}.sp-dsgvo .pl-sm-1,.sp-dsgvo .px-sm-1{padding-left:0.25rem !important}.sp-dsgvo .p-sm-2{padding:0.5rem !important}.sp-dsgvo .pt-sm-2,.sp-dsgvo .py-sm-2{padding-top:0.5rem !important}.sp-dsgvo .pr-sm-2,.sp-dsgvo .px-sm-2{padding-right:0.5rem !important}.sp-dsgvo .pb-sm-2,.sp-dsgvo .py-sm-2{padding-bottom:0.5rem !important}.sp-dsgvo .pl-sm-2,.sp-dsgvo .px-sm-2{padding-left:0.5rem !important}.sp-dsgvo .p-sm-3{padding:1rem !important}.sp-dsgvo .pt-sm-3,.sp-dsgvo .py-sm-3{padding-top:1rem !important}.sp-dsgvo .pr-sm-3,.sp-dsgvo .px-sm-3{padding-right:1rem !important}.sp-dsgvo .pb-sm-3,.sp-dsgvo .py-sm-3{padding-bottom:1rem !important}.sp-dsgvo .pl-sm-3,.sp-dsgvo .px-sm-3{padding-left:1rem !important}.sp-dsgvo .p-sm-4{padding:1.5rem !important}.sp-dsgvo .pt-sm-4,.sp-dsgvo .py-sm-4{padding-top:1.5rem !important}.sp-dsgvo .pr-sm-4,.sp-dsgvo .px-sm-4{padding-right:1.5rem !important}.sp-dsgvo .pb-sm-4,.sp-dsgvo .py-sm-4{padding-bottom:1.5rem !important}.sp-dsgvo .pl-sm-4,.sp-dsgvo .px-sm-4{padding-left:1.5rem !important}.sp-dsgvo .p-sm-5{padding:3rem !important}.sp-dsgvo .pt-sm-5,.sp-dsgvo .py-sm-5{padding-top:3rem !important}.sp-dsgvo .pr-sm-5,.sp-dsgvo .px-sm-5{padding-right:3rem !important}.sp-dsgvo .pb-sm-5,.sp-dsgvo .py-sm-5{padding-bottom:3rem !important}.sp-dsgvo .pl-sm-5,.sp-dsgvo .px-sm-5{padding-left:3rem !important}.sp-dsgvo .m-sm-n1{margin:-0.25rem !important}.sp-dsgvo .mt-sm-n1,.sp-dsgvo .my-sm-n1{margin-top:-0.25rem !important}.sp-dsgvo .mr-sm-n1,.sp-dsgvo .mx-sm-n1{margin-right:-0.25rem !important}.sp-dsgvo .mb-sm-n1,.sp-dsgvo .my-sm-n1{margin-bottom:-0.25rem !important}.sp-dsgvo .ml-sm-n1,.sp-dsgvo .mx-sm-n1{margin-left:-0.25rem !important}.sp-dsgvo .m-sm-n2{margin:-0.5rem !important}.sp-dsgvo .mt-sm-n2,.sp-dsgvo .my-sm-n2{margin-top:-0.5rem !important}.sp-dsgvo .mr-sm-n2,.sp-dsgvo .mx-sm-n2{margin-right:-0.5rem !important}.sp-dsgvo .mb-sm-n2,.sp-dsgvo .my-sm-n2{margin-bottom:-0.5rem !important}.sp-dsgvo .ml-sm-n2,.sp-dsgvo .mx-sm-n2{margin-left:-0.5rem !important}.sp-dsgvo .m-sm-n3{margin:-1rem !important}.sp-dsgvo .mt-sm-n3,.sp-dsgvo .my-sm-n3{margin-top:-1rem !important}.sp-dsgvo .mr-sm-n3,.sp-dsgvo .mx-sm-n3{margin-right:-1rem !important}.sp-dsgvo .mb-sm-n3,.sp-dsgvo .my-sm-n3{margin-bottom:-1rem !important}.sp-dsgvo .ml-sm-n3,.sp-dsgvo .mx-sm-n3{margin-left:-1rem !important}.sp-dsgvo .m-sm-n4{margin:-1.5rem !important}.sp-dsgvo .mt-sm-n4,.sp-dsgvo .my-sm-n4{margin-top:-1.5rem !important}.sp-dsgvo .mr-sm-n4,.sp-dsgvo .mx-sm-n4{margin-right:-1.5rem !important}.sp-dsgvo .mb-sm-n4,.sp-dsgvo .my-sm-n4{margin-bottom:-1.5rem !important}.sp-dsgvo .ml-sm-n4,.sp-dsgvo .mx-sm-n4{margin-left:-1.5rem !important}.sp-dsgvo .m-sm-n5{margin:-3rem !important}.sp-dsgvo .mt-sm-n5,.sp-dsgvo .my-sm-n5{margin-top:-3rem !important}.sp-dsgvo .mr-sm-n5,.sp-dsgvo .mx-sm-n5{margin-right:-3rem !important}.sp-dsgvo .mb-sm-n5,.sp-dsgvo .my-sm-n5{margin-bottom:-3rem !important}.sp-dsgvo .ml-sm-n5,.sp-dsgvo .mx-sm-n5{margin-left:-3rem !important}.sp-dsgvo .m-sm-auto{margin:auto !important}.sp-dsgvo .mt-sm-auto,.sp-dsgvo .my-sm-auto{margin-top:auto !important}.sp-dsgvo .mr-sm-auto,.sp-dsgvo .mx-sm-auto{margin-right:auto !important}.sp-dsgvo .mb-sm-auto,.sp-dsgvo .my-sm-auto{margin-bottom:auto !important}.sp-dsgvo .ml-sm-auto,.sp-dsgvo .mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.sp-dsgvo .m-md-0{margin:0 !important}.sp-dsgvo .mt-md-0,.sp-dsgvo .my-md-0{margin-top:0 !important}.sp-dsgvo .mr-md-0,.sp-dsgvo .mx-md-0{margin-right:0 !important}.sp-dsgvo .mb-md-0,.sp-dsgvo .my-md-0{margin-bottom:0 !important}.sp-dsgvo .ml-md-0,.sp-dsgvo .mx-md-0{margin-left:0 !important}.sp-dsgvo .m-md-1{margin:0.25rem !important}.sp-dsgvo .mt-md-1,.sp-dsgvo .my-md-1{margin-top:0.25rem !important}.sp-dsgvo .mr-md-1,.sp-dsgvo .mx-md-1{margin-right:0.25rem !important}.sp-dsgvo .mb-md-1,.sp-dsgvo .my-md-1{margin-bottom:0.25rem !important}.sp-dsgvo .ml-md-1,.sp-dsgvo .mx-md-1{margin-left:0.25rem !important}.sp-dsgvo .m-md-2{margin:0.5rem !important}.sp-dsgvo .mt-md-2,.sp-dsgvo .my-md-2{margin-top:0.5rem !important}.sp-dsgvo .mr-md-2,.sp-dsgvo .mx-md-2{margin-right:0.5rem !important}.sp-dsgvo .mb-md-2,.sp-dsgvo .my-md-2{margin-bottom:0.5rem !important}.sp-dsgvo .ml-md-2,.sp-dsgvo .mx-md-2{margin-left:0.5rem !important}.sp-dsgvo .m-md-3{margin:1rem !important}.sp-dsgvo .mt-md-3,.sp-dsgvo .my-md-3{margin-top:1rem !important}.sp-dsgvo .mr-md-3,.sp-dsgvo .mx-md-3{margin-right:1rem !important}.sp-dsgvo .mb-md-3,.sp-dsgvo .my-md-3{margin-bottom:1rem !important}.sp-dsgvo .ml-md-3,.sp-dsgvo .mx-md-3{margin-left:1rem !important}.sp-dsgvo .m-md-4{margin:1.5rem !important}.sp-dsgvo .mt-md-4,.sp-dsgvo .my-md-4{margin-top:1.5rem !important}.sp-dsgvo .mr-md-4,.sp-dsgvo .mx-md-4{margin-right:1.5rem !important}.sp-dsgvo .mb-md-4,.sp-dsgvo .my-md-4{margin-bottom:1.5rem !important}.sp-dsgvo .ml-md-4,.sp-dsgvo .mx-md-4{margin-left:1.5rem !important}.sp-dsgvo .m-md-5{margin:3rem !important}.sp-dsgvo .mt-md-5,.sp-dsgvo .my-md-5{margin-top:3rem !important}.sp-dsgvo .mr-md-5,.sp-dsgvo .mx-md-5{margin-right:3rem !important}.sp-dsgvo .mb-md-5,.sp-dsgvo .my-md-5{margin-bottom:3rem !important}.sp-dsgvo .ml-md-5,.sp-dsgvo .mx-md-5{margin-left:3rem !important}.sp-dsgvo .p-md-0{padding:0 !important}.sp-dsgvo .pt-md-0,.sp-dsgvo .py-md-0{padding-top:0 !important}.sp-dsgvo .pr-md-0,.sp-dsgvo .px-md-0{padding-right:0 !important}.sp-dsgvo .pb-md-0,.sp-dsgvo .py-md-0{padding-bottom:0 !important}.sp-dsgvo .pl-md-0,.sp-dsgvo .px-md-0{padding-left:0 !important}.sp-dsgvo .p-md-1{padding:0.25rem !important}.sp-dsgvo .pt-md-1,.sp-dsgvo .py-md-1{padding-top:0.25rem !important}.sp-dsgvo .pr-md-1,.sp-dsgvo .px-md-1{padding-right:0.25rem !important}.sp-dsgvo .pb-md-1,.sp-dsgvo .py-md-1{padding-bottom:0.25rem !important}.sp-dsgvo .pl-md-1,.sp-dsgvo .px-md-1{padding-left:0.25rem !important}.sp-dsgvo .p-md-2{padding:0.5rem !important}.sp-dsgvo .pt-md-2,.sp-dsgvo .py-md-2{padding-top:0.5rem !important}.sp-dsgvo .pr-md-2,.sp-dsgvo .px-md-2{padding-right:0.5rem !important}.sp-dsgvo .pb-md-2,.sp-dsgvo .py-md-2{padding-bottom:0.5rem !important}.sp-dsgvo .pl-md-2,.sp-dsgvo .px-md-2{padding-left:0.5rem !important}.sp-dsgvo .p-md-3{padding:1rem !important}.sp-dsgvo .pt-md-3,.sp-dsgvo .py-md-3{padding-top:1rem !important}.sp-dsgvo .pr-md-3,.sp-dsgvo .px-md-3{padding-right:1rem !important}.sp-dsgvo .pb-md-3,.sp-dsgvo .py-md-3{padding-bottom:1rem !important}.sp-dsgvo .pl-md-3,.sp-dsgvo .px-md-3{padding-left:1rem !important}.sp-dsgvo .p-md-4{padding:1.5rem !important}.sp-dsgvo .pt-md-4,.sp-dsgvo .py-md-4{padding-top:1.5rem !important}.sp-dsgvo .pr-md-4,.sp-dsgvo .px-md-4{padding-right:1.5rem !important}.sp-dsgvo .pb-md-4,.sp-dsgvo .py-md-4{padding-bottom:1.5rem !important}.sp-dsgvo .pl-md-4,.sp-dsgvo .px-md-4{padding-left:1.5rem !important}.sp-dsgvo .p-md-5{padding:3rem !important}.sp-dsgvo .pt-md-5,.sp-dsgvo .py-md-5{padding-top:3rem !important}.sp-dsgvo .pr-md-5,.sp-dsgvo .px-md-5{padding-right:3rem !important}.sp-dsgvo .pb-md-5,.sp-dsgvo .py-md-5{padding-bottom:3rem !important}.sp-dsgvo .pl-md-5,.sp-dsgvo .px-md-5{padding-left:3rem !important}.sp-dsgvo .m-md-n1{margin:-0.25rem !important}.sp-dsgvo .mt-md-n1,.sp-dsgvo .my-md-n1{margin-top:-0.25rem !important}.sp-dsgvo .mr-md-n1,.sp-dsgvo .mx-md-n1{margin-right:-0.25rem !important}.sp-dsgvo .mb-md-n1,.sp-dsgvo .my-md-n1{margin-bottom:-0.25rem !important}.sp-dsgvo .ml-md-n1,.sp-dsgvo .mx-md-n1{margin-left:-0.25rem !important}.sp-dsgvo .m-md-n2{margin:-0.5rem !important}.sp-dsgvo .mt-md-n2,.sp-dsgvo .my-md-n2{margin-top:-0.5rem !important}.sp-dsgvo .mr-md-n2,.sp-dsgvo .mx-md-n2{margin-right:-0.5rem !important}.sp-dsgvo .mb-md-n2,.sp-dsgvo .my-md-n2{margin-bottom:-0.5rem !important}.sp-dsgvo .ml-md-n2,.sp-dsgvo .mx-md-n2{margin-left:-0.5rem !important}.sp-dsgvo .m-md-n3{margin:-1rem !important}.sp-dsgvo .mt-md-n3,.sp-dsgvo .my-md-n3{margin-top:-1rem !important}.sp-dsgvo .mr-md-n3,.sp-dsgvo .mx-md-n3{margin-right:-1rem !important}.sp-dsgvo .mb-md-n3,.sp-dsgvo .my-md-n3{margin-bottom:-1rem !important}.sp-dsgvo .ml-md-n3,.sp-dsgvo .mx-md-n3{margin-left:-1rem !important}.sp-dsgvo .m-md-n4{margin:-1.5rem !important}.sp-dsgvo .mt-md-n4,.sp-dsgvo .my-md-n4{margin-top:-1.5rem !important}.sp-dsgvo .mr-md-n4,.sp-dsgvo .mx-md-n4{margin-right:-1.5rem !important}.sp-dsgvo .mb-md-n4,.sp-dsgvo .my-md-n4{margin-bottom:-1.5rem !important}.sp-dsgvo .ml-md-n4,.sp-dsgvo .mx-md-n4{margin-left:-1.5rem !important}.sp-dsgvo .m-md-n5{margin:-3rem !important}.sp-dsgvo .mt-md-n5,.sp-dsgvo .my-md-n5{margin-top:-3rem !important}.sp-dsgvo .mr-md-n5,.sp-dsgvo .mx-md-n5{margin-right:-3rem !important}.sp-dsgvo .mb-md-n5,.sp-dsgvo .my-md-n5{margin-bottom:-3rem !important}.sp-dsgvo .ml-md-n5,.sp-dsgvo .mx-md-n5{margin-left:-3rem !important}.sp-dsgvo .m-md-auto{margin:auto !important}.sp-dsgvo .mt-md-auto,.sp-dsgvo .my-md-auto{margin-top:auto !important}.sp-dsgvo .mr-md-auto,.sp-dsgvo .mx-md-auto{margin-right:auto !important}.sp-dsgvo .mb-md-auto,.sp-dsgvo .my-md-auto{margin-bottom:auto !important}.sp-dsgvo .ml-md-auto,.sp-dsgvo .mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.sp-dsgvo .m-lg-0{margin:0 !important}.sp-dsgvo .mt-lg-0,.sp-dsgvo .my-lg-0{margin-top:0 !important}.sp-dsgvo .mr-lg-0,.sp-dsgvo .mx-lg-0{margin-right:0 !important}.sp-dsgvo .mb-lg-0,.sp-dsgvo .my-lg-0{margin-bottom:0 !important}.sp-dsgvo .ml-lg-0,.sp-dsgvo .mx-lg-0{margin-left:0 !important}.sp-dsgvo .m-lg-1{margin:0.25rem !important}.sp-dsgvo .mt-lg-1,.sp-dsgvo .my-lg-1{margin-top:0.25rem !important}.sp-dsgvo .mr-lg-1,.sp-dsgvo .mx-lg-1{margin-right:0.25rem !important}.sp-dsgvo .mb-lg-1,.sp-dsgvo .my-lg-1{margin-bottom:0.25rem !important}.sp-dsgvo .ml-lg-1,.sp-dsgvo .mx-lg-1{margin-left:0.25rem !important}.sp-dsgvo .m-lg-2{margin:0.5rem !important}.sp-dsgvo .mt-lg-2,.sp-dsgvo .my-lg-2{margin-top:0.5rem !important}.sp-dsgvo .mr-lg-2,.sp-dsgvo .mx-lg-2{margin-right:0.5rem !important}.sp-dsgvo .mb-lg-2,.sp-dsgvo .my-lg-2{margin-bottom:0.5rem !important}.sp-dsgvo .ml-lg-2,.sp-dsgvo .mx-lg-2{margin-left:0.5rem !important}.sp-dsgvo .m-lg-3{margin:1rem !important}.sp-dsgvo .mt-lg-3,.sp-dsgvo .my-lg-3{margin-top:1rem !important}.sp-dsgvo .mr-lg-3,.sp-dsgvo .mx-lg-3{margin-right:1rem !important}.sp-dsgvo .mb-lg-3,.sp-dsgvo .my-lg-3{margin-bottom:1rem !important}.sp-dsgvo .ml-lg-3,.sp-dsgvo .mx-lg-3{margin-left:1rem !important}.sp-dsgvo .m-lg-4{margin:1.5rem !important}.sp-dsgvo .mt-lg-4,.sp-dsgvo .my-lg-4{margin-top:1.5rem !important}.sp-dsgvo .mr-lg-4,.sp-dsgvo .mx-lg-4{margin-right:1.5rem !important}.sp-dsgvo .mb-lg-4,.sp-dsgvo .my-lg-4{margin-bottom:1.5rem !important}.sp-dsgvo .ml-lg-4,.sp-dsgvo .mx-lg-4{margin-left:1.5rem !important}.sp-dsgvo .m-lg-5{margin:3rem !important}.sp-dsgvo .mt-lg-5,.sp-dsgvo .my-lg-5{margin-top:3rem !important}.sp-dsgvo .mr-lg-5,.sp-dsgvo .mx-lg-5{margin-right:3rem !important}.sp-dsgvo .mb-lg-5,.sp-dsgvo .my-lg-5{margin-bottom:3rem !important}.sp-dsgvo .ml-lg-5,.sp-dsgvo .mx-lg-5{margin-left:3rem !important}.sp-dsgvo .p-lg-0{padding:0 !important}.sp-dsgvo .pt-lg-0,.sp-dsgvo .py-lg-0{padding-top:0 !important}.sp-dsgvo .pr-lg-0,.sp-dsgvo .px-lg-0{padding-right:0 !important}.sp-dsgvo .pb-lg-0,.sp-dsgvo .py-lg-0{padding-bottom:0 !important}.sp-dsgvo .pl-lg-0,.sp-dsgvo .px-lg-0{padding-left:0 !important}.sp-dsgvo .p-lg-1{padding:0.25rem !important}.sp-dsgvo .pt-lg-1,.sp-dsgvo .py-lg-1{padding-top:0.25rem !important}.sp-dsgvo .pr-lg-1,.sp-dsgvo .px-lg-1{padding-right:0.25rem !important}.sp-dsgvo .pb-lg-1,.sp-dsgvo .py-lg-1{padding-bottom:0.25rem !important}.sp-dsgvo .pl-lg-1,.sp-dsgvo .px-lg-1{padding-left:0.25rem !important}.sp-dsgvo .p-lg-2{padding:0.5rem !important}.sp-dsgvo .pt-lg-2,.sp-dsgvo .py-lg-2{padding-top:0.5rem !important}.sp-dsgvo .pr-lg-2,.sp-dsgvo .px-lg-2{padding-right:0.5rem !important}.sp-dsgvo .pb-lg-2,.sp-dsgvo .py-lg-2{padding-bottom:0.5rem !important}.sp-dsgvo .pl-lg-2,.sp-dsgvo .px-lg-2{padding-left:0.5rem !important}.sp-dsgvo .p-lg-3{padding:1rem !important}.sp-dsgvo .pt-lg-3,.sp-dsgvo .py-lg-3{padding-top:1rem !important}.sp-dsgvo .pr-lg-3,.sp-dsgvo .px-lg-3{padding-right:1rem !important}.sp-dsgvo .pb-lg-3,.sp-dsgvo .py-lg-3{padding-bottom:1rem !important}.sp-dsgvo .pl-lg-3,.sp-dsgvo .px-lg-3{padding-left:1rem !important}.sp-dsgvo .p-lg-4{padding:1.5rem !important}.sp-dsgvo .pt-lg-4,.sp-dsgvo .py-lg-4{padding-top:1.5rem !important}.sp-dsgvo .pr-lg-4,.sp-dsgvo .px-lg-4{padding-right:1.5rem !important}.sp-dsgvo .pb-lg-4,.sp-dsgvo .py-lg-4{padding-bottom:1.5rem !important}.sp-dsgvo .pl-lg-4,.sp-dsgvo .px-lg-4{padding-left:1.5rem !important}.sp-dsgvo .p-lg-5{padding:3rem !important}.sp-dsgvo .pt-lg-5,.sp-dsgvo .py-lg-5{padding-top:3rem !important}.sp-dsgvo .pr-lg-5,.sp-dsgvo .px-lg-5{padding-right:3rem !important}.sp-dsgvo .pb-lg-5,.sp-dsgvo .py-lg-5{padding-bottom:3rem !important}.sp-dsgvo .pl-lg-5,.sp-dsgvo .px-lg-5{padding-left:3rem !important}.sp-dsgvo .m-lg-n1{margin:-0.25rem !important}.sp-dsgvo .mt-lg-n1,.sp-dsgvo .my-lg-n1{margin-top:-0.25rem !important}.sp-dsgvo .mr-lg-n1,.sp-dsgvo .mx-lg-n1{margin-right:-0.25rem !important}.sp-dsgvo .mb-lg-n1,.sp-dsgvo .my-lg-n1{margin-bottom:-0.25rem !important}.sp-dsgvo .ml-lg-n1,.sp-dsgvo .mx-lg-n1{margin-left:-0.25rem !important}.sp-dsgvo .m-lg-n2{margin:-0.5rem !important}.sp-dsgvo .mt-lg-n2,.sp-dsgvo .my-lg-n2{margin-top:-0.5rem !important}.sp-dsgvo .mr-lg-n2,.sp-dsgvo .mx-lg-n2{margin-right:-0.5rem !important}.sp-dsgvo .mb-lg-n2,.sp-dsgvo .my-lg-n2{margin-bottom:-0.5rem !important}.sp-dsgvo .ml-lg-n2,.sp-dsgvo .mx-lg-n2{margin-left:-0.5rem !important}.sp-dsgvo .m-lg-n3{margin:-1rem !important}.sp-dsgvo .mt-lg-n3,.sp-dsgvo .my-lg-n3{margin-top:-1rem !important}.sp-dsgvo .mr-lg-n3,.sp-dsgvo .mx-lg-n3{margin-right:-1rem !important}.sp-dsgvo .mb-lg-n3,.sp-dsgvo .my-lg-n3{margin-bottom:-1rem !important}.sp-dsgvo .ml-lg-n3,.sp-dsgvo .mx-lg-n3{margin-left:-1rem !important}.sp-dsgvo .m-lg-n4{margin:-1.5rem !important}.sp-dsgvo .mt-lg-n4,.sp-dsgvo .my-lg-n4{margin-top:-1.5rem !important}.sp-dsgvo .mr-lg-n4,.sp-dsgvo .mx-lg-n4{margin-right:-1.5rem !important}.sp-dsgvo .mb-lg-n4,.sp-dsgvo .my-lg-n4{margin-bottom:-1.5rem !important}.sp-dsgvo .ml-lg-n4,.sp-dsgvo .mx-lg-n4{margin-left:-1.5rem !important}.sp-dsgvo .m-lg-n5{margin:-3rem !important}.sp-dsgvo .mt-lg-n5,.sp-dsgvo .my-lg-n5{margin-top:-3rem !important}.sp-dsgvo .mr-lg-n5,.sp-dsgvo .mx-lg-n5{margin-right:-3rem !important}.sp-dsgvo .mb-lg-n5,.sp-dsgvo .my-lg-n5{margin-bottom:-3rem !important}.sp-dsgvo .ml-lg-n5,.sp-dsgvo .mx-lg-n5{margin-left:-3rem !important}.sp-dsgvo .m-lg-auto{margin:auto !important}.sp-dsgvo .mt-lg-auto,.sp-dsgvo .my-lg-auto{margin-top:auto !important}.sp-dsgvo .mr-lg-auto,.sp-dsgvo .mx-lg-auto{margin-right:auto !important}.sp-dsgvo .mb-lg-auto,.sp-dsgvo .my-lg-auto{margin-bottom:auto !important}.sp-dsgvo .ml-lg-auto,.sp-dsgvo .mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.sp-dsgvo .m-xl-0{margin:0 !important}.sp-dsgvo .mt-xl-0,.sp-dsgvo .my-xl-0{margin-top:0 !important}.sp-dsgvo .mr-xl-0,.sp-dsgvo .mx-xl-0{margin-right:0 !important}.sp-dsgvo .mb-xl-0,.sp-dsgvo .my-xl-0{margin-bottom:0 !important}.sp-dsgvo .ml-xl-0,.sp-dsgvo .mx-xl-0{margin-left:0 !important}.sp-dsgvo .m-xl-1{margin:0.25rem !important}.sp-dsgvo .mt-xl-1,.sp-dsgvo .my-xl-1{margin-top:0.25rem !important}.sp-dsgvo .mr-xl-1,.sp-dsgvo .mx-xl-1{margin-right:0.25rem !important}.sp-dsgvo .mb-xl-1,.sp-dsgvo .my-xl-1{margin-bottom:0.25rem !important}.sp-dsgvo .ml-xl-1,.sp-dsgvo .mx-xl-1{margin-left:0.25rem !important}.sp-dsgvo .m-xl-2{margin:0.5rem !important}.sp-dsgvo .mt-xl-2,.sp-dsgvo .my-xl-2{margin-top:0.5rem !important}.sp-dsgvo .mr-xl-2,.sp-dsgvo .mx-xl-2{margin-right:0.5rem !important}.sp-dsgvo .mb-xl-2,.sp-dsgvo .my-xl-2{margin-bottom:0.5rem !important}.sp-dsgvo .ml-xl-2,.sp-dsgvo .mx-xl-2{margin-left:0.5rem !important}.sp-dsgvo .m-xl-3{margin:1rem !important}.sp-dsgvo .mt-xl-3,.sp-dsgvo .my-xl-3{margin-top:1rem !important}.sp-dsgvo .mr-xl-3,.sp-dsgvo .mx-xl-3{margin-right:1rem !important}.sp-dsgvo .mb-xl-3,.sp-dsgvo .my-xl-3{margin-bottom:1rem !important}.sp-dsgvo .ml-xl-3,.sp-dsgvo .mx-xl-3{margin-left:1rem !important}.sp-dsgvo .m-xl-4{margin:1.5rem !important}.sp-dsgvo .mt-xl-4,.sp-dsgvo .my-xl-4{margin-top:1.5rem !important}.sp-dsgvo .mr-xl-4,.sp-dsgvo .mx-xl-4{margin-right:1.5rem !important}.sp-dsgvo .mb-xl-4,.sp-dsgvo .my-xl-4{margin-bottom:1.5rem !important}.sp-dsgvo .ml-xl-4,.sp-dsgvo .mx-xl-4{margin-left:1.5rem !important}.sp-dsgvo .m-xl-5{margin:3rem !important}.sp-dsgvo .mt-xl-5,.sp-dsgvo .my-xl-5{margin-top:3rem !important}.sp-dsgvo .mr-xl-5,.sp-dsgvo .mx-xl-5{margin-right:3rem !important}.sp-dsgvo .mb-xl-5,.sp-dsgvo .my-xl-5{margin-bottom:3rem !important}.sp-dsgvo .ml-xl-5,.sp-dsgvo .mx-xl-5{margin-left:3rem !important}.sp-dsgvo .p-xl-0{padding:0 !important}.sp-dsgvo .pt-xl-0,.sp-dsgvo .py-xl-0{padding-top:0 !important}.sp-dsgvo .pr-xl-0,.sp-dsgvo .px-xl-0{padding-right:0 !important}.sp-dsgvo .pb-xl-0,.sp-dsgvo .py-xl-0{padding-bottom:0 !important}.sp-dsgvo .pl-xl-0,.sp-dsgvo .px-xl-0{padding-left:0 !important}.sp-dsgvo .p-xl-1{padding:0.25rem !important}.sp-dsgvo .pt-xl-1,.sp-dsgvo .py-xl-1{padding-top:0.25rem !important}.sp-dsgvo .pr-xl-1,.sp-dsgvo .px-xl-1{padding-right:0.25rem !important}.sp-dsgvo .pb-xl-1,.sp-dsgvo .py-xl-1{padding-bottom:0.25rem !important}.sp-dsgvo .pl-xl-1,.sp-dsgvo .px-xl-1{padding-left:0.25rem !important}.sp-dsgvo .p-xl-2{padding:0.5rem !important}.sp-dsgvo .pt-xl-2,.sp-dsgvo .py-xl-2{padding-top:0.5rem !important}.sp-dsgvo .pr-xl-2,.sp-dsgvo .px-xl-2{padding-right:0.5rem !important}.sp-dsgvo .pb-xl-2,.sp-dsgvo .py-xl-2{padding-bottom:0.5rem !important}.sp-dsgvo .pl-xl-2,.sp-dsgvo .px-xl-2{padding-left:0.5rem !important}.sp-dsgvo .p-xl-3{padding:1rem !important}.sp-dsgvo .pt-xl-3,.sp-dsgvo .py-xl-3{padding-top:1rem !important}.sp-dsgvo .pr-xl-3,.sp-dsgvo .px-xl-3{padding-right:1rem !important}.sp-dsgvo .pb-xl-3,.sp-dsgvo .py-xl-3{padding-bottom:1rem !important}.sp-dsgvo .pl-xl-3,.sp-dsgvo .px-xl-3{padding-left:1rem !important}.sp-dsgvo .p-xl-4{padding:1.5rem !important}.sp-dsgvo .pt-xl-4,.sp-dsgvo .py-xl-4{padding-top:1.5rem !important}.sp-dsgvo .pr-xl-4,.sp-dsgvo .px-xl-4{padding-right:1.5rem !important}.sp-dsgvo .pb-xl-4,.sp-dsgvo .py-xl-4{padding-bottom:1.5rem !important}.sp-dsgvo .pl-xl-4,.sp-dsgvo .px-xl-4{padding-left:1.5rem !important}.sp-dsgvo .p-xl-5{padding:3rem !important}.sp-dsgvo .pt-xl-5,.sp-dsgvo .py-xl-5{padding-top:3rem !important}.sp-dsgvo .pr-xl-5,.sp-dsgvo .px-xl-5{padding-right:3rem !important}.sp-dsgvo .pb-xl-5,.sp-dsgvo .py-xl-5{padding-bottom:3rem !important}.sp-dsgvo .pl-xl-5,.sp-dsgvo .px-xl-5{padding-left:3rem !important}.sp-dsgvo .m-xl-n1{margin:-0.25rem !important}.sp-dsgvo .mt-xl-n1,.sp-dsgvo .my-xl-n1{margin-top:-0.25rem !important}.sp-dsgvo .mr-xl-n1,.sp-dsgvo .mx-xl-n1{margin-right:-0.25rem !important}.sp-dsgvo .mb-xl-n1,.sp-dsgvo .my-xl-n1{margin-bottom:-0.25rem !important}.sp-dsgvo .ml-xl-n1,.sp-dsgvo .mx-xl-n1{margin-left:-0.25rem !important}.sp-dsgvo .m-xl-n2{margin:-0.5rem !important}.sp-dsgvo .mt-xl-n2,.sp-dsgvo .my-xl-n2{margin-top:-0.5rem !important}.sp-dsgvo .mr-xl-n2,.sp-dsgvo .mx-xl-n2{margin-right:-0.5rem !important}.sp-dsgvo .mb-xl-n2,.sp-dsgvo .my-xl-n2{margin-bottom:-0.5rem !important}.sp-dsgvo .ml-xl-n2,.sp-dsgvo .mx-xl-n2{margin-left:-0.5rem !important}.sp-dsgvo .m-xl-n3{margin:-1rem !important}.sp-dsgvo .mt-xl-n3,.sp-dsgvo .my-xl-n3{margin-top:-1rem !important}.sp-dsgvo .mr-xl-n3,.sp-dsgvo .mx-xl-n3{margin-right:-1rem !important}.sp-dsgvo .mb-xl-n3,.sp-dsgvo .my-xl-n3{margin-bottom:-1rem !important}.sp-dsgvo .ml-xl-n3,.sp-dsgvo .mx-xl-n3{margin-left:-1rem !important}.sp-dsgvo .m-xl-n4{margin:-1.5rem !important}.sp-dsgvo .mt-xl-n4,.sp-dsgvo .my-xl-n4{margin-top:-1.5rem !important}.sp-dsgvo .mr-xl-n4,.sp-dsgvo .mx-xl-n4{margin-right:-1.5rem !important}.sp-dsgvo .mb-xl-n4,.sp-dsgvo .my-xl-n4{margin-bottom:-1.5rem !important}.sp-dsgvo .ml-xl-n4,.sp-dsgvo .mx-xl-n4{margin-left:-1.5rem !important}.sp-dsgvo .m-xl-n5{margin:-3rem !important}.sp-dsgvo .mt-xl-n5,.sp-dsgvo .my-xl-n5{margin-top:-3rem !important}.sp-dsgvo .mr-xl-n5,.sp-dsgvo .mx-xl-n5{margin-right:-3rem !important}.sp-dsgvo .mb-xl-n5,.sp-dsgvo .my-xl-n5{margin-bottom:-3rem !important}.sp-dsgvo .ml-xl-n5,.sp-dsgvo .mx-xl-n5{margin-left:-3rem !important}.sp-dsgvo .m-xl-auto{margin:auto !important}.sp-dsgvo .mt-xl-auto,.sp-dsgvo .my-xl-auto{margin-top:auto !important}.sp-dsgvo .mr-xl-auto,.sp-dsgvo .mx-xl-auto{margin-right:auto !important}.sp-dsgvo .mb-xl-auto,.sp-dsgvo .my-xl-auto{margin-bottom:auto !important}.sp-dsgvo .ml-xl-auto,.sp-dsgvo .mx-xl-auto{margin-left:auto !important}}.sp-dsgvo .text-monospace{font-family:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important}.sp-dsgvo .text-justify{text-align:justify !important}.sp-dsgvo .text-wrap{white-space:normal !important}.sp-dsgvo .text-nowrap{white-space:nowrap !important}.sp-dsgvo .text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sp-dsgvo .text-left{text-align:left !important}.sp-dsgvo .text-right{text-align:right !important}.sp-dsgvo .text-center{text-align:center !important}@media (min-width: 576px){.sp-dsgvo .text-sm-left{text-align:left !important}.sp-dsgvo .text-sm-right{text-align:right !important}.sp-dsgvo .text-sm-center{text-align:center !important}}@media (min-width: 768px){.sp-dsgvo .text-md-left{text-align:left !important}.sp-dsgvo .text-md-right{text-align:right !important}.sp-dsgvo .text-md-center{text-align:center !important}}@media (min-width: 992px){.sp-dsgvo .text-lg-left{text-align:left !important}.sp-dsgvo .text-lg-right{text-align:right !important}.sp-dsgvo .text-lg-center{text-align:center !important}}@media (min-width: 1200px){.sp-dsgvo .text-xl-left{text-align:left !important}.sp-dsgvo .text-xl-right{text-align:right !important}.sp-dsgvo .text-xl-center{text-align:center !important}}.sp-dsgvo .text-lowercase{text-transform:lowercase !important}.sp-dsgvo .text-uppercase{text-transform:uppercase !important}.sp-dsgvo .text-capitalize{text-transform:capitalize !important}.sp-dsgvo .font-weight-light{font-weight:300 !important}.sp-dsgvo .font-weight-lighter{font-weight:lighter !important}.sp-dsgvo .font-weight-normal{font-weight:400 !important}.sp-dsgvo .font-weight-bold{font-weight:700 !important}.sp-dsgvo .font-weight-bolder{font-weight:bolder !important}.sp-dsgvo .font-italic{font-style:italic !important}.sp-dsgvo .text-white{color:#fff !important}.sp-dsgvo .text-primary{color:#008cba !important}.sp-dsgvo a.text-primary:hover,.sp-dsgvo a.text-primary:focus{color:#00526e !important}.sp-dsgvo .text-secondary{color:#eee !important}.sp-dsgvo a.text-secondary:hover,.sp-dsgvo a.text-secondary:focus{color:#c8c8c8 !important}.sp-dsgvo .text-success{color:#43ac6a !important}.sp-dsgvo a.text-success:hover,.sp-dsgvo a.text-success:focus{color:#2e7548 !important}.sp-dsgvo .text-info{color:#5bc0de !important}.sp-dsgvo a.text-info:hover,.sp-dsgvo a.text-info:focus{color:#28a1c5 !important}.sp-dsgvo .text-warning{color:#E99002 !important}.sp-dsgvo a.text-warning:hover,.sp-dsgvo a.text-warning:focus{color:#9d6101 !important}.sp-dsgvo .text-danger{color:#F04124 !important}.sp-dsgvo a.text-danger:hover,.sp-dsgvo a.text-danger:focus{color:#bb260d !important}.sp-dsgvo .text-light{color:#eee !important}.sp-dsgvo a.text-light:hover,.sp-dsgvo a.text-light:focus{color:#c8c8c8 !important}.sp-dsgvo .text-dark{color:#222 !important}.sp-dsgvo a.text-dark:hover,.sp-dsgvo a.text-dark:focus{color:black !important}.sp-dsgvo .text-body{color:#222 !important}.sp-dsgvo .text-muted{color:#888 !important}.sp-dsgvo .text-black-50{color:rgba(0,0,0,0.5) !important}.sp-dsgvo .text-white-50{color:rgba(255,255,255,0.5) !important}.sp-dsgvo .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.sp-dsgvo .text-decoration-none{text-decoration:none !important}.sp-dsgvo .text-break{word-break:break-word !important;overflow-wrap:break-word !important}.sp-dsgvo .text-reset{color:inherit !important}.sp-dsgvo .visible{visibility:visible !important}.sp-dsgvo .invisible{visibility:hidden !important}@media print{.sp-dsgvo *,.sp-dsgvo *::before,.sp-dsgvo *::after{text-shadow:none !important;-webkit-box-shadow:none !important;box-shadow:none !important}.sp-dsgvo a:not(.btn){text-decoration:underline}.sp-dsgvo abbr[title]::after{content:" (" attr(title) ")"}.sp-dsgvo pre{white-space:pre-wrap !important}.sp-dsgvo pre,.sp-dsgvo blockquote{border:1px solid #adb5bd;page-break-inside:avoid}.sp-dsgvo thead{display:table-header-group}.sp-dsgvo tr,.sp-dsgvo img{page-break-inside:avoid}.sp-dsgvo p,.sp-dsgvo h2,.sp-dsgvo h3{orphans:3;widows:3}.sp-dsgvo h2,.sp-dsgvo h3{page-break-after:avoid}@page{.sp-dsgvo{size:a3}}.sp-dsgvo body{min-width:992px !important}.sp-dsgvo .container{min-width:992px !important}.sp-dsgvo .navbar{display:none}.sp-dsgvo .badge{border:1px solid #000}.sp-dsgvo .table{border-collapse:collapse !important}.sp-dsgvo .table td,.sp-dsgvo .table th{background-color:#fff !important}.sp-dsgvo .table-bordered th,.sp-dsgvo .table-bordered td{border:1px solid #dee2e6 !important}.sp-dsgvo .table-dark{color:inherit}.sp-dsgvo .table-dark th,.sp-dsgvo .table-dark td,.sp-dsgvo .table-dark thead th,.sp-dsgvo .table-dark tbody+tbody{border-color:#dee2e6}.sp-dsgvo .table .thead-dark th{color:inherit;border-color:#dee2e6}}.sp-dsgvo .navbar{font-size:0.8203125rem;font-weight:300}.sp-dsgvo .bg-primary .dropdown-menu{background-color:#008cba}.sp-dsgvo .bg-primary .dropdown-menu .dropdown-item,.sp-dsgvo .bg-primary .dropdown-menu .dropdown-item:focus{color:rgba(255,255,255,0.7)}.sp-dsgvo .bg-primary .dropdown-menu .dropdown-item.active,.sp-dsgvo .bg-primary .dropdown-menu .dropdown-item:hover,.sp-dsgvo .bg-primary .dropdown-menu .dropdown-item:focus{background-color:#0079a1;color:#fff}.sp-dsgvo .bg-dark{background-color:#333 !important}.sp-dsgvo .bg-dark .dropdown-menu{background-color:#333}.sp-dsgvo .bg-dark .dropdown-menu .dropdown-item,.sp-dsgvo .bg-dark .dropdown-menu .dropdown-item:focus{color:rgba(255,255,255,0.7)}.sp-dsgvo .bg-dark .dropdown-menu .dropdown-item.active,.sp-dsgvo .bg-dark .dropdown-menu .dropdown-item:hover,.sp-dsgvo .bg-dark .dropdown-menu .dropdown-item:focus{background-color:#262626;color:#fff}.sp-dsgvo .bg-light .dropdown-menu{background-color:#eee}.sp-dsgvo .bg-light .dropdown-menu .dropdown-item,.sp-dsgvo .bg-light .dropdown-menu .dropdown-item:focus{color:rgba(0,0,0,0.5)}.sp-dsgvo .bg-light .dropdown-menu .dropdown-item.active,.sp-dsgvo .bg-light .dropdown-menu .dropdown-item:hover,.sp-dsgvo .bg-light .dropdown-menu .dropdown-item:focus{background-color:#fbfbfb;color:rgba(0,0,0,0.7)}.sp-dsgvo .btn-primary{border-color:#0079a1}.sp-dsgvo .btn-secondary{border-color:#e1e1e1}.sp-dsgvo .btn-success{border-color:#3c9a5f}.sp-dsgvo .btn-info{border-color:#46b8da;color:#fff}.sp-dsgvo .btn-danger{border-color:#ea2f10}.sp-dsgvo .btn-warning{border-color:#d08002;color:#fff}.sp-dsgvo .btn-light{border-color:#e1e1e1}.sp-dsgvo .btn-dark{border-color:#151515}.sp-dsgvo .btn-group .dropdown-menu{border-top-width:0}.sp-dsgvo .btn-group .dropdown-toggle.btn-primary ~ .dropdown-menu{background-color:#008cba;border-color:#0079a1}.sp-dsgvo .btn-group .dropdown-toggle.btn-primary ~ .dropdown-menu .dropdown-item{color:#fff}.sp-dsgvo .btn-group .dropdown-toggle.btn-primary ~ .dropdown-menu .dropdown-item:hover,.sp-dsgvo .btn-group .dropdown-toggle.btn-primary ~ .dropdown-menu .dropdown-item:focus{background-color:#006d91}.sp-dsgvo .btn-group .dropdown-toggle.btn-secondary ~ .dropdown-menu{background-color:#eee;border-color:#e1e1e1}.sp-dsgvo .btn-group .dropdown-toggle.btn-secondary ~ .dropdown-menu .dropdown-item{color:#fff}.sp-dsgvo .btn-group .dropdown-toggle.btn-secondary ~ .dropdown-menu .dropdown-item:hover,.sp-dsgvo .btn-group .dropdown-toggle.btn-secondary ~ .dropdown-menu .dropdown-item:focus{background-color:#dadada}.sp-dsgvo .btn-group .dropdown-toggle.btn-success ~ .dropdown-menu{background-color:#43ac6a;border-color:#3c9a5f}.sp-dsgvo .btn-group .dropdown-toggle.btn-success ~ .dropdown-menu .dropdown-item{color:#fff}.sp-dsgvo .btn-group .dropdown-toggle.btn-success ~ .dropdown-menu .dropdown-item:hover,.sp-dsgvo .btn-group .dropdown-toggle.btn-success ~ .dropdown-menu .dropdown-item:focus{background-color:#388f58}.sp-dsgvo .btn-group .dropdown-toggle.btn-info ~ .dropdown-menu{background-color:#5bc0de;border-color:#46b8da}.sp-dsgvo .btn-group .dropdown-toggle.btn-info ~ .dropdown-menu .dropdown-item{color:#fff}.sp-dsgvo .btn-group .dropdown-toggle.btn-info ~ .dropdown-menu .dropdown-item:hover,.sp-dsgvo .btn-group .dropdown-toggle.btn-info ~ .dropdown-menu .dropdown-item:focus{background-color:#39b3d7}.sp-dsgvo .btn-group .dropdown-toggle.btn-warning ~ .dropdown-menu{background-color:#E99002;border-color:#d08002}.sp-dsgvo .btn-group .dropdown-toggle.btn-warning ~ .dropdown-menu .dropdown-item{color:#fff}.sp-dsgvo .btn-group .dropdown-toggle.btn-warning ~ .dropdown-menu .dropdown-item:hover,.sp-dsgvo .btn-group .dropdown-toggle.btn-warning ~ .dropdown-menu .dropdown-item:focus{background-color:#c17702}.sp-dsgvo .btn-group .dropdown-toggle.btn-danger ~ .dropdown-menu{background-color:#F04124;border-color:#0079a1}.sp-dsgvo .btn-group .dropdown-toggle.btn-danger ~ .dropdown-menu .dropdown-item{color:#fff}.sp-dsgvo .btn-group .dropdown-toggle.btn-danger ~ .dropdown-menu .dropdown-item:hover,.sp-dsgvo .btn-group .dropdown-toggle.btn-danger ~ .dropdown-menu .dropdown-item:focus{background-color:#dc2c0f}.sp-dsgvo .text-secondary{color:#495057 !important}.sp-dsgvo .blockquote-footer{color:#888}.sp-dsgvo table{font-size:0.8203125rem}.sp-dsgvo .table-primary,.sp-dsgvo .table-success,.sp-dsgvo .table-info,.sp-dsgvo .table-warning,.sp-dsgvo .table-danger{color:#fff}.sp-dsgvo .table-primary,.sp-dsgvo .table-primary>th,.sp-dsgvo .table-primary>td{background-color:#008cba}.sp-dsgvo .table-secondary,.sp-dsgvo .table-secondary>th,.sp-dsgvo .table-secondary>td{background-color:#eee}.sp-dsgvo .table-light,.sp-dsgvo .table-light>th,.sp-dsgvo .table-light>td{background-color:#eee}.sp-dsgvo .table-dark,.sp-dsgvo .table-dark>th,.sp-dsgvo .table-dark>td{background-color:#222}.sp-dsgvo .table-success,.sp-dsgvo .table-success>th,.sp-dsgvo .table-success>td{background-color:#43ac6a}.sp-dsgvo .table-info,.sp-dsgvo .table-info>th,.sp-dsgvo .table-info>td{background-color:#5bc0de}.sp-dsgvo .table-danger,.sp-dsgvo .table-danger>th,.sp-dsgvo .table-danger>td{background-color:#F04124}.sp-dsgvo .table-warning,.sp-dsgvo .table-warning>th,.sp-dsgvo .table-warning>td{background-color:#E99002}.sp-dsgvo .table-active,.sp-dsgvo .table-active>th,.sp-dsgvo .table-active>td{background-color:rgba(0,0,0,0.075)}.sp-dsgvo .table-hover .table-primary:hover,.sp-dsgvo .table-hover .table-primary:hover>th,.sp-dsgvo .table-hover .table-primary:hover>td{background-color:#0079a1}.sp-dsgvo .table-hover .table-secondary:hover,.sp-dsgvo .table-hover .table-secondary:hover>th,.sp-dsgvo .table-hover .table-secondary:hover>td{background-color:#e1e1e1}.sp-dsgvo .table-hover .table-light:hover,.sp-dsgvo .table-hover .table-light:hover>th,.sp-dsgvo .table-hover .table-light:hover>td{background-color:#e1e1e1}.sp-dsgvo .table-hover .table-dark:hover,.sp-dsgvo .table-hover .table-dark:hover>th,.sp-dsgvo .table-hover .table-dark:hover>td{background-color:#151515}.sp-dsgvo .table-hover .table-success:hover,.sp-dsgvo .table-hover .table-success:hover>th,.sp-dsgvo .table-hover .table-success:hover>td{background-color:#3c9a5f}.sp-dsgvo .table-hover .table-info:hover,.sp-dsgvo .table-hover .table-info:hover>th,.sp-dsgvo .table-hover .table-info:hover>td{background-color:#46b8da}.sp-dsgvo .table-hover .table-danger:hover,.sp-dsgvo .table-hover .table-danger:hover>th,.sp-dsgvo .table-hover .table-danger:hover>td{background-color:#ea2f10}.sp-dsgvo .table-hover .table-warning:hover,.sp-dsgvo .table-hover .table-warning:hover>th,.sp-dsgvo .table-hover .table-warning:hover>td{background-color:#d08002}.sp-dsgvo .table-hover .table-active:hover,.sp-dsgvo .table-hover .table-active:hover>th,.sp-dsgvo .table-hover .table-active:hover>td{background-color:rgba(0,0,0,0.075)}.sp-dsgvo label,.sp-dsgvo .control-label,.sp-dsgvo .help-block,.sp-dsgvo .checkbox,.sp-dsgvo .radio,.sp-dsgvo .form-control-feedback{font-size:0.8203125rem}.sp-dsgvo .dropdown-item{padding-top:0.75rem;padding-bottom:0.75rem;font-size:0.8203125rem;font-weight:300}.sp-dsgvo .nav-tabs .nav-link,.sp-dsgvo .nav-tabs .nav-link.disabled,.sp-dsgvo .nav-tabs .nav-link.disabled:hover,.sp-dsgvo .nav-tabs .nav-link.disabled:focus{border-color:rgba(0,0,0,0.1);background-color:#eee}.sp-dsgvo .nav-tabs .nav-link:hover,.sp-dsgvo .nav-tabs .nav-link:focus{background-color:#fbfbfb}.sp-dsgvo .nav-pills .active{border:1px solid #0079a1}.sp-dsgvo .breadcrumb{border:1px solid rgba(0,0,0,0.1);border-radius:3px;font-size:0.8203125rem;font-weight:300;text-transform:uppercase}.sp-dsgvo .pagination{font-weight:300}.sp-dsgvo .pagination .page-link{border-color:transparent;border-radius:3px;margin-left:0.1em;margin-right:0.1em}.sp-dsgvo .pagination .page-link:hover,.sp-dsgvo .pagination .page-link:focus{text-decoration:none}.sp-dsgvo .pagination .page-item.disabled .page-link{border-color:transparent}.sp-dsgvo .pagination .page-item:first-child .page-link,.sp-dsgvo .pagination .page-item:last-child .page-link,.sp-dsgvo .pagination-lg .page-item:first-child .page-link,.sp-dsgvo .pagination-lg .page-item:last-child .page-link,.sp-dsgvo .pagination-sm .page-item:first-child .page-link,.sp-dsgvo .pagination-sm .page-item:last-child .page-link{border-radius:3px}.sp-dsgvo .list-group{font-size:0.8203125rem;font-weight:300}.sp-dsgvo .close{opacity:0.6;text-shadow:none}.sp-dsgvo .close:hover,.sp-dsgvo .close:focus{opacity:1}.sp-dsgvo .alert{font-size:0.8203125rem;font-weight:300;color:#fff}.sp-dsgvo .alert-primary,.sp-dsgvo .alert-primary>th,.sp-dsgvo .alert-primary>td{background-color:#008cba}.sp-dsgvo .alert-secondary,.sp-dsgvo .alert-secondary>th,.sp-dsgvo .alert-secondary>td{background-color:#eee}.sp-dsgvo .alert-success,.sp-dsgvo .alert-success>th,.sp-dsgvo .alert-success>td{background-color:#43ac6a}.sp-dsgvo .alert-info,.sp-dsgvo .alert-info>th,.sp-dsgvo .alert-info>td{background-color:#5bc0de}.sp-dsgvo .alert-danger,.sp-dsgvo .alert-danger>th,.sp-dsgvo .alert-danger>td{background-color:#F04124}.sp-dsgvo .alert-warning,.sp-dsgvo .alert-warning>th,.sp-dsgvo .alert-warning>td{background-color:#E99002}.sp-dsgvo .alert-dark,.sp-dsgvo .alert-dark>th,.sp-dsgvo .alert-dark>td{background-color:#222}.sp-dsgvo .alert-light,.sp-dsgvo .alert-light>th,.sp-dsgvo .alert-light>td{background-color:#eee}.sp-dsgvo .alert .alert-link{font-weight:normal;color:#fff;text-decoration:underline}.sp-dsgvo .alert-secondary,.sp-dsgvo .alert-secondary a:not(.btn),.sp-dsgvo .alert-secondary .alert-link,.sp-dsgvo .alert-light,.sp-dsgvo .alert-light a:not(.btn),.sp-dsgvo .alert-light .alert-link{color:#222}.sp-dsgvo .badge{padding-bottom:.3em}.sp-dsgvo .badge-warning,.sp-dsgvo .badge-info{color:#fff}.sp-dsgvo .progress[value]{height:22px;padding:2px;background-color:#f6f6f6;border:1px solid #ccc}.sp-dsgvo .popover-header{border-top-left-radius:0;border-top-right-radius:0}
|
admin/css/fonts/open-sans/opensans-bold-webfont.woff2
ADDED
Binary file
|
admin/css/fonts/open-sans/opensans-bolditalic-webfont.woff2
ADDED
Binary file
|
admin/css/fonts/open-sans/opensans-italic-webfont.woff2
ADDED
Binary file
|
admin/css/fonts/open-sans/opensans-light-webfont.woff2
ADDED
Binary file
|
admin/css/fonts/open-sans/opensans-lightitalic-webfont.woff2
ADDED
Binary file
|
admin/css/fonts/open-sans/opensans-regular-webfont.woff2
ADDED
Binary file
|
admin/css/fonts/open-sans/opensans-semibold-webfont.woff2
ADDED
Binary file
|
admin/css/fonts/open-sans/opensans-semibolditalic-webfont.woff2
ADDED
Binary file
|
admin/css/sp-dsgvo-admin.css
CHANGED
@@ -1,159 +1,585 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
}
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
.
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
}
|
1 |
+
/* latin */
|
2 |
+
@font-face {
|
3 |
+
font-family: 'Open Sans';
|
4 |
+
font-style: italic;
|
5 |
+
font-weight: 300;
|
6 |
+
src: local('Open Sans Light Italic'),
|
7 |
+
local('OpenSans-LightItalic'),
|
8 |
+
url(fonts/open-sans/opensans-lightitalic-webfont.woff2) format('woff2');
|
9 |
+
|
10 |
+
}
|
11 |
+
|
12 |
+
/* latin */
|
13 |
+
@font-face {
|
14 |
+
font-family: 'Open Sans';
|
15 |
+
font-style: italic;
|
16 |
+
font-weight: 400;
|
17 |
+
src: local('Open Sans Italic'),
|
18 |
+
local('OpenSans-Italic'),
|
19 |
+
url(fonts/open-sans/opensans-italic-webfont.woff2) format('woff2');
|
20 |
+
}
|
21 |
+
|
22 |
+
/* latin */
|
23 |
+
@font-face {
|
24 |
+
font-family: 'Open Sans';
|
25 |
+
font-style: italic;
|
26 |
+
font-weight: 700;
|
27 |
+
src: local('Open Sans Bold Italic'),
|
28 |
+
local('OpenSans-BoldItalic'),
|
29 |
+
url(fonts/open-sans/opensans-bolditalic-webfont.woff2) format('woff2');
|
30 |
+
}
|
31 |
+
|
32 |
+
/* latin */
|
33 |
+
@font-face {
|
34 |
+
font-family: 'Open Sans';
|
35 |
+
font-style: normal;
|
36 |
+
font-weight: 300;
|
37 |
+
src: local('Open Sans Light'),
|
38 |
+
local('OpenSans-Light'),
|
39 |
+
url(fonts/open-sans/opensans-light-webfont.woff2) format('woff2');
|
40 |
+
}
|
41 |
+
|
42 |
+
/* latin */
|
43 |
+
@font-face {
|
44 |
+
font-family: 'Open Sans';
|
45 |
+
font-style: normal;
|
46 |
+
font-weight: 400;
|
47 |
+
src: local('Open Sans Regular'),
|
48 |
+
local('OpenSans-Regular'),
|
49 |
+
url(fonts/open-sans/opensans-regular-webfont.woff2) format('woff2');
|
50 |
+
}
|
51 |
+
|
52 |
+
/* latin */
|
53 |
+
@font-face {
|
54 |
+
font-family: 'Open Sans';
|
55 |
+
font-style: normal;
|
56 |
+
font-weight: 700;
|
57 |
+
src: local('Open Sans Bold'),
|
58 |
+
local('OpenSans-Bold'),
|
59 |
+
url(fonts/open-sans/opensans-bold-webfont.woff2) format('woff2');
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* All of the CSS for your admin-specific functionality should be
|
64 |
+
* included in this file.
|
65 |
+
*/
|
66 |
+
|
67 |
+
.sp-dsgvo {
|
68 |
+
font-family: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
69 |
+
}
|
70 |
+
|
71 |
+
/* bootstrap overrides */
|
72 |
+
.sp-dsgvo .breadcrumb
|
73 |
+
{
|
74 |
+
margin-left: 0 !important;
|
75 |
+
margin-bottom: 0 !important;
|
76 |
+
font-weight: 500 !important;
|
77 |
+
}
|
78 |
+
|
79 |
+
.sp-dsgvo .card {
|
80 |
+
padding: 0;
|
81 |
+
}
|
82 |
+
.sp-dsgvo h4.card-title{
|
83 |
+
margin-bottom: 0;
|
84 |
+
}
|
85 |
+
|
86 |
+
.sp-dsgvo label {
|
87 |
+
font-weight: 500 !important;
|
88 |
+
}
|
89 |
+
|
90 |
+
.sp-dsgvo .custom-control-label {
|
91 |
+
font-weight: 400 !important;
|
92 |
+
}
|
93 |
+
|
94 |
+
.sp-dsgvo select
|
95 |
+
{
|
96 |
+
max-width: initial;
|
97 |
+
}
|
98 |
+
|
99 |
+
@media (min-width: 576px) {
|
100 |
+
.sp-dsgvo .card-columns {
|
101 |
+
-webkit-column-count: 2;
|
102 |
+
column-count: 2;
|
103 |
+
-webkit-column-gap: 1rem;
|
104 |
+
column-gap: 1rem;
|
105 |
+
orphans: 1;
|
106 |
+
widows: 1;
|
107 |
+
}
|
108 |
+
}
|
109 |
+
|
110 |
+
.sp-dsgvo .form-control-plaintext {
|
111 |
+
-webkit-box-shadow: none;
|
112 |
+
-moz-box-shadow: none;
|
113 |
+
box-shadow: none;
|
114 |
+
}
|
115 |
+
/* bootstrap overrides end */
|
116 |
+
|
117 |
+
|
118 |
+
|
119 |
+
|
120 |
+
hr.sp-dsgvo {
|
121 |
+
border: 0;
|
122 |
+
margin-top: 20px;
|
123 |
+
border-top: 1px solid #bbb;
|
124 |
+
border-bottom: 1px solid #fafafa;
|
125 |
+
}
|
126 |
+
|
127 |
+
.dsgvo-wrap {
|
128 |
+
/* background-color: white; */
|
129 |
+
/*padding-left: 15px; */
|
130 |
+
/*padding-right: 15px;*/
|
131 |
+
float: left;
|
132 |
+
width: calc(100% - 310px);
|
133 |
+
|
134 |
+
}
|
135 |
+
|
136 |
+
.dsgvo-wrap .form-table {
|
137 |
+
margin-top: 0;
|
138 |
+
}
|
139 |
+
|
140 |
+
|
141 |
+
.w-100 {
|
142 |
+
width: 100%;
|
143 |
+
}
|
144 |
+
|
145 |
+
.position-relative {
|
146 |
+
position: relative;
|
147 |
+
}
|
148 |
+
|
149 |
+
.sp-dsgvo-overlay {
|
150 |
+
position: absolute;
|
151 |
+
top: 0;
|
152 |
+
left: 0;
|
153 |
+
width: 100%;
|
154 |
+
height: 100%;
|
155 |
+
background-color: rgba(0, 0, 0, 0.5) !important;
|
156 |
+
border-radius: 2px;
|
157 |
+
z-index: 20;
|
158 |
+
}
|
159 |
+
|
160 |
+
.sp-dsgvo-overlay-text {
|
161 |
+
position: absolute;
|
162 |
+
top: 50%;
|
163 |
+
left: 50%;
|
164 |
+
text-align: center;
|
165 |
+
font-size: 14px;
|
166 |
+
color: white;
|
167 |
+
background-color: #ffffff;
|
168 |
+
opacity: 0.9;
|
169 |
+
border-radius: 3px;
|
170 |
+
border: 1px solid orange;
|
171 |
+
transform: translate(-50%, -50%);
|
172 |
+
-ms-transform: translate(-50%, -50%);
|
173 |
+
}
|
174 |
+
|
175 |
+
.woo-privacy-text {
|
176 |
+
width: 100%;
|
177 |
+
}
|
178 |
+
|
179 |
+
textarea.own-code-text {
|
180 |
+
font-size: 12px !important;
|
181 |
+
font-family: Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,sans-serif !important;
|
182 |
+
}
|
183 |
+
|
184 |
+
.unsubscribe-dismiss {
|
185 |
+
cursor: pointer;
|
186 |
+
}
|
187 |
+
|
188 |
+
.unsubscribe-dismiss line {
|
189 |
+
stroke: #000000;
|
190 |
+
stroke-width: 2px;
|
191 |
+
}
|
192 |
+
|
193 |
+
.form-table td {
|
194 |
+
vertical-align: top;
|
195 |
+
}
|
196 |
+
|
197 |
+
.form-table tbody {
|
198 |
+
display: table;
|
199 |
+
width: 100%;
|
200 |
+
}
|
201 |
+
|
202 |
+
/* p912419 */
|
203 |
+
|
204 |
+
|
205 |
+
/* slider checkboxes */
|
206 |
+
.wrap.dsgvo-wrap .main-title {
|
207 |
+
/*display: flex;*/
|
208 |
+
justify-content: left;
|
209 |
+
align-items: center;
|
210 |
+
}
|
211 |
+
|
212 |
+
.wrap.dsgvo-wrap .main-title h2 {
|
213 |
+
font-size: 200%;
|
214 |
+
margin-top: 0.8em;
|
215 |
+
margin-bottom: 0.8em;
|
216 |
+
padding-top: 5px;
|
217 |
+
}
|
218 |
+
|
219 |
+
.wrap.dsgvo-wrap .main-title > img {
|
220 |
+
width: 30px;
|
221 |
+
margin-right: 10px;
|
222 |
+
float: left;
|
223 |
+
}
|
224 |
+
|
225 |
+
.wrap.dsgvo-wrap input[type="checkbox"]:not(.checkbox) {
|
226 |
+
width: 3.5em;
|
227 |
+
height: 2em;
|
228 |
+
border-radius: 3em;
|
229 |
+
position: relative;
|
230 |
+
cursor: pointer;
|
231 |
+
outline: none;
|
232 |
+
-webkit-transition: all .2s ease-in-out;
|
233 |
+
transition: all .2s ease-in-out;
|
234 |
+
}
|
235 |
+
|
236 |
+
.wrap.dsgvo-wrap input[type=checkbox]:not(.checkbox):before {
|
237 |
+
display: none;
|
238 |
+
}
|
239 |
+
|
240 |
+
.wrap.dsgvo-wrap input[type=checkbox]:not(.checkbox):after {
|
241 |
+
position: absolute;
|
242 |
+
content: "";
|
243 |
+
width: 1em;
|
244 |
+
height: 1em;
|
245 |
+
border-radius: 50%;
|
246 |
+
background: #f0f0f0;
|
247 |
+
-webkit-box-shadow: 0 0 0.25em rgba(0, 0, 0, .3);
|
248 |
+
box-shadow: 0 0 0.25em rgba(0, 0, 0, .3);
|
249 |
+
-webkit-transform: scale(.7);
|
250 |
+
transform: scale(.7);
|
251 |
+
left: 0;
|
252 |
+
-webkit-transition: all .2s ease-in-out;
|
253 |
+
transition: all .2s ease-in-out;
|
254 |
+
top: 22%;
|
255 |
+
}
|
256 |
+
|
257 |
+
.wrap.dsgvo-wrap input[type=checkbox]:not(.checkbox):checked:after {
|
258 |
+
left: calc(100% - 2em);
|
259 |
+
background: #0085ba;
|
260 |
+
width: 2em;
|
261 |
+
height: 2em;
|
262 |
+
top: 0;
|
263 |
+
}
|
264 |
+
|
265 |
+
.wrap.dsgvo-wrap .module-title {
|
266 |
+
/*background-color: #122459;*/
|
267 |
+
background: rgb(18, 36, 89);
|
268 |
+
background: linear-gradient(90deg, rgba(18, 36, 89, 1) 0%, rgba(241, 241, 241, 1) 70%);
|
269 |
+
padding-left: 5px;
|
270 |
+
padding-top: 10px;
|
271 |
+
padding-bottom: 10px;
|
272 |
+
font-weight: bold;
|
273 |
+
color: #ffffff;
|
274 |
+
border-radius: 0.2rem;
|
275 |
+
text-transform: uppercase;
|
276 |
+
margin-bottom: 10px;
|
277 |
+
}
|
278 |
+
|
279 |
+
/* design layout changes */
|
280 |
+
.wpk-main-design--margin-bottom {
|
281 |
+
margin-bottom: 20px;
|
282 |
+
}
|
283 |
+
|
284 |
+
.wpk-main-design--margin-top {
|
285 |
+
margin-top: 20px;
|
286 |
+
}
|
287 |
+
|
288 |
+
.wpk-main-design--one-table {
|
289 |
+
display: block;
|
290 |
+
width: 100%;
|
291 |
+
background-color: #ffffff;
|
292 |
+
box-sizing: border-box;
|
293 |
+
padding: 15px;
|
294 |
+
/*box-shadow: 0 1px 5px;*/
|
295 |
+
border-radius: 0.2rem;
|
296 |
+
}
|
297 |
+
|
298 |
+
.wpk-main-design--one-table_special {
|
299 |
+
width: 100%;
|
300 |
+
box-sizing: border-box;
|
301 |
+
padding: 15px;
|
302 |
+
/*box-shadow: 0 1px 5px !important;*/
|
303 |
+
border-radius: 0.2rem;
|
304 |
+
}
|
305 |
+
|
306 |
+
.wpk-main-design--two-table__left {
|
307 |
+
display: inline-block;
|
308 |
+
width: calc(50% - 10px);
|
309 |
+
box-sizing: border-box;
|
310 |
+
padding: 15px;
|
311 |
+
margin-right: 10px;
|
312 |
+
margin-bottom: 10px;
|
313 |
+
background: #ffffff;
|
314 |
+
/*box-shadow: 0 1px 5px;*/
|
315 |
+
border-radius: 0.2rem;
|
316 |
+
float:left;
|
317 |
+
}
|
318 |
+
|
319 |
+
.wpk-main-design--two-table__right {
|
320 |
+
display: inline-block;
|
321 |
+
float: left;
|
322 |
+
width: calc(50% - 10px);
|
323 |
+
box-sizing: border-box;
|
324 |
+
padding: 15px;
|
325 |
+
margin-bottom: 10px;
|
326 |
+
background: #ffffff;
|
327 |
+
border-radius: 0.2rem;
|
328 |
+
/*box-shadow: 0 1px 5px;*/
|
329 |
+
}
|
330 |
+
|
331 |
+
.wpk-main-design--one-table th, .wpk-main-design--one-table_special th, .wpk-main-design--two-table__left th, .wpk-main-design--two-table__right th,
|
332 |
+
.wpk-main-design--one-table thead tr th, .wpk-main-design--one-table_special thead tr th, .wpk-main-design--two-table__left thead tr th, .wpk-main-design--two-table__right thead tr th {
|
333 |
+
background-color: #122459;
|
334 |
+
border-radius: 0.2rem;
|
335 |
+
text-align: center;
|
336 |
+
color: white;
|
337 |
+
text-transform: uppercase;
|
338 |
+
}
|
339 |
+
|
340 |
+
.wpk-main-design--one-table input[type="text"],
|
341 |
+
.wpk-main-design--one-table_special input[type="text"],
|
342 |
+
.wpk-main-design--two-table__left input[type="text"],
|
343 |
+
.wpk-main-design--two-table__right input[type="text"],
|
344 |
+
.input-w100 input[type="text"] {
|
345 |
+
width: 100%;
|
346 |
+
}
|
347 |
+
|
348 |
+
.wpk-main-design--one-table select,
|
349 |
+
.wpk-main-design--one-table_special select,
|
350 |
+
.wpk-main-design--two-table__left select,
|
351 |
+
.wpk-main-design--two-table__right select {
|
352 |
+
width: 100%;
|
353 |
+
}
|
354 |
+
|
355 |
+
.wpk-main-design--submit {
|
356 |
+
width: 100%;
|
357 |
+
display: inline-block;
|
358 |
+
}
|
359 |
+
|
360 |
+
/* Advanced Cookie Styles */
|
361 |
+
.cookie-notive-settings-advanced tbody {
|
362 |
+
display: block;
|
363 |
+
}
|
364 |
+
|
365 |
+
.cookie-notive-settings-advanced tbody tr {
|
366 |
+
width: 100%;
|
367 |
+
box-sizing: border-box;
|
368 |
+
}
|
369 |
+
|
370 |
+
.cn_advanced_cookie_textarea {
|
371 |
+
display: block;
|
372 |
+
padding: 0 35px;
|
373 |
+
}
|
374 |
+
|
375 |
+
.cn_advanced_cookie_textarea td {
|
376 |
+
width: 49%;
|
377 |
+
display: inline-block;
|
378 |
+
}
|
379 |
+
|
380 |
+
/* cookie styles admin css */
|
381 |
+
img[class*="cookie-style-admin-show--"] {
|
382 |
+
width: 100%;
|
383 |
+
box-shadow: 0px 0 5px;
|
384 |
+
display: none;
|
385 |
+
}
|
386 |
+
|
387 |
+
.wpk-admin-cookie-scan-done {
|
388 |
+
color: green;
|
389 |
+
}
|
390 |
+
|
391 |
+
|
392 |
+
/* responsive */
|
393 |
+
input[name="dsgvo_licence"] {
|
394 |
+
width: 200px;
|
395 |
+
}
|
396 |
+
|
397 |
+
.wpk-company-data > tbody > tr > td > label > input[type="text"],
|
398 |
+
input[name="cn_button_text_ok"],
|
399 |
+
input[name="cn_button_text_cancel"],
|
400 |
+
input[name="cn_decline_target_url"],
|
401 |
+
input[name="cn_button_text_more"] {
|
402 |
+
width: 100%;
|
403 |
+
}
|
404 |
+
|
405 |
+
input[name="sar_dsgvo_accepted_text"],
|
406 |
+
input[name="su_dsgvo_accepted_text"] {
|
407 |
+
width: 550px;
|
408 |
+
}
|
409 |
+
|
410 |
+
.spdsgvo-d-none
|
411 |
+
{
|
412 |
+
display: none;
|
413 |
+
}
|
414 |
+
.spdsgvo-d-block
|
415 |
+
{
|
416 |
+
display: block;
|
417 |
+
}
|
418 |
+
|
419 |
+
@media only screen and (max-width: 986px) {
|
420 |
+
|
421 |
+
.dsgvo-wrap {
|
422 |
+
width: calc(100% - 50px);
|
423 |
+
}
|
424 |
+
|
425 |
+
.wpk-main-design--two-table__left,
|
426 |
+
.wpk-main-design--two-table__right {
|
427 |
+
width: 100%;
|
428 |
+
}
|
429 |
+
|
430 |
+
/* tabs */
|
431 |
+
.nav-tab-wrapper > a {
|
432 |
+
width: 95%;
|
433 |
+
text-align: center;
|
434 |
+
}
|
435 |
+
|
436 |
+
.dsgvo-wrap {
|
437 |
+
width: calc(100% - 50px);
|
438 |
+
}
|
439 |
+
|
440 |
+
.wpk-main-design--two-table__left,
|
441 |
+
.wpk-main-design--two-table__right {
|
442 |
+
width: 100%;
|
443 |
+
}
|
444 |
+
|
445 |
+
.wpk-main-design--two-table__right {
|
446 |
+
margin-top: 25px;
|
447 |
+
}
|
448 |
+
|
449 |
+
/* common settings */
|
450 |
+
input[name="dsgvo_licence"] {
|
451 |
+
width: 100%;
|
452 |
+
}
|
453 |
+
|
454 |
+
input[name="spdsgvo_comments_checkbox_confirm"],
|
455 |
+
.wpk-company-data > tbody > tr > td > label > input[type="text"] {
|
456 |
+
width: 100% !important;
|
457 |
+
}
|
458 |
+
|
459 |
+
/* subject access request */
|
460 |
+
input[name="sar_dsgvo_accepted_text"] {
|
461 |
+
width: 100%;
|
462 |
+
}
|
463 |
+
|
464 |
+
/* Delete request */
|
465 |
+
input[name="su_dsgvo_accepted_text"] {
|
466 |
+
width: 100%;
|
467 |
+
}
|
468 |
+
}
|
469 |
+
|
470 |
+
/* Responsive fixes services table */
|
471 |
+
|
472 |
+
@media only screen and (max-width: 768px) {
|
473 |
+
.wpk-services-table > thead > tr {
|
474 |
+
display: flex;
|
475 |
+
flex-direction: column;
|
476 |
+
width: 100%;
|
477 |
+
min-width: 275px;
|
478 |
+
}
|
479 |
+
|
480 |
+
.wpk-services-table > thead > tr > th {
|
481 |
+
width: 100% !important;
|
482 |
+
padding: 8px 0;
|
483 |
+
text-align: center;
|
484 |
+
}
|
485 |
+
|
486 |
+
.wpk-services-table > tbody > tr,
|
487 |
+
.wpk-unsub-table > tbody > tr {
|
488 |
+
display: flex;
|
489 |
+
flex-direction: column;
|
490 |
+
width: 100%;
|
491 |
+
min-width: 275px;
|
492 |
+
}
|
493 |
+
|
494 |
+
.wpk-services-table > tbody > tr > td,
|
495 |
+
.wpk-unsub-table > tbody > tr > td {
|
496 |
+
width: 100% !important;
|
497 |
+
text-align: center;
|
498 |
+
padding: 8px 0;
|
499 |
+
}
|
500 |
+
|
501 |
+
.wpk-services-table > tbody > tr > td > input,
|
502 |
+
.wpk-services-table > tbody > tr > td > textarea {
|
503 |
+
text-align: center;
|
504 |
+
}
|
505 |
+
|
506 |
+
.wpk-services-table-name {
|
507 |
+
font-weight: bold;
|
508 |
+
display: block;
|
509 |
+
}
|
510 |
+
|
511 |
+
.wpk-services-table > tfoot,
|
512 |
+
.wpk-services-table > thead,
|
513 |
+
.wpk-unsub-table > thead,
|
514 |
+
.wpk-unsub-table > tfoot {
|
515 |
+
display: none;
|
516 |
+
}
|
517 |
+
}
|
518 |
+
|
519 |
+
|
520 |
+
@media only screen and (max-width: 1268px) and (min-width: 769px) {
|
521 |
+
.wpk-services-table > tbody > tr > td > input,
|
522 |
+
.wpk-services-table > tbody > tr > td > textarea,
|
523 |
+
.wpk-services-table > tbody > tr > td > select {
|
524 |
+
width: 100%;
|
525 |
+
}
|
526 |
+
|
527 |
+
.wpk-services-table > tbody > tr > td input {
|
528 |
+
width: 100%;
|
529 |
+
font-size: 1em !important;
|
530 |
+
}
|
531 |
+
|
532 |
+
.wpk-services-table .image-preview-wrapper {
|
533 |
+
display: none;
|
534 |
+
}
|
535 |
+
}
|
536 |
+
|
537 |
+
@media only screen and (min-width: 769px) {
|
538 |
+
.wpk-services-table-name {
|
539 |
+
display: none;
|
540 |
+
}
|
541 |
+
|
542 |
+
.wpk-services-table > tbody > tr > td > input,
|
543 |
+
.wpk-services-table > tbody > tr > td > textarea,
|
544 |
+
.wpk-services-table > tbody > tr > td > select {
|
545 |
+
width: 100%;
|
546 |
+
}
|
547 |
+
|
548 |
+
.image-preview-wrapper > input {
|
549 |
+
padding: 0;
|
550 |
+
}
|
551 |
+
}
|
552 |
+
|
553 |
+
@media only screen and (max-width: 1268px) {
|
554 |
+
.wrap-premium {
|
555 |
+
width: calc(100% - 20px);
|
556 |
+
}
|
557 |
+
|
558 |
+
.dsgvo-wrap {
|
559 |
+
width: calc(100% - 40px);
|
560 |
+
}
|
561 |
+
}
|
562 |
+
|
563 |
+
@media only screen and (min-width: 1269px) {
|
564 |
+
.wpk-company-data > tbody > tr > td > label > input[type="text"],
|
565 |
+
input[name="cn_button_text_ok"],
|
566 |
+
input[name="cn_button_text_cancel"],
|
567 |
+
input[name="cn_decline_target_url"],
|
568 |
+
input[name="cn_button_text_more"] {
|
569 |
+
width: 100%;
|
570 |
+
}
|
571 |
+
}
|
572 |
+
|
573 |
+
.sp-dsgvo_plugin_upgrade_notice > div.header{
|
574 |
+
background-color: #d54e21;
|
575 |
+
padding: 10px;
|
576 |
+
color: #f9f9f9;
|
577 |
+
margin-top: 10px
|
578 |
+
}
|
579 |
+
p.sp-dsgvo_plugin_upgrade_notice:before
|
580 |
+
{
|
581 |
+
content:none;
|
582 |
+
}
|
583 |
+
|
584 |
+
.dsgvo-image-upload img {
|
585 |
}
|
admin/images/cookies/Cookie1.png
ADDED
Binary file
|
admin/images/cookies/Cookie10.png
ADDED
Binary file
|
admin/images/cookies/Cookie11.png
ADDED
Binary file
|
admin/images/cookies/Cookie12.png
ADDED
Binary file
|
admin/images/cookies/Cookie13.png
ADDED
Binary file
|
admin/images/cookies/Cookie14.png
ADDED
Binary file
|
admin/images/cookies/Cookie2.png
ADDED
Binary file
|
admin/images/cookies/Cookie3.png
ADDED
Binary file
|
admin/images/cookies/Cookie4.png
ADDED
Binary file
|
admin/images/cookies/Cookie5.png
ADDED
Binary file
|
admin/images/cookies/Cookie6.png
ADDED
Binary file
|
admin/images/cookies/Cookie7.png
ADDED
Binary file
|
admin/images/cookies/Cookie8.png
ADDED
Binary file
|
admin/images/cookies/Cookie9.png
ADDED
Binary file
|
admin/images/logobackupsvg
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
-
<svg width="51px" height="51px" viewBox="0 0 51 51" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3 |
-
<!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
|
4 |
-
<title>Combined Shape</title>
|
5 |
-
<desc>Created with Sketch.</desc>
|
6 |
-
<defs></defs>
|
7 |
-
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
8 |
-
<path d="M19.3593492,33.4750511 L12.3057597,26.4214616 C11.3817513,25.4974532 9.88363778,25.4974532 8.95962941,26.4214616 C8.03562104,27.34547 8.03562104,28.8435835 8.95962941,29.7675919 L17.6862841,38.4942465 C18.1482882,38.9562507 18.7538187,39.1872528 19.3593492,39.1872528 C19.9648797,39.1872528 20.5704102,38.9562507 21.0324144,38.4942465 L21.0324144,38.4942465 L41.9673137,17.5593472 C42.8913221,16.6353388 42.8913221,15.1372252 41.9673137,14.2132169 C41.0433054,13.2892085 39.5451918,13.2892085 38.6211834,14.2132169 L38.6211834,14.2132169 L19.3593492,33.4750511 Z M25.7313287,50.1953496 C11.92421,50.1953496 0.731328714,39.0024683 0.731328714,25.1953496 C0.731328714,11.3882308 11.92421,0.195349574 25.7313287,0.195349574 C39.5384475,0.195349574 50.7313287,11.3882308 50.7313287,25.1953496 C50.7313287,39.0024683 39.5384475,50.1953496 25.7313287,50.1953496 Z" id="Combined-Shape" fill="#9FA3A8"></path>
|
9 |
-
</g>
|
10 |
</svg>
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<svg width="51px" height="51px" viewBox="0 0 51 51" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3 |
+
<!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
|
4 |
+
<title>Combined Shape</title>
|
5 |
+
<desc>Created with Sketch.</desc>
|
6 |
+
<defs></defs>
|
7 |
+
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
8 |
+
<path d="M19.3593492,33.4750511 L12.3057597,26.4214616 C11.3817513,25.4974532 9.88363778,25.4974532 8.95962941,26.4214616 C8.03562104,27.34547 8.03562104,28.8435835 8.95962941,29.7675919 L17.6862841,38.4942465 C18.1482882,38.9562507 18.7538187,39.1872528 19.3593492,39.1872528 C19.9648797,39.1872528 20.5704102,38.9562507 21.0324144,38.4942465 L21.0324144,38.4942465 L41.9673137,17.5593472 C42.8913221,16.6353388 42.8913221,15.1372252 41.9673137,14.2132169 C41.0433054,13.2892085 39.5451918,13.2892085 38.6211834,14.2132169 L38.6211834,14.2132169 L19.3593492,33.4750511 Z M25.7313287,50.1953496 C11.92421,50.1953496 0.731328714,39.0024683 0.731328714,25.1953496 C0.731328714,11.3882308 11.92421,0.195349574 25.7313287,0.195349574 C39.5384475,0.195349574 50.7313287,11.3882308 50.7313287,25.1953496 C50.7313287,39.0024683 39.5384475,50.1953496 25.7313287,50.1953496 Z" id="Combined-Shape" fill="#9FA3A8"></path>
|
9 |
+
</g>
|
10 |
</svg>
|
admin/js/bootstrap.min.js
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap v4.3.1 (https://getbootstrap.com/)
|
3 |
+
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
+
*/
|
6 |
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t,g,u){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function s(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function l(o){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},e=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(r).filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.forEach(function(t){var e,n,i;e=o,i=r[n=t],n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i})}return o}g=g&&g.hasOwnProperty("default")?g.default:g,u=u&&u.hasOwnProperty("default")?u.default:u;var e="transitionend";function n(t){var e=this,n=!1;return g(this).one(_.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||_.triggerTransitionEnd(e)},t),this}var _={TRANSITION_END:"bsTransitionEnd",getUID:function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=g(t).css("transition-duration"),n=g(t).css("transition-delay"),i=parseFloat(e),o=parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){g(t).trigger(e)},supportsTransitionEnd:function(){return Boolean(e)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=e[i],s=r&&_.isElement(r)?"element":(a=r,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(o).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"!=typeof t.getRootNode)return t instanceof ShadowRoot?t:t.parentNode?_.findShadowRoot(t.parentNode):null;var e=t.getRootNode();return e instanceof ShadowRoot?e:null}};g.fn.emulateTransitionEnd=n,g.event.special[_.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(g(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var o="alert",r="bs.alert",a="."+r,c=g.fn[o],h={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},f="alert",d="fade",m="show",p=function(){function i(t){this._element=t}var t=i.prototype;return t.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},t.dispose=function(){g.removeData(this._element,r),this._element=null},t._getRootElement=function(t){var e=_.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=g(t).closest("."+f)[0]),n},t._triggerCloseEvent=function(t){var e=g.Event(h.CLOSE);return g(t).trigger(e),e},t._removeElement=function(e){var n=this;if(g(e).removeClass(m),g(e).hasClass(d)){var t=_.getTransitionDurationFromElement(e);g(e).one(_.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){g(t).detach().trigger(h.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(r);e||(e=new i(this),t.data(r,e)),"close"===n&&e[n](this)})},i._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),i}();g(document).on(h.CLICK_DATA_API,'[data-dismiss="alert"]',p._handleDismiss(new p)),g.fn[o]=p._jQueryInterface,g.fn[o].Constructor=p,g.fn[o].noConflict=function(){return g.fn[o]=c,p._jQueryInterface};var v="button",y="bs.button",E="."+y,C=".data-api",T=g.fn[v],S="active",b="btn",I="focus",D='[data-toggle^="button"]',w='[data-toggle="buttons"]',A='input:not([type="hidden"])',N=".active",O=".btn",k={CLICK_DATA_API:"click"+E+C,FOCUS_BLUR_DATA_API:"focus"+E+C+" blur"+E+C},P=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=g(this._element).closest(w)[0];if(n){var i=this._element.querySelector(A);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(S))t=!1;else{var o=n.querySelector(N);o&&g(o).removeClass(S)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!this._element.classList.contains(S),g(i).trigger("change")}i.focus(),e=!1}}e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(S)),t&&g(this._element).toggleClass(S)},t.dispose=function(){g.removeData(this._element,y),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(y);t||(t=new n(this),g(this).data(y,t)),"toggle"===e&&t[e]()})},s(n,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),n}();g(document).on(k.CLICK_DATA_API,D,function(t){t.preventDefault();var e=t.target;g(e).hasClass(b)||(e=g(e).closest(O)),P._jQueryInterface.call(g(e),"toggle")}).on(k.FOCUS_BLUR_DATA_API,D,function(t){var e=g(t.target).closest(O)[0];g(e).toggleClass(I,/^focus(in)?$/.test(t.type))}),g.fn[v]=P._jQueryInterface,g.fn[v].Constructor=P,g.fn[v].noConflict=function(){return g.fn[v]=T,P._jQueryInterface};var L="carousel",j="bs.carousel",H="."+j,R=".data-api",x=g.fn[L],F={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},U={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},W="next",q="prev",M="left",K="right",Q={SLIDE:"slide"+H,SLID:"slid"+H,KEYDOWN:"keydown"+H,MOUSEENTER:"mouseenter"+H,MOUSELEAVE:"mouseleave"+H,TOUCHSTART:"touchstart"+H,TOUCHMOVE:"touchmove"+H,TOUCHEND:"touchend"+H,POINTERDOWN:"pointerdown"+H,POINTERUP:"pointerup"+H,DRAG_START:"dragstart"+H,LOAD_DATA_API:"load"+H+R,CLICK_DATA_API:"click"+H+R},B="carousel",V="active",Y="slide",z="carousel-item-right",X="carousel-item-left",$="carousel-item-next",G="carousel-item-prev",J="pointer-event",Z=".active",tt=".active.carousel-item",et=".carousel-item",nt=".carousel-item img",it=".carousel-item-next, .carousel-item-prev",ot=".carousel-indicators",rt="[data-slide], [data-slide-to]",st='[data-ride="carousel"]',at={TOUCH:"touch",PEN:"pen"},lt=function(){function r(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(ot),this._touchSupported="ontouchstart"in document.documentElement||0<navigator.maxTouchPoints,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var t=r.prototype;return t.next=function(){this._isSliding||this._slide(W)},t.nextWhenVisible=function(){!document.hidden&&g(this._element).is(":visible")&&"hidden"!==g(this._element).css("visibility")&&this.next()},t.prev=function(){this._isSliding||this._slide(q)},t.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(it)&&(_.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},t.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},t.to=function(t){var e=this;this._activeElement=this._element.querySelector(tt);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)g(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?W:q;this._slide(i,this._items[t])}},t.dispose=function(){g(this._element).off(H),g.removeData(this._element,j),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},t._getConfig=function(t){return t=l({},F,t),_.typeCheckConfig(L,t,U),t},t._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;0<e&&this.prev(),e<0&&this.next()}},t._addEventListeners=function(){var e=this;this._config.keyboard&&g(this._element).on(Q.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&g(this._element).on(Q.MOUSEENTER,function(t){return e.pause(t)}).on(Q.MOUSELEAVE,function(t){return e.cycle(t)}),this._config.touch&&this._addTouchEventListeners()},t._addTouchEventListeners=function(){var n=this;if(this._touchSupported){var e=function(t){n._pointerEvent&&at[t.originalEvent.pointerType.toUpperCase()]?n.touchStartX=t.originalEvent.clientX:n._pointerEvent||(n.touchStartX=t.originalEvent.touches[0].clientX)},i=function(t){n._pointerEvent&&at[t.originalEvent.pointerType.toUpperCase()]&&(n.touchDeltaX=t.originalEvent.clientX-n.touchStartX),n._handleSwipe(),"hover"===n._config.pause&&(n.pause(),n.touchTimeout&&clearTimeout(n.touchTimeout),n.touchTimeout=setTimeout(function(t){return n.cycle(t)},500+n._config.interval))};g(this._element.querySelectorAll(nt)).on(Q.DRAG_START,function(t){return t.preventDefault()}),this._pointerEvent?(g(this._element).on(Q.POINTERDOWN,function(t){return e(t)}),g(this._element).on(Q.POINTERUP,function(t){return i(t)}),this._element.classList.add(J)):(g(this._element).on(Q.TOUCHSTART,function(t){return e(t)}),g(this._element).on(Q.TOUCHMOVE,function(t){var e;(e=t).originalEvent.touches&&1<e.originalEvent.touches.length?n.touchDeltaX=0:n.touchDeltaX=e.originalEvent.touches[0].clientX-n.touchStartX}),g(this._element).on(Q.TOUCHEND,function(t){return i(t)}))}},t._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},t._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(et)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===W,i=t===q,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var s=(o+(t===q?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},t._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(tt)),o=g.Event(Q.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return g(this._element).trigger(o),o},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(Z));g(e).removeClass(V);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&g(n).addClass(V)}},t._slide=function(t,e){var n,i,o,r=this,s=this._element.querySelector(tt),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=t===W?(n=X,i=$,M):(n=z,i=G,K),l&&g(l).hasClass(V))this._isSliding=!1;else if(!this._triggerSlideEvent(l,o).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=g.Event(Q.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(g(this._element).hasClass(Y)){g(l).addClass(i),_.reflow(l),g(s).addClass(n),g(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);this._config.interval=f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,f):this._config.defaultInterval||this._config.interval;var d=_.getTransitionDurationFromElement(s);g(s).one(_.TRANSITION_END,function(){g(l).removeClass(n+" "+i).addClass(V),g(s).removeClass(V+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return g(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else g(s).removeClass(V),g(l).addClass(V),this._isSliding=!1,g(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var t=g(this).data(j),e=l({},F,g(this).data());"object"==typeof i&&(e=l({},e,i));var n="string"==typeof i?i:e.slide;if(t||(t=new r(this,e),g(this).data(j,t)),"number"==typeof i)t.to(i);else if("string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}else e.interval&&e.ride&&(t.pause(),t.cycle())})},r._dataApiClickHandler=function(t){var e=_.getSelectorFromElement(this);if(e){var n=g(e)[0];if(n&&g(n).hasClass(B)){var i=l({},g(n).data(),g(this).data()),o=this.getAttribute("data-slide-to");o&&(i.interval=!1),r._jQueryInterface.call(g(n),i),o&&g(n).data(j).to(o),t.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return F}}]),r}();g(document).on(Q.CLICK_DATA_API,rt,lt._dataApiClickHandler),g(window).on(Q.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(st)),e=0,n=t.length;e<n;e++){var i=g(t[e]);lt._jQueryInterface.call(i,i.data())}}),g.fn[L]=lt._jQueryInterface,g.fn[L].Constructor=lt,g.fn[L].noConflict=function(){return g.fn[L]=x,lt._jQueryInterface};var ct="collapse",ht="bs.collapse",ut="."+ht,ft=g.fn[ct],dt={toggle:!0,parent:""},gt={toggle:"boolean",parent:"(string|element)"},_t={SHOW:"show"+ut,SHOWN:"shown"+ut,HIDE:"hide"+ut,HIDDEN:"hidden"+ut,CLICK_DATA_API:"click"+ut+".data-api"},mt="show",pt="collapse",vt="collapsing",yt="collapsed",Et="width",Ct="height",Tt=".show, .collapsing",St='[data-toggle="collapse"]',bt=function(){function a(e,t){this._isTransitioning=!1,this._element=e,this._config=this._getConfig(t),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(St)),i=0,o=n.length;i<o;i++){var r=n[i],s=_.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter(function(t){return t===e});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var t=a.prototype;return t.toggle=function(){g(this._element).hasClass(mt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!g(this._element).hasClass(mt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(Tt)).filter(function(t){return"string"==typeof n._config.parent?t.getAttribute("data-parent")===n._config.parent:t.classList.contains(pt)})).length&&(t=null),!(t&&(e=g(t).not(this._selector).data(ht))&&e._isTransitioning))){var i=g.Event(_t.SHOW);if(g(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(g(t).not(this._selector),"hide"),e||g(t).data(ht,null));var o=this._getDimension();g(this._element).removeClass(pt).addClass(vt),this._element.style[o]=0,this._triggerArray.length&&g(this._triggerArray).removeClass(yt).attr("aria-expanded",!0),this.setTransitioning(!0);var r="scroll"+(o[0].toUpperCase()+o.slice(1)),s=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){g(n._element).removeClass(vt).addClass(pt).addClass(mt),n._element.style[o]="",n.setTransitioning(!1),g(n._element).trigger(_t.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&g(this._element).hasClass(mt)){var e=g.Event(_t.HIDE);if(g(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",_.reflow(this._element),g(this._element).addClass(vt).removeClass(pt).removeClass(mt);var i=this._triggerArray.length;if(0<i)for(var o=0;o<i;o++){var r=this._triggerArray[o],s=_.getSelectorFromElement(r);if(null!==s)g([].slice.call(document.querySelectorAll(s))).hasClass(mt)||g(r).addClass(yt).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){t.setTransitioning(!1),g(t._element).removeClass(vt).addClass(pt).trigger(_t.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){g.removeData(this._element,ht),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},dt,t)).toggle=Boolean(t.toggle),_.typeCheckConfig(ct,t,gt),t},t._getDimension=function(){return g(this._element).hasClass(Et)?Et:Ct},t._getParent=function(){var t,n=this;_.isElement(this._config.parent)?(t=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(t=this._config.parent[0])):t=document.querySelector(this._config.parent);var e='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(t.querySelectorAll(e));return g(i).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){var n=g(t).hasClass(mt);e.length&&g(e).toggleClass(yt,!n).attr("aria-expanded",n)},a._getTargetFromElement=function(t){var e=_.getSelectorFromElement(t);return e?document.querySelector(e):null},a._jQueryInterface=function(i){return this.each(function(){var t=g(this),e=t.data(ht),n=l({},dt,t.data(),"object"==typeof i&&i?i:{});if(!e&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),e||(e=new a(this,n),t.data(ht,e)),"string"==typeof i){if("undefined"==typeof e[i])throw new TypeError('No method named "'+i+'"');e[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return dt}}]),a}();g(document).on(_t.CLICK_DATA_API,St,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=g(this),e=_.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(e));g(i).each(function(){var t=g(this),e=t.data(ht)?"toggle":n.data();bt._jQueryInterface.call(t,e)})}),g.fn[ct]=bt._jQueryInterface,g.fn[ct].Constructor=bt,g.fn[ct].noConflict=function(){return g.fn[ct]=ft,bt._jQueryInterface};var It="dropdown",Dt="bs.dropdown",wt="."+Dt,At=".data-api",Nt=g.fn[It],Ot=new RegExp("38|40|27"),kt={HIDE:"hide"+wt,HIDDEN:"hidden"+wt,SHOW:"show"+wt,SHOWN:"shown"+wt,CLICK:"click"+wt,CLICK_DATA_API:"click"+wt+At,KEYDOWN_DATA_API:"keydown"+wt+At,KEYUP_DATA_API:"keyup"+wt+At},Pt="disabled",Lt="show",jt="dropup",Ht="dropright",Rt="dropleft",xt="dropdown-menu-right",Ft="position-static",Ut='[data-toggle="dropdown"]',Wt=".dropdown form",qt=".dropdown-menu",Mt=".navbar-nav",Kt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Qt="top-start",Bt="top-end",Vt="bottom-start",Yt="bottom-end",zt="right-start",Xt="left-start",$t={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic"},Gt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string"},Jt=function(){function c(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var t=c.prototype;return t.toggle=function(){if(!this._element.disabled&&!g(this._element).hasClass(Pt)){var t=c._getParentFromElement(this._element),e=g(this._menu).hasClass(Lt);if(c._clearMenus(),!e){var n={relatedTarget:this._element},i=g.Event(kt.SHOW,n);if(g(t).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){if("undefined"==typeof u)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var o=this._element;"parent"===this._config.reference?o=t:_.isElement(this._config.reference)&&(o=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(o=this._config.reference[0])),"scrollParent"!==this._config.boundary&&g(t).addClass(Ft),this._popper=new u(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===g(t).closest(Mt).length&&g(document.body).children().on("mouseover",null,g.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),g(this._menu).toggleClass(Lt),g(t).toggleClass(Lt).trigger(g.Event(kt.SHOWN,n))}}}},t.show=function(){if(!(this._element.disabled||g(this._element).hasClass(Pt)||g(this._menu).hasClass(Lt))){var t={relatedTarget:this._element},e=g.Event(kt.SHOW,t),n=c._getParentFromElement(this._element);g(n).trigger(e),e.isDefaultPrevented()||(g(this._menu).toggleClass(Lt),g(n).toggleClass(Lt).trigger(g.Event(kt.SHOWN,t)))}},t.hide=function(){if(!this._element.disabled&&!g(this._element).hasClass(Pt)&&g(this._menu).hasClass(Lt)){var t={relatedTarget:this._element},e=g.Event(kt.HIDE,t),n=c._getParentFromElement(this._element);g(n).trigger(e),e.isDefaultPrevented()||(g(this._menu).toggleClass(Lt),g(n).toggleClass(Lt).trigger(g.Event(kt.HIDDEN,t)))}},t.dispose=function(){g.removeData(this._element,Dt),g(this._element).off(wt),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},t.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},t._addEventListeners=function(){var e=this;g(this._element).on(kt.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=l({},this.constructor.Default,g(this._element).data(),t),_.typeCheckConfig(It,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=c._getParentFromElement(this._element);t&&(this._menu=t.querySelector(qt))}return this._menu},t._getPlacement=function(){var t=g(this._element.parentNode),e=Vt;return t.hasClass(jt)?(e=Qt,g(this._menu).hasClass(xt)&&(e=Bt)):t.hasClass(Ht)?e=zt:t.hasClass(Rt)?e=Xt:g(this._menu).hasClass(xt)&&(e=Yt),e},t._detectNavbar=function(){return 0<g(this._element).closest(".navbar").length},t._getOffset=function(){var e=this,t={};return"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e._config.offset(t.offsets,e._element)||{}),t}:t.offset=this._config.offset,t},t._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),t},c._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(Dt);if(t||(t=new c(this,"object"==typeof e?e:null),g(this).data(Dt,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},c._clearMenus=function(t){if(!t||3!==t.which&&("keyup"!==t.type||9===t.which))for(var e=[].slice.call(document.querySelectorAll(Ut)),n=0,i=e.length;n<i;n++){var o=c._getParentFromElement(e[n]),r=g(e[n]).data(Dt),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),r){var a=r._menu;if(g(o).hasClass(Lt)&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&9===t.which)&&g.contains(o,t.target))){var l=g.Event(kt.HIDE,s);g(o).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),e[n].setAttribute("aria-expanded","false"),g(a).removeClass(Lt),g(o).removeClass(Lt).trigger(g.Event(kt.HIDDEN,s)))}}}},c._getParentFromElement=function(t){var e,n=_.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},c._dataApiKeydownHandler=function(t){if((/input|textarea/i.test(t.target.tagName)?!(32===t.which||27!==t.which&&(40!==t.which&&38!==t.which||g(t.target).closest(qt).length)):Ot.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!g(this).hasClass(Pt))){var e=c._getParentFromElement(this),n=g(e).hasClass(Lt);if(n&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(Kt));if(0!==i.length){var o=i.indexOf(t.target);38===t.which&&0<o&&o--,40===t.which&&o<i.length-1&&o++,o<0&&(o=0),i[o].focus()}}else{if(27===t.which){var r=e.querySelector(Ut);g(r).trigger("focus")}g(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return $t}},{key:"DefaultType",get:function(){return Gt}}]),c}();g(document).on(kt.KEYDOWN_DATA_API,Ut,Jt._dataApiKeydownHandler).on(kt.KEYDOWN_DATA_API,qt,Jt._dataApiKeydownHandler).on(kt.CLICK_DATA_API+" "+kt.KEYUP_DATA_API,Jt._clearMenus).on(kt.CLICK_DATA_API,Ut,function(t){t.preventDefault(),t.stopPropagation(),Jt._jQueryInterface.call(g(this),"toggle")}).on(kt.CLICK_DATA_API,Wt,function(t){t.stopPropagation()}),g.fn[It]=Jt._jQueryInterface,g.fn[It].Constructor=Jt,g.fn[It].noConflict=function(){return g.fn[It]=Nt,Jt._jQueryInterface};var Zt="modal",te="bs.modal",ee="."+te,ne=g.fn[Zt],ie={backdrop:!0,keyboard:!0,focus:!0,show:!0},oe={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},re={HIDE:"hide"+ee,HIDDEN:"hidden"+ee,SHOW:"show"+ee,SHOWN:"shown"+ee,FOCUSIN:"focusin"+ee,RESIZE:"resize"+ee,CLICK_DISMISS:"click.dismiss"+ee,KEYDOWN_DISMISS:"keydown.dismiss"+ee,MOUSEUP_DISMISS:"mouseup.dismiss"+ee,MOUSEDOWN_DISMISS:"mousedown.dismiss"+ee,CLICK_DATA_API:"click"+ee+".data-api"},se="modal-dialog-scrollable",ae="modal-scrollbar-measure",le="modal-backdrop",ce="modal-open",he="fade",ue="show",fe=".modal-dialog",de=".modal-body",ge='[data-toggle="modal"]',_e='[data-dismiss="modal"]',me=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",pe=".sticky-top",ve=function(){function o(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(fe),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var t=o.prototype;return t.toggle=function(t){return this._isShown?this.hide():this.show(t)},t.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){g(this._element).hasClass(he)&&(this._isTransitioning=!0);var n=g.Event(re.SHOW,{relatedTarget:t});g(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),g(this._element).on(re.CLICK_DISMISS,_e,function(t){return e.hide(t)}),g(this._dialog).on(re.MOUSEDOWN_DISMISS,function(){g(e._element).one(re.MOUSEUP_DISMISS,function(t){g(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return e._showElement(t)}))}},t.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var n=g.Event(re.HIDE);if(g(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=g(this._element).hasClass(he);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),g(document).off(re.FOCUSIN),g(this._element).removeClass(ue),g(this._element).off(re.CLICK_DISMISS),g(this._dialog).off(re.MOUSEDOWN_DISMISS),i){var o=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(t){return e._hideModal(t)}).emulateTransitionEnd(o)}else this._hideModal()}}},t.dispose=function(){[window,this._element,this._dialog].forEach(function(t){return g(t).off(ee)}),g(document).off(re.FOCUSIN),g.removeData(this._element,te),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},t.handleUpdate=function(){this._adjustDialog()},t._getConfig=function(t){return t=l({},ie,t),_.typeCheckConfig(Zt,t,oe),t},t._showElement=function(t){var e=this,n=g(this._element).hasClass(he);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),g(this._dialog).hasClass(se)?this._dialog.querySelector(de).scrollTop=0:this._element.scrollTop=0,n&&_.reflow(this._element),g(this._element).addClass(ue),this._config.focus&&this._enforceFocus();var i=g.Event(re.SHOWN,{relatedTarget:t}),o=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,g(e._element).trigger(i)};if(n){var r=_.getTransitionDurationFromElement(this._dialog);g(this._dialog).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o()},t._enforceFocus=function(){var e=this;g(document).off(re.FOCUSIN).on(re.FOCUSIN,function(t){document!==t.target&&e._element!==t.target&&0===g(e._element).has(t.target).length&&e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?g(this._element).on(re.KEYDOWN_DISMISS,function(t){27===t.which&&(t.preventDefault(),e.hide())}):this._isShown||g(this._element).off(re.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?g(window).on(re.RESIZE,function(t){return e.handleUpdate(t)}):g(window).off(re.RESIZE)},t._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop(function(){g(document.body).removeClass(ce),t._resetAdjustments(),t._resetScrollbar(),g(t._element).trigger(re.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&&(g(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=g(this._element).hasClass(he)?he:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=le,n&&this._backdrop.classList.add(n),g(this._backdrop).appendTo(document.body),g(this._element).on(re.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._element.focus():e.hide())}),n&&_.reflow(this._backdrop),g(this._backdrop).addClass(ue),!t)return;if(!n)return void t();var i=_.getTransitionDurationFromElement(this._backdrop);g(this._backdrop).one(_.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){g(this._backdrop).removeClass(ue);var o=function(){e._removeBackdrop(),t&&t()};if(g(this._element).hasClass(he)){var r=_.getTransitionDurationFromElement(this._backdrop);g(this._backdrop).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o()}else t&&t()},t._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},t._setScrollbar=function(){var o=this;if(this._isBodyOverflowing){var t=[].slice.call(document.querySelectorAll(me)),e=[].slice.call(document.querySelectorAll(pe));g(t).each(function(t,e){var n=e.style.paddingRight,i=g(e).css("padding-right");g(e).data("padding-right",n).css("padding-right",parseFloat(i)+o._scrollbarWidth+"px")}),g(e).each(function(t,e){var n=e.style.marginRight,i=g(e).css("margin-right");g(e).data("margin-right",n).css("margin-right",parseFloat(i)-o._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=g(document.body).css("padding-right");g(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}g(document.body).addClass(ce)},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(me));g(t).each(function(t,e){var n=g(e).data("padding-right");g(e).removeData("padding-right"),e.style.paddingRight=n||""});var e=[].slice.call(document.querySelectorAll(""+pe));g(e).each(function(t,e){var n=g(e).data("margin-right");"undefined"!=typeof n&&g(e).css("margin-right",n).removeData("margin-right")});var n=g(document.body).data("padding-right");g(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},t._getScrollbarWidth=function(){var t=document.createElement("div");t.className=ae,document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},o._jQueryInterface=function(n,i){return this.each(function(){var t=g(this).data(te),e=l({},ie,g(this).data(),"object"==typeof n&&n?n:{});if(t||(t=new o(this,e),g(this).data(te,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](i)}else e.show&&t.show(i)})},s(o,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return ie}}]),o}();g(document).on(re.CLICK_DATA_API,ge,function(t){var e,n=this,i=_.getSelectorFromElement(this);i&&(e=document.querySelector(i));var o=g(e).data(te)?"toggle":l({},g(e).data(),g(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=g(e).one(re.SHOW,function(t){t.isDefaultPrevented()||r.one(re.HIDDEN,function(){g(n).is(":visible")&&n.focus()})});ve._jQueryInterface.call(g(e),o,this)}),g.fn[Zt]=ve._jQueryInterface,g.fn[Zt].Constructor=ve,g.fn[Zt].noConflict=function(){return g.fn[Zt]=ne,ve._jQueryInterface};var ye=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Ee={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Ce=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,Te=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function Se(t,s,e){if(0===t.length)return t;if(e&&"function"==typeof e)return e(t);for(var n=(new window.DOMParser).parseFromString(t,"text/html"),a=Object.keys(s),l=[].slice.call(n.body.querySelectorAll("*")),i=function(t,e){var n=l[t],i=n.nodeName.toLowerCase();if(-1===a.indexOf(n.nodeName.toLowerCase()))return n.parentNode.removeChild(n),"continue";var o=[].slice.call(n.attributes),r=[].concat(s["*"]||[],s[i]||[]);o.forEach(function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===ye.indexOf(n)||Boolean(t.nodeValue.match(Ce)||t.nodeValue.match(Te));for(var i=e.filter(function(t){return t instanceof RegExp}),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1})(t,r)||n.removeAttribute(t.nodeName)})},o=0,r=l.length;o<r;o++)i(o);return n.body.innerHTML}var be="tooltip",Ie="bs.tooltip",De="."+Ie,we=g.fn[be],Ae="bs-tooltip",Ne=new RegExp("(^|\\s)"+Ae+"\\S+","g"),Oe=["sanitize","whiteList","sanitizeFn"],ke={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object"},Pe={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Le={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Ee},je="show",He="out",Re={HIDE:"hide"+De,HIDDEN:"hidden"+De,SHOW:"show"+De,SHOWN:"shown"+De,INSERTED:"inserted"+De,CLICK:"click"+De,FOCUSIN:"focusin"+De,FOCUSOUT:"focusout"+De,MOUSEENTER:"mouseenter"+De,MOUSELEAVE:"mouseleave"+De},xe="fade",Fe="show",Ue=".tooltip-inner",We=".arrow",qe="hover",Me="focus",Ke="click",Qe="manual",Be=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Fe))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(xe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:We},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===He&&e._leave(null,e)};if(g(this.tip).hasClass(xe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==je&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ke]=!1,this._activeTrigger[Me]=!1,this._activeTrigger[qe]=!1,g(this.tip).hasClass(xe)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Ae+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ue)),this.getTitle()),g(t).removeClass(xe+" "+Fe)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Se(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Pe[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Qe){var e=t===qe?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===qe?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),g(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Me:qe]=!0),g(e.getTipElement()).hasClass(Fe)||e._hoverState===je?e._hoverState=je:(clearTimeout(e._timeout),e._hoverState=je,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===je&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Me:qe]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===He&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==Oe.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(be,t,this.constructor.DefaultType),t.sanitize&&(t.template=Se(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ne);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(xe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ie),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ie,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Le}},{key:"NAME",get:function(){return be}},{key:"DATA_KEY",get:function(){return Ie}},{key:"Event",get:function(){return Re}},{key:"EVENT_KEY",get:function(){return De}},{key:"DefaultType",get:function(){return ke}}]),i}();g.fn[be]=Be._jQueryInterface,g.fn[be].Constructor=Be,g.fn[be].noConflict=function(){return g.fn[be]=we,Be._jQueryInterface};var Ve="popover",Ye="bs.popover",ze="."+Ye,Xe=g.fn[Ve],$e="bs-popover",Ge=new RegExp("(^|\\s)"+$e+"\\S+","g"),Je=l({},Be.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),Ze=l({},Be.DefaultType,{content:"(string|element|function)"}),tn="fade",en="show",nn=".popover-header",on=".popover-body",rn={HIDE:"hide"+ze,HIDDEN:"hidden"+ze,SHOW:"show"+ze,SHOWN:"shown"+ze,INSERTED:"inserted"+ze,CLICK:"click"+ze,FOCUSIN:"focusin"+ze,FOCUSOUT:"focusout"+ze,MOUSEENTER:"mouseenter"+ze,MOUSELEAVE:"mouseleave"+ze},sn=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){g(this.getTipElement()).addClass($e+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(nn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(on),e),t.removeClass(tn+" "+en)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ge);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ye),e="object"==typeof n?n:null;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Je}},{key:"NAME",get:function(){return Ve}},{key:"DATA_KEY",get:function(){return Ye}},{key:"Event",get:function(){return rn}},{key:"EVENT_KEY",get:function(){return ze}},{key:"DefaultType",get:function(){return Ze}}]),i}(Be);g.fn[Ve]=sn._jQueryInterface,g.fn[Ve].Constructor=sn,g.fn[Ve].noConflict=function(){return g.fn[Ve]=Xe,sn._jQueryInterface};var an="scrollspy",ln="bs.scrollspy",cn="."+ln,hn=g.fn[an],un={offset:10,method:"auto",target:""},fn={offset:"number",method:"string",target:"(string|element)"},dn={ACTIVATE:"activate"+cn,SCROLL:"scroll"+cn,LOAD_DATA_API:"load"+cn+".data-api"},gn="dropdown-item",_n="active",mn='[data-spy="scroll"]',pn=".nav, .list-group",vn=".nav-link",yn=".nav-item",En=".list-group-item",Cn=".dropdown",Tn=".dropdown-item",Sn=".dropdown-toggle",bn="offset",In="position",Dn=function(){function n(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" "+vn+","+this._config.target+" "+En+","+this._config.target+" "+Tn,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,g(this._scrollElement).on(dn.SCROLL,function(t){return n._process(t)}),this.refresh(),this._process()}var t=n.prototype;return t.refresh=function(){var e=this,t=this._scrollElement===this._scrollElement.window?bn:In,o="auto"===this._config.method?t:this._config.method,r=o===In?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(t){var e,n=_.getSelectorFromElement(t);if(n&&(e=document.querySelector(n)),e){var i=e.getBoundingClientRect();if(i.width||i.height)return[g(e)[o]().top+r,n]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},t.dispose=function(){g.removeData(this._element,ln),g(this._scrollElement).off(cn),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},t._getConfig=function(t){if("string"!=typeof(t=l({},un,"object"==typeof t&&t?t:{})).target){var e=g(t.target).attr("id");e||(e=_.getUID(an),g(t.target).attr("id",e)),t.target="#"+e}return _.typeCheckConfig(an,t,fn),t},t._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},t._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},t._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},t._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),n<=t){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&0<this._offsets[0])return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},t._activate=function(e){this._activeTarget=e,this._clear();var t=this._selector.split(",").map(function(t){return t+'[data-target="'+e+'"],'+t+'[href="'+e+'"]'}),n=g([].slice.call(document.querySelectorAll(t.join(","))));n.hasClass(gn)?(n.closest(Cn).find(Sn).addClass(_n),n.addClass(_n)):(n.addClass(_n),n.parents(pn).prev(vn+", "+En).addClass(_n),n.parents(pn).prev(yn).children(vn).addClass(_n)),g(this._scrollElement).trigger(dn.ACTIVATE,{relatedTarget:e})},t._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(t){return t.classList.contains(_n)}).forEach(function(t){return t.classList.remove(_n)})},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(ln);if(t||(t=new n(this,"object"==typeof e&&e),g(this).data(ln,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return un}}]),n}();g(window).on(dn.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(mn)),e=t.length;e--;){var n=g(t[e]);Dn._jQueryInterface.call(n,n.data())}}),g.fn[an]=Dn._jQueryInterface,g.fn[an].Constructor=Dn,g.fn[an].noConflict=function(){return g.fn[an]=hn,Dn._jQueryInterface};var wn="bs.tab",An="."+wn,Nn=g.fn.tab,On={HIDE:"hide"+An,HIDDEN:"hidden"+An,SHOW:"show"+An,SHOWN:"shown"+An,CLICK_DATA_API:"click"+An+".data-api"},kn="dropdown-menu",Pn="active",Ln="disabled",jn="fade",Hn="show",Rn=".dropdown",xn=".nav, .list-group",Fn=".active",Un="> li > .active",Wn='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',qn=".dropdown-toggle",Mn="> .dropdown-menu .active",Kn=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&g(this._element).hasClass(Pn)||g(this._element).hasClass(Ln))){var t,i,e=g(this._element).closest(xn)[0],o=_.getSelectorFromElement(this._element);if(e){var r="UL"===e.nodeName||"OL"===e.nodeName?Un:Fn;i=(i=g.makeArray(g(e).find(r)))[i.length-1]}var s=g.Event(On.HIDE,{relatedTarget:this._element}),a=g.Event(On.SHOW,{relatedTarget:i});if(i&&g(i).trigger(s),g(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(t=document.querySelector(o)),this._activate(this._element,e);var l=function(){var t=g.Event(On.HIDDEN,{relatedTarget:n._element}),e=g.Event(On.SHOWN,{relatedTarget:i});g(i).trigger(t),g(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){g.removeData(this._element,wn),this._element=null},t._activate=function(t,e,n){var i=this,o=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?g(e).children(Fn):g(e).find(Un))[0],r=n&&o&&g(o).hasClass(jn),s=function(){return i._transitionComplete(t,o,n)};if(o&&r){var a=_.getTransitionDurationFromElement(o);g(o).removeClass(Hn).one(_.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},t._transitionComplete=function(t,e,n){if(e){g(e).removeClass(Pn);var i=g(e.parentNode).find(Mn)[0];i&&g(i).removeClass(Pn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(g(t).addClass(Pn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),_.reflow(t),t.classList.contains(jn)&&t.classList.add(Hn),t.parentNode&&g(t.parentNode).hasClass(kn)){var o=g(t).closest(Rn)[0];if(o){var r=[].slice.call(o.querySelectorAll(qn));g(r).addClass(Pn)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(wn);if(e||(e=new i(this),t.data(wn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}}]),i}();g(document).on(On.CLICK_DATA_API,Wn,function(t){t.preventDefault(),Kn._jQueryInterface.call(g(this),"show")}),g.fn.tab=Kn._jQueryInterface,g.fn.tab.Constructor=Kn,g.fn.tab.noConflict=function(){return g.fn.tab=Nn,Kn._jQueryInterface};var Qn="toast",Bn="bs.toast",Vn="."+Bn,Yn=g.fn[Qn],zn={CLICK_DISMISS:"click.dismiss"+Vn,HIDE:"hide"+Vn,HIDDEN:"hidden"+Vn,SHOW:"show"+Vn,SHOWN:"shown"+Vn},Xn="fade",$n="hide",Gn="show",Jn="showing",Zn={animation:"boolean",autohide:"boolean",delay:"number"},ti={animation:!0,autohide:!0,delay:500},ei='[data-dismiss="toast"]',ni=function(){function i(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var t=i.prototype;return t.show=function(){var t=this;g(this._element).trigger(zn.SHOW),this._config.animation&&this._element.classList.add(Xn);var e=function(){t._element.classList.remove(Jn),t._element.classList.add(Gn),g(t._element).trigger(zn.SHOWN),t._config.autohide&&t.hide()};if(this._element.classList.remove($n),this._element.classList.add(Jn),this._config.animation){var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},t.hide=function(t){var e=this;this._element.classList.contains(Gn)&&(g(this._element).trigger(zn.HIDE),t?this._close():this._timeout=setTimeout(function(){e._close()},this._config.delay))},t.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(Gn)&&this._element.classList.remove(Gn),g(this._element).off(zn.CLICK_DISMISS),g.removeData(this._element,Bn),this._element=null,this._config=null},t._getConfig=function(t){return t=l({},ti,g(this._element).data(),"object"==typeof t&&t?t:{}),_.typeCheckConfig(Qn,t,this.constructor.DefaultType),t},t._setListeners=function(){var t=this;g(this._element).on(zn.CLICK_DISMISS,ei,function(){return t.hide(!0)})},t._close=function(){var t=this,e=function(){t._element.classList.add($n),g(t._element).trigger(zn.HIDDEN)};if(this._element.classList.remove(Gn),this._config.animation){var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(Bn);if(e||(e=new i(this,"object"==typeof n&&n),t.data(Bn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n](this)}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"DefaultType",get:function(){return Zn}},{key:"Default",get:function(){return ti}}]),i}();g.fn[Qn]=ni._jQueryInterface,g.fn[Qn].Constructor=ni,g.fn[Qn].noConflict=function(){return g.fn[Qn]=Yn,ni._jQueryInterface},function(){if("undefined"==typeof g)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=g.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||4<=t[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(),t.Util=_,t.Alert=p,t.Button=P,t.Carousel=lt,t.Collapse=bt,t.Dropdown=Jt,t.Modal=ve,t.Popover=sn,t.Scrollspy=Dn,t.Tab=Kn,t.Toast=ni,t.Tooltip=Be,Object.defineProperty(t,"__esModule",{value:!0})});
|
7 |
+
//# sourceMappingURL=bootstrap.min.js.map
|
admin/js/sp-dsgvo-admin.js
CHANGED
@@ -1,186 +1,466 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
$(
|
13 |
-
|
14 |
-
$('.
|
15 |
-
|
16 |
-
$(
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
$('#display_email').closest('tr').
|
31 |
-
}
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
$(input).css('textDecoration', '
|
41 |
-
}
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
$
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
}
|
61 |
-
}
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
}
|
72 |
-
|
73 |
-
$('.
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
$('.
|
92 |
-
|
93 |
-
$.post( args.ajaxurl, {
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
});
|
99 |
-
|
100 |
-
$('.
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
$('
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var spDsgvoActiveAdminSubmenu = '';
|
2 |
+
|
3 |
+
(function($){
|
4 |
+
|
5 |
+
$(document).ready(function(){
|
6 |
+
|
7 |
+
/************************
|
8 |
+
* Settings
|
9 |
+
*************************/
|
10 |
+
$('.btn-settings').click(function(){
|
11 |
+
if($(this).attr('data-state') == 'closed'){
|
12 |
+
$('.btn-settings-show').show();
|
13 |
+
$(this).attr('data-state', 'open');
|
14 |
+
$(this).find('.state').html('Hide');
|
15 |
+
}else{
|
16 |
+
$('.btn-settings-show').hide();
|
17 |
+
$(this).attr('data-state', 'closed');
|
18 |
+
$(this).find('.state').html('Show');
|
19 |
+
}
|
20 |
+
});
|
21 |
+
|
22 |
+
|
23 |
+
/************************
|
24 |
+
* SAR
|
25 |
+
*************************/
|
26 |
+
$('#process_now').change(function(){
|
27 |
+
var checkbox = document.getElementById('process_now');
|
28 |
+
if(checkbox){
|
29 |
+
if(checkbox.checked){
|
30 |
+
$('#display_email').closest('tr').show();
|
31 |
+
}else{
|
32 |
+
$('#display_email').closest('tr').hide();
|
33 |
+
}
|
34 |
+
}
|
35 |
+
});
|
36 |
+
|
37 |
+
$('.cbChecklist').on('change', function () {
|
38 |
+
var input = $(this).next('span');
|
39 |
+
if (this.checked) {
|
40 |
+
$(input).css('textDecoration', 'line-through');
|
41 |
+
} else {
|
42 |
+
$(input).css('textDecoration', 'none');
|
43 |
+
}
|
44 |
+
$('#checklist-form').submit();
|
45 |
+
});
|
46 |
+
|
47 |
+
|
48 |
+
$('.unsubscribe-dismiss').on('click tap', function() {
|
49 |
+
var $this = $(this),
|
50 |
+
id = $this.attr('data-id');
|
51 |
+
|
52 |
+
if(confirm(args.dismiss_confirm)) {
|
53 |
+
$this.parent().parent().fadeOut(500);
|
54 |
+
$.post( args.ajaxurl, {
|
55 |
+
action: 'admin-dismiss-unsubscribe',
|
56 |
+
id: id
|
57 |
+
},
|
58 |
+
function( data ) {
|
59 |
+
} );
|
60 |
+
}
|
61 |
+
});
|
62 |
+
/* i592995 */
|
63 |
+
|
64 |
+
$('.google-gdpr-refresh-notice').on('click tap', function() {
|
65 |
+
|
66 |
+
$.post( args.ajaxurl, {
|
67 |
+
action: 'notice-action',
|
68 |
+
id: 'google-gdpr-refresh-notice'
|
69 |
+
});
|
70 |
+
|
71 |
+
});
|
72 |
+
|
73 |
+
$('.license-invalid-notice').on('click tap', function() {
|
74 |
+
|
75 |
+
$.post( args.ajaxurl, {
|
76 |
+
action: 'notice-action',
|
77 |
+
id: 'license-invalid-notice'
|
78 |
+
});
|
79 |
+
|
80 |
+
});
|
81 |
+
|
82 |
+
$('.privacy-policy-texts-outdated-notice').on('click tap', function() {
|
83 |
+
|
84 |
+
$.post( args.ajaxurl, {
|
85 |
+
action: 'notice-action',
|
86 |
+
id: 'privacy-policy-texts-outdated-notice'
|
87 |
+
});
|
88 |
+
|
89 |
+
});
|
90 |
+
|
91 |
+
$('.update-check-settings-notice').on('click tap', function() {
|
92 |
+
|
93 |
+
$.post( args.ajaxurl, {
|
94 |
+
action: 'notice-action',
|
95 |
+
id: 'update-check-settings-notice'
|
96 |
+
});
|
97 |
+
|
98 |
+
});
|
99 |
+
|
100 |
+
$('.privacy-policy-texts-refresh-link').on('click tap', function() {
|
101 |
+
|
102 |
+
$('#progress-pp-texts-reload').show();
|
103 |
+
$('#btn-refresh-pp-texts').hide();
|
104 |
+
$.post( args.ajaxurl, {
|
105 |
+
action: 'update-privacy-policy-texts-action',
|
106 |
+
id: ''
|
107 |
+
}, function (data) {
|
108 |
+
location.reload();
|
109 |
+
});
|
110 |
+
|
111 |
+
});
|
112 |
+
|
113 |
+
$('.license-revoke-notice').on('click tap', function() {
|
114 |
+
|
115 |
+
$.post( args.ajaxurl, {
|
116 |
+
action: 'notice-action',
|
117 |
+
id: 'license-revoke-notice'
|
118 |
+
});
|
119 |
+
|
120 |
+
});
|
121 |
+
|
122 |
+
/* p912419 */
|
123 |
+
var DeclineCheckbox = document.getElementById('decline_button_allowed');
|
124 |
+
$(DeclineCheckbox).on('change', function(){
|
125 |
+
if(DeclineCheckbox){
|
126 |
+
if(DeclineCheckbox.checked){
|
127 |
+
$('#decline_button_text_color').closest('tr').show();
|
128 |
+
$('#decline_button_bg_color').closest('tr').show();
|
129 |
+
}else{
|
130 |
+
$('#decline_button_text_color').closest('tr').hide();
|
131 |
+
$('#decline_button_bg_color').closest('tr').hide();
|
132 |
+
}
|
133 |
+
}
|
134 |
+
});
|
135 |
+
$(DeclineCheckbox).trigger('change');
|
136 |
+
|
137 |
+
// Advanced Cookie Settings
|
138 |
+
var AdvancedDeclineCheckbox = document.getElementById('cn_activate_advanced_settings_btn');
|
139 |
+
$(AdvancedDeclineCheckbox).on('change', function(){
|
140 |
+
if(AdvancedDeclineCheckbox){
|
141 |
+
if(AdvancedDeclineCheckbox.checked){
|
142 |
+
$('.cn_advanced_cookie_info').show();
|
143 |
+
}else{
|
144 |
+
$('.cn_advanced_cookie_info').hide();
|
145 |
+
$('#cn_advanced_cookie_settings_textarea').prop('checked', false);
|
146 |
+
$('#cn_advanced_cookie_settings_textarea').trigger('change');
|
147 |
+
}
|
148 |
+
}
|
149 |
+
});
|
150 |
+
$(AdvancedDeclineCheckbox).trigger('change');
|
151 |
+
|
152 |
+
|
153 |
+
// backend cookie selector
|
154 |
+
var CookieViewSelector = $('#cookie_style');
|
155 |
+
var CookieImg = $('img[class*="cookie-style-admin-show--"]');
|
156 |
+
$(CookieViewSelector).on('change', function(){
|
157 |
+
var val = $(this).val();
|
158 |
+
var CurrentImg = $('img[class*="cookie-style-admin-show--' + val +'"]');
|
159 |
+
$(CookieImg).hide();
|
160 |
+
$(CurrentImg).show();
|
161 |
+
|
162 |
+
if (val == '00')
|
163 |
+
{
|
164 |
+
$('.cn-customize-standard-notice-container').show();
|
165 |
+
} else
|
166 |
+
{
|
167 |
+
$('.cn-customize-standard-notice-container').hide();
|
168 |
+
}
|
169 |
+
});
|
170 |
+
$(CookieViewSelector).trigger('change');
|
171 |
+
|
172 |
+
/* end p912419 */
|
173 |
+
if($('#su_email_content').length > 0 ) {
|
174 |
+
wp.editor.initialize( 'su_email_content' );
|
175 |
+
}
|
176 |
+
if($('#sar_email_content').length > 0) {
|
177 |
+
wp.editor.initialize( 'sar_email_content' );
|
178 |
+
}
|
179 |
+
|
180 |
+
function spDsgvoMarkActiveAdminSubmenu(activeSlug)
|
181 |
+
{
|
182 |
+
$('a[href^="admin.php?page=sp-dsgvo&tab=info"]').css('color','#28a745');
|
183 |
+
$('a[href^="admin.php?page=sp-dsgvo&tab=info"]').css('font-weight','500');
|
184 |
+
|
185 |
+
if(document.URL.indexOf("admin.php?page=sp-dsgvo") < 0){
|
186 |
+
return;
|
187 |
+
}
|
188 |
+
|
189 |
+
//alert(activeSlug);
|
190 |
+
$('a[href*="admin.php?page=sp-dsgvo"]').each(function() {
|
191 |
+
$(this).parent().removeClass('current');
|
192 |
+
});
|
193 |
+
if(activeSlug == 'common-settings')
|
194 |
+
{
|
195 |
+
$('a[href$="admin.php?page=sp-dsgvo"]').parent().addClass('current');
|
196 |
+
} else {
|
197 |
+
$('a[href^="admin.php?page=sp-dsgvo&tab=' + activeSlug + '"]').parent().addClass('current');
|
198 |
+
}
|
199 |
+
}
|
200 |
+
|
201 |
+
spDsgvoMarkActiveAdminSubmenu(spDsgvoActiveAdminSubmenu);
|
202 |
+
|
203 |
+
// ***** page operator ****
|
204 |
+
$("#page_operator_type").on('change', function(){
|
205 |
+
var val = $(this).val();
|
206 |
+
|
207 |
+
$('.page-operator-type-container').hide();
|
208 |
+
$('.label-operator-type').hide();
|
209 |
+
var label = 'corporate';
|
210 |
+
if (val != '') label = 'oneman-private';
|
211 |
+
switch (val) {
|
212 |
+
case 'private': break;
|
213 |
+
case 'one-man': break;
|
214 |
+
case 'corporation': break;
|
215 |
+
case 'society': break;
|
216 |
+
}
|
217 |
+
$('.page-operator-type-container-'+val).show();
|
218 |
+
$('.label-operator-type-'+val).show();
|
219 |
+
|
220 |
+
});
|
221 |
+
|
222 |
+
$("#spdsgvo_company_info_countrycode").on('change', function(){
|
223 |
+
var val = $(this).val();
|
224 |
+
|
225 |
+
if (val)
|
226 |
+
{
|
227 |
+
$('.page-operator-container-us').show();
|
228 |
+
} else
|
229 |
+
{
|
230 |
+
$('.page-operator-container-us').hide();
|
231 |
+
}
|
232 |
+
|
233 |
+
});
|
234 |
+
|
235 |
+
|
236 |
+
$("input[name='operator_pp_responsibility_type']").change(function() {
|
237 |
+
|
238 |
+
$(".container-pp-responsibility").removeClass('spdsgvo-d-block').addClass('spdsgvo-d-none');
|
239 |
+
$(".container-dso-contact").removeClass('spdsgvo-d-block').addClass('spdsgvo-d-none');
|
240 |
+
|
241 |
+
let val = $("input[name=operator_pp_responsibility_type]:checked").val();
|
242 |
+
|
243 |
+
let visibleDsoTypeContainerId = '';
|
244 |
+
switch (val) {
|
245 |
+
case 'internal': visibleDsoTypeContainerId = 'container-pp-responsibility-internal'; break;
|
246 |
+
case 'external': visibleDsoTypeContainerId = 'container-pp-responsibility-external';break;
|
247 |
+
case 'none': visibleDsoTypeContainerId = 'container-pp-responsibility-none';break;
|
248 |
+
default: visibleDsoTypeContainerId = '';
|
249 |
+
}
|
250 |
+
|
251 |
+
if (visibleDsoTypeContainerId != '') $('#'+visibleDsoTypeContainerId).addClass('spdsgvo-d-block');
|
252 |
+
|
253 |
+
|
254 |
+
|
255 |
+
});
|
256 |
+
|
257 |
+
$("input[name='operator_pp_responsibility_contact']").change(function() {
|
258 |
+
|
259 |
+
$(".container-dso-contact").removeClass('spdsgvo-d-block').addClass('spdsgvo-d-none');
|
260 |
+
|
261 |
+
let val = $("input[name=operator_pp_responsibility_contact]:checked").val();
|
262 |
+
|
263 |
+
let visibleDsoContactContainerId = '';
|
264 |
+
|
265 |
+
switch (val) {
|
266 |
+
case 'internal': visibleDsoContactContainerId = 'container-dso-contact-internal'; break;
|
267 |
+
case 'external': visibleDsoContactContainerId = 'container-dso-contact-external'; break;
|
268 |
+
case 'no': visibleDsoContactContainerId = ''; break; // nothing to do here
|
269 |
+
default: visibleDsoContactContainerId = '';
|
270 |
+
}
|
271 |
+
|
272 |
+
if (visibleDsoContactContainerId != '') $('#'+visibleDsoContactContainerId).addClass('spdsgvo-d-block');
|
273 |
+
});
|
274 |
+
|
275 |
+
// page basics
|
276 |
+
$("#page_basics_hosting_provider_other").change(function() {
|
277 |
+
|
278 |
+
if($("#page_basics_hosting_provider_other").is(':checked'))
|
279 |
+
$("#container-other-provider").show(); // checked
|
280 |
+
else
|
281 |
+
$("#container-other-provider").hide(); // unchecked
|
282 |
+
});
|
283 |
+
|
284 |
+
$("#page_basics_use_logfiles").change(function() {
|
285 |
+
|
286 |
+
if($("#page_basics_use_logfiles").is(':checked'))
|
287 |
+
$("#container-logfiles-life").show(); // checked
|
288 |
+
else
|
289 |
+
$("#container-logfiles-life").hide(); // unchecked
|
290 |
+
});
|
291 |
+
|
292 |
+
$("#page_basics_use_cdn").change(function() {
|
293 |
+
|
294 |
+
if($("#page_basics_use_cdn").is(':checked'))
|
295 |
+
$("#container-basics-use-cdn").show(); // checked
|
296 |
+
else
|
297 |
+
$("#container-basics-use-cdn").hide(); // unchecked
|
298 |
+
});
|
299 |
+
|
300 |
+
$("#page_basics_cdn_provider_other").change(function() {
|
301 |
+
|
302 |
+
if($("#page_basics_cdn_provider_other").is(':checked'))
|
303 |
+
$("#container-other-cdn").show(); // checked
|
304 |
+
else
|
305 |
+
$("#container-other-cdn").hide(); // unchecked
|
306 |
+
});
|
307 |
+
|
308 |
+
$("#page_basics_use_payment_provider").change(function() {
|
309 |
+
|
310 |
+
if($("#page_basics_use_payment_provider").is(':checked'))
|
311 |
+
$("#container-basics-use-payment-provider").show(); // checked
|
312 |
+
else
|
313 |
+
$("#container-basics-use-payment-provider").hide(); // unchecked
|
314 |
+
});
|
315 |
+
|
316 |
+
$("#page_basics_font_provider_google-fonts").change(function() {
|
317 |
+
|
318 |
+
if($("#page_basics_font_provider_google-fonts").is(':checked'))
|
319 |
+
$("#container-block-google-fonts").show(); // checked
|
320 |
+
else
|
321 |
+
$("#container-block-google-fonts").hide(); // unchecked
|
322 |
+
});
|
323 |
+
|
324 |
+
$("#page_basics_forms_comments").change(function() {
|
325 |
+
|
326 |
+
if($("#page_basics_forms_comments").is(':checked'))
|
327 |
+
$(".container-basics-forms_comments").show(); // checked
|
328 |
+
else
|
329 |
+
$(".container-basics-forms_comments").hide(); // unchecked
|
330 |
+
});
|
331 |
+
|
332 |
+
$("#page_basics_security_provider_other").change(function() {
|
333 |
+
|
334 |
+
if($("#page_basics_security_provider_other").is(':checked'))
|
335 |
+
$("#container-other-security").show(); // checked
|
336 |
+
else
|
337 |
+
$("#container-other-security").hide(); // unchecked
|
338 |
+
});
|
339 |
+
|
340 |
+
$("#page_basics_use_newsletter_provider").change(function() {
|
341 |
+
|
342 |
+
if($("#page_basics_use_newsletter_provider").is(':checked'))
|
343 |
+
$("#container-basics-use-newsletter").show(); // checked
|
344 |
+
else
|
345 |
+
$("#container-basics-use-newsletter").hide(); // unchecked
|
346 |
+
});
|
347 |
+
|
348 |
+
$("#page_basics_newsletter_other").change(function() {
|
349 |
+
|
350 |
+
if($("#page_basics_newsletter_other").is(':checked'))
|
351 |
+
$("#container-other-newsletter").show(); // checked
|
352 |
+
else
|
353 |
+
$("#container-other-newsletter").hide(); // unchecked
|
354 |
+
});
|
355 |
+
|
356 |
+
$('#btnIncreaseCookieVersion').on('click tap', function (event) {
|
357 |
+
|
358 |
+
$('#cookie_version').val((new Date()).getTime());
|
359 |
+
});
|
360 |
+
|
361 |
+
/*
|
362 |
+
$(function() {
|
363 |
+
$('.color-field').wpColorPicker();
|
364 |
+
});
|
365 |
+
*/
|
366 |
+
});
|
367 |
+
})( jQuery );
|
368 |
+
|
369 |
+
|
370 |
+
|
371 |
+
/* i592995 */
|
372 |
+
// THIS PART OF THE SCRIPT ADDS UPLOAD IMAGE Buttons
|
373 |
+
|
374 |
+
jQuery( document ).ready( function( $ ) {
|
375 |
+
|
376 |
+
function prepareUpload($upload) {
|
377 |
+
// Uploading files
|
378 |
+
var file_frame;
|
379 |
+
var wp_media_post_id = wp.media.model.settings.post.id; // Store the old id
|
380 |
+
var set_to_post_id = $upload.find('.image-id').val(); // Set this
|
381 |
+
|
382 |
+
$upload.find('#logo_upload_image_button').on('click', function( event ){
|
383 |
+
event.preventDefault();
|
384 |
+
// If the media frame already exists, reopen it.
|
385 |
+
if ( file_frame ) {
|
386 |
+
// Set the post ID to what we want
|
387 |
+
file_frame.uploader.uploader.param( 'post_id', set_to_post_id );
|
388 |
+
// Open frame
|
389 |
+
file_frame.open();
|
390 |
+
return;
|
391 |
+
} else {
|
392 |
+
// Set the wp.media post id so the uploader grabs the ID we want when initialised
|
393 |
+
wp.media.model.settings.post.id = set_to_post_id;
|
394 |
+
}
|
395 |
+
// Create the media frame.
|
396 |
+
file_frame = wp.media.frames.file_frame = wp.media({
|
397 |
+
multiple: false // Set to true to allow multiple files to be selected
|
398 |
+
});
|
399 |
+
// When an image is selected, run a callback.
|
400 |
+
file_frame.on( 'select', function() {
|
401 |
+
// We set multiple to false so only get one image from the uploader
|
402 |
+
attachment = file_frame.state().get('selection').first().toJSON();
|
403 |
+
// Do something with attachment.id and/or attachment.url here
|
404 |
+
$upload.find('.image-preview').attr( 'src', attachment.url );
|
405 |
+
$upload.find('.image-id').val( attachment.id );
|
406 |
+
// Restore the main post ID
|
407 |
+
wp.media.model.settings.post.id = wp_media_post_id;
|
408 |
+
});
|
409 |
+
// Finally, open the modal
|
410 |
+
file_frame.open();
|
411 |
+
});
|
412 |
+
|
413 |
+
// Restore the main ID when the add media button is pressed
|
414 |
+
jQuery( 'a.add_media' ).on( 'click', function() {
|
415 |
+
wp.media.model.settings.post.id = wp_media_post_id;
|
416 |
+
});
|
417 |
+
}
|
418 |
+
|
419 |
+
$('.dsgvo-image-upload').each(function() {
|
420 |
+
var $this = $(this);
|
421 |
+
|
422 |
+
prepareUpload($this);
|
423 |
+
});
|
424 |
+
|
425 |
+
$('#own_code').on('change', function() {
|
426 |
+
var $this = $(this);
|
427 |
+
$this.toggleClass('active');
|
428 |
+
|
429 |
+
if($this.hasClass('active')) {
|
430 |
+
$('#ga_code').removeAttr('disabled');
|
431 |
+
$('#fb_pixel_code').removeAttr('disabled');
|
432 |
+
} else {
|
433 |
+
$('#ga_code').attr('disabled', 'disabled');
|
434 |
+
$('#fb_pixel_code').attr('disabled', 'disabled');
|
435 |
+
}
|
436 |
+
});
|
437 |
+
|
438 |
+
$('.own-code-toggle').on('change', function() {
|
439 |
+
var $this = $(this);
|
440 |
+
|
441 |
+
|
442 |
+
if($(this).is(':checked')) {
|
443 |
+
$(this).parents('.card-body').find('[class*="own-code-text"]').removeAttr('disabled');
|
444 |
+
} else {
|
445 |
+
$(this).parents('.card-body').find('[class*="own-code-text"]').attr('disabled', 'disabled');
|
446 |
+
}
|
447 |
+
});
|
448 |
+
|
449 |
+
$.fn.detectFont = function() {
|
450 |
+
var fonts = $(this).css('font-family').split(",");
|
451 |
+
if ( fonts.length == 1 )
|
452 |
+
return fonts[0];
|
453 |
+
|
454 |
+
var element = $(this);
|
455 |
+
var detectedFont = null;
|
456 |
+
fonts.forEach( function( font ) {
|
457 |
+
var clone = element.clone().css({'visibility': 'hidden', 'font-family': font}).appendTo('body');
|
458 |
+
if ( element.width() == clone.width() )
|
459 |
+
detectedFont = font;
|
460 |
+
clone.remove();
|
461 |
+
});
|
462 |
+
|
463 |
+
return detectedFont;
|
464 |
+
}
|
465 |
+
|
466 |
+
});
|
admin/tabs/common-settings/class-sp-dsgvo-common-settings-action.php
DELETED
@@ -1,46 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOCommonSettingsAction extends SPDSGVOAjaxAction
|
4 |
-
{
|
5 |
-
|
6 |
-
protected $action = 'admin-common-settings';
|
7 |
-
|
8 |
-
protected function run()
|
9 |
-
{
|
10 |
-
$this->checkCSRF();
|
11 |
-
$this->requireAdmin();
|
12 |
-
|
13 |
-
SPDSGVOSettings::set('admin_email', sanitize_email($this->get('admin_email', '')));
|
14 |
-
SPDSGVOSettings::set('use_wpml_strings', $this->get('use_wpml_strings', '0'));
|
15 |
-
|
16 |
-
SPDSGVOSettings::set('sp_dsgvo_comments_checkbox', $this->get('sp_dsgvo_comments_checkbox', '0'));
|
17 |
-
if (isValidBlogEdition() || isValidPremiumEdition())
|
18 |
-
{
|
19 |
-
|
20 |
-
}
|
21 |
-
|
22 |
-
SPDSGVOSettings::set('spdsgvo_comments_checkbox_info', $this->get('spdsgvo_comments_checkbox_info', ''));
|
23 |
-
SPDSGVOSettings::set('spdsgvo_comments_checkbox_confirm', $this->get('spdsgvo_comments_checkbox_confirm', ''));
|
24 |
-
SPDSGVOSettings::set('spdsgvo_comments_checkbox_text', $this->get('spdsgvo_comments_checkbox_text', ''));
|
25 |
-
SPDSGVOSettings::set('sp_dsgvo_cf7_acceptance_replace', $this->get('sp_dsgvo_cf7_acceptance_replace', ''));
|
26 |
-
|
27 |
-
SPDSGVOSettings::set('spdsgvo_company_info_name', $this->get('spdsgvo_company_info_name', ''));
|
28 |
-
SPDSGVOSettings::set('spdsgvo_company_info_street', $this->get('spdsgvo_company_info_street', ''));
|
29 |
-
SPDSGVOSettings::set('spdsgvo_company_info_loc_zip', $this->get('spdsgvo_company_info_loc_zip', ''));
|
30 |
-
SPDSGVOSettings::set('spdsgvo_company_fn_nr', $this->get('spdsgvo_company_fn_nr', ''));
|
31 |
-
SPDSGVOSettings::set('spdsgvo_company_law_loc', $this->get('spdsgvo_company_law_loc', ''));
|
32 |
-
SPDSGVOSettings::set('spdsgvo_company_uid_nr', $this->get('spdsgvo_company_uid_nr', ''));
|
33 |
-
SPDSGVOSettings::set('spdsgvo_company_law_person', $this->get('spdsgvo_company_law_person', ''));
|
34 |
-
SPDSGVOSettings::set('spdsgvo_company_chairmen', $this->get('spdsgvo_company_chairmen', ''));
|
35 |
-
SPDSGVOSettings::set('spdsgvo_company_resp_content', $this->get('spdsgvo_company_resp_content', ''));
|
36 |
-
SPDSGVOSettings::set('spdsgvo_company_info_phone', $this->get('spdsgvo_company_info_phone', ''));
|
37 |
-
SPDSGVOSettings::set('spdsgvo_company_info_fax', $this->get('spdsgvo_company_info_fax', ''));
|
38 |
-
SPDSGVOSettings::set('spdsgvo_company_info_email', $this->get('spdsgvo_company_info_email', ''));
|
39 |
-
SPDSGVOSettings::set('spdsgvo_newsletter_service', $this->get('spdsgvo_newsletter_service', ''));
|
40 |
-
SPDSGVOSettings::set('spdsgvo_newsletter_service_privacy_policy_url', $this->get('spdsgvo_newsletter_service_privacy_policy_url', ''));
|
41 |
-
|
42 |
-
$this->returnBack();
|
43 |
-
}
|
44 |
-
}
|
45 |
-
|
46 |
-
SPDSGVOCommonSettingsAction::listen();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/common-settings/page.php
DELETED
@@ -1,254 +0,0 @@
|
|
1 |
-
|
2 |
-
<h1><?php _e('Activate Blog/Premium','shapepress-dsgvo')?></h1>
|
3 |
-
|
4 |
-
<table class="form-table">
|
5 |
-
<tr>
|
6 |
-
<th scope="row"><?php _e('License','shapepress-dsgvo')?></th>
|
7 |
-
<td>
|
8 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>" style="display: inline">
|
9 |
-
<input type="hidden" name="action" value="admin-common-settings-activate">
|
10 |
-
<?php wp_nonce_field( SPDSGVOCommonSettingsActivateAction::getActionName(). '-nonce' ); ?>
|
11 |
-
<label for="dsgvo_licence"> <input name="dsgvo_licence"
|
12 |
-
type="text" id="dsgvo_licence" style="width: 200px"
|
13 |
-
value="<?= SPDSGVOSettings::get('dsgvo_licence'); ?>">
|
14 |
-
</label>
|
15 |
-
<?php if(SPDSGVOSettings::get('license_activated') === '1'): ?>
|
16 |
-
<input type="submit" class="button button-primary" value="<?= __('Deactivate license','shapepress-dsgvo')?>" />
|
17 |
-
<?php else: ?>
|
18 |
-
<input type="submit" class="button button-primary" value="<?= __('Activate license','shapepress-dsgvo')?>" />
|
19 |
-
<span class="info-text"><?php _e('Activating the license unlocks more features.','shapepress-dsgvo'); ?></span>
|
20 |
-
<?php endif; ?>
|
21 |
-
</form>
|
22 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>" style="display: inline">
|
23 |
-
<input type="hidden" name="action" value="admin-common-settings-validate-license">
|
24 |
-
<input type="submit" class="button button-secondary" value="<?= __('Refresh license','shapepress-dsgvo')?>" />
|
25 |
-
</form>
|
26 |
-
<?php if(licenseIsGoingToRunningOut()): ?>
|
27 |
-
<a href="<?= getExtensionProductUrl();?>" class="button button-secondary" style="background-color: #aed581;" target="_blank" ><?= __('Extend license now and gain discount','shapepress-dsgvo')?></a>
|
28 |
-
<?php endif; ?>
|
29 |
-
</td>
|
30 |
-
</tr>
|
31 |
-
<tr>
|
32 |
-
<th></th>
|
33 |
-
<td>
|
34 |
-
<?php if(SPDSGVOSettings::get('license_activated') === '1'): ?>
|
35 |
-
<div style="font-weight:500">
|
36 |
-
<?php if(isPremiumEdition()): ?>
|
37 |
-
<?= isValidPremiumEdition() ? _e('Premium version has been activated','shapepress-dsgvo') : ('<span style ="color: red;">'. __('Invalid or expired license.','shapepress-dsgvo'). "</span>"); ?>
|
38 |
-
<?php endif; ?>
|
39 |
-
<?php if(isBlogEdition()): ?>
|
40 |
-
<?= isValidBlogEdition() ? _e('Blog version has been activated','shapepress-dsgvo') : _e('Invalid license.','shapepress-dsgvo'); ?>
|
41 |
-
<?php endif; ?>
|
42 |
-
</div>
|
43 |
-
|
44 |
-
<?php if(isPremiumEdition() && SPDSGVOSettings::get('licence_details_fetched') === '1'): ?>
|
45 |
-
<div><div style="font-weight:500; width: 150px; float:left;"><?php _e('Activated on:','shapepress-dsgvo'); ?></div> <?= date("d.m.Y", strtotime(SPDSGVOSettings::get('licence_activated_on'))); ?></div>
|
46 |
-
<div><div style="font-weight:500; width: 150px; float:left;"><?php _e('Status:','shapepress-dsgvo'); ?></div> <?= SPDSGVOSettings::get('licence_status'); ?></div>
|
47 |
-
<?php if (isUnlimitedLicense(SPDSGVOSettings::get('dsgvo_licence')) == false) :?>
|
48 |
-
<div><div style="font-weight:500; width: 150px; float:left;"><?php _e('Valid to:','shapepress-dsgvo'); ?></div> <?= date("d.m.Y", strtotime(SPDSGVOSettings::get('licence_valid_to'))); ?></div>
|
49 |
-
<?php endif; ?>
|
50 |
-
<?php if( SPDSGVOSettings::get('licence_details_fetched_new') === '1'): ?>
|
51 |
-
<div><div style="font-weight:500; width: 150px; float:left;"><?php _e('Last validation:','shapepress-dsgvo'); ?></div> <?= date_i18n("d.m.Y H:i", strtotime(SPDSGVOSettings::get('licence_details_fetched_on'))); ?></div>
|
52 |
-
<div><div style="font-weight:500; width: 150px; float:left;"><?php _e('Remaining activations:','shapepress-dsgvo'); ?></div> <?= SPDSGVOSettings::get('licence_number_use_remaining'); ?></div>
|
53 |
-
<?php endif; ?>
|
54 |
-
<?php endif; ?>
|
55 |
-
<?php else: ?>
|
56 |
-
<span class="info-text"><?php _e('Activating the license unlocks more features.','shapepress-dsgvo'); ?></span>
|
57 |
-
<?php endif; ?>
|
58 |
-
</td>
|
59 |
-
</tr>
|
60 |
-
<tr>
|
61 |
-
<th></th>
|
62 |
-
<td></td>
|
63 |
-
</tr>
|
64 |
-
</table>
|
65 |
-
|
66 |
-
|
67 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
68 |
-
<input type="hidden" name="action" value="admin-common-settings">
|
69 |
-
<?php wp_nonce_field( SPDSGVOCommonSettingsAction::getActionName(). '-nonce' ); ?>
|
70 |
-
<input type="hidden" value="<?= SPDSGVOSettings::get('dsgvo_licence'); ?>" id="dsgvo_licence_hidden" name="dsgvo_licence_hidden" />
|
71 |
-
|
72 |
-
<h1><?php _e('Common Settings','shapepress-dsgvo')?></h1>
|
73 |
-
|
74 |
-
<table class="form-table">
|
75 |
-
<tr>
|
76 |
-
<th scope="row"><?php _e('Admin Email','shapepress-dsgvo')?></th>
|
77 |
-
<td><label for="admin_email"> <input name="admin_email"
|
78 |
-
type="text" id="admin_email" style="width: 300px"
|
79 |
-
value="<?= esc_html( SPDSGVOSettings::get('admin_email')); ?>">
|
80 |
-
</label><span class="info-text"><?php _e('Used by sending emails.','shapepress-dsgvo')?></span></td>
|
81 |
-
</tr>
|
82 |
-
<!--
|
83 |
-
<tr>
|
84 |
-
<th scope="row"><?php _e('Use WPML Strings','shapepress-dsgvo')?></th>
|
85 |
-
<td><label for="use_wpml_strings"> <input
|
86 |
-
name="use_wpml_strings" type="checkbox"
|
87 |
-
id="use_wpml_strings" value="1"
|
88 |
-
<?= (SPDSGVOSettings::get('use_wpml_strings') === '1')? ' checked ' : ''; ?>>
|
89 |
-
</label><span class="info-text"><?php _e('Use WPML String Translation for text inputs. (E.g. Checkbox for comments.)','shapepress-dsgvo')?></span></td>
|
90 |
-
</tr>
|
91 |
-
-->
|
92 |
-
</table>
|
93 |
-
|
94 |
-
<?php if (isLicenceValid()) : ?>
|
95 |
-
<h2><?php _e('Comments','shapepress-dsgvo')?></h2>
|
96 |
-
<?php else : ?>
|
97 |
-
<h2><?php _e('Comments','shapepress-dsgvo')?></h2><span style="color: orange"><?php _e('Customizing possible with Blog/Premium edition.','shapepress-dsgvo')?></span>
|
98 |
-
<small><a href="https://www.wp-dsgvo.eu/shop"><?php _e('Click here to get a license.','shapepress-dsgvo')?></a></small>
|
99 |
-
<?php endif; ?>
|
100 |
-
<?php $disableCommentInputs = isLicenceValid() == false; ?>
|
101 |
-
<table class="form-table">
|
102 |
-
<tr>
|
103 |
-
<th scope="row"><?php _e('Checkbox for comments:','shapepress-dsgvo')?></th>
|
104 |
-
<td><label for="sp_dsgvo_comments_checkbox"> <input
|
105 |
-
name="sp_dsgvo_comments_checkbox" type="checkbox"
|
106 |
-
id="sp_dsgvo_comments_checkbox" value="1"
|
107 |
-
<?= (SPDSGVOSettings::get('sp_dsgvo_comments_checkbox') === '1')? ' checked ' : ''; ?>>
|
108 |
-
</label><span class="info-text"><?php _e('Displays at checkbox which requires confirmation when creating a comment.','shapepress-dsgvo')?></span>
|
109 |
-
<span class="info-text"><?php _e('Important: Not compatible in combination with Jetpack comment form.','shapepress-dsgvo')?></span>
|
110 |
-
</td>
|
111 |
-
</tr>
|
112 |
-
<?php if (class_exists('WPCF7_ContactForm')) : ?>
|
113 |
-
<tr>
|
114 |
-
|
115 |
-
<td><?php _e('Replace CF7 Acceptance text','shapepress-dsgvo')?></td>
|
116 |
-
<td><label for="sp_dsgvo_cf7_acceptance_replace"> <input
|
117 |
-
name="sp_dsgvo_cf7_acceptance_replace" type="checkbox"
|
118 |
-
id="sp_dsgvo_cf7_acceptance_replace" value="1"
|
119 |
-
<?= (SPDSGVOSettings::get('sp_dsgvo_cf7_acceptance_replace') === '1')? ' checked ' : ''; ?>>
|
120 |
-
</label><span class="info-text"><?php _e('Replaces the text of CF7 Acceptance Checkboxes with following text. (Add to your form: [acceptance dsgvo] Text[/acceptance])','shapepress-dsgvo')?></span></td>
|
121 |
-
</tr>
|
122 |
-
<?php endif; ?>
|
123 |
-
<tr>
|
124 |
-
<th scope="row"><?php _e('Text','shapepress-dsgvo')?></th>
|
125 |
-
<td><label for="spdsgvo_comments_checkbox_text"> <textarea name="spdsgvo_comments_checkbox_text"
|
126 |
-
placeholder="<?php _e('Message text:','shapepress-dsgvo')?>" id="spdsgvo_comments_checkbox_text" rows="3"
|
127 |
-
<?= $disableCommentInputs ? 'disabled' : ''; ?>
|
128 |
-
style="width: 100%"><?= htmlentities(SPDSGVOSettings::get('spdsgvo_comments_checkbox_text')) ?></textarea>
|
129 |
-
</label></td>
|
130 |
-
</tr>
|
131 |
-
<tr>
|
132 |
-
<th scope="row"><?php _e('Info text:','shapepress-dsgvo')?></th>
|
133 |
-
<td><label for="spdsgvo_comments_checkbox_info"> <input
|
134 |
-
name="spdsgvo_comments_checkbox_info" type="text" style="width: 500px"
|
135 |
-
<?= $disableCommentInputs ? 'disabled' : ''; ?>
|
136 |
-
id="spdsgvo_comments_checkbox_info" value="<?= htmlentities(SPDSGVOSettings::get('spdsgvo_comments_checkbox_info')); ?>">
|
137 |
-
</label></td>
|
138 |
-
</tr>
|
139 |
-
<tr>
|
140 |
-
<th scope="row"><?php _e('Confirmation text','shapepress-dsgvo')?></th>
|
141 |
-
<td><label for="spdsgvo_comments_checkbox_confirm"> <input
|
142 |
-
name="spdsgvo_comments_checkbox_confirm" type="text" style="width: 300px"
|
143 |
-
<?= $disableCommentInputs ? 'disabled' : ''; ?>
|
144 |
-
id="spdsgvo_comments_checkbox_confirm" value="<?= htmlentities(SPDSGVOSettings::get('spdsgvo_comments_checkbox_confirm')); ?>">
|
145 |
-
</label></td>
|
146 |
-
</tr>
|
147 |
-
</table>
|
148 |
-
|
149 |
-
<p><?php _e('<strong>Important Note:</strong> If you use WPML you can translate these inputs via WPML String Translations.','shapepress-dsgvo')?></p>
|
150 |
-
|
151 |
-
|
152 |
-
<hr class="sp-dsgvo">
|
153 |
-
|
154 |
-
<h2><?php _e('Company data','shapepress-dsgvo')?></h2>
|
155 |
-
<p><?php _e('The following input fields represent the basic data necessary for the creation of GDPR compliant data protection regulations and an imprint.<br />All entries made here are automatically used in the privacy policy and imprint generated by the WP DSGVO Tools Plugin.','shapepress-dsgvo')?></p>
|
156 |
-
|
157 |
-
<table class="form-table">
|
158 |
-
<tr>
|
159 |
-
<td><?php _e('Company name:','shapepress-dsgvo')?></td>
|
160 |
-
<td><label for="spdsgvo_company_info_name"> <input name="spdsgvo_company_info_name"
|
161 |
-
type="text" id="spdsgvo_company_info_name" style="width: 300px"
|
162 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_company_info_name'); ?>">
|
163 |
-
</label><span class="info-text"></span></td>
|
164 |
-
</tr>
|
165 |
-
<tr>
|
166 |
-
<td><?php _e('Street:','shapepress-dsgvo')?></td>
|
167 |
-
<td><label for="spdsgvo_company_info_street"> <input name="spdsgvo_company_info_street"
|
168 |
-
type="text" id="spdsgvo_company_info_street" style="width: 300px"
|
169 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_company_info_street'); ?>">
|
170 |
-
</label><span class="info-text"></span></td>
|
171 |
-
</tr>
|
172 |
-
<tr>
|
173 |
-
<td><?php _e('ZIP + Location:','shapepress-dsgvo')?></td>
|
174 |
-
<td><label for="spdsgvo_company_info_loc_zip"> <input name="spdsgvo_company_info_loc_zip"
|
175 |
-
type="text" id="spdsgvo_company_info_loc_zip" style="width: 300px"
|
176 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_company_info_loc_zip'); ?>">
|
177 |
-
</label><span class="info-text"></span></td>
|
178 |
-
</tr>
|
179 |
-
<tr>
|
180 |
-
<td><?php _e('Commercial book no.:','shapepress-dsgvo')?></td>
|
181 |
-
<td><label for="spdsgvo_company_fn_nr"> <input name="spdsgvo_company_fn_nr"
|
182 |
-
type="text" id="spdsgvo_company_fn_nr" style="width: 300px"
|
183 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_company_fn_nr'); ?>">
|
184 |
-
</label><span class="info-text"></span></td>
|
185 |
-
</tr>
|
186 |
-
<tr>
|
187 |
-
<td><?php _e('§11 Place of Jurisdiction:','shapepress-dsgvo')?></td>
|
188 |
-
<td><label for="spdsgvo_company_law_loc"> <input name="spdsgvo_company_law_loc"
|
189 |
-
type="text" id="spdsgvo_company_law_loc" style="width: 300px"
|
190 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_company_law_loc'); ?>">
|
191 |
-
</label><span class="info-text"></span></td>
|
192 |
-
</tr>
|
193 |
-
<tr>
|
194 |
-
<td><?php _e('VAT No.:','shapepress-dsgvo')?></td>
|
195 |
-
<td><label for="spdsgvo_company_uid_nr"> <input name="spdsgvo_company_uid_nr"
|
196 |
-
type="text" id="spdsgvo_company_uid_nr" style="width: 300px"
|
197 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_company_uid_nr'); ?>">
|
198 |
-
</label><span class="info-text"></span></td>
|
199 |
-
</tr>
|
200 |
-
<tr>
|
201 |
-
<td><?php _e('Legal representatives:','shapepress-dsgvo')?></td>
|
202 |
-
<td><label for="spdsgvo_company_law_person"> <input name="spdsgvo_company_law_person"
|
203 |
-
type="text" id="spdsgvo_company_law_person" style="width: 300px"
|
204 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_company_law_person'); ?>">
|
205 |
-
</label><span class="info-text"><?php _e('The person who legally represents the company.','shapepress-dsgvo')?></span></td>
|
206 |
-
</tr>
|
207 |
-
<tr>
|
208 |
-
<td><?php _e('Shareholder','shapepress-dsgvo')?></td>
|
209 |
-
<td><label for="spdsgvo_company_chairmen"> <input name="spdsgvo_company_chairmen"
|
210 |
-
type="text" id="spdsgvo_company_chairmen" style="width: 300px"
|
211 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_company_chairmen'); ?>">
|
212 |
-
</label><span class="info-text"><?php _e('In case of companies please contact all shareholders here.','shapepress-dsgvo')?></span></td>
|
213 |
-
</tr>
|
214 |
-
<tr>
|
215 |
-
<td><?php _e('Responsible for content:','shapepress-dsgvo')?></td>
|
216 |
-
<td><label for="spdsgvo_company_resp_content"> <input name="spdsgvo_company_resp_content"
|
217 |
-
type="text" id="spdsgvo_company_resp_content" style="width: 300px"
|
218 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_company_resp_content'); ?>">
|
219 |
-
</label><span class="info-text"><?php _e('The person responsible for the content on this website.','shapepress-dsgvo')?></span></td>
|
220 |
-
</tr>
|
221 |
-
<tr>
|
222 |
-
<td><?php _e('Phone:','shapepress-dsgvo')?></td>
|
223 |
-
<td><label for="spdsgvo_company_info_phone"> <input name="spdsgvo_company_info_phone"
|
224 |
-
type="text" id="spdsgvo_company_info_phone" style="width: 300px"
|
225 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_company_info_phone'); ?>">
|
226 |
-
</label><span class="info-text"></span></td>
|
227 |
-
</tr>
|
228 |
-
<tr>
|
229 |
-
<td><?php _e('Email:','shapepress-dsgvo')?></td>
|
230 |
-
<td><label for="spdsgvo_company_info_email"> <input name="spdsgvo_company_info_email"
|
231 |
-
type="text" id="spdsgvo_company_info_email" style="width: 300px"
|
232 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_company_info_email'); ?>">
|
233 |
-
</label><span class="info-text"></span></td>
|
234 |
-
</tr>
|
235 |
-
<tr>
|
236 |
-
<td><?php _e('Newsletter service:','shapepress-dsgvo')?></td>
|
237 |
-
<td><label for="spdsgvo_newsletter_service"> <input name="spdsgvo_newsletter_service"
|
238 |
-
type="text" id="spdsgvo_newsletter_service" style="width: 300px"
|
239 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_newsletter_service'); ?>">
|
240 |
-
</label><span class="info-text"><?php _e('Name of the shipping service provider with which the newsletters will be sent.','shapepress-dsgvo')?></span></td>
|
241 |
-
</tr>
|
242 |
-
<tr>
|
243 |
-
<td><?php _e('URL Privacy Police of Newsletter Service:','shapepress-dsgvo')?></td>
|
244 |
-
<td><label for="spdsgvo_newsletter_service_privacy_policy_url"> <input name="spdsgvo_newsletter_service_privacy_policy_url"
|
245 |
-
type="text" id="spdsgvo_newsletter_service_privacy_policy_url" style="width: 300px"
|
246 |
-
value="<?= SPDSGVOSettings::get('spdsgvo_newsletter_service_privacy_policy_url'); ?>">
|
247 |
-
</label><span class="info-text"><?php _e('The URL to the terms of the newsletter service.','shapepress-dsgvo')?></span></td>
|
248 |
-
</tr>
|
249 |
-
</table>
|
250 |
-
|
251 |
-
|
252 |
-
<br>
|
253 |
-
<?php submit_button(); ?>
|
254 |
-
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/cookie-notice/class-sp-dsgvo-cookie-notice-action.php
DELETED
@@ -1,88 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOCookieNoticeAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'admin-cookie-notice';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->checkCSRF();
|
9 |
-
$this->requireAdmin();
|
10 |
-
|
11 |
-
SPDSGVOSettings::set('cn_tracker_init', $this->get('cn_tracker_init', 'on_load'));
|
12 |
-
|
13 |
-
SPDSGVOSettings::set('ga_enable_analytics', $this->get('ga_enable_analytics', '0'));
|
14 |
-
SPDSGVOSettings::set('ga_tag_number', $this->get('ga_tag_number', ''));
|
15 |
-
|
16 |
-
SPDSGVOSettings::set('fb_enable_pixel', $this->get('fb_enable_pixel', '0'));
|
17 |
-
SPDSGVOSettings::set('fb_pixel_number', $this->get('fb_pixel_number', ''));
|
18 |
-
|
19 |
-
SPDSGVOSettings::set('display_cookie_notice', $this->get('display_cookie_notice', '0'));
|
20 |
-
SPDSGVOSettings::set('cookie_notice_custom_text', $this->get('cookie_notice_custom_text', ''));
|
21 |
-
SPDSGVOSettings::set('cn_cookie_validity', $this->get('cn_cookie_validity', '86400'));
|
22 |
-
|
23 |
-
SPDSGVOSettings::set('cn_button_text_ok', $this->get('cn_button_text_ok', ''));
|
24 |
-
SPDSGVOSettings::set('cn_reload_on_confirm', $this->get('cn_reload_on_confirm', '0'));
|
25 |
-
|
26 |
-
SPDSGVOSettings::set('cn_activate_cancel_btn', $this->get('cn_activate_cancel_btn', '0'));
|
27 |
-
SPDSGVOSettings::set('cn_button_text_cancel', $this->get('cn_button_text_cancel', ''));
|
28 |
-
SPDSGVOSettings::set('cn_decline_target_url', $this->get('cn_decline_target_url', ''));
|
29 |
-
SPDSGVOSettings::set('cn_decline_no_cookie', $this->get('cn_decline_no_cookie', '0'));
|
30 |
-
|
31 |
-
SPDSGVOSettings::set('cn_activate_more_btn', $this->get('cn_activate_more_btn', '0'));
|
32 |
-
SPDSGVOSettings::set('cn_button_text_more', $this->get('cn_button_text_more', ''));
|
33 |
-
SPDSGVOSettings::set('cn_read_more_page', $this->get('cn_read_more_page', ''));
|
34 |
-
|
35 |
-
SPDSGVOSettings::set('cn_position', $this->get('cn_position', 'bottom'));
|
36 |
-
SPDSGVOSettings::set('cn_animation', $this->get('cn_animation', 'none'));
|
37 |
-
SPDSGVOSettings::set('cookie_notice_display', $this->get('cookie_notice_display', 'no_popup'));
|
38 |
-
|
39 |
-
SPDSGVOSettings::set('cn_show_dsgvo_icon', $this->get('cn_show_dsgvo_icon', '0'));
|
40 |
-
|
41 |
-
if (isValidBlogEdition() || isValidPremiumEdition())
|
42 |
-
{
|
43 |
-
SPDSGVOSettings::set('cn_background_color', $this->get('cn_background_color', '#333333'));
|
44 |
-
SPDSGVOSettings::set('cn_text_color', $this->get('cn_text_color', '#ffffff'));
|
45 |
-
SPDSGVOSettings::set('cn_background_color_button', $this->get('cn_background_color_button', '#F3F3F3'));
|
46 |
-
SPDSGVOSettings::set('cn_text_color_button', $this->get('cn_text_color_button', '#333333'));
|
47 |
-
SPDSGVOSettings::set('cn_custom_css_container', $this->get('cn_custom_css_container', ''));
|
48 |
-
SPDSGVOSettings::set('cn_custom_css_text', $this->get('cn_custom_css_text', ''));
|
49 |
-
SPDSGVOSettings::set('cn_custom_css_buttons', $this->get('cn_custom_css_buttons', ''));
|
50 |
-
|
51 |
-
SPDSGVOSettings::set('cn_size_text', $this->get('cn_size_text', 'auto'));
|
52 |
-
SPDSGVOSettings::set('cn_height_container', $this->get('cn_height_container', 'auto'));
|
53 |
-
SPDSGVOSettings::set('cn_use_overlay', $this->get('cn_use_overlay', '0'));
|
54 |
-
}
|
55 |
-
|
56 |
-
if (isValidPremiumEdition() || isValidBlogEdition())
|
57 |
-
{
|
58 |
-
SPDSGVOSettings::set('ga_code', $this->get('ga_code', ''));
|
59 |
-
SPDSGVOSettings::set('fb_pixel_code', $this->get('fb_pixel_code', ''));
|
60 |
-
SPDSGVOSettings::set('own_code', $this->get('own_code', ''));
|
61 |
-
}
|
62 |
-
|
63 |
-
if (isValidPremiumEdition())
|
64 |
-
{
|
65 |
-
/* i592995 */
|
66 |
-
SPDSGVOSettings::set('logo_image_id', $this->get('logo_image_id', ''));
|
67 |
-
SPDSGVOSettings::set('close_button_action', $this->get('close_button_action', '0'));
|
68 |
-
SPDSGVOSettings::set('close_button_url', $this->get('close_button_url', ''));
|
69 |
-
SPDSGVOSettings::set('accept_button_text', $this->get('accept_button_text', ''));
|
70 |
-
SPDSGVOSettings::set('more_options_button_text', $this->get('more_options_button_text', ''));
|
71 |
-
SPDSGVOSettings::set('accordion_top', $this->get('accordion_top', ''));
|
72 |
-
SPDSGVOSettings::set('popup_background', $this->get('popup_background', '#ffffff'));
|
73 |
-
SPDSGVOSettings::set('separators_color', $this->get('separators_color', '#f1f1f1'));
|
74 |
-
SPDSGVOSettings::set('text_color', $this->get('text_color', '#222222'));
|
75 |
-
SPDSGVOSettings::set('links_color', $this->get('links_color', '#4285f'));
|
76 |
-
SPDSGVOSettings::set('links_color_hover', $this->get('links_color_hover', '#4285f'));
|
77 |
-
SPDSGVOSettings::set('accept_button_text_color', $this->get('accept_button_text_color', '#ffffff'));
|
78 |
-
SPDSGVOSettings::set('accept_button_bg_color', $this->get('accept_button_bg_color', '#4285f'));
|
79 |
-
SPDSGVOSettings::set('cn_reload_on_confirm_popup', $this->get('cn_reload_on_confirm_popup', '0'));
|
80 |
-
/* i592995 */
|
81 |
-
SPDSGVOSettings::set('cn_cookie_validity_popup', $this->get('cn_cookie_validity_popup', '86400'));
|
82 |
-
}
|
83 |
-
|
84 |
-
$this->returnBack();
|
85 |
-
}
|
86 |
-
}
|
87 |
-
|
88 |
-
SPDSGVOCookieNoticeAction::listen();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/cookie-notice/page.php
DELETED
@@ -1,729 +0,0 @@
|
|
1 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
2 |
-
<input type="hidden" name="action" value="admin-cookie-notice">
|
3 |
-
<?php wp_nonce_field( SPDSGVOCookieNoticeAction::getActionName(). '-nonce' ); ?>
|
4 |
-
|
5 |
-
<h1><?php _e('Cookie Notice','shapepress-dsgvo')?></h1>
|
6 |
-
|
7 |
-
<table class="form-table">
|
8 |
-
<tr>
|
9 |
-
<th scope="row"><?php _e('Tracker initialization:','shapepress-dsgvo')?></th>
|
10 |
-
<td>
|
11 |
-
<?php $cnTrackerInit = SPDSGVOSettings::get('cn_tracker_init'); ?>
|
12 |
-
<label for="cn_tracker_init"> <select name="cn_tracker_init"
|
13 |
-
id="cn_tracker_init">
|
14 |
-
<option value="on_load" <?= selected($cnTrackerInit == 'on_load') ?>> <?php _e('When loading the page','shapepress-dsgvo')?></option>
|
15 |
-
<option value="after_confirm" <?= selected($cnTrackerInit == 'after_confirm') ?>><?php _e('After approval of the cookie','shapepress-dsgvo')?></option>
|
16 |
-
</select>
|
17 |
-
</label> <span class="info-text"><?php _e('Specifies when the trackers should be active. Whether before the consent of the cookie or after clicking on Ok. For After approval Reload after approval must be checked.','shapepress-dsgvo')?></span>
|
18 |
-
</td>
|
19 |
-
</tr>
|
20 |
-
</table>
|
21 |
-
|
22 |
-
<table class="form-table" style="margin-top: 0">
|
23 |
-
<tbody>
|
24 |
-
<tr>
|
25 |
-
<td style="width: 50%;">
|
26 |
-
<table class="form-table">
|
27 |
-
<tr>
|
28 |
-
<th scope="row"><?php _e('Google Analyics','shapepress-dsgvo')?></th>
|
29 |
-
<td><label for="ga_enable_analytics"> <input
|
30 |
-
name="ga_enable_analytics" type="checkbox"
|
31 |
-
id="ga_enable_analytics" value="1"
|
32 |
-
<?= (SPDSGVOSettings::get('ga_enable_analytics') === '1')? ' checked ' : ''; ?>>
|
33 |
-
</label></td>
|
34 |
-
</tr>
|
35 |
-
<tr>
|
36 |
-
<th scope="row"><?php _e('GTAG number:','shapepress-dsgvo')?></th>
|
37 |
-
<td><label for="ga_tag_number"> <input name="ga_tag_number"
|
38 |
-
type="text" id="ga_tag_number" placeholder="XX-XXXXXX-X"
|
39 |
-
value="<?= SPDSGVOSettings::get('ga_tag_number'); ?>">
|
40 |
-
</label></td>
|
41 |
-
</tr>
|
42 |
-
|
43 |
-
<tr>
|
44 |
-
<td colspan="2" class="info-text"><?php _e('The IP address will be anonymously and visitors get the option refuse tracking. <br />Tip: Country specific geodata will be further tracked even with anonymization.','shapepress-dsgvo')?>
|
45 |
-
</td>
|
46 |
-
</tr>
|
47 |
-
</table>
|
48 |
-
</td>
|
49 |
-
<td style="width: 50%:">
|
50 |
-
<table class="form-table">
|
51 |
-
<tr>
|
52 |
-
<th scope="row"><?php _e('Facebook Pixel','shapepress-dsgvo')?></th>
|
53 |
-
<td><label for="fb_enable_pixel"> <input name="fb_enable_pixel"
|
54 |
-
type="checkbox" id="fb_enable_pixel" value="1"
|
55 |
-
<?= (SPDSGVOSettings::get('fb_enable_pixel') === '1')? ' checked ' : ''; ?>>
|
56 |
-
</label></td>
|
57 |
-
</tr>
|
58 |
-
<tr>
|
59 |
-
<th scope="row"><?php _e('FB Pixel Id:','shapepress-dsgvo')?></th>
|
60 |
-
<td><label for="fb_pixel_number"> <input name="fb_pixel_number"
|
61 |
-
type="text" id="fb_pixel_number" placeholder="123456789"
|
62 |
-
value="<?= SPDSGVOSettings::get('fb_pixel_number'); ?>">
|
63 |
-
</label></td>
|
64 |
-
</tr>
|
65 |
-
|
66 |
-
<tr>
|
67 |
-
<td colspan="2" style="vertical-align: top" class="info-text"><?php _e('Visitors maintained the opportunity to reject the tracking.','shapepress-dsgvo')?></td>
|
68 |
-
</tr>
|
69 |
-
</table>
|
70 |
-
</td>
|
71 |
-
</tr>
|
72 |
-
|
73 |
-
<!-- i592995 -->
|
74 |
-
<?php $disableOwnTracker = (isValidBlogEdition() || isValidPremiumEdition()) == false; ?>
|
75 |
-
<tr>
|
76 |
-
<th scope="row">
|
77 |
-
<?php _e('Use your own Codes (at own risk)','shapepress-dsgvo')?>
|
78 |
-
<label for="own_code"> <input
|
79 |
-
name="own_code" type="checkbox"
|
80 |
-
id="own_code" value="1"
|
81 |
-
<?= $disableOwnTracker ? 'disabled' : true; ?>
|
82 |
-
<?= (SPDSGVOSettings::get('own_code') === '1')? ' checked ' : ''; ?>>
|
83 |
-
</label>
|
84 |
-
</th>
|
85 |
-
<td>
|
86 |
-
</td>
|
87 |
-
</tr>
|
88 |
-
|
89 |
-
<tr>
|
90 |
-
<td>
|
91 |
-
<table class="form-table">
|
92 |
-
|
93 |
-
<?php
|
94 |
-
$ga_code = SPDSGVOSettings::get('ga_code', '');
|
95 |
-
if($ga_code == '') {
|
96 |
-
$ga_code = googleAnalyticsScript(true);
|
97 |
-
}
|
98 |
-
?>
|
99 |
-
|
100 |
-
<tr>
|
101 |
-
<th scope="row"><?php _e('Google Analytics code:','shapepress-dsgvo')?></th>
|
102 |
-
<td>
|
103 |
-
<label for="ga_code">
|
104 |
-
<textarea id="ga_code" name="ga_code" class="ga-code" <?= (SPDSGVOSettings::get('own_code') === '1')? '' : 'disabled'; ?>>
|
105 |
-
<?php echo $ga_code; ?>
|
106 |
-
</textarea>
|
107 |
-
<?php _e('If left blank, the standard GA script will be used','shapepress-dsgvo'); ?>
|
108 |
-
</label>
|
109 |
-
</td>
|
110 |
-
</tr>
|
111 |
-
<!-- .i592995 -->
|
112 |
-
</table>
|
113 |
-
</td>
|
114 |
-
<td>
|
115 |
-
<table class="form-table">
|
116 |
-
<!-- .i592995 -->
|
117 |
-
|
118 |
-
<?php
|
119 |
-
$fb_pixel_code = SPDSGVOSettings::get('fb_pixel_code', '');
|
120 |
-
if($fb_pixel_code == '') {
|
121 |
-
$fb_pixel_code = facebookPixelScript(true);
|
122 |
-
}
|
123 |
-
?>
|
124 |
-
|
125 |
-
<tr>
|
126 |
-
<th scope="row"><?php _e('Facebook Pixel code:','shapepress-dsgvo')?></th>
|
127 |
-
<td>
|
128 |
-
<label for="fb_pixel_code">
|
129 |
-
<textarea id="fb_pixel_code" name="fb_pixel_code" class="fb-pixel-code" <?= (SPDSGVOSettings::get('own_code') === '1')? '' : 'disabled'; ?>>
|
130 |
-
<?php echo $fb_pixel_code; ?>
|
131 |
-
</textarea>
|
132 |
-
<?php _e('If left blank, the standard FB Pixel script will be used. [pixel_number] will be replaced with FB Pixel ID.','shapepress-dsgvo'); ?>
|
133 |
-
</label>
|
134 |
-
</td>
|
135 |
-
</tr>
|
136 |
-
</table>
|
137 |
-
</td>
|
138 |
-
</tr>
|
139 |
-
|
140 |
-
<!-- i592995 -->
|
141 |
-
|
142 |
-
</table>
|
143 |
-
<hr class="sp-dsgvo">
|
144 |
-
|
145 |
-
<p><?php _e('<strong>Important Note:</strong> If you use WPML you can translate these inputs via WPML String Translations.','shapepress-dsgvo')?></p>
|
146 |
-
|
147 |
-
<!-- i592995 -->
|
148 |
-
<table class="form-table">
|
149 |
-
<tr>
|
150 |
-
<th scope="row"><?php _e('Notice type','shapepress-dsgvo')?></th>
|
151 |
-
<td>
|
152 |
-
<label for="cookie_notice_display">
|
153 |
-
<select id="cookie_notice_display" name="cookie_notice_display">
|
154 |
-
<option value="no_popup" <?php if(SPDSGVOSettings::get('cookie_notice_display') == 'no_popup') {echo 'selected';} ?>><?php _e('No notice','shapepress-dsgvo')?></option>
|
155 |
-
<option value="cookie_notice" <?php if(SPDSGVOSettings::get('cookie_notice_display') == 'cookie_notice') {echo 'selected';} ?>><?php _e('Cookie Notice','shapepress-dsgvo')?></option>
|
156 |
-
<?php if(isValidPremiumEdition()):?>
|
157 |
-
<option value="policy_popup" <?php if(SPDSGVOSettings::get('cookie_notice_display') == 'policy_popup') {echo 'selected';} ?>><?php _e('Privacy Popup','shapepress-dsgvo')?></option>
|
158 |
-
<?php endif?>
|
159 |
-
</select><!-- #cookie_notice_display -->
|
160 |
-
</label>
|
161 |
-
</td>
|
162 |
-
</tr>
|
163 |
-
</table>
|
164 |
-
|
165 |
-
<table class="form-table policy-popup-settings" id="policy_popup_settings">
|
166 |
-
|
167 |
-
<tr>
|
168 |
-
<th scope="row"><?php _e('Validity:','shapepress-dsgvo')?></th>
|
169 |
-
<td>
|
170 |
-
<?php $cnCookieValidity = SPDSGVOSettings::get('cn_cookie_validity_popup'); ?>
|
171 |
-
<label for="cn_cookie_validity_popup"> <select name="cn_cookie_validity_popup"
|
172 |
-
id="cn_cookie_validity_popup">
|
173 |
-
<option value="86400" <?= selected($cnCookieValidity == 86400) ?>>1
|
174 |
-
<?php _e('Day','shapepress-dsgvo')?></option>
|
175 |
-
<option value="604800" <?= selected($cnCookieValidity == 604800) ?>>1
|
176 |
-
<?php _e('Week','shapepress-dsgvo')?></option>
|
177 |
-
<option value="2592000"
|
178 |
-
<?= selected($cnCookieValidity == 2592000) ?>>1 <?php _e('Month','shapepress-dsgvo')?></option>
|
179 |
-
<option value="7862400"
|
180 |
-
<?= selected($cnCookieValidity == 7862400) ?>>2 <?php _e('Month','shapepress-dsgvo')?></option>
|
181 |
-
<option value="15811200"
|
182 |
-
<?= selected($cnCookieValidity == 15811200) ?>>6 <?php _e('Month','shapepress-dsgvo')?></option>
|
183 |
-
<option value="31536000"
|
184 |
-
<?= selected($cnCookieValidity == 31536000) ?>>1 <?php _e('Year','shapepress-dsgvo')?></option>
|
185 |
-
</select>
|
186 |
-
</label> <span class="info-text"><?php _e('For this period, the cookie is navigation use validly.','shapepress-dsgvo')?></span>
|
187 |
-
</td>
|
188 |
-
</tr>
|
189 |
-
|
190 |
-
<tr>
|
191 |
-
<th scope="row"><?php _e('Popup logo','shapepress-dsgvo')?></th>
|
192 |
-
<td>
|
193 |
-
<?php
|
194 |
-
$src = '';
|
195 |
-
$img_id = '';
|
196 |
-
if(SPDSGVOSettings::get('logo_image_id', '') != '') {
|
197 |
-
$img_id = SPDSGVOSettings::get('logo_image_id');
|
198 |
-
$src = wp_get_attachment_url(intval($img_id));
|
199 |
-
}
|
200 |
-
?>
|
201 |
-
<?php $disableUploadButton = (isValidBlogEdition() || isValidPremiumEdition()) == false; ?>
|
202 |
-
<div class="dsgvo-image-upload">
|
203 |
-
<div class='image-preview-wrapper'>
|
204 |
-
<img id='logo_image-preview' class="image-preview" src='<?php echo $src; ?>' style="width: 200px">
|
205 |
-
</div>
|
206 |
-
<input id="logo_upload_image_button" type="button"
|
207 |
-
class="button"
|
208 |
-
<?= $disableUploadButton ? 'disabled' : true; ?>
|
209 |
-
value="<?php _e( 'Upload image', 'shapepress-dsgvo' ); ?>" />
|
210 |
-
<input type='hidden' class="image-id" name='logo_image_id' id='logo_image_id' value='<?php echo $img_id; ?>'>
|
211 |
-
</div><!-- .dsgvo-image-upload -->
|
212 |
-
</td>
|
213 |
-
</tr>
|
214 |
-
|
215 |
-
<tr>
|
216 |
-
<th scope="row"><?php _e('Close button action','shapepress-dsgvo')?></th>
|
217 |
-
<td>
|
218 |
-
<label for="close_button_action">
|
219 |
-
<select id="close_button_action" name="close_button_action">
|
220 |
-
<option value="0" <?php if(SPDSGVOSettings::get('close_button_action') == '0') {echo 'selected';} ?>><?php _e('Close popup','shapepress-dsgvo')?></option>
|
221 |
-
<option value="1" <?php if(SPDSGVOSettings::get('close_button_action') == '1') {echo 'selected';} ?>><?php _e('Redirect to URL','shapepress-dsgvo')?></option>
|
222 |
-
</select><!-- #close_button_action -->
|
223 |
-
</label>
|
224 |
-
</td>
|
225 |
-
</tr>
|
226 |
-
|
227 |
-
<tr>
|
228 |
-
<th scope="row"><?php _e('Reload after confirm:','shapepress-dsgvo')?></th>
|
229 |
-
|
230 |
-
<td><label for="cn_reload_on_confirm_popup"> <input
|
231 |
-
name="cn_reload_on_confirm_popup" type="checkbox"
|
232 |
-
id="cn_reload_on_confirm_popup" value="1"
|
233 |
-
<?= (SPDSGVOSettings::get('cn_reload_on_confirm_popup') === '1')? ' checked ' : ''; ?>>
|
234 |
-
</label><span class="info-text"><?php _e('Enable this option to reload the page after accepting cookies.','shapepress-dsgvo')?></span></td>
|
235 |
-
|
236 |
-
</tr>
|
237 |
-
|
238 |
-
<tr>
|
239 |
-
<th scope="row"><?php _e('Accept button custom text','shapepress-dsgvo')?></th>
|
240 |
-
<td>
|
241 |
-
<label for="accept_button_text">
|
242 |
-
<input type="text" value="<?php echo SPDSGVOSettings::get('accept_button_text', ''); ?>" name="accept_button_text" id="accept_button_text" />
|
243 |
-
</label>
|
244 |
-
</td>
|
245 |
-
</tr>
|
246 |
-
|
247 |
-
<tr>
|
248 |
-
<th scope="row"><?php _e('More Options button custom text','shapepress-dsgvo')?></th>
|
249 |
-
<td>
|
250 |
-
<label for="more_options_button_text">
|
251 |
-
<input type="text" value="<?php echo SPDSGVOSettings::get('more_options_button_text', ''); ?>" name="more_options_button_text" id="more_options_button_text" />
|
252 |
-
</label>
|
253 |
-
</td>
|
254 |
-
</tr>
|
255 |
-
|
256 |
-
<tr>
|
257 |
-
<th scope="row"><?php _e('Close button URL','shapepress-dsgvo')?></th>
|
258 |
-
<td>
|
259 |
-
<label for="close_button_url">
|
260 |
-
<input type="text" value="<?php echo SPDSGVOSettings::get('close_button_url', ''); ?>" name="close_button_url" id="close_button_url" />
|
261 |
-
</label>
|
262 |
-
</td>
|
263 |
-
</tr>
|
264 |
-
|
265 |
-
<tr>
|
266 |
-
<th scope="row"><?php _e('Accordion title text','shapepress-dsgvo')?></th>
|
267 |
-
<td>
|
268 |
-
<label for="accordion_top">
|
269 |
-
<input type="text" value="<?php echo SPDSGVOSettings::get('accordion_top', ''); ?>" name="accordion_top" id="accordion_top" />
|
270 |
-
</label>
|
271 |
-
</td>
|
272 |
-
</tr>
|
273 |
-
|
274 |
-
<tr>
|
275 |
-
<?php
|
276 |
-
$val = SPDSGVOSettings::get('popup_background');
|
277 |
-
if($val == '') {
|
278 |
-
$val = '#ffffff';
|
279 |
-
}
|
280 |
-
?>
|
281 |
-
<td style="width: 200px"><?php _e('Popup background:','shapepress-dsgvo')?></td>
|
282 |
-
<td><label for="popup_background"> <input
|
283 |
-
name="popup_background" type="color" id="popup_background"
|
284 |
-
value="<?php echo $val; ?>">
|
285 |
-
</label>
|
286 |
-
</td>
|
287 |
-
</tr>
|
288 |
-
|
289 |
-
<tr>
|
290 |
-
<?php
|
291 |
-
$val = SPDSGVOSettings::get('separators_color');
|
292 |
-
if($val == '') {
|
293 |
-
$val = '#f1f1f1';
|
294 |
-
}
|
295 |
-
?>
|
296 |
-
<td style="width: 200px"><?php _e('Separators color:','shapepress-dsgvo')?></td>
|
297 |
-
<td><label for="separators_color"> <input
|
298 |
-
name="separators_color" type="color" id="separators_color"
|
299 |
-
value="<?php echo $val; ?>">
|
300 |
-
</label>
|
301 |
-
</td>
|
302 |
-
</tr>
|
303 |
-
|
304 |
-
<tr>
|
305 |
-
<?php
|
306 |
-
$val = SPDSGVOSettings::get('text_color');
|
307 |
-
if($val == '') {
|
308 |
-
$val = '#222222';
|
309 |
-
}
|
310 |
-
?>
|
311 |
-
<td style="width: 200px"><?php _e('Font color:','shapepress-dsgvo')?></td>
|
312 |
-
<td><label for="text_color"> <input
|
313 |
-
name="text_color" type="color" id="text_color"
|
314 |
-
value="<?php echo $val; ?>">
|
315 |
-
</label>
|
316 |
-
</td>
|
317 |
-
</tr>
|
318 |
-
|
319 |
-
<tr>
|
320 |
-
<?php
|
321 |
-
$val = SPDSGVOSettings::get('links_color');
|
322 |
-
if($val == '') {
|
323 |
-
$val = '#4285f4';
|
324 |
-
}
|
325 |
-
?>
|
326 |
-
<td style="width: 200px"><?php _e('Links color:','shapepress-dsgvo')?></td>
|
327 |
-
<td><label for="links_color"> <input
|
328 |
-
name="links_color" type="color" id="links_color"
|
329 |
-
value="<?php echo $val; ?>">
|
330 |
-
</label>
|
331 |
-
</td>
|
332 |
-
</tr>
|
333 |
-
|
334 |
-
<tr>
|
335 |
-
<?php
|
336 |
-
$val = SPDSGVOSettings::get('links_color_hover');
|
337 |
-
if($val == '') {
|
338 |
-
$val = '#4285f4';
|
339 |
-
}
|
340 |
-
?>
|
341 |
-
<td style="width: 200px"><?php _e('Links color (hover):','shapepress-dsgvo')?></td>
|
342 |
-
<td><label for="links_color_hover"> <input
|
343 |
-
name="links_color_hover" type="color" id="links_color_hover"
|
344 |
-
value="<?php echo $val; ?>">
|
345 |
-
</label>
|
346 |
-
</td>
|
347 |
-
</tr>
|
348 |
-
|
349 |
-
<tr>
|
350 |
-
<?php
|
351 |
-
$val = SPDSGVOSettings::get('accept_button_text_color');
|
352 |
-
if($val == '') {
|
353 |
-
$val = '#ffffff';
|
354 |
-
}
|
355 |
-
?>
|
356 |
-
<td style="width: 200px"><?php _e('Accept button font color:','shapepress-dsgvo')?></td>
|
357 |
-
<td><label for="accept_button_text_color"> <input
|
358 |
-
name="accept_button_text_color" type="color" id="accept_button_text_color"
|
359 |
-
value="<?php echo $val; ?>">
|
360 |
-
</label>
|
361 |
-
</td>
|
362 |
-
</tr>
|
363 |
-
|
364 |
-
<tr>
|
365 |
-
<?php
|
366 |
-
$val = SPDSGVOSettings::get('accept_button_bg_color');
|
367 |
-
if($val == '') {
|
368 |
-
$val = '#4285f4';
|
369 |
-
}
|
370 |
-
?>
|
371 |
-
<td style="width: 200px"><?php _e('Accept button background color:','shapepress-dsgvo')?></td>
|
372 |
-
<td><label for="accept_button_bg_color"> <input
|
373 |
-
name="accept_button_bg_color" type="color" id="accept_button_bg_color"
|
374 |
-
value="<?php echo $val; ?>">
|
375 |
-
</label>
|
376 |
-
</td>
|
377 |
-
</tr>
|
378 |
-
|
379 |
-
</table>
|
380 |
-
|
381 |
-
<table class="form-table sp-cookie-notice-settings">
|
382 |
-
<?php /*
|
383 |
-
<tr>
|
384 |
-
|
385 |
-
<th scope="row"><?php _e('Cookie Notice','shapepress-dsgvo')?></th>
|
386 |
-
<td><label for="display_cookie_notice"> <input
|
387 |
-
name="display_cookie_notice" type="checkbox"
|
388 |
-
id="display_cookie_notice" value="1"
|
389 |
-
<?= (SPDSGVOSettings::get('display_cookie_notice') === '1')? ' checked ' : ''; ?>>
|
390 |
-
</label></td>
|
391 |
-
</tr>
|
392 |
-
|
393 |
-
*/ ?>
|
394 |
-
|
395 |
-
<!-- i592995 -->
|
396 |
-
|
397 |
-
<tr>
|
398 |
-
<th scope="row"><?php _e('Notice text:','shapepress-dsgvo')?></th>
|
399 |
-
<td><textarea name="cookie_notice_custom_text"
|
400 |
-
placeholder="<?php _e('Insert the text here', 'shapepress-dsgvo'); ?>" id="cookie_notice_custom_text" rows="10"
|
401 |
-
style="width: 100%"><?= SPDSGVOSettings::get('cookie_notice_custom_text') ?></textarea></td>
|
402 |
-
</tr>
|
403 |
-
<tr>
|
404 |
-
<td><?php _e('Validity:','shapepress-dsgvo')?></td>
|
405 |
-
<td>
|
406 |
-
<?php $cnCookieValidity = SPDSGVOSettings::get('cn_cookie_validity'); ?>
|
407 |
-
<label for="cn_cookie_validity"> <select name="cn_cookie_validity"
|
408 |
-
id="cn_cookie_validity">
|
409 |
-
<option value="86400" <?= selected($cnCookieValidity == 86400) ?>>1
|
410 |
-
<?php _e('Day','shapepress-dsgvo')?></option>
|
411 |
-
<option value="604800" <?= selected($cnCookieValidity == 604800) ?>>1
|
412 |
-
<?php _e('Week','shapepress-dsgvo')?></option>
|
413 |
-
<option value="2592000"
|
414 |
-
<?= selected($cnCookieValidity == 2592000) ?>>1 <?php _e('Month','shapepress-dsgvo')?></option>
|
415 |
-
<option value="7862400"
|
416 |
-
<?= selected($cnCookieValidity == 7862400) ?>>2 <?php _e('Month','shapepress-dsgvo')?></option>
|
417 |
-
<option value="15811200"
|
418 |
-
<?= selected($cnCookieValidity == 15811200) ?>>6 <?php _e('Month','shapepress-dsgvo')?></option>
|
419 |
-
<option value="31536000"
|
420 |
-
<?= selected($cnCookieValidity == 31536000) ?>>1 <?php _e('Year','shapepress-dsgvo')?></option>
|
421 |
-
</select>
|
422 |
-
</label> <span class="info-text"><?php _e('For this period, the cookie is navigation use validly.','shapepress-dsgvo')?></span>
|
423 |
-
</td>
|
424 |
-
</tr>
|
425 |
-
<tr>
|
426 |
-
<th scope="row"></th>
|
427 |
-
<td></td>
|
428 |
-
</tr>
|
429 |
-
|
430 |
-
<tr>
|
431 |
-
<th scope="row"><?php _e('Confirmation','shapepress-dsgvo')?></th>
|
432 |
-
<td></td>
|
433 |
-
</tr>
|
434 |
-
|
435 |
-
<tr>
|
436 |
-
<td><?php _e('Button text:','shapepress-dsgvo')?></td>
|
437 |
-
|
438 |
-
<td><label for="cn_button_text_ok"> <input name="cn_button_text_ok"
|
439 |
-
style="width: 300px" type="text" id="cn_button_text_ok"
|
440 |
-
value="<?= SPDSGVOSettings::get('cn_button_text_ok'); ?>"
|
441 |
-
placeholder="<?php _e('zB.: Ok', 'shapepress-dsgvo'); ?>">
|
442 |
-
</label><span class="info-text"><?php _e('The text to be displayed is to accept the note and hide the message.','shapepress-dsgvo')?></span></td>
|
443 |
-
|
444 |
-
</tr>
|
445 |
-
|
446 |
-
<tr>
|
447 |
-
<td><?php _e('Reload after confirm:','shapepress-dsgvo')?></td>
|
448 |
-
|
449 |
-
<td><label for="cn_reload_on_confirm"> <input
|
450 |
-
name="cn_reload_on_confirm" type="checkbox"
|
451 |
-
id="cn_reload_on_confirm" value="1"
|
452 |
-
<?= (SPDSGVOSettings::get('cn_reload_on_confirm') === '1')? ' checked ' : ''; ?>>
|
453 |
-
</label><span class="info-text"><?php _e('Enable this option to reload the page after accepting cookies.','shapepress-dsgvo')?></span></td>
|
454 |
-
|
455 |
-
</tr>
|
456 |
-
|
457 |
-
<tr>
|
458 |
-
<th scope="row"><?php _e('Decline','shapepress-dsgvo')?></th>
|
459 |
-
<td></td>
|
460 |
-
</tr>
|
461 |
-
|
462 |
-
<tr>
|
463 |
-
<td><?php _e('Button active:','shapepress-dsgvo')?></td>
|
464 |
-
|
465 |
-
<td><label for="cn_activate_cancel_btn"> <input
|
466 |
-
name="cn_activate_cancel_btn" type="checkbox"
|
467 |
-
id="cn_activate_cancel_btn" value="1"
|
468 |
-
<?= (SPDSGVOSettings::get('cn_activate_cancel_btn') === '1')? ' checked ' : ''; ?>>
|
469 |
-
</label></td>
|
470 |
-
|
471 |
-
</tr>
|
472 |
-
<tr>
|
473 |
-
<td><?php _e('Button text:','shapepress-dsgvo')?></td>
|
474 |
-
|
475 |
-
<td><label for="cn_button_text_cancel"> <input
|
476 |
-
name="cn_button_text_cancel" type="text" id="cn_button_text_cancel"
|
477 |
-
style="width: 300px"
|
478 |
-
value="<?= SPDSGVOSettings::get('cn_button_text_cancel'); ?>"
|
479 |
-
placeholder="<?php _e('eg.: Decline','shapepress-dsgvo')?>">
|
480 |
-
</label><span class="info-text"><?php _e('The text of the option to decline cookies.','shapepress-dsgvo')?></span></td>
|
481 |
-
|
482 |
-
</tr>
|
483 |
-
|
484 |
-
<tr>
|
485 |
-
<td><?php _e('Link target for rejection:','shapepress-dsgvo')?></td>
|
486 |
-
|
487 |
-
<td><label for="cn_decline_target_url"> <input
|
488 |
-
name="cn_decline_target_url" type="text" id="cn_decline_target_url"
|
489 |
-
style="width: 300px"
|
490 |
-
value="<?= SPDSGVOSettings::get('cn_decline_target_url'); ?>"
|
491 |
-
placeholder="<?php _e('zb.: www.google.at','shapepress-dsgvo')?>">
|
492 |
-
</label><span class="info-text"><?php _e('Specifies the destination where visitors who want to reject the message should be forwarded.','shapepress-dsgvo')?></span></td>
|
493 |
-
|
494 |
-
</tr>
|
495 |
-
<tr>
|
496 |
-
<td><?php _e('Do not set a cookie on forwarding:','shapepress-dsgvo')?></td>
|
497 |
-
<td><label for="cn_decline_no_cookie"> <input
|
498 |
-
name="cn_decline_no_cookie" type="checkbox"
|
499 |
-
id="cn_decline_no_cookie" value="1"
|
500 |
-
<?= (SPDSGVOSettings::get('cn_decline_no_cookie') === '1')? ' checked ' : ''; ?>>
|
501 |
-
</label><span class="info-text"><?php _e('If active, the visitor refuses and returns to the page, the notice will reappear.','shapepress-dsgvo')?></span></td>
|
502 |
-
</tr>
|
503 |
-
|
504 |
-
<tr>
|
505 |
-
<th scope="row"><?php _e('Read more','shapepress-dsgvo')?></th>
|
506 |
-
<td></td>
|
507 |
-
</tr>
|
508 |
-
|
509 |
-
<tr>
|
510 |
-
<td><?php _e('Button active:','shapepress-dsgvo')?></td>
|
511 |
-
|
512 |
-
<td><label for="cn_activate_more_btn"> <input
|
513 |
-
name="cn_activate_more_btn" type="checkbox"
|
514 |
-
id="cn_activate_more_btn" value="1"
|
515 |
-
<?= (SPDSGVOSettings::get('cn_activate_more_btn') === '1')? ' checked ' : ''; ?>>
|
516 |
-
</label></td>
|
517 |
-
|
518 |
-
</tr>
|
519 |
-
|
520 |
-
<tr>
|
521 |
-
<td><?php _e('Button text:','shapepress-dsgvo')?></td>
|
522 |
-
|
523 |
-
<td><label for="cn_button_text_more"> <input
|
524 |
-
name="cn_button_text_more" type="text" id="cn_button_text_more"
|
525 |
-
style="width: 300px"
|
526 |
-
value="<?= SPDSGVOSettings::get('cn_button_text_more'); ?>"
|
527 |
-
placeholder="<?php _e('zB.: Erfahre mehr','shapepress-dsgvo')?>">
|
528 |
-
</label><span class="info-text"><?php _e('The text of the option to obtain more information','shapepress-dsgvo')?></span></td>
|
529 |
-
|
530 |
-
</tr>
|
531 |
-
<tr>
|
532 |
-
<td><?php _e('Link destination to read on:','shapepress-dsgvo')?></td>
|
533 |
-
|
534 |
-
<td>
|
535 |
-
<?php $readMorePage = SPDSGVOSettings::get('cn_read_more_page'); ?>
|
536 |
-
<label for="cn_read_more_page"><select style="width: 300px"
|
537 |
-
name="cn_read_more_page" id="cn_read_more_page">
|
538 |
-
<option value="0">Wählen</option>
|
539 |
-
<?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
|
540 |
-
<option <?= selected($readMorePage == $page->ID) ?>
|
541 |
-
value="<?= $page->ID ?>">
|
542 |
-
<?= $page->post_title ?>
|
543 |
-
</option>
|
544 |
-
<?php endforeach; ?>
|
545 |
-
</select> </label><span class="info-text"><?php _e('Specifies the destination to where visitors will find more information about cookies.','shapepress-dsgvo')?></span>
|
546 |
-
</td>
|
547 |
-
|
548 |
-
</tr>
|
549 |
-
|
550 |
-
<tr>
|
551 |
-
<th scope="row" colspan="2"><?php _e('Options for displaying the cookie notice.','shapepress-dsgvo')?></th>
|
552 |
-
</tr>
|
553 |
-
|
554 |
-
<tr>
|
555 |
-
<td><?php _e('Position:','shapepress-dsgvo')?></td>
|
556 |
-
<td>
|
557 |
-
<?php $cnNoticePosition = SPDSGVOSettings::get('cn_position'); ?>
|
558 |
-
<label for="cn_position"> <select name="cn_position" id="cn_position">
|
559 |
-
<option value="top" <?= selected($cnNoticePosition == 'top') ?>><?php _e('On top','shapepress-dsgvo')?></option>
|
560 |
-
<option value="bottom"
|
561 |
-
<?= selected($cnNoticePosition == 'bottom') ?>><?php _e('Bottom','shapepress-dsgvo')?></option>
|
562 |
-
</select>
|
563 |
-
</label> <span class="info-text"><?php _e('Specifies the location where the cookie notice should be displayed.','shapepress-dsgvo')?></span>
|
564 |
-
</td>
|
565 |
-
</tr>
|
566 |
-
<tr>
|
567 |
-
<td><?php _e('Animation','shapepress-dsgvo')?></td>
|
568 |
-
<td>
|
569 |
-
<?php $cnNoticeAnimation = SPDSGVOSettings::get('cn_animation'); ?>
|
570 |
-
<label for="cn_animation"> <select name="cn_animation"
|
571 |
-
id="cn_animation">
|
572 |
-
<option value="none" <?= selected($cnNoticeAnimation == 'none') ?>><?php _e('None','shapepress-dsgvo')?></option>
|
573 |
-
<option value="fade"
|
574 |
-
<?= selected($cnNoticeAnimation == 'fade') ?>><?php _e('fade','shapepress-dsgvo')?></option>
|
575 |
-
<option value="hide"
|
576 |
-
<?= selected($cnNoticeAnimation == 'hide') ?>><?php _e('hide','shapepress-dsgvo')?></option>
|
577 |
-
</select>
|
578 |
-
</label> <span class="info-text"><?php _e('Animation when accepting the cookie message.','shapepress-dsgvo')?></span>
|
579 |
-
</td>
|
580 |
-
</tr>
|
581 |
-
</tbody>
|
582 |
-
</table>
|
583 |
-
|
584 |
-
<?php $disableCnStylingOptionTableInput = (isValidBlogEdition() || isValidPremiumEdition()) == false; ?>
|
585 |
-
<table class="form-table sp-cookie-notice-settings" id="cnStylingOptionTable">
|
586 |
-
<tbody>
|
587 |
-
<tr>
|
588 |
-
<?php if (isValidBlogEdition() || isValidPremiumEdition()) : ?>
|
589 |
-
<th scope="row" colspan="2"><?php _e('Color adjustment','shapepress-dsgvo')?></th>
|
590 |
-
<?php else : ?>
|
591 |
-
<th scope="row" colspan="2"><?php _e('Color adjustment','shapepress-dsgvo')?><span style="color: orange"><?php _e('Possible with blog or premium edition','shapepress-dsgvo')?></span>
|
592 |
-
<small><a href="https://www.wp-dsgvo.eu/shop"><?php _e('Click here to get a license','shapepress-dsgvo')?></a></small>
|
593 |
-
</th>
|
594 |
-
<?php endif; ?>
|
595 |
-
</tr>
|
596 |
-
<tr>
|
597 |
-
<td style="width: 200px"><?php _e('Background:','shapepress-dsgvo')?></td>
|
598 |
-
<td><label for="cn_background_color"> <input
|
599 |
-
name="cn_background_color" type="color" id="cn_background_color"
|
600 |
-
<?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
|
601 |
-
value="<?= SPDSGVOSettings::get('cn_background_color'); ?>">
|
602 |
-
</label>
|
603 |
-
</td>
|
604 |
-
</tr>
|
605 |
-
<tr>
|
606 |
-
<td><?php _e('Text:','shapepress-dsgvo')?></td>
|
607 |
-
<td><label for="cn_text_color"> <input
|
608 |
-
name="cn_text_color" type="color" id="cn_text_color"
|
609 |
-
<?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
|
610 |
-
value="<?= SPDSGVOSettings::get('cn_text_color'); ?>">
|
611 |
-
</label></td>
|
612 |
-
</tr>
|
613 |
-
<tr>
|
614 |
-
<td><?php _e('Buttons','shapepress-dsgvo')?></td>
|
615 |
-
<td><?php _e('Background','shapepress-dsgvo')?> <label for="cn_background_color"> <input
|
616 |
-
name="cn_background_color_button" type="color" id="cn_background_color_button"
|
617 |
-
<?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
|
618 |
-
value="<?= SPDSGVOSettings::get('cn_background_color_button'); ?>">
|
619 |
-
</label>
|
620 |
-
<?php _e('Font:','shapepress-dsgvo')?> <label for="cn_text_color_button"> <input
|
621 |
-
name="cn_text_color_button" type="color" id="cn_text_color_button"
|
622 |
-
<?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
|
623 |
-
value="<?= SPDSGVOSettings::get('cn_text_color_button'); ?>">
|
624 |
-
</label></td>
|
625 |
-
</tr>
|
626 |
-
<tr>
|
627 |
-
<th scope="row"><?php _e('CSS Classes','shapepress-dsgvo')?></th>
|
628 |
-
<td><span class="info-text"><?php _e('The colors listed under "Color Changes“ must be overwritten with !Important.','shapepress-dsgvo')?></span></td>
|
629 |
-
</tr>
|
630 |
-
<tr>
|
631 |
-
<td><?php _e('Cookie notice:','shapepress-dsgvo')?></td>
|
632 |
-
<td><label for="cn_custom_css_container"> <input
|
633 |
-
name="cn_custom_css_container" type="text" id="cn_custom_css_container"
|
634 |
-
<?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
|
635 |
-
value="<?= SPDSGVOSettings::get('cn_custom_css_container'); ?>">
|
636 |
-
</label></td>
|
637 |
-
</tr>
|
638 |
-
<tr>
|
639 |
-
<td><?php _e('Text','shapepress-dsgvo')?></td>
|
640 |
-
<td><label for="cn_custom_css_text"> <input
|
641 |
-
name="cn_custom_css_text" type="text" id="cn_custom_css_text"
|
642 |
-
<?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
|
643 |
-
value="<?= SPDSGVOSettings::get('cn_custom_css_text'); ?>">
|
644 |
-
</label></td>
|
645 |
-
</tr>
|
646 |
-
<tr>
|
647 |
-
<td><?php _e('Buttons:','shapepress-dsgvo')?></td>
|
648 |
-
<td><label for="cn_custom_css_buttons"> <input
|
649 |
-
name="cn_custom_css_buttons" type="text" id="cn_custom_css_buttons"
|
650 |
-
<?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
|
651 |
-
value="<?= SPDSGVOSettings::get('cn_custom_css_buttons'); ?>">
|
652 |
-
</label></td>
|
653 |
-
</tr>
|
654 |
-
<tr>
|
655 |
-
<th scope="row" colspan="2"><?php _e('Further display options','shapepress-dsgvo')?></th>
|
656 |
-
</tr>
|
657 |
-
<tr>
|
658 |
-
<td><?php _e('Font size','shapepress-dsgvo')?></td>
|
659 |
-
<td><label for="cn_size_text">
|
660 |
-
|
661 |
-
<?php $cnSizeText = SPDSGVOSettings::get('cn_size_text'); ?>
|
662 |
-
<select name="cn_size_text"
|
663 |
-
<?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
|
664 |
-
id="cn_size_text">
|
665 |
-
<option value="auto" <?= selected($cnSizeText == '11px') ?>><?php _e('Default','shapepress-dsgvo')?></option>
|
666 |
-
<option value="11px" <?= selected($cnSizeText == '11px') ?>>11px</option>
|
667 |
-
<option value="12px" <?= selected($cnSizeText == '12px') ?>>12px</option>
|
668 |
-
<option value="13px" <?= selected($cnSizeText == '13px') ?>>13px</option>
|
669 |
-
<option value="14px" <?= selected($cnSizeText == '14px') ?>>14px</option>
|
670 |
-
<option value="15px" <?= selected($cnSizeText == '15px') ?>>15px</option>
|
671 |
-
<option value="16px" <?= selected($cnSizeText == '16px') ?>>16px</option>
|
672 |
-
<option value="17px" <?= selected($cnSizeText == '17px') ?>>17px</option>
|
673 |
-
<option value="18px" <?= selected($cnSizeText == '18px') ?>>18px</option>
|
674 |
-
<option value="19px" <?= selected($cnSizeText == '19px') ?>>19px</option>
|
675 |
-
<option value="20px" <?= selected($cnSizeText == '20px') ?>>20px</option>
|
676 |
-
</select>
|
677 |
-
|
678 |
-
</label></td>
|
679 |
-
</tr>
|
680 |
-
<tr>
|
681 |
-
<td><?php _e('Height of cookie notice','shapepress-dsgvo')?></td>
|
682 |
-
<td><label for="cn_height_container">
|
683 |
-
|
684 |
-
<?php $cnHeightContainer = SPDSGVOSettings::get('cn_height_container'); ?>
|
685 |
-
<select name="cn_height_container"
|
686 |
-
<?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
|
687 |
-
id="cn_height_container">
|
688 |
-
<option value="auto" <?= selected($cnHeightContainer == 'auto') ?>><?php _e('Default','shapepress-dsgvo')?></option>
|
689 |
-
<option value="40px" <?= selected($cnHeightContainer == '40px') ?>>40px</option>
|
690 |
-
<option value="45px" <?= selected($cnHeightContainer == '45px') ?>>45px</option>
|
691 |
-
<option value="50px" <?= selected($cnHeightContainer == '50px') ?>>50px</option>
|
692 |
-
<option value="55px" <?= selected($cnHeightContainer == '55px') ?>>55px</option>
|
693 |
-
<option value="60px" <?= selected($cnHeightContainer == '60px') ?>>60px</option>
|
694 |
-
<option value="65px" <?= selected($cnHeightContainer == '65px') ?>>65px</option>
|
695 |
-
<option value="70px" <?= selected($cnHeightContainer == '70px') ?>>70px</option>
|
696 |
-
<option value="75px" <?= selected($cnHeightContainer == '75px') ?>>75px</option>
|
697 |
-
<option value="80px" <?= selected($cnHeightContainer == '80px') ?>>80px</option>
|
698 |
-
</select>
|
699 |
-
|
700 |
-
</label></td>
|
701 |
-
</tr>
|
702 |
-
<tr>
|
703 |
-
<td><?php _e('Show icon:','shapepress-dsgvo')?></td>
|
704 |
-
<td><label for="cn_show_dsgvo_icon"> <input
|
705 |
-
name="cn_show_dsgvo_icon" type="checkbox"
|
706 |
-
id="cn_show_dsgvo_icon" value="1"
|
707 |
-
<?= (SPDSGVOSettings::get('cn_show_dsgvo_icon') === '1')? ' checked ' : ''; ?>>
|
708 |
-
</label></td>
|
709 |
-
</tr>
|
710 |
-
<tr>
|
711 |
-
<td><?php _e('Use overlay','shapepress-dsgvo')?></td>
|
712 |
-
<td><label for="cn_use_overlay"> <input
|
713 |
-
name="cn_use_overlay" type="checkbox"
|
714 |
-
<?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
|
715 |
-
id="cn_use_overlay" value="1"
|
716 |
-
<?= (SPDSGVOSettings::get('cn_use_overlay') === '1')? ' checked ' : ''; ?>>
|
717 |
-
</label><span class="info-text"><?php _e('Displays a gray background and prevents the visitor from interacting with the site before making a choice.','shapepress-dsgvo')?></span></td>
|
718 |
-
</tr>
|
719 |
-
</tbody>
|
720 |
-
</table>
|
721 |
-
|
722 |
-
<hr class="sp-dsgvo">
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
<br>
|
728 |
-
<?php submit_button(); ?>
|
729 |
-
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/gravity-forms/class-sp-dsgvo-gravity-forms-action.php
CHANGED
@@ -1,23 +1,23 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOGravityFormsAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'admin-gravity-forms';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->checkCSRF();
|
9 |
-
$this->requireAdmin();
|
10 |
-
|
11 |
-
SPDSGVOSettings::set('gf_save_no_data', $this->get('gf_save_no_data'), '0');
|
12 |
-
|
13 |
-
SPDSGVOSettings::set('gf_no_ip_meta', $this->get('gf_no_ip_meta'), '0');
|
14 |
-
|
15 |
-
SPDSGVOSettings::set('gf_save_no_', $this->get('gf_save_no_'), []);
|
16 |
-
|
17 |
-
$this->returnBack();
|
18 |
-
}
|
19 |
-
}
|
20 |
-
|
21 |
-
SPDSGVOGravityFormsAction::listen();
|
22 |
-
|
23 |
-
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOGravityFormsAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'admin-gravity-forms';
|
6 |
+
|
7 |
+
protected function run(){
|
8 |
+
$this->checkCSRF();
|
9 |
+
$this->requireAdmin();
|
10 |
+
|
11 |
+
SPDSGVOSettings::set('gf_save_no_data', $this->get('gf_save_no_data'), '0');
|
12 |
+
|
13 |
+
SPDSGVOSettings::set('gf_no_ip_meta', $this->get('gf_no_ip_meta'), '0');
|
14 |
+
|
15 |
+
SPDSGVOSettings::set('gf_save_no_', $this->get('gf_save_no_'), []);
|
16 |
+
|
17 |
+
$this->returnBack();
|
18 |
+
}
|
19 |
+
}
|
20 |
+
|
21 |
+
SPDSGVOGravityFormsAction::listen();
|
22 |
+
|
23 |
+
|
admin/tabs/gravity-forms/class-sp-dsgvo-gravity-forms-tab.php
CHANGED
@@ -1,34 +1,34 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOGravityFormsTab extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
public $title = 'Gravity Forms';
|
6 |
-
public $slug = 'gravity-forms';
|
7 |
-
|
8 |
-
public function __construct(){
|
9 |
-
|
10 |
-
$this->title = __('Gravity Forms','shapepress-dsgvo');
|
11 |
-
}
|
12 |
-
|
13 |
-
public function page(){
|
14 |
-
include plugin_dir_path(__FILE__) .'page.php';
|
15 |
-
}
|
16 |
-
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Returns an array of Gravity Forms data.
|
20 |
-
*/
|
21 |
-
public static function get_gf_forms() {
|
22 |
-
|
23 |
-
$output = array();
|
24 |
-
$forms = GFAPI::get_forms();
|
25 |
-
|
26 |
-
foreach ( $forms as $form ) {
|
27 |
-
$output[ $form['id'] ] = $form;
|
28 |
-
}
|
29 |
-
|
30 |
-
return $output;
|
31 |
-
|
32 |
-
}
|
33 |
-
|
34 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOGravityFormsTab extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $title = 'Gravity Forms';
|
6 |
+
public $slug = 'gravity-forms';
|
7 |
+
|
8 |
+
public function __construct(){
|
9 |
+
|
10 |
+
$this->title = __('Gravity Forms','shapepress-dsgvo');
|
11 |
+
}
|
12 |
+
|
13 |
+
public function page(){
|
14 |
+
include plugin_dir_path(__FILE__) .'page.php';
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Returns an array of Gravity Forms data.
|
20 |
+
*/
|
21 |
+
public static function get_gf_forms() {
|
22 |
+
|
23 |
+
$output = array();
|
24 |
+
$forms = GFAPI::get_forms();
|
25 |
+
|
26 |
+
foreach ( $forms as $form ) {
|
27 |
+
$output[ $form['id'] ] = $form;
|
28 |
+
}
|
29 |
+
|
30 |
+
return $output;
|
31 |
+
|
32 |
+
}
|
33 |
+
|
34 |
+
}
|
admin/tabs/gravity-forms/page.php
CHANGED
@@ -1,60 +1,60 @@
|
|
1 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
2 |
-
<input type="hidden" name="action" value="admin-gravity-forms">
|
3 |
-
<?php wp_nonce_field( SPDSGVOGravityFormsAction::getActionName(). '-nonce' ); ?>
|
4 |
-
|
5 |
-
<h1><?php _e('Gravity Forms','shapepress-dsgvo')?></h1>
|
6 |
-
|
7 |
-
<p><?php _e('With these settings the saving behavior of Gravity Forms can be configured.','shapepress-dsgvo')?></p>
|
8 |
-
|
9 |
-
<hr>
|
10 |
-
|
11 |
-
<table class="form-table">
|
12 |
-
<tbody>
|
13 |
-
<tr>
|
14 |
-
<th scope="row"><?php _e('Do not save form data in the database','shapepress-dsgvo')?></th>
|
15 |
-
<td><label for="gf_save_no_data"> <input name="gf_save_no_data"
|
16 |
-
type="checkbox" id="gf_save_no_data" value="1"
|
17 |
-
<?= (SPDSGVOSettings::get('gf_save_no_data') === '1')? ' checked ' : ''; ?>>
|
18 |
-
</label> <span class="info-text"><?php _e('If activated, no data will be stored, but only sent by e-mail. (Note: This option overrides form-specific settings).).','shapepress-dsgvo')?></span></td>
|
19 |
-
</tr>
|
20 |
-
<tr>
|
21 |
-
<th scope="row"><?php _e('Do not save IP address and user agent in database','shapepress-dsgvo')?></th>
|
22 |
-
<td><label for="gf_no_ip_meta"> <input name="gf_no_ip_meta"
|
23 |
-
type="checkbox" id="gf_no_ip_meta" value="1"
|
24 |
-
<?= (SPDSGVOSettings::get('gf_no_ip_meta') === '1')? ' checked ' : ''; ?>>
|
25 |
-
</label> <span class="info-text"><?php _e('By default, if this checkbox is checked, this will be prevented from saving the IP address and user agent of the sender.','shapepress-dsgvo')?></span></td>
|
26 |
-
</tr>
|
27 |
-
|
28 |
-
</tbody>
|
29 |
-
</table>
|
30 |
-
|
31 |
-
<?php $gf_save_no_ = SPDSGVOSettings::get('gf_save_no_');?>
|
32 |
-
|
33 |
-
<div>
|
34 |
-
|
35 |
-
<h2><?php _e('Specific form settings','shapepress-dsgvo')?></h2>
|
36 |
-
<h4><?php _e('For each Gravity Forms form, it can be subsequently defined for each field whether the data of the input field is stored in the database or not.','shapepress-dsgvo')?></h4>
|
37 |
-
<table class="form-table ">
|
38 |
-
<tbody>
|
39 |
-
<?php foreach( SPDSGVOGravityFormsTab::get_gf_forms() as $form ) :?>
|
40 |
-
<tr>
|
41 |
-
<th scope="row">Form: <?= $form['title'];?></th>
|
42 |
-
<td>
|
43 |
-
<?php foreach( $form['fields'] as $field ): ?>
|
44 |
-
|
45 |
-
<input type="checkbox" id="" value="1"
|
46 |
-
name="gf_save_no_[<?= $form['id'];?>][<?= $field->id;?>]"
|
47 |
-
<?= (isset( $gf_save_no_[$form['id']][$field->id] ) && $gf_save_no_[$form['id']][$field->id] === '1')? ' checked ' : ''; ?>> <?= $field->label; ?> <small><em>(<?php _e('Nicht in der Datenbank speichern.','shapepress-dsgvo'); ?>)</em></small>
|
48 |
-
|
49 |
-
<?php endforeach; ?>
|
50 |
-
</td>
|
51 |
-
</tr>
|
52 |
-
<?php endforeach; ?>
|
53 |
-
|
54 |
-
</tbody>
|
55 |
-
</table>
|
56 |
-
</div>
|
57 |
-
<hr>
|
58 |
-
|
59 |
-
<?php submit_button(); ?>
|
60 |
-
</form>
|
1 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
2 |
+
<input type="hidden" name="action" value="admin-gravity-forms">
|
3 |
+
<?php wp_nonce_field( SPDSGVOGravityFormsAction::getActionName(). '-nonce' ); ?>
|
4 |
+
|
5 |
+
<h1><?php _e('Gravity Forms','shapepress-dsgvo')?></h1>
|
6 |
+
|
7 |
+
<p><?php _e('With these settings the saving behavior of Gravity Forms can be configured.','shapepress-dsgvo')?></p>
|
8 |
+
|
9 |
+
<hr>
|
10 |
+
|
11 |
+
<table class="form-table">
|
12 |
+
<tbody>
|
13 |
+
<tr>
|
14 |
+
<th scope="row"><?php _e('Do not save form data in the database','shapepress-dsgvo')?></th>
|
15 |
+
<td><label for="gf_save_no_data"> <input name="gf_save_no_data"
|
16 |
+
type="checkbox" id="gf_save_no_data" value="1"
|
17 |
+
<?= (SPDSGVOSettings::get('gf_save_no_data') === '1')? ' checked ' : ''; ?>>
|
18 |
+
</label> <span class="info-text"><?php _e('If activated, no data will be stored, but only sent by e-mail. (Note: This option overrides form-specific settings).).','shapepress-dsgvo')?></span></td>
|
19 |
+
</tr>
|
20 |
+
<tr>
|
21 |
+
<th scope="row"><?php _e('Do not save IP address and user agent in database','shapepress-dsgvo')?></th>
|
22 |
+
<td><label for="gf_no_ip_meta"> <input name="gf_no_ip_meta"
|
23 |
+
type="checkbox" id="gf_no_ip_meta" value="1"
|
24 |
+
<?= (SPDSGVOSettings::get('gf_no_ip_meta') === '1')? ' checked ' : ''; ?>>
|
25 |
+
</label> <span class="info-text"><?php _e('By default, if this checkbox is checked, this will be prevented from saving the IP address and user agent of the sender.','shapepress-dsgvo')?></span></td>
|
26 |
+
</tr>
|
27 |
+
|
28 |
+
</tbody>
|
29 |
+
</table>
|
30 |
+
|
31 |
+
<?php $gf_save_no_ = SPDSGVOSettings::get('gf_save_no_');?>
|
32 |
+
|
33 |
+
<div>
|
34 |
+
|
35 |
+
<h2><?php _e('Specific form settings','shapepress-dsgvo')?></h2>
|
36 |
+
<h4><?php _e('For each Gravity Forms form, it can be subsequently defined for each field whether the data of the input field is stored in the database or not.','shapepress-dsgvo')?></h4>
|
37 |
+
<table class="form-table ">
|
38 |
+
<tbody>
|
39 |
+
<?php foreach( SPDSGVOGravityFormsTab::get_gf_forms() as $form ) :?>
|
40 |
+
<tr>
|
41 |
+
<th scope="row">Form: <?= $form['title'];?></th>
|
42 |
+
<td>
|
43 |
+
<?php foreach( $form['fields'] as $field ): ?>
|
44 |
+
|
45 |
+
<input type="checkbox" id="" value="1"
|
46 |
+
name="gf_save_no_[<?= $form['id'];?>][<?= $field->id;?>]"
|
47 |
+
<?= (isset( $gf_save_no_[$form['id']][$field->id] ) && $gf_save_no_[$form['id']][$field->id] === '1')? ' checked ' : ''; ?>> <?= $field->label; ?> <small><em>(<?php _e('Nicht in der Datenbank speichern.','shapepress-dsgvo'); ?>)</em></small>
|
48 |
+
|
49 |
+
<?php endforeach; ?>
|
50 |
+
</td>
|
51 |
+
</tr>
|
52 |
+
<?php endforeach; ?>
|
53 |
+
|
54 |
+
</tbody>
|
55 |
+
</table>
|
56 |
+
</div>
|
57 |
+
<hr>
|
58 |
+
|
59 |
+
<?php submit_button(); ?>
|
60 |
+
</form>
|
admin/tabs/imprint/class-sp-dsgvo-imprint-action.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOImprintAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'imprint';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->checkCSRF();
|
9 |
-
$this->requireAdmin();
|
10 |
-
|
11 |
-
if($this->has('imprint_page')){
|
12 |
-
SPDSGVOSettings::set('imprint_page', $this->get('imprint_page', '0'));
|
13 |
-
}
|
14 |
-
|
15 |
-
// Update privacy policy
|
16 |
-
if($this->has('imprint')){
|
17 |
-
SPDSGVOSettings::set('imprint_hash', wp_hash($this->get('imprint')));
|
18 |
-
SPDSGVOSettings::set('imprint', $this->get('imprint'));
|
19 |
-
SPDSGVOLog::insert("Imprint updated by {$this->user->user_email}");
|
20 |
-
}
|
21 |
-
|
22 |
-
|
23 |
-
$this->returnBack();
|
24 |
-
}
|
25 |
-
}
|
26 |
-
|
27 |
-
SPDSGVOImprintAction::listen();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/imprint/class-sp-dsgvo-imprint-tab.php
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOImprintTab extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
public $title = 'Impressum';
|
6 |
-
public $slug = 'imprint';
|
7 |
-
public $isHidden = TRUE;
|
8 |
-
|
9 |
-
public function __construct(){
|
10 |
-
|
11 |
-
$this->title = __('Imprint','shapepress-dsgvo');
|
12 |
-
}
|
13 |
-
|
14 |
-
public function page(){
|
15 |
-
include plugin_dir_path(__FILE__) .'page.php';
|
16 |
-
}
|
17 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/imprint/page.php
DELETED
@@ -1,69 +0,0 @@
|
|
1 |
-
<h1><?php _e('Imprint', 'shapepress-dsgvo'); ?></h1>
|
2 |
-
<p><?php _e('With the shortcode <code>[imprint]</code> an inprint automatically gets generated. The data will be taken from general settings.', 'shapepress-dsgvo'); ?></p>
|
3 |
-
|
4 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
5 |
-
<input type="hidden" name="action" value="imprint">
|
6 |
-
<?php wp_nonce_field( SPDSGVOImprintAction::getActionName(). '-nonce' ); ?>
|
7 |
-
|
8 |
-
<table class="form-table btn-settings-show">
|
9 |
-
<tbody>
|
10 |
-
<tr>
|
11 |
-
<th scope="row"><?php _e('Imprint Page','shapepress-dsgvo')?></th>
|
12 |
-
<td>
|
13 |
-
|
14 |
-
<?php $imprintPage = SPDSGVOSettings::get('imprint_page'); ?>
|
15 |
-
<label for="imprint_page"><?php _e('Page', 'shapepress-dsgvo'); ?>:
|
16 |
-
<select name="imprint_page" id="imprint_page">
|
17 |
-
<option value="0"><?php _e('Select','shapepress-dsgvo')?></option>
|
18 |
-
<?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
|
19 |
-
<option <?= selected($imprintPage == $page->ID) ?> value="<?= $page->ID ?>">
|
20 |
-
<?= $page->post_title ?>
|
21 |
-
</option>
|
22 |
-
<?php endforeach; ?>
|
23 |
-
</select>
|
24 |
-
</label>
|
25 |
-
|
26 |
-
<?php if($imprintPage == '0'): ?>
|
27 |
-
<p><?php _e('Create a page that uses the shortcode <code>[imprint]</code>.','shapepress-dsgvo')?><a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('imprint_page' => '1')) ?>"><?php _e('Create page','shapepress-dsgvo')?></a></p>
|
28 |
-
<?php elseif(!pageContainsString($imprintPage, 'imprint')): ?>
|
29 |
-
<p><?php _e('Attention: The shortcode <code>[imprint]</code> was not found on the page you selected.','shapepress-dsgvo')?> <a href="<?= get_edit_post_link($imprintPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a></p>
|
30 |
-
<?php else: ?>
|
31 |
-
<a href="<?= get_edit_post_link($imprintPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a>
|
32 |
-
<?php endif; ?>
|
33 |
-
</td>
|
34 |
-
</tr>
|
35 |
-
|
36 |
-
|
37 |
-
</tbody>
|
38 |
-
</table>
|
39 |
-
<hr class="sp-dsgvo">
|
40 |
-
<br>
|
41 |
-
<?php if (spWpmlUsed() == true): ?>
|
42 |
-
<p><?php _e('<strong>Important Note:</strong> Because you use WPML the English Version of the imprint was set by default. You can translate it via WMPL String Translation. Search for text-domain "shapepress-dsgvo" and name "imprint".','shapepress-dsgvo')?>
|
43 |
-
|
44 |
-
</p>
|
45 |
-
<?php else: ?>
|
46 |
-
<p><?php _e('<strong>Important Note:</strong> If you use WPML you can translate these inputs via WPML String Translations.','shapepress-dsgvo')?></p>
|
47 |
-
<?php endif; ?>
|
48 |
-
<p>
|
49 |
-
<a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('reset_imprint_page' => '1','imprint_page_language' => 'en_EN')) ?>"><?php _e('Reload English template','shapepress-dsgvo')?></a>
|
50 |
-
<a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('reset_imprint_page' => '1','imprint_page_language' => 'de_DE')) ?>"><?php _e('Reload German template','shapepress-dsgvo')?></a>
|
51 |
-
</p>
|
52 |
-
<!--
|
53 |
-
<span class="info-text" style="margin-bottom: 20px;"><?php _e('Note: In order to be able to reset or reload the text (eg: after changing the language), highlight the text, delete it and click save. Thus, the text is reloaded.','shapepress-dsgvo')?></span>
|
54 |
-
-->
|
55 |
-
<div style="clear: both"></div>
|
56 |
-
<br>
|
57 |
-
<?php
|
58 |
-
$imprintContent = SPDSGVOSettings::get('imprint');
|
59 |
-
if ($imprintContent == NULL || strlen($imprintContent) < 10)
|
60 |
-
{
|
61 |
-
$imprintContent = file_get_contents(SPDSGVO::pluginDir('/templates/'.spDsgvoGetLocale().'/imprint.txt'));
|
62 |
-
|
63 |
-
|
64 |
-
}
|
65 |
-
wp_editor($imprintContent, 'imprint', array('textarea_rows'=> '20'));
|
66 |
-
|
67 |
-
?>
|
68 |
-
<?php submit_button(); ?>
|
69 |
-
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/integrations/class-sp-dsgvo-integrations-action.php
CHANGED
@@ -1,22 +1,22 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOIntegrationsAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'SPDSGVO-integrations-submit';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->checkCSRF();
|
9 |
-
$this->requireAdmin();
|
10 |
-
|
11 |
-
$time = time();
|
12 |
-
SPDSGVOSettings::set('integration_enable_key', $time);
|
13 |
-
|
14 |
-
foreach($this->get('integrations') as $integrationSlug => $value){
|
15 |
-
SPDSGVOSettings::set('is_enabled_'. $integrationSlug, $time);
|
16 |
-
}
|
17 |
-
|
18 |
-
$this->returnBack();
|
19 |
-
}
|
20 |
-
}
|
21 |
-
|
22 |
-
SPDSGVOIntegrationsAction::listen();
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOIntegrationsAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'SPDSGVO-integrations-submit';
|
6 |
+
|
7 |
+
protected function run(){
|
8 |
+
$this->checkCSRF();
|
9 |
+
$this->requireAdmin();
|
10 |
+
|
11 |
+
$time = time();
|
12 |
+
SPDSGVOSettings::set('integration_enable_key', $time);
|
13 |
+
|
14 |
+
foreach($this->get('integrations') as $integrationSlug => $value){
|
15 |
+
SPDSGVOSettings::set('is_enabled_'. $integrationSlug, $time);
|
16 |
+
}
|
17 |
+
|
18 |
+
$this->returnBack();
|
19 |
+
}
|
20 |
+
}
|
21 |
+
|
22 |
+
SPDSGVOIntegrationsAction::listen();
|
admin/tabs/integrations/class-sp-dsgvo-integrations-tab.php
CHANGED
@@ -1,16 +1,16 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOIntegrationsTab extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
public $title = 'Integrations';
|
6 |
-
public $slug = 'integrations';
|
7 |
-
public $isHidden = true;
|
8 |
-
|
9 |
-
public function __construct(){
|
10 |
-
$this->title = __('Integrations','shapepress-dsgvo');
|
11 |
-
}
|
12 |
-
|
13 |
-
public function page(){
|
14 |
-
include plugin_dir_path(__FILE__) .'page.php';
|
15 |
-
}
|
16 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOIntegrationsTab extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $title = 'Integrations';
|
6 |
+
public $slug = 'integrations';
|
7 |
+
public $isHidden = true;
|
8 |
+
|
9 |
+
public function __construct(){
|
10 |
+
$this->title = __('Integrations','shapepress-dsgvo');
|
11 |
+
}
|
12 |
+
|
13 |
+
public function page(){
|
14 |
+
include plugin_dir_path(__FILE__) .'page.php';
|
15 |
+
}
|
16 |
+
}
|
admin/tabs/integrations/page.php
CHANGED
@@ -1,45 +1,45 @@
|
|
1 |
-
<h1><?php _e('Integrations', 'shapepress-dsgvo'); ?></h1>
|
2 |
-
<hr>
|
3 |
-
|
4 |
-
<form method="post" action="<?= SPDSGVOIntegrationsAction::formURL() ?>">
|
5 |
-
<input type="hidden" name="action" value="<?= SPDSGVOIntegrationsAction::getActionName() ?>">
|
6 |
-
<?php wp_nonce_field( SPDSGVOIntegrationsAction::getActionName(). '-nonce' ); ?>
|
7 |
-
|
8 |
-
<table class="form-table">
|
9 |
-
<tbody>
|
10 |
-
|
11 |
-
<?php $integrations = SPDSGVOIntegration::getAllIntegrations(FALSE); ?>
|
12 |
-
<?php if(count($integrations) === 0): ?>
|
13 |
-
|
14 |
-
<tr>
|
15 |
-
<th scope="row"><?php _e('No integrations installed','shapepress-dsgvo')?></th>
|
16 |
-
<td></td>
|
17 |
-
</tr>
|
18 |
-
|
19 |
-
<?php else: ?>
|
20 |
-
|
21 |
-
<?php foreach($integrations as $key => $integration): ?>
|
22 |
-
|
23 |
-
<tr>
|
24 |
-
<th scope="row"><?= $integration->title ?></th>
|
25 |
-
<td>
|
26 |
-
<fieldset>
|
27 |
-
<legend class="screen-reader-text">
|
28 |
-
<span><?= $integration->title ?></span>
|
29 |
-
</legend>
|
30 |
-
|
31 |
-
<label for="<?= $integration->slug ?>">
|
32 |
-
<input name="integrations[<?= $integration->slug ?>]" type="checkbox" id="<?= $integration->slug ?>" value="1" <?= (SPDSGVOIntegration::isEnabled($integration->slug))? ' checked ' : ''; ?>>
|
33 |
-
</label>
|
34 |
-
</fieldset>
|
35 |
-
</td>
|
36 |
-
</tr>
|
37 |
-
|
38 |
-
<?php endforeach; ?>
|
39 |
-
<?php endif; ?>
|
40 |
-
|
41 |
-
</tbody>
|
42 |
-
</table>
|
43 |
-
|
44 |
-
<?php submit_button(); ?>
|
45 |
-
</form>
|
1 |
+
<h1><?php _e('Integrations', 'shapepress-dsgvo'); ?></h1>
|
2 |
+
<hr>
|
3 |
+
|
4 |
+
<form method="post" action="<?= SPDSGVOIntegrationsAction::formURL() ?>">
|
5 |
+
<input type="hidden" name="action" value="<?= SPDSGVOIntegrationsAction::getActionName() ?>">
|
6 |
+
<?php wp_nonce_field( SPDSGVOIntegrationsAction::getActionName(). '-nonce' ); ?>
|
7 |
+
|
8 |
+
<table class="form-table">
|
9 |
+
<tbody>
|
10 |
+
|
11 |
+
<?php $integrations = SPDSGVOIntegration::getAllIntegrations(FALSE); ?>
|
12 |
+
<?php if(count($integrations) === 0): ?>
|
13 |
+
|
14 |
+
<tr>
|
15 |
+
<th scope="row"><?php _e('No integrations installed','shapepress-dsgvo')?></th>
|
16 |
+
<td></td>
|
17 |
+
</tr>
|
18 |
+
|
19 |
+
<?php else: ?>
|
20 |
+
|
21 |
+
<?php foreach($integrations as $key => $integration): ?>
|
22 |
+
|
23 |
+
<tr>
|
24 |
+
<th scope="row"><?= $integration->title ?></th>
|
25 |
+
<td>
|
26 |
+
<fieldset>
|
27 |
+
<legend class="screen-reader-text">
|
28 |
+
<span><?= $integration->title ?></span>
|
29 |
+
</legend>
|
30 |
+
|
31 |
+
<label for="<?= $integration->slug ?>">
|
32 |
+
<input name="integrations[<?= $integration->slug ?>]" type="checkbox" id="<?= $integration->slug ?>" value="1" <?= (SPDSGVOIntegration::isEnabled($integration->slug))? ' checked ' : ''; ?>>
|
33 |
+
</label>
|
34 |
+
</fieldset>
|
35 |
+
</td>
|
36 |
+
</tr>
|
37 |
+
|
38 |
+
<?php endforeach; ?>
|
39 |
+
<?php endif; ?>
|
40 |
+
|
41 |
+
</tbody>
|
42 |
+
</table>
|
43 |
+
|
44 |
+
<?php submit_button(); ?>
|
45 |
+
</form>
|
admin/tabs/premium/class-sp-dsgvo-premium-action.php
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOPremiumAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'premium';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->requireAdmin();
|
9 |
-
|
10 |
-
|
11 |
-
$this->returnBack();
|
12 |
-
}
|
13 |
-
}
|
14 |
-
|
15 |
-
SPDSGVOPremiumAction::listen();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/premium/class-sp-dsgvo-premium-tab.php
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOPremiumTab extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
public $title = 'Premium';
|
6 |
-
public $slug = 'premium';
|
7 |
-
public $isHidden = FALSE;
|
8 |
-
public $isHighlighted = TRUE;
|
9 |
-
|
10 |
-
public function __construct(){}
|
11 |
-
|
12 |
-
public function page(){
|
13 |
-
include plugin_dir_path(__FILE__) .'page.php';
|
14 |
-
}
|
15 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/premium/page.php
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<h1>Premium Optionen</h1>
|
|
admin/tabs/privacy-policy/class-sp-dsgvo-privacy-policy-tab.php
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOPrivacyPolicyTab extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
public $title = 'Privacy Policy';
|
6 |
-
public $slug = 'privacy-policy';
|
7 |
-
public $isHidden = TRUE;
|
8 |
-
|
9 |
-
public function __construct(){
|
10 |
-
|
11 |
-
$this->title = __('Privacy Policy','shapepress-dsgvo');
|
12 |
-
}
|
13 |
-
|
14 |
-
public function page(){
|
15 |
-
include plugin_dir_path(__FILE__) .'page.php';
|
16 |
-
}
|
17 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/privacy-policy/page.php
DELETED
@@ -1,97 +0,0 @@
|
|
1 |
-
<h1><?php _e('Privacy policy','shapepress-dsgvo')?></h1>
|
2 |
-
<p>
|
3 |
-
<?php _e('The shortcode <code>[privacy_policy]</code> generates a privacy page from the input made under General Settings.','shapepress-dsgvo')?>
|
4 |
-
</p>
|
5 |
-
<p><?php _e('Initially, this text is filled with a template. The text blocks in the square brackets ([]) are filled with the values that you entered in the General Settings. You can customize the entire text to your requirements, as well as delete passages if they do not apply to them.','shapepress-dsgvo')?>
|
6 |
-
</p>
|
7 |
-
|
8 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
9 |
-
<?php wp_nonce_field( SPDSGVOPrivacyPolicyAction::getActionName(). '-nonce' ); ?>
|
10 |
-
<table class="form-table btn-settings-show">
|
11 |
-
<tbody>
|
12 |
-
<tr>
|
13 |
-
<th scope="row"><?php _e('Privacy policy page','shapepress-dsgvo')?></th>
|
14 |
-
<td>
|
15 |
-
<?php $privacyPolicyPage = SPDSGVOSettings::get('privacy_policy_page'); ?>
|
16 |
-
<label for="privacy_policy_page"><?php _e('Page', 'shapepress-dsgvo'); ?>:
|
17 |
-
<select name="privacy_policy_page" id="privacy_policy_page">
|
18 |
-
<option value="0"><?php _e('Select', 'shapepress-dsgvo'); ?></option>
|
19 |
-
<?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
|
20 |
-
<option <?= selected($privacyPolicyPage == $page->ID) ?> value="<?= $page->ID ?>">
|
21 |
-
<?= $page->post_title ?>
|
22 |
-
</option>
|
23 |
-
<?php endforeach; ?>
|
24 |
-
</select>
|
25 |
-
</label>
|
26 |
-
|
27 |
-
<?php if($privacyPolicyPage == '0'): ?>
|
28 |
-
<p><?php _e('Create a page that uses the shortcode <code>[privacy_policy]</code>.','shapepress-dsgvo')?> <a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('privacy_policy_page' => '1')) ?>"><?php _e('Create page','shapepress-dsgvo')?></a></p>
|
29 |
-
<?php elseif(!pageContainsString($privacyPolicyPage, 'privacy_policy')): ?>
|
30 |
-
<p><?php _e('Attention: The shortcode <code>[privacy_policy]</code> was not found on the page you selected.','shapepress-dsgvo')?> <a href="<?= get_edit_post_link($privacyPolicyPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a></p>
|
31 |
-
<?php else: ?>
|
32 |
-
<a href="<?= get_edit_post_link($privacyPolicyPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a>
|
33 |
-
<?php endif; ?>
|
34 |
-
</td>
|
35 |
-
</tr>
|
36 |
-
<?php if (isValidPremiumEdition()) : ?>
|
37 |
-
<tr>
|
38 |
-
<th scope="row"><?php _e('Show checkbox at WooCommerce checkout to confirm privacy policy','shapepress-dsgvo')?></th>
|
39 |
-
<td><label for="woo_show_privacy_checkbox"> <input
|
40 |
-
name="woo_show_privacy_checkbox" type="checkbox"
|
41 |
-
id="woo_show_privacy_checkbox" value="1"
|
42 |
-
<?= (SPDSGVOSettings::get('woo_show_privacy_checkbox') === '1')? ' checked ' : ''; ?>>
|
43 |
-
</label></td>
|
44 |
-
</tr>
|
45 |
-
|
46 |
-
<!-- i592995 -->
|
47 |
-
<tr>
|
48 |
-
<?php
|
49 |
-
$privacy_text = SPDSGVOSettings::get('woo_privacy_text', '');
|
50 |
-
if($privacy_text == '') {
|
51 |
-
$privacy_text = __('I have read and accepted the Privacy Policy.','shapepress-dsgvo');
|
52 |
-
}
|
53 |
-
?>
|
54 |
-
<th scope="row"><?php _e('WooCommerce privacy policy text','shapepress-dsgvo')?></th>
|
55 |
-
<td><label for="woo_privacy_text">
|
56 |
-
<input type="text" name="woo_privacy_text" id="woo_privacy_text" class="woo-privacy-text" value="<?php echo $privacy_text; ?>" />
|
57 |
-
</label></td>
|
58 |
-
</tr>
|
59 |
-
<!-- i592995 -->
|
60 |
-
<?php endif; ?>
|
61 |
-
</tbody>
|
62 |
-
</table>
|
63 |
-
<hr class="sp-dsgvo">
|
64 |
-
<br>
|
65 |
-
<?php if (spWpmlUsed() == true): ?>
|
66 |
-
<p><?php _e('<strong>Important Note:</strong> Because you use WPML the English Version of the privacy policy was set by default. You can translate it via WMPL String Translation. Search for text-domain "shapepress-dsgvo" and name "privacy_policy".','shapepress-dsgvo')?>
|
67 |
-
</p>
|
68 |
-
<?php else: ?>
|
69 |
-
<p><?php _e('<strong>Important Note:</strong> If you use WPML you can translate these inputs via WPML String Translations.','shapepress-dsgvo')?></p>
|
70 |
-
<?php endif; ?>
|
71 |
-
<p>
|
72 |
-
<a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('reset_privacy_policy_page' => '1','privacy_policy_language' => 'en_EN')) ?>"><?php _e('Reload English template','shapepress-dsgvo')?></a>
|
73 |
-
<a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('reset_privacy_policy_page' => '1','privacy_policy_language' => 'de_DE')) ?>"><?php _e('Reload German template','shapepress-dsgvo')?></a>
|
74 |
-
</p>
|
75 |
-
<!--
|
76 |
-
<span class="info-text" style="margin-bottom: 20px;"><?php _e('Note: In order to be able to reset or reload the text (eg: after changing the language), highlight the text, delete it and click save. Thus, the text is reloaded.','shapepress-dsgvo')?></span>
|
77 |
-
-->
|
78 |
-
<div style="clear: both"></div>
|
79 |
-
<br>
|
80 |
-
|
81 |
-
<input type="hidden" name="action" value="privacy-policy">
|
82 |
-
|
83 |
-
<br>
|
84 |
-
<?php
|
85 |
-
$pageContent = SPDSGVOSettings::get('privacy_policy');
|
86 |
-
if ($pageContent == NULL || strlen($pageContent) < 10)
|
87 |
-
{
|
88 |
-
$pageContent = file_get_contents(SPDSGVO::pluginDir('/templates/'.spDsgvoGetLocale().'/privacy-policy.txt'));
|
89 |
-
|
90 |
-
//$pageContent = mb_convert_encoding($pageContent, 'HTML-ENTITIES', "UTF-8");
|
91 |
-
}
|
92 |
-
|
93 |
-
wp_editor($pageContent, 'privacy_policy', array('textarea_rows'=> '20'));
|
94 |
-
?>
|
95 |
-
<?php submit_button(); ?>
|
96 |
-
|
97 |
-
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/services/class-sp-dsgvo-add-service-action.php
DELETED
@@ -1,41 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOAddServiceAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'admin-add-service';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->checkCSRF();
|
9 |
-
$this->requireAdmin();
|
10 |
-
|
11 |
-
if(!empty($this->get('new_name')) && !empty($this->get('new_reason'))){
|
12 |
-
|
13 |
-
// Make Slug
|
14 |
-
$slug = $slug_ = SPDSGVO::slugify($this->get('new_name'));
|
15 |
-
$tries = 0;
|
16 |
-
while(in_array($slug, array_keys($meta))){
|
17 |
-
$tries++;
|
18 |
-
$slug = ($slug_ .'-'. $tries);
|
19 |
-
}
|
20 |
-
|
21 |
-
/* i592995 */
|
22 |
-
// Append new service to services
|
23 |
-
$meta = SPDSGVOSettings::get('services');
|
24 |
-
if(!is_array($meta)){ $meta = array(); }
|
25 |
-
$meta[$slug] = array(
|
26 |
-
'slug' => $slug,
|
27 |
-
'name' => $this->get('new_name'),
|
28 |
-
'reason' => $this->get('new_reason'),
|
29 |
-
'link' => $this->get('new_link'),
|
30 |
-
'default' => $this->get('new_default'),
|
31 |
-
'image' => $this->get('new_image')
|
32 |
-
);
|
33 |
-
/* i592995 */
|
34 |
-
SPDSGVOSettings::set('services', $meta);
|
35 |
-
}
|
36 |
-
|
37 |
-
$this->returnBack();
|
38 |
-
}
|
39 |
-
}
|
40 |
-
|
41 |
-
SPDSGVOAddServiceAction::listen();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/services/class-sp-dsgvo-delete-service-action.php
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVODeleteServiceAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'delete-service';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->checkCSRF();
|
9 |
-
$this->requireAdmin();
|
10 |
-
|
11 |
-
|
12 |
-
$services = SPDSGVOSettings::get('services');
|
13 |
-
|
14 |
-
if(is_array($services)){
|
15 |
-
$meta = array();
|
16 |
-
foreach($services as $slug => $service){
|
17 |
-
if($slug !== $this->get('slug')){
|
18 |
-
$meta[$slug] = $service;
|
19 |
-
}
|
20 |
-
}
|
21 |
-
|
22 |
-
SPDSGVOSettings::set('services', $meta);
|
23 |
-
SPDSGVOLog::insert(__('Third-party service deleted by', 'shapepress-dsgvo') . " {$this->user->user_email}");
|
24 |
-
}
|
25 |
-
|
26 |
-
$this->returnBack();
|
27 |
-
}
|
28 |
-
}
|
29 |
-
|
30 |
-
SPDSGVODeleteServiceAction::listen();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/services/class-sp-dsgvo-services-action.php
DELETED
@@ -1,44 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOServicesAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'admin-services';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->checkCSRF();
|
9 |
-
$this->requireAdmin();
|
10 |
-
|
11 |
-
|
12 |
-
// User permissons page
|
13 |
-
if($this->has('user_permissions_page')){
|
14 |
-
SPDSGVOSettings::set('user_permissions_page', $this->get('user_permissions_page'));
|
15 |
-
}
|
16 |
-
|
17 |
-
// Update Services
|
18 |
-
if($this->has('services')){
|
19 |
-
$services = $this->get('services', NULL, FALSE);
|
20 |
-
$meta = array();
|
21 |
-
if(is_array($services)){
|
22 |
-
/* i592995 */
|
23 |
-
foreach($services as $key => $service){
|
24 |
-
$meta[$service['slug']] = array(
|
25 |
-
'slug' => stripslashes($service['slug']),
|
26 |
-
'name' => stripslashes($service['name']),
|
27 |
-
'reason' => stripslashes($service['reason']),
|
28 |
-
'link' => stripslashes($service['link']),
|
29 |
-
'image' => stripslashes($service['image']),
|
30 |
-
'default' => stripslashes($service['default']),
|
31 |
-
);
|
32 |
-
}
|
33 |
-
/* i592995 */
|
34 |
-
}
|
35 |
-
|
36 |
-
SPDSGVOSettings::set('services', $meta);
|
37 |
-
}
|
38 |
-
|
39 |
-
|
40 |
-
$this->returnBack();
|
41 |
-
}
|
42 |
-
}
|
43 |
-
|
44 |
-
SPDSGVOServicesAction::listen();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/services/class-sp-dsgvo-services-tab.php
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOServicesTab extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
public $title = 'Privacy policy & Plugins';
|
6 |
-
public $slug = 'services';
|
7 |
-
|
8 |
-
public function __construct(){
|
9 |
-
|
10 |
-
$this->title = __('Privacy policy & Plugins','shapepress-dsgvo');
|
11 |
-
}
|
12 |
-
|
13 |
-
public function page(){
|
14 |
-
include plugin_dir_path(__FILE__) .'page.php';
|
15 |
-
}
|
16 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/services/page.php
DELETED
@@ -1,200 +0,0 @@
|
|
1 |
-
<h1><?php _e('Privacy: Settings and 3rd party plugins','shapepress-dsgvo')?></h1>
|
2 |
-
<p><?php _e('All 3rd Party Plugins (Google Analytics, Facebook Pixel, ..) can be listed here to give their users a selective opt-in / opt-out.','shapepress-dsgvo')?></p>
|
3 |
-
<p><?php _e('With the shortcode <code>[display_services]</code> these services can then be displayed to the user.','shapepress-dsgvo')?></p>
|
4 |
-
|
5 |
-
|
6 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
7 |
-
<input type="hidden" name="action" value="admin-services">
|
8 |
-
<?php wp_nonce_field( SPDSGVOServicesAction::getActionName(). '-nonce' ); ?>
|
9 |
-
|
10 |
-
<table class="form-table btn-settings-show" >
|
11 |
-
<tbody>
|
12 |
-
<tr>
|
13 |
-
<th scope="row"><?php _e('Datenschutz Seite für ihre Benutzer','shapepress-dsgvo')?></th>
|
14 |
-
<td>
|
15 |
-
|
16 |
-
<ul>
|
17 |
-
<li>
|
18 |
-
<label for="user_permissions_page"><?php _e('Page','shapepress-dsgvo')?>
|
19 |
-
<select name="user_permissions_page" id="user_permissions_page">
|
20 |
-
<option value="0"><?php _e('Select','shapepress-dsgvo')?></option>
|
21 |
-
|
22 |
-
<?php $userPermissionsPage = SPDSGVOSettings::get('user_permissions_page'); ?>
|
23 |
-
<?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
|
24 |
-
<option <?= selected($userPermissionsPage == $page->ID) ?> value="<?= $page->ID ?>">
|
25 |
-
<?= $page->post_title ?>
|
26 |
-
</option>
|
27 |
-
<?php endforeach; ?>
|
28 |
-
</select>
|
29 |
-
</label>
|
30 |
-
<span class="info-text"><?php _e('Specifies the page where users have the option to customize their privacy settings (selective opt-in / opt-out).','shapepress-dsgvo')?></span>
|
31 |
-
</li>
|
32 |
-
</ul>
|
33 |
-
|
34 |
-
<?php if($userPermissionsPage == '0'): ?>
|
35 |
-
<p>
|
36 |
-
<?php _e('Create a page that uses the shortcode <code>[user_privacy_settings_form]</code>.','shapepress-dsgvo')?>
|
37 |
-
<a class="button button-default"
|
38 |
-
href="<?= SPDSGVOCreatePageAction::url(array('user_privacy_settings_page' => '1')) ?>"><?php _e('Create page','shapepress-dsgvo')?></a>
|
39 |
-
</p>
|
40 |
-
|
41 |
-
<?php elseif($userPermissionsPage != '0' && strpos(get_post($userPermissionsPage)->post_content, 'user_privacy_settings_form') === FALSE): ?>
|
42 |
-
<p><?php _e('Attention: The shortcode <code>[user_privacy_settings_form]</code> was not found on the selected page. The form will not be displayed.','shapepress-dsgvo')?> <a href="<?= get_edit_post_link($userPermissionsPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a></p>
|
43 |
-
<?php else: ?>
|
44 |
-
<a href="<?= get_edit_post_link($userPermissionsPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a> <br/>
|
45 |
-
<?php _e('The shortcode <code>[user_privacy_settings_form]</code> allows the user to activate or deactivate services on the selected page.','shapepress-dsgvo')?>
|
46 |
-
|
47 |
-
<?php endif; ?>
|
48 |
-
</td>
|
49 |
-
</tr>
|
50 |
-
</tbody>
|
51 |
-
</table>
|
52 |
-
<hr class="sp-dsgvo">
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
<table class="widefat fixed" cellspacing="0">
|
57 |
-
<thead>
|
58 |
-
<tr>
|
59 |
-
<th id="slug" class="manage-column column-slug" scope="col" style="width:12%"><?php _e('Slug','shapepress-dsgvo')?></th>
|
60 |
-
<th id="name" class="manage-column column-name" scope="col"><?php _e('Name','shapepress-dsgvo')?></th>
|
61 |
-
<th id="reason" class="manage-column column-reason" scope="col"><?php _e('Reason','shapepress-dsgvo')?></th>
|
62 |
-
<th id="reason" class="manage-column column-link" scope="col"><?php _e('Terms Url','shapepress-dsgvo')?></th>
|
63 |
-
<th id="default" class="manage-column column-default" scope="col" style="width:10%"><?php _e('Default','shapepress-dsgvo')?></th>
|
64 |
-
<th id="image" class="manage-column column-image" scope="col" style="width:10%"><?php _e('Image','shapepress-dsgvo')?></th>
|
65 |
-
<th id="delete" class="manage-column column-delete" scope="col" style="width:10%"><?php _e('Delete','shapepress-dsgvo')?></th>
|
66 |
-
</tr>
|
67 |
-
</thead>
|
68 |
-
|
69 |
-
<tbody>
|
70 |
-
<?php $i = 0; // AB: This is justified ?>
|
71 |
-
<?php foreach(SPDSGVOSettings::get('services') as $slug => $service): ?>
|
72 |
-
|
73 |
-
<tr class="<?= ($i % 2 == 0)? 'alternate' : '' ?>">
|
74 |
-
<td class="column-slug">
|
75 |
-
<span><?= $slug ?></span>
|
76 |
-
<input type="hidden" name="services[<?= $slug ?>][slug]" value="<?= $slug ?>">
|
77 |
-
</td>
|
78 |
-
<td class="column-name">
|
79 |
-
<input type="text" class="aio-transparent" name="services[<?= $slug ?>][name]" value="<?= $service['name'] ?>">
|
80 |
-
</td>
|
81 |
-
<td class="column-reason">
|
82 |
-
<textarea class="aio-transparent" name="services[<?= $slug ?>][reason]" id="" cols="30" rows="5"><?= $service['reason'] ?></textarea>
|
83 |
-
</td>
|
84 |
-
|
85 |
-
<td class="column-link">
|
86 |
-
<input type="text" class="aio-transparent" placeholder="<?php _e('Terms & Conditions link', 'shapepress-dsgvo'); ?>" name="services[<?= $slug ?>][link]" value="<?= $service['link'] ?>">
|
87 |
-
</td>
|
88 |
-
<td class="column-default">
|
89 |
-
<select name="services[<?= $slug ?>][default]">
|
90 |
-
<option <?= ($service['default'] == '1')? ' selected ' : '' ?> value="1"><?php _e('Enabled','shapepress-dsgvo')?></option>
|
91 |
-
<option <?= ($service['default'] == '0')? ' selected ' : '' ?> value="0"><?php _e('Disabled','shapepress-dsgvo')?></option>
|
92 |
-
</select>
|
93 |
-
</td>
|
94 |
-
<!-- i592995 -->
|
95 |
-
<td class="column-image">
|
96 |
-
<?php
|
97 |
-
$src = '';
|
98 |
-
$img_id = '';
|
99 |
-
if(isset($service['image'])) {
|
100 |
-
$img_id = $service['image'];
|
101 |
-
$src = wp_get_attachment_url(intval($img_id));
|
102 |
-
}
|
103 |
-
?>
|
104 |
-
|
105 |
-
<div class="dsgvo-image-upload">
|
106 |
-
<div class='image-preview-wrapper'>
|
107 |
-
<img id='<?= $slug ?>_image-preview' class="image-preview" src='<?php echo $src; ?>' style="width: 100%">
|
108 |
-
</div>
|
109 |
-
<input id="<?= $slug ?>_upload_image_button" type="button" class="button" value="<?php _e( 'Upload image', 'shapepress-dsgvo' ); ?>" />
|
110 |
-
<input type='hidden' class="image-id" name='services[<?= $slug ?>][image]' id='<?= $slug ?>_image_id' value='<?php echo $img_id; ?>'>
|
111 |
-
</div><!-- .dsgvo-image-upload -->
|
112 |
-
</td>
|
113 |
-
<!-- i592995 -->
|
114 |
-
<td class="column-reason">
|
115 |
-
<?php
|
116 |
-
$action_url = wp_nonce_url( SPDSGVODeleteServiceAction::url(['slug' => $slug]), SPDSGVODeleteServiceAction::getActionName(). '-nonce' );
|
117 |
-
|
118 |
-
?>
|
119 |
-
<a href="<?= esc_url( $action_url ) ?>"><?php _e('Delete','shapepress-dsgvo')?></a>
|
120 |
-
</td>
|
121 |
-
</tr>
|
122 |
-
|
123 |
-
<?php $i++; ?>
|
124 |
-
<?php endforeach; ?>
|
125 |
-
</tbody>
|
126 |
-
|
127 |
-
<tfoot>
|
128 |
-
<tr>
|
129 |
-
<th class="manage-column column-slug" scope="col"><?php _e('Slug','shapepress-dsgvo')?></th>
|
130 |
-
<th class="manage-column column-name" scope="col"><?php _e('Name','shapepress-dsgvo')?></th>
|
131 |
-
<th class="manage-column column-reason" scope="col"><?php _e('Reason','shapepress-dsgvo')?></th>
|
132 |
-
<th class="manage-column column-link" scope="col"><?php _e('Terms Url','shapepress-dsgvo')?></th>
|
133 |
-
<th class="manage-column column-default" scope="col"><?php _e('Default','shapepress-dsgvo')?></th>
|
134 |
-
<th class="manage-column column-delete" scope="col"><?php _e('Delete','shapepress-dsgvo')?></th>
|
135 |
-
</tr>
|
136 |
-
</tfoot>
|
137 |
-
</table>
|
138 |
-
|
139 |
-
<?php submit_button(); ?>
|
140 |
-
</form>
|
141 |
-
|
142 |
-
|
143 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
144 |
-
<input type="hidden" name="action" value="admin-add-service">
|
145 |
-
<?php wp_nonce_field( SPDSGVOAddServiceAction::getActionName(). '-nonce' ); ?>
|
146 |
-
<br><br>
|
147 |
-
|
148 |
-
<h3><?php _e('Add service','shapepress-dsgvo')?></h3>
|
149 |
-
<table class="form-table">
|
150 |
-
<tbody>
|
151 |
-
<tr>
|
152 |
-
<th scope="row"><label for="new_name"><?php _e('Name','shapepress-dsgvo')?></label></th>
|
153 |
-
<td>
|
154 |
-
<input name="new_name" type="text" id="new_name" value="" class="regular-text ltr">
|
155 |
-
<p class="description" ><?php _e('Service name','shapepress-dsgvo')?></p>
|
156 |
-
</td>
|
157 |
-
</tr>
|
158 |
-
<tr>
|
159 |
-
<th scope="row"><label for="new_reason"><?php _e('Reason','shapepress-dsgvo')?></label></th>
|
160 |
-
<td>
|
161 |
-
<input name="new_reason" type="text" id="new_reason" value="" class="regular-text ltr">
|
162 |
-
<p class="description"><?php _e('Reason for use','shapepress-dsgvo')?></p>
|
163 |
-
</td>
|
164 |
-
</tr>
|
165 |
-
<tr>
|
166 |
-
<th scope="row"><label for="new_link"><?php _e('Terms Url','shapepress-dsgvo')?></label></th>
|
167 |
-
<td>
|
168 |
-
<input name="new_link" type="text" id="new_link" value="" class="regular-text ltr">
|
169 |
-
<p class="description"><?php _e('The URL pointing to the terms of the service','shapepress-dsgvo')?></p>
|
170 |
-
</td>
|
171 |
-
</tr>
|
172 |
-
<tr>
|
173 |
-
<th scope="row"><label for="new_default"><?php _e('Default','shapepress-dsgvo')?></label></th>
|
174 |
-
<td>
|
175 |
-
<select name="new_default">
|
176 |
-
<option value="1"><?php _e('Enabled','shapepress-dsgvo')?></option>
|
177 |
-
<option value="0"><?php _e('Disabled','shapepress-dsgvo')?></option>
|
178 |
-
</select>
|
179 |
-
<p class="description"><?php _e('Indicates whether the service should be enabled by default or not.','shapepress-dsgvo')?></p>
|
180 |
-
</td>
|
181 |
-
</tr>
|
182 |
-
<!-- i592995 -->
|
183 |
-
<tr>
|
184 |
-
<th scope="row"><label for="new_image"><?php _e('Image','shapepress-dsgvo')?></label></th>
|
185 |
-
<td>
|
186 |
-
<div class="dsgvo-image-upload">
|
187 |
-
<div class='image-preview-wrapper'>
|
188 |
-
<img id='image-preview-new' class="image-preview" src='' style="width: 200px">
|
189 |
-
</div>
|
190 |
-
<input id="upload_image_button_new" type="button" class="button" value="<?php _e( 'Upload image', 'shapepress-dsgvo' ); ?>" />
|
191 |
-
<input type='hidden' class="image-id" name='new_image' id='new_image' value=''>
|
192 |
-
</div><!-- .dsgvo-image-upload -->
|
193 |
-
</td>
|
194 |
-
</tr>
|
195 |
-
<!-- i592995 -->
|
196 |
-
</tbody>
|
197 |
-
</table>
|
198 |
-
|
199 |
-
<?php submit_button(__('Add service','shapepress-dsgvo')); ?>
|
200 |
-
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/setup/class-sp-dsgvo-create-page-action.php
CHANGED
@@ -1,128 +1,101 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOCreatePageAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'admin-create-page';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->requireAdmin();
|
9 |
-
|
10 |
-
// Init Settings
|
11 |
-
if(class_exists('SPDSGVOLog')){
|
12 |
-
if(SPDSGVOLog::tableExists() === FALSE){
|
13 |
-
if(class_exists('SPDSGVOSettings')){
|
14 |
-
SPDSGVOSettings::init();
|
15 |
-
}
|
16 |
-
|
17 |
-
SPDSGVOLog::migrate();
|
18 |
-
SPDSGVOLog::insert(__('Plugin installed', 'shapepress-dsgvo'));
|
19 |
-
}
|
20 |
-
}
|
21 |
-
|
22 |
-
|
23 |
-
// License Key
|
24 |
-
if($this->has('license_key')){
|
25 |
-
SPDSGVOSettings::set('show_setup', '0');
|
26 |
-
SPDSGVOSettings::set('license_key', $this->get('license_key'));
|
27 |
-
}
|
28 |
-
|
29 |
-
|
30 |
-
// Create Pages (set-up page)
|
31 |
-
if($this->has('display_cookie_notice')){
|
32 |
-
SPDSGVOSettings::set('display_cookie_notice', '1');
|
33 |
-
}
|
34 |
-
|
35 |
-
if($this->has('sar')){
|
36 |
-
$ID = $this->createPage(__('Subject Access Request','shapepress-dsgvo'), '[sar_form]');
|
37 |
-
SPDSGVOSettings::set('sar_page', $ID);
|
38 |
-
}
|
39 |
-
|
40 |
-
if($this->has('user_privacy_settings_page')){
|
41 |
-
$ID = $this->createPage(__('User privacy settings','shapepress-dsgvo'), '[user_privacy_settings_form]');
|
42 |
-
SPDSGVOSettings::set('user_permissions_page', $ID);
|
43 |
-
}
|
44 |
-
|
45 |
-
if($this->has('terms_conditions_page')){
|
46 |
-
$ID = $this->createPage(__('Terms & Conditions', 'shapepress-dsgvo'), '[terms_conditions]');
|
47 |
-
SPDSGVOSettings::set('terms_conditions_page', $ID);
|
48 |
-
}
|
49 |
-
|
50 |
-
if($this->has('privacy_policy_page')){
|
51 |
-
$ID = $this->createPage(__('Privacy Policy','shapepress-dsgvo'), '[privacy_policy]');
|
52 |
-
SPDSGVOSettings::set('privacy_policy_page', $ID);
|
53 |
-
}
|
54 |
-
|
55 |
-
if($this->has('super_unsubscribe_page')){
|
56 |
-
$ID = $this->createPage(__('Delete Request','shapepress-dsgvo'), '[unsubscribe_form]');
|
57 |
-
SPDSGVOSettings::set('super_unsubscribe_page', $ID);
|
58 |
-
}
|
59 |
-
|
60 |
-
|
61 |
-
if($this->has('imprint_page')){
|
62 |
-
$ID = $this->createPage(__('Imprint','shapepress-dsgvo'), '[imprint]');
|
63 |
-
SPDSGVOSettings::set('imprint_page', $ID);
|
64 |
-
}
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
'post_content' => $content,
|
103 |
-
'post_type' => 'page',
|
104 |
-
'post_status' => 'publish'
|
105 |
-
));
|
106 |
-
}
|
107 |
-
|
108 |
-
public function resetImprintToLanguage($language)
|
109 |
-
{
|
110 |
-
$imprint = file_get_contents(SPDSGVO::pluginDir('/templates/'.$language.'/imprint.txt'));
|
111 |
-
SPDSGVOSettings::set('imprint_hash', wp_hash($imprint));
|
112 |
-
SPDSGVOSettings::set('imprint', $imprint);
|
113 |
-
}
|
114 |
-
|
115 |
-
public function resetPrivacyPolicyToLanguage($language)
|
116 |
-
{
|
117 |
-
$privacyPolicy = file_get_contents(SPDSGVO::pluginDir('/templates/'.$language.'/privacy-policy.txt'));
|
118 |
-
SPDSGVOSettings::set('privacy_policy_hash', wp_hash($privacyPolicy));
|
119 |
-
SPDSGVOSettings::set('privacy_policy', $privacyPolicy);
|
120 |
-
SPDSGVOSettings::set('google_gdpr_refresh_notice', '1');
|
121 |
-
$version = SPDSGVOSettings::get('privacy_policy_version');
|
122 |
-
$version = intval($version);
|
123 |
-
$version++;
|
124 |
-
$version = SPDSGVOSettings::set('privacy_policy_version', $version);
|
125 |
-
}
|
126 |
-
}
|
127 |
-
|
128 |
-
SPDSGVOCreatePageAction::listen();
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOCreatePageAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'admin-create-page';
|
6 |
+
|
7 |
+
protected function run(){
|
8 |
+
$this->requireAdmin();
|
9 |
+
|
10 |
+
// Init Settings
|
11 |
+
if(class_exists('SPDSGVOLog')){
|
12 |
+
if(SPDSGVOLog::tableExists() === FALSE){
|
13 |
+
if(class_exists('SPDSGVOSettings')){
|
14 |
+
SPDSGVOSettings::init();
|
15 |
+
}
|
16 |
+
|
17 |
+
SPDSGVOLog::migrate();
|
18 |
+
SPDSGVOLog::insert(__('Plugin installed', 'shapepress-dsgvo'));
|
19 |
+
}
|
20 |
+
}
|
21 |
+
|
22 |
+
|
23 |
+
// License Key
|
24 |
+
if($this->has('license_key')){
|
25 |
+
SPDSGVOSettings::set('show_setup', '0');
|
26 |
+
SPDSGVOSettings::set('license_key', $this->get('license_key'));
|
27 |
+
}
|
28 |
+
|
29 |
+
|
30 |
+
// Create Pages (set-up page)
|
31 |
+
if($this->has('display_cookie_notice')){
|
32 |
+
SPDSGVOSettings::set('display_cookie_notice', '1');
|
33 |
+
}
|
34 |
+
|
35 |
+
if($this->has('sar')){
|
36 |
+
$ID = $this->createPage(__('Subject Access Request','shapepress-dsgvo'), '[sar_form]');
|
37 |
+
SPDSGVOSettings::set('sar_page', $ID);
|
38 |
+
}
|
39 |
+
|
40 |
+
if($this->has('user_privacy_settings_page')){
|
41 |
+
$ID = $this->createPage(__('User privacy settings','shapepress-dsgvo'), '[user_privacy_settings_form]');
|
42 |
+
SPDSGVOSettings::set('user_permissions_page', $ID);
|
43 |
+
}
|
44 |
+
|
45 |
+
if($this->has('terms_conditions_page')){
|
46 |
+
$ID = $this->createPage(__('Terms & Conditions', 'shapepress-dsgvo'), '[terms_conditions]');
|
47 |
+
SPDSGVOSettings::set('terms_conditions_page', $ID);
|
48 |
+
}
|
49 |
+
|
50 |
+
if($this->has('privacy_policy_page')){
|
51 |
+
$ID = $this->createPage(__('Privacy Policy','shapepress-dsgvo'), '[privacy_policy]');
|
52 |
+
SPDSGVOSettings::set('privacy_policy_page', $ID);
|
53 |
+
}
|
54 |
+
|
55 |
+
if($this->has('super_unsubscribe_page')){
|
56 |
+
$ID = $this->createPage(__('Delete Request','shapepress-dsgvo'), '[unsubscribe_form]');
|
57 |
+
SPDSGVOSettings::set('super_unsubscribe_page', $ID);
|
58 |
+
}
|
59 |
+
|
60 |
+
|
61 |
+
if($this->has('imprint_page')){
|
62 |
+
$ID = $this->createPage(__('Imprint','shapepress-dsgvo'), '[imprint]');
|
63 |
+
SPDSGVOSettings::set('imprint_page', $ID);
|
64 |
+
}
|
65 |
+
|
66 |
+
// Other Pages
|
67 |
+
if($this->has('explicit_permission_page')){
|
68 |
+
$ID = $this->createPage(__('Terms & Conditions', 'shapepress-dsgvo'), '[explicit_permission]');
|
69 |
+
SPDSGVOSettings::set('explicit_permission_page', $ID);
|
70 |
+
}
|
71 |
+
|
72 |
+
|
73 |
+
|
74 |
+
if($this->has('opt_out_page')){
|
75 |
+
$ID = $this->createPage(__('Opt-out', 'shapepress-dsgvo'), '[decline_permission]');
|
76 |
+
SPDSGVOSettings::set('opt_out_page', $ID);
|
77 |
+
}
|
78 |
+
|
79 |
+
|
80 |
+
// Show Set Up
|
81 |
+
if($this->has('show_setup')){
|
82 |
+
SPDSGVOSettings::set('show_setup', '1');
|
83 |
+
}
|
84 |
+
|
85 |
+
|
86 |
+
$this->returnBack();
|
87 |
+
}
|
88 |
+
|
89 |
+
|
90 |
+
public function createPage($title, $content){
|
91 |
+
return wp_insert_post(array(
|
92 |
+
'post_title' => $title,
|
93 |
+
'post_content' => $content,
|
94 |
+
'post_type' => 'page',
|
95 |
+
'post_status' => 'publish'
|
96 |
+
));
|
97 |
+
}
|
98 |
+
|
99 |
+
}
|
100 |
+
|
101 |
+
SPDSGVOCreatePageAction::listen();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/setup/class-sp-dsgvo-setup-tab.php
CHANGED
@@ -1,15 +1,15 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOSetupTab extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
public $title = 'Setup';
|
6 |
-
public $slug = 'setup';
|
7 |
-
|
8 |
-
public function __construct(){
|
9 |
-
$this->title = __('Setup','shapepress-dsgvo');
|
10 |
-
}
|
11 |
-
|
12 |
-
public function page(){
|
13 |
-
include plugin_dir_path(__FILE__) .'page.php';
|
14 |
-
}
|
15 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOSetupTab extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $title = 'Setup';
|
6 |
+
public $slug = 'setup';
|
7 |
+
|
8 |
+
public function __construct(){
|
9 |
+
$this->title = __('Setup','shapepress-dsgvo');
|
10 |
+
}
|
11 |
+
|
12 |
+
public function page(){
|
13 |
+
include plugin_dir_path(__FILE__) .'page.php';
|
14 |
+
}
|
15 |
+
}
|
admin/tabs/setup/page.php
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
-
<h1><?php _e('Setup', 'shapepress-dsgvo'); ?></h1><hr>
|
2 |
-
|
3 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
4 |
-
<input type="hidden" name="action" value="<?= SPDSGVOCreatePageAction::getActionName(); ?>">
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
</form>
|
1 |
+
<h1><?php _e('Setup', 'shapepress-dsgvo'); ?></h1><hr>
|
2 |
+
|
3 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
4 |
+
<input type="hidden" name="action" value="<?= SPDSGVOCreatePageAction::getActionName(); ?>">
|
5 |
+
|
6 |
+
|
7 |
+
|
8 |
+
</form>
|
admin/tabs/subject-access-request/class-sp-dsgvo-subject-access-request-action.php
DELETED
@@ -1,43 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOAdminSubjectAccessRequestAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'admin-subject-access-request';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->checkCSRF();
|
9 |
-
$this->requireAdmin();
|
10 |
-
|
11 |
-
if ($this->has('process') == false && $this->get('all') != '1')
|
12 |
-
{
|
13 |
-
|
14 |
-
SPDSGVOSettings::set('sar_cron', $this->get('sar_cron', '0'));
|
15 |
-
if (isValidPremiumEdition())
|
16 |
-
{
|
17 |
-
SPDSGVOSettings::set('sar_email_notification', $this->get('sar_email_notification', '0'));
|
18 |
-
}
|
19 |
-
|
20 |
-
SPDSGVOSettings::set('sar_dsgvo_accepted_text', $this->get('sar_dsgvo_accepted_text', ''));
|
21 |
-
|
22 |
-
if($this->has('sar_page')){
|
23 |
-
SPDSGVOSettings::set('sar_page', $this->get('sar_page'));
|
24 |
-
}
|
25 |
-
}
|
26 |
-
|
27 |
-
if($this->has('process')){
|
28 |
-
$ID = $this->get('process');
|
29 |
-
SPDSGVOSubjectAccessRequest::doByID($ID);
|
30 |
-
}
|
31 |
-
|
32 |
-
if($this->get('all') == '1'){
|
33 |
-
foreach(SPDSGVOSubjectAccessRequest::finder('pending') as $sar){
|
34 |
-
$sar->doSubjectAccessRequest();
|
35 |
-
}
|
36 |
-
}
|
37 |
-
|
38 |
-
|
39 |
-
$this->returnBack();
|
40 |
-
}
|
41 |
-
}
|
42 |
-
|
43 |
-
SPDSGVOAdminSubjectAccessRequestAction::listen();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/subject-access-request/page.php
DELETED
@@ -1,230 +0,0 @@
|
|
1 |
-
<h1><?php _e('Subject Access Requests','shapepress-dsgvo')?></h1>
|
2 |
-
<p><?php _e('This feature allows users to request a digest of all data stored by you. <br> All data in your database is checked for confidential data and sent to the User by email.','shapepress-dsgvo')?>
|
3 |
-
</p>
|
4 |
-
|
5 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
6 |
-
<input type="hidden" name="action"
|
7 |
-
value="<?= SPDSGVOAdminSubjectAccessRequestAction::getActionName(); ?>">
|
8 |
-
<?php wp_nonce_field( SPDSGVOAdminSubjectAccessRequestAction::getActionName(). '-nonce' ); ?>
|
9 |
-
|
10 |
-
<?php $disablePremiumFeatures = isValidPremiumEdition() == false; ?>
|
11 |
-
|
12 |
-
<table class="form-table">
|
13 |
-
<tbody>
|
14 |
-
<tr>
|
15 |
-
<th scope="row"><?php _e('Automatic processing','shapepress-dsgvo')?></th>
|
16 |
-
<td>
|
17 |
-
<?php $sarCron = SPDSGVOSettings::get('sar_cron'); ?>
|
18 |
-
<label for="sar_cron"> <select name="sar_cron"
|
19 |
-
id="sar_cron">
|
20 |
-
<option value="0" <?= selected($sarCron === '0') ?>><?php _e('none','shapepress-dsgvo')?></option>
|
21 |
-
<option value="1" <?= selected($sarCron === '1') ?>>1 <?php _e('day','shapepress-dsgvo')?></option>
|
22 |
-
<option value="2" <?= selected($sarCron === '2') ?>>2 <?php _e('days','shapepress-dsgvo')?></option>
|
23 |
-
<option value="3" <?= selected($sarCron === '3') ?>>3 <?php _e('days','shapepress-dsgvo')?></option>
|
24 |
-
<option value="7" <?= selected($sarCron === '4') ?>>1 <?php _e('weeks','shapepress-dsgvo')?></option>
|
25 |
-
</select>
|
26 |
-
</label>
|
27 |
-
<span class="info-text"><?php _e('Requests will be automatically processed after the set time and sent to the user.','shapepress-dsgvo')?></span></td>
|
28 |
-
</tr>
|
29 |
-
|
30 |
-
<tr>
|
31 |
-
<th scope="row"><?php _e('Email for new application:','shapepress-dsgvo')?></th>
|
32 |
-
<td>
|
33 |
-
<input
|
34 |
-
name="sar_email_notification" type="checkbox"
|
35 |
-
id="sar_email_notification" value="1"
|
36 |
-
<?= $disablePremiumFeatures ? 'disabled' : true; ?>
|
37 |
-
<?= (SPDSGVOSettings::get('sar_email_notification') === '1')? ' checked ' : ''; ?>>
|
38 |
-
<span class="info-text"><?php _e('Send a notification for a new application to the admin email address.','shapepress-dsgvo')?></span>
|
39 |
-
</td>
|
40 |
-
</tr>
|
41 |
-
<tr>
|
42 |
-
<td><?php _e('GDPR consent text:','shapepress-dsgvo')?></td>
|
43 |
-
<td>
|
44 |
-
<input
|
45 |
-
name="sar_dsgvo_accepted_text" type="text" style="width: 550px;"
|
46 |
-
id="sar_dsgvo_accepted_text" value="<?= SPDSGVOSettings::get('sar_dsgvo_accepted_text'); ?>">
|
47 |
-
<span class="info-text"><?php _e('The text to be displayed in the GDPR checkbox for data storage.','shapepress-dsgvo')?></span>
|
48 |
-
</td>
|
49 |
-
</tr>
|
50 |
-
|
51 |
-
<tr>
|
52 |
-
<th scope="row"><?php _e('Request page:','shapepress-dsgvo')?></th>
|
53 |
-
<td>
|
54 |
-
|
55 |
-
<?php $sarPage = SPDSGVOSettings::get('sar_page'); ?>
|
56 |
-
<label for="sar_page"><select name="sar_page" id="sar_page">
|
57 |
-
<option value="0"><?php _e('Select','shapepress-dsgvo')?></option>
|
58 |
-
<?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
|
59 |
-
<option <?= selected($sarPage == $page->ID) ?>
|
60 |
-
value="<?= $page->ID ?>">
|
61 |
-
<?= $page->post_title ?>
|
62 |
-
</option>
|
63 |
-
<?php endforeach; ?>
|
64 |
-
</select>
|
65 |
-
</label>
|
66 |
-
<span class="info-text"><?php _e('Specifies the page on which users have the option to request their data extract.','shapepress-dsgvo')?></span>
|
67 |
-
|
68 |
-
<?php if($sarPage == '0'): ?>
|
69 |
-
<p>
|
70 |
-
<?php _e('Create a page using the shortcode <code>[sar_form]</code>.','shapepress-dsgvo')?>
|
71 |
-
<a class="button button-default"
|
72 |
-
href="<?= SPDSGVOCreatePageAction::url(array('sar' => '1')) ?>"><?php _e('Create page','shapepress-dsgvo')?></a>
|
73 |
-
</p>
|
74 |
-
<?php elseif(!pageContainsString($sarPage, 'sar_form')): ?>
|
75 |
-
<p>
|
76 |
-
<?php _e('Attention: The shortcode <code>[sar_form]</code> of the selected page was not found. Thus, the user has no opportunity to request the data.','shapepress-dsgvo')?> <a
|
77 |
-
href="<?= get_edit_post_link($sarPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a>
|
78 |
-
</p>
|
79 |
-
<?php else: ?>
|
80 |
-
<a href="<?= get_edit_post_link($sarPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a>
|
81 |
-
<?php endif; ?>
|
82 |
-
</td>
|
83 |
-
</tr>
|
84 |
-
|
85 |
-
<tr>
|
86 |
-
<th><?php submit_button(); ?></th>
|
87 |
-
<td></td>
|
88 |
-
</tr>
|
89 |
-
</tbody>
|
90 |
-
</table>
|
91 |
-
|
92 |
-
<hr class="sp-dsgvo">
|
93 |
-
</form>
|
94 |
-
|
95 |
-
|
96 |
-
<?php $pending = SPDSGVOSubjectAccessRequest::finder('pending'); ?>
|
97 |
-
<table class="widefat fixed" cellspacing="0">
|
98 |
-
<thead>
|
99 |
-
<tr>
|
100 |
-
<th id="request_id" class="manage-column column-request_id"
|
101 |
-
scope="col" style="width: 10%"><?php _e('ID','shapepress-dsgvo')?></th>
|
102 |
-
<th id="email" class="manage-column column-email" scope="col"
|
103 |
-
style="width: 20%"><?php _e('Email','shapepress-dsgvo')?></th>
|
104 |
-
<th id="first_name" class="manage-column column-first_name"
|
105 |
-
scope="col" style="width: 15%"><?php _e('First name','shapepress-dsgvo')?></th>
|
106 |
-
<th id="last_name" class="manage-column column-last_name" scope="col"
|
107 |
-
style="width: 15%"><?php _e('Last name','shapepress-dsgvo')?></th>
|
108 |
-
<th id="dsgvo_accepted" class="manage-column column-dsgvo_accepted" scope="col"
|
109 |
-
style="width: 15%"><?php _e('GDPR approval','shapepress-dsgvo')?></th>
|
110 |
-
<th id="process" class="manage-column column-process" scope="col"
|
111 |
-
style="width: 15%"><?php _e('Run','shapepress-dsgvo')?></th>
|
112 |
-
<!-- i592995 -->
|
113 |
-
<th id="dismiss" class="manage-column column-dismiss" scope="col"
|
114 |
-
style="width: 15%"><?php _e('Dismiss','shapepress-dsgvo')?></th>
|
115 |
-
<!-- i592995 -->
|
116 |
-
</tr>
|
117 |
-
</thead>
|
118 |
-
|
119 |
-
<tbody>
|
120 |
-
<?php if(count($pending) !== 0): ?>
|
121 |
-
<?php foreach($pending as $key => $pendingRequest): ?>
|
122 |
-
|
123 |
-
<tr class="<?= ($key % 2 == 0)? 'alternate' : '' ?>">
|
124 |
-
<td class="column-request-id">
|
125 |
-
<?= $pendingRequest->ID ?>
|
126 |
-
</td>
|
127 |
-
<td class="column-email"><strong><?= $pendingRequest->email ?></strong>
|
128 |
-
</td>
|
129 |
-
<td class="column-integrations">
|
130 |
-
<?= $pendingRequest->first_name ?>
|
131 |
-
</td>
|
132 |
-
<td class="column-auto-deleting-on">
|
133 |
-
<?= $pendingRequest->last_name ?>
|
134 |
-
</td>
|
135 |
-
<td class="column-auto-deleting-on">
|
136 |
-
<?= $pendingRequest->dsgvo_accepted === '1' ? 'Yes' : 'No' ?>
|
137 |
-
</td>
|
138 |
-
<td class="column-unsubscribe-user"><a class="button-primary"
|
139 |
-
href="<?= wp_nonce_url(SPDSGVOAdminSubjectAccessRequestAction::url(array('process' => $pendingRequest->ID)),
|
140 |
-
SPDSGVOAdminSubjectAccessRequestAction::getActionName() .'-nonce') ?>"><?php _e('Run', 'shapepress-dsgvo'); ?></a></td>
|
141 |
-
<!-- i592995 -->
|
142 |
-
<td class="column-dismiss">
|
143 |
-
<svg class="unsubscribe-dismiss" width="10" height="10" data-id="<?php echo $pendingRequest->ID; ?>">
|
144 |
-
<line x1="0" y1="0" x2="10" y2="10" />
|
145 |
-
<line x1="0" y1="10" x2="10" y2="0" />
|
146 |
-
</svg>
|
147 |
-
</td>
|
148 |
-
<!-- i592995 -->
|
149 |
-
</tr>
|
150 |
-
|
151 |
-
<?php endforeach; ?>
|
152 |
-
<?php else: ?>
|
153 |
-
<tr>
|
154 |
-
<td class="column-slug" colspan="2"><?php _e('No open requests','shapepress-dsgvo')?></td>
|
155 |
-
<td class="column-default"></td>
|
156 |
-
<td class="column-reason"></td>
|
157 |
-
</tr>
|
158 |
-
<?php endif; ?>
|
159 |
-
</tbody>
|
160 |
-
|
161 |
-
<tfoot>
|
162 |
-
<tr>
|
163 |
-
<th class="manage-column column-request_id" scope="col"><?php _e('ID','shapepress-dsgvo')?></th>
|
164 |
-
<th class="manage-column column-email" scope="col"><?php _e('Email','shapepress-dsgvo')?></th>
|
165 |
-
<th class="manage-column column-first_name" scope="col"><?php _e('First name','shapepress-dsgvo')?></th>
|
166 |
-
<th class="manage-column column-last_name" scope="col"><?php _e('Last name','shapepress-dsgvo')?></th>
|
167 |
-
<th class="manage-column column-dsgvo_accepted" scope="col"><?php _e('GDPR approval','shapepress-dsgvo')?></th>
|
168 |
-
<th class="manage-column column-process" scope="col"><?php _e('Run','shapepress-dsgvo')?></th>
|
169 |
-
<!-- i592995 -->
|
170 |
-
<th class="manage-column column-dismiss" scope="col"><?php _e('Dismiss','shapepress-dsgvo')?></th>
|
171 |
-
<!-- i592995 -->
|
172 |
-
</tr>
|
173 |
-
</tfoot>
|
174 |
-
</table>
|
175 |
-
|
176 |
-
<?php if(count($pending) !== 0): ?>
|
177 |
-
<p>
|
178 |
-
<a class="button-primary"
|
179 |
-
href="<?= wp_nonce_url(SPDSGVOAdminSubjectAccessRequestAction::url(array('all' => '1')),
|
180 |
-
SPDSGVOAdminSubjectAccessRequestAction::getActionName() .'-nonce')?>"><?php _e('Run all','shapepress-dsgvo')?></a>
|
181 |
-
</p>
|
182 |
-
<?php endif; ?>
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
187 |
-
<input type="hidden" name="action"
|
188 |
-
value="<?= SPDSGVOSubjectAccessRequestAction::getActionName(); ?>"> <input
|
189 |
-
type="hidden" name="is_admin" value="1"> <br>
|
190 |
-
<?php wp_nonce_field( SPDSGVOSubjectAccessRequestAction::getActionName(). '-nonce' ); ?>
|
191 |
-
<br>
|
192 |
-
|
193 |
-
<h3><?php _e('Add entry','shapepress-dsgvo')?></h3>
|
194 |
-
<table class="form-table">
|
195 |
-
<tbody>
|
196 |
-
<tr>
|
197 |
-
<th scope="row"><label for="email"><?php _e('Email','shapepress-dsgvo')?> <span style="color: #F00">*</span></label></th>
|
198 |
-
<td><input name="email" type="email" id="email" value=""
|
199 |
-
class="regular-text ltr" required></td>
|
200 |
-
</tr>
|
201 |
-
<tr>
|
202 |
-
<th scope="row"><label for="first_name"><?php _e('First name','shapepress-dsgvo')?></label></th>
|
203 |
-
<td><input name="first_name" type="text" id="first_name" value=""
|
204 |
-
class="regular-text ltr"></td>
|
205 |
-
</tr>
|
206 |
-
<tr>
|
207 |
-
<th scope="row"><label for="last_name"><?php _e('Last name','shapepress-dsgvo')?></label></th>
|
208 |
-
<td><input name="last_name" type="text" id="last_name" value=""
|
209 |
-
class="regular-text ltr"></td>
|
210 |
-
</tr>
|
211 |
-
<tr>
|
212 |
-
<th scope="row"><label for="dsgvo_checkbox"><?php _e('GDPR approval','shapepress-dsgvo')?></label></th>
|
213 |
-
<td><input name="dsgvo_checkbox" type="checkbox" id="dsgvo_checkbox"
|
214 |
-
value="1"></td>
|
215 |
-
</tr>
|
216 |
-
<tr>
|
217 |
-
<th scope="row"><label for="process_now"><?php _e('Run now','shapepress-dsgvo')?></label></th>
|
218 |
-
<td><input name="process_now" type="checkbox" id="process_now"
|
219 |
-
value="1"></td>
|
220 |
-
</tr>
|
221 |
-
<tr style="display: none;">
|
222 |
-
<th scope="row"><label for="display_email"><?php _e('Show email','shapepress-dsgvo')?></label></th>
|
223 |
-
<td><input name="display_email" type="checkbox" id="display_email"
|
224 |
-
value="1"></td>
|
225 |
-
</tr>
|
226 |
-
</tbody>
|
227 |
-
</table>
|
228 |
-
|
229 |
-
<?php submit_button(__('Add','shapepress-dsgvo')); ?>
|
230 |
-
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-action.php
DELETED
@@ -1,56 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOSuperUnsubscribeAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'admin-super-unsubscribe';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->checkCSRF();
|
9 |
-
$this->requireAdmin();
|
10 |
-
|
11 |
-
if ($this->has('process') == false && $this->get('all') != '1')
|
12 |
-
{
|
13 |
-
|
14 |
-
// unsubscribe_auto_delete
|
15 |
-
SPDSGVOSettings::set('unsubscribe_auto_delete', $this->get('unsubscribe_auto_delete', '0'));
|
16 |
-
if (isValidPremiumEdition())
|
17 |
-
{
|
18 |
-
SPDSGVOSettings::set('su_email_notification', $this->get('su_email_notification', '0'));
|
19 |
-
SPDSGVOSettings::set('su_woo_data_action', $this->get('su_woo_data_action', 'ignore'));
|
20 |
-
SPDSGVOSettings::set('su_bbpress_data_action', $this->get('su_bbpress_data_action', 'ignore'));
|
21 |
-
SPDSGVOSettings::set('su_buddypress_data_action', $this->get('su_buddypress_data_action', 'ignore'));
|
22 |
-
SPDSGVOSettings::set('su_cf7_data_action', $this->get('su_cf7_data_action', 'ignore'));
|
23 |
-
}
|
24 |
-
SPDSGVOSettings::set('su_dsgvo_accepted_text', $this->get('su_dsgvo_accepted_text', ''));
|
25 |
-
|
26 |
-
// unsubscribe auto delete tme
|
27 |
-
SPDSGVOSettings::set('su_auto_del_time', $this->get('su_auto_del_time', '0'));
|
28 |
-
|
29 |
-
// Set super_unsubscribe_page
|
30 |
-
if($this->has('super_unsubscribe_page')){
|
31 |
-
SPDSGVOSettings::set('super_unsubscribe_page', $this->get('super_unsubscribe_page'));
|
32 |
-
}
|
33 |
-
}
|
34 |
-
|
35 |
-
// Unsubscribe single user
|
36 |
-
if($this->has('process')){
|
37 |
-
$unsubscriber = SPDSGVOUnsubscriber::find($this->get('process'));
|
38 |
-
if(isset($unsubscriber)){
|
39 |
-
$unsubscriber->doSuperUnsubscribe();
|
40 |
-
}
|
41 |
-
}
|
42 |
-
|
43 |
-
|
44 |
-
// Unsubscribe all
|
45 |
-
if($this->get('all') == '1'){
|
46 |
-
foreach(SPDSGVOUnsubscriber::all() as $unsubscriber){
|
47 |
-
$unsubscriber->doSuperUnsubscribe();
|
48 |
-
}
|
49 |
-
}
|
50 |
-
|
51 |
-
|
52 |
-
$this->returnBack();
|
53 |
-
}
|
54 |
-
}
|
55 |
-
|
56 |
-
SPDSGVOSuperUnsubscribeAction::listen();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/super-unsubscribe/page.php
DELETED
@@ -1,345 +0,0 @@
|
|
1 |
-
<h1><?php _e('Delete Requests','shapepress-dsgvo')?></h1>
|
2 |
-
<p><?php _e('Here you will find all deletion requests that users have made on their site. With a click on "delete now " you delete all stored data of the user on their side including Plugins.','shapepress-dsgvo')?>
|
3 |
-
</p>
|
4 |
-
|
5 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
6 |
-
<input type="hidden" name="action"
|
7 |
-
value="<?= SPDSGVOSuperUnsubscribeAction::getActionName(); ?>">
|
8 |
-
<input
|
9 |
-
type="hidden" name="CSRF" value="<?= sp_dsgvo_CSRF_TOKEN() ?>">
|
10 |
-
<?php wp_nonce_field( SPDSGVOSuperUnsubscribeAction::getActionName(). '-nonce' ); ?>
|
11 |
-
<?php $disablePremiumFeatures = isValidPremiumEdition() == false; ?>
|
12 |
-
|
13 |
-
<table class="form-table">
|
14 |
-
<tbody>
|
15 |
-
<tr>
|
16 |
-
<th scope="row"><?php _e('Automatic processing','shapepress-dsgvo')?></th>
|
17 |
-
<td></td>
|
18 |
-
</tr>
|
19 |
-
<tr>
|
20 |
-
<td><?php _e('Immediately on request','shapepress-dsgvo')?></td>
|
21 |
-
<td><label for="unsubscribe_auto_delete"> <input
|
22 |
-
name="unsubscribe_auto_delete" type="checkbox"
|
23 |
-
id="unsubscribe_auto_delete" value="1"
|
24 |
-
<?= (SPDSGVOSettings::get('unsubscribe_auto_delete') === '1')? ' checked ' : ''; ?>>
|
25 |
-
</label>
|
26 |
-
<span class="info-text"><?php _e('If enabled, delete requests are performed immediately.','shapepress-dsgvo')?></span></td>
|
27 |
-
</tr>
|
28 |
-
<tr>
|
29 |
-
<td><?php _e('Email for new application:','shapepress-dsgvo')?></td>
|
30 |
-
<td>
|
31 |
-
<input
|
32 |
-
name="su_email_notification" type="checkbox"
|
33 |
-
id="su_email_notification" value="1"
|
34 |
-
<?= $disablePremiumFeatures ? 'disabled' : true; ?>
|
35 |
-
<?= (SPDSGVOSettings::get('su_email_notification') === '1')? ' checked ' : ''; ?>>
|
36 |
-
<span class="info-text"><?php _e('Send a notification for a new application to the admin email address.','shapepress-dsgvo')?></span>
|
37 |
-
</td>
|
38 |
-
</tr>
|
39 |
-
<tr>
|
40 |
-
<td><?php _e('GDPR confirmation text:','shapepress-dsgvo')?></td>
|
41 |
-
<td>
|
42 |
-
<input
|
43 |
-
name="su_dsgvo_accepted_text" type="text" style="width: 550px;"
|
44 |
-
id="su_dsgvo_accepted_text" value="<?= SPDSGVOSettings::get('su_dsgvo_accepted_text'); ?>">
|
45 |
-
<span class="info-text"><?php _e('The text to be displayed in the GDPR checkbox for data deletion.','shapepress-dsgvo')?></span>
|
46 |
-
</td>
|
47 |
-
</tr>
|
48 |
-
<tr>
|
49 |
-
<td><?php _e('After period','shapepress-dsgvo')?></td>
|
50 |
-
<td>
|
51 |
-
<?php $suAutoDelTime = SPDSGVOSettings::get('su_auto_del_time'); ?>
|
52 |
-
<label for="su_auto_del_time"> <select name="su_auto_del_time"
|
53 |
-
id="su_auto_del_time">
|
54 |
-
<option value="0" <?= selected($suAutoDelTime === '0') ?>><?php _e('none','shapepress-dsgvo')?></option>
|
55 |
-
<option value="1m" <?= selected($suAutoDelTime === '1m') ?>>1 <?php _e('month','shapepress-dsgvo')?></option>
|
56 |
-
<option value="3m" <?= selected($suAutoDelTime === '3m') ?>>3 <?php _e('months','shapepress-dsgvo')?></option>
|
57 |
-
<option value="6m" <?= selected($suAutoDelTime === '6m') ?>>6 <?php _e('months','shapepress-dsgvo')?></option>
|
58 |
-
<option value="1y" <?= selected($suAutoDelTime === '1y') ?>>1 <?php _e('year','shapepress-dsgvo')?></option>
|
59 |
-
<option value="6y" <?= selected($suAutoDelTime === '6y') ?>>6 <?php _e('years','shapepress-dsgvo')?></option>
|
60 |
-
<option value="7y" <?= selected($suAutoDelTime === '7y') ?>>7 <?php _e('years','shapepress-dsgvo')?></option>
|
61 |
-
</select>
|
62 |
-
</label>
|
63 |
-
<span class="info-text"><?php _e('Data is automatically deleted after the set time. Ensures the maximum retention time.','shapepress-dsgvo')?></span></td>
|
64 |
-
</tr>
|
65 |
-
|
66 |
-
<?php if (isValidPremiumEdition()) : ?>
|
67 |
-
<tr>
|
68 |
-
<td><?php _e('WooCommerce Data','shapepress-dsgvo')?></td>
|
69 |
-
<td>
|
70 |
-
<?php $wooDataAction = SPDSGVOSettings::get('su_woo_data_action'); ?>
|
71 |
-
<label for="su_woo_data_action"> <select name="su_woo_data_action"
|
72 |
-
id="su_woo_data_action">
|
73 |
-
<option value="ignore" <?= selected($wooDataAction === 'ignore') ?>><?php _e('No action','shapepress-dsgvo')?></option>
|
74 |
-
<option value="pseudo" <?= selected($wooDataAction === 'pseudo') ?>><?php _e('Pseudonymise','shapepress-dsgvo')?></option>
|
75 |
-
<option value="del" <?= selected($wooDataAction === 'del') ?>><?php _e('Delete','shapepress-dsgvo')?></option>
|
76 |
-
</select>
|
77 |
-
</label>
|
78 |
-
<span class="info-text"><?php _e('Specifies what should happen to personal data of orders.','shapepress-dsgvo')?></span></td>
|
79 |
-
</tr>
|
80 |
-
<tr>
|
81 |
-
<td><?php _e('bbPress Data','shapepress-dsgvo')?></td>
|
82 |
-
<td>
|
83 |
-
<?php $bbPDataAction = SPDSGVOSettings::get('su_bbpress_data_action'); ?>
|
84 |
-
<label for="su_bbpress_data_action"> <select name="su_bbpress_data_action"
|
85 |
-
id="su_bbpress_data_action">
|
86 |
-
<option value="ignore" <?= selected($bbPDataAction === 'ignore') ?>><?php _e('No action','shapepress-dsgvo')?></option>
|
87 |
-
<option value="pseudo" <?= selected($wooDataAction === 'pseudo') ?>><?php _e('Pseudonymise','shapepress-dsgvo')?></option>
|
88 |
-
<option value="del" <?= selected($bbPDataAction === 'del') ?>><?php _e('Delete','shapepress-dsgvo')?></option>
|
89 |
-
</select>
|
90 |
-
</label>
|
91 |
-
<span class="info-text"><?php _e('Specifies what should happen with forum entries.','shapepress-dsgvo')?></span></td>
|
92 |
-
</tr>
|
93 |
-
<tr>
|
94 |
-
<td><?php _e('buddyPress Data','shapepress-dsgvo')?></td>
|
95 |
-
<td>
|
96 |
-
<?php $buddyPressDataAction = SPDSGVOSettings::get('su_buddypress_data_action'); ?>
|
97 |
-
<label for="su_buddypress_data_action"> <select name="su_buddypress_data_action"
|
98 |
-
id="su_buddypress_data_action">
|
99 |
-
<option value="ignore" <?= selected($buddyPressDataAction === 'ignore') ?>><?php _e('No action','shapepress-dsgvo')?></option>
|
100 |
-
<option value="pseudo" <?= selected($buddyPressDataAction === 'pseudo') ?>><?php _e('Pseudonymise','shapepress-dsgvo')?></option>
|
101 |
-
<option value="del" <?= selected($buddyPressDataAction === 'del') ?>><?php _e('Delete','shapepress-dsgvo')?></option>
|
102 |
-
</select>
|
103 |
-
</label>
|
104 |
-
<span class="info-text"><?php _e('Specifies what should happen with PNs and extended profile fields.','shapepress-dsgvo')?></span></td>
|
105 |
-
</tr>
|
106 |
-
<tr>
|
107 |
-
<td><?php _e('CF7/Flamingo Data','shapepress-dsgvo')?></td>
|
108 |
-
<td>
|
109 |
-
<?php $cf7DataAction = SPDSGVOSettings::get('su_cf7_data_action'); ?>
|
110 |
-
<label for="su_cf7_data_action"> <select name="su_cf7_data_action"
|
111 |
-
id="su_cf7_data_action">
|
112 |
-
<option value="ignore" <?= selected($cf7DataAction === 'ignore') ?>><?php _e('No action','shapepress-dsgvo')?></option>
|
113 |
-
<option value="pseudo" <?= selected($cf7DataAction === 'pseudo') ?>><?php _e('Pseudonymise','shapepress-dsgvo')?></option>
|
114 |
-
<option value="del" <?= selected($cf7DataAction === 'del') ?>><?php _e('Delete','shapepress-dsgvo')?></option>
|
115 |
-
</select>
|
116 |
-
</label>
|
117 |
-
<span class="info-text"><?php _e('Specifies what to do with contact entries and messages.','shapepress-dsgvo')?></span></td>
|
118 |
-
</tr>
|
119 |
-
<?php endif;?>
|
120 |
-
|
121 |
-
<tr>
|
122 |
-
<th scope="row"><?php _e('Page for deletion request:','shapepress-dsgvo')?></th>
|
123 |
-
<td>
|
124 |
-
|
125 |
-
<?php $unsubscribePage = SPDSGVOSettings::get('super_unsubscribe_page'); ?>
|
126 |
-
<label for="super_unsubscribe_page"><select
|
127 |
-
name="super_unsubscribe_page" id="super_unsubscribe_page">
|
128 |
-
<option value="0"><?php _e('Select','shapepress-dsgvo')?></option>
|
129 |
-
<?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
|
130 |
-
<option <?= selected($unsubscribePage == $page->ID) ?>
|
131 |
-
value="<?= $page->ID ?>">
|
132 |
-
<?= $page->post_title ?>
|
133 |
-
</option>
|
134 |
-
<?php endforeach; ?>
|
135 |
-
</select>
|
136 |
-
</label>
|
137 |
-
|
138 |
-
<?php if($unsubscribePage == '0'): ?>
|
139 |
-
<p>
|
140 |
-
<?php _e('Create a page using the shortcode <code>[unsubscribe_form]</code>.','shapepress-dsgvo')?>
|
141 |
-
<a class="button button-default"
|
142 |
-
href="<?= SPDSGVOCreatePageAction::url(array('super_unsubscribe_page' => '1')) ?>"><?php _e('Create page','shapepress-dsgvo')?></a>
|
143 |
-
</p>
|
144 |
-
<?php elseif(!pageContainsString($unsubscribePage, 'unsubscribe_form')): ?>
|
145 |
-
<p>
|
146 |
-
<?php _e('Attention: The shortcode <code>[unsubscribe_form]</code> that should be on the selected page was not found. Thus, the user has no opportunity to ask a deletion request.','shapepress-dsgvo')?> <a
|
147 |
-
href="<?= get_edit_post_link($unsubscribePage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a>
|
148 |
-
</p>
|
149 |
-
<?php else: ?>
|
150 |
-
<a href="<?= get_edit_post_link($unsubscribePage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a>
|
151 |
-
<?php endif; ?>
|
152 |
-
</td>
|
153 |
-
</tr>
|
154 |
-
|
155 |
-
<tr>
|
156 |
-
<th><?php submit_button(); ?></th>
|
157 |
-
<td></td>
|
158 |
-
</tr>
|
159 |
-
</tbody>
|
160 |
-
</table>
|
161 |
-
|
162 |
-
<hr class="sp-dsgvo">
|
163 |
-
</form>
|
164 |
-
|
165 |
-
<?php
|
166 |
-
$statuses = array(
|
167 |
-
'pending',
|
168 |
-
'done'
|
169 |
-
);
|
170 |
-
if (isset($_GET['status']) && in_array($_GET['status'], $statuses)) {
|
171 |
-
$status = sanitize_text_field($_GET['status']);
|
172 |
-
} else {
|
173 |
-
$status = 'pending';
|
174 |
-
}
|
175 |
-
?>
|
176 |
-
|
177 |
-
<ul class="subsubsub">
|
178 |
-
<li>
|
179 |
-
<a
|
180 |
-
href="<?= SPDSGVO::adminURL(array('tab' => 'super-unsubscribe', 'status' => 'pending')) ?>"
|
181 |
-
class="<?= ($status === 'pending')? 'current' : ''; ?>" aria-current="page">
|
182 |
-
<?php _e('Pending','shapepress-dsgvo')?>
|
183 |
-
</a>
|
184 |
-
</li>
|
185 |
-
<li>
|
186 |
-
<a
|
187 |
-
href="<?= SPDSGVO::adminURL(array('tab' => 'super-unsubscribe', 'status' => 'done')) ?>"
|
188 |
-
class="<?= ($status === 'done')? 'current' : ''; ?>" aria-current="page">
|
189 |
-
<?php _e('Done','shapepress-dsgvo')?>
|
190 |
-
</a>
|
191 |
-
</li>
|
192 |
-
</ul>
|
193 |
-
<br>
|
194 |
-
<br>
|
195 |
-
|
196 |
-
<?php $confirmed = SPDSGVOUnsubscriber::finder('status', array('status' => $status)); ?>
|
197 |
-
<table class="widefat fixed" cellspacing="0">
|
198 |
-
<thead>
|
199 |
-
<tr>
|
200 |
-
<th id="request_id" class="manage-column column-request_id"
|
201 |
-
scope="col" style="width: 10%"><?php _e('ID','shapepress-dsgvo')?></th>
|
202 |
-
<th id="email" class="manage-column column-email" scope="col"
|
203 |
-
style="width: 20%"><?php _e('Email','shapepress-dsgvo')?></th>
|
204 |
-
<th id="first_name" class="manage-column column-first_name"
|
205 |
-
scope="col" style="width: 15%"><?php _e('First name','shapepress-dsgvo')?></th>
|
206 |
-
<th id="last_name" class="manage-column column-last_name" scope="col"
|
207 |
-
style="width: 15%"><?php _e('Last name','shapepress-dsgvo')?></th>
|
208 |
-
<th id="dsgvo_accepted" class="manage-column column-dsgvo_accepted" scope="col"
|
209 |
-
style="width: 15%"><?php _e('GDPR approval','shapepress-dsgvo')?></th>
|
210 |
-
<th id="status" class="manage-column column-status" scope="col"
|
211 |
-
style="width: 15%"><?php _e('State','shapepress-dsgvo')?></th>
|
212 |
-
<th id="process" class="manage-column column-process" scope="col"
|
213 |
-
style="width: 15%"><?php _e('Delete now','shapepress-dsgvo')?></th>
|
214 |
-
<!-- .i592995 -->
|
215 |
-
<th id="dismiss" class="manage-column column-dismiss" scope="col"
|
216 |
-
style="width: 15%"><?php _e('Dismiss','shapepress-dsgvo')?></th>
|
217 |
-
<!-- .i592995 -->
|
218 |
-
</tr>
|
219 |
-
</thead>
|
220 |
-
|
221 |
-
<tbody>
|
222 |
-
<?php if(count($confirmed) !== 0): ?>
|
223 |
-
<?php foreach($confirmed as $key => $confirmedRequest): ?>
|
224 |
-
|
225 |
-
<tr class="<?= ($key % 2 == 0)? 'alternate' : '' ?>">
|
226 |
-
<td class="column-request-id">
|
227 |
-
<?= $confirmedRequest->ID ?>
|
228 |
-
</td>
|
229 |
-
<td class="column-email"><strong><?= $confirmedRequest->email ?></strong>
|
230 |
-
</td>
|
231 |
-
<td class="column-integrations">
|
232 |
-
<?= $confirmedRequest->first_name ?>
|
233 |
-
</td>
|
234 |
-
<td class="column-auto-deleting-on">
|
235 |
-
<?= $confirmedRequest->last_name ?>
|
236 |
-
</td>
|
237 |
-
<td class="column-auto-deleting-on">
|
238 |
-
<?= $confirmedRequest->dsgvo_accepted === '1' ? 'Ja' : 'Nein' ?>
|
239 |
-
</td>
|
240 |
-
<td class="column-auto-deleting-on">
|
241 |
-
<?= ucfirst($confirmedRequest->status) ?>
|
242 |
-
</td>
|
243 |
-
<td class="column-unsubscribe-user">
|
244 |
-
|
245 |
-
<?php if($status == 'done'): ?>
|
246 |
-
<a class="button-primary disabled" href="#"><?php _e('Delete now','shapepress-dsgvo')?></a>
|
247 |
-
<?php else: ?>
|
248 |
-
<a class="button-primary"
|
249 |
-
href="<?= wp_nonce_url(SPDSGVOSuperUnsubscribeAction::url(array('process' => $confirmedRequest->ID)),
|
250 |
-
SPDSGVOSuperUnsubscribeAction::getActionName() .'-nonce') ?>"><?php _e('Delete now','shapepress-dsgvo')?></a>
|
251 |
-
<?php endif; ?>
|
252 |
-
</td>
|
253 |
-
<!-- .i592995 -->
|
254 |
-
<td class="column-dismiss">
|
255 |
-
<svg class="unsubscribe-dismiss" width="10" height="10" data-id="<?php echo $confirmedRequest->ID; ?>" data-nonce="<?php echo wp_create_nonce( SPDSGVODismissUnsubscribeAction::getActionName() .'-nonce' ) ?>">
|
256 |
-
<line x1="0" y1="0" x2="10" y2="10" />
|
257 |
-
<line x1="0" y1="10" x2="10" y2="0" />
|
258 |
-
</svg>
|
259 |
-
</td>
|
260 |
-
<!-- .i592995 -->
|
261 |
-
</tr>
|
262 |
-
|
263 |
-
<?php endforeach; ?>
|
264 |
-
<?php else: ?>
|
265 |
-
<tr>
|
266 |
-
<td class="column-slug" colspan="2">
|
267 |
-
<?php if($status == 'done'): ?>
|
268 |
-
<h4><?php _e('No requests done','shapepress-dsgvo')?></h4>
|
269 |
-
<?php else: ?>
|
270 |
-
<h4><?php _e('No pending requests','shapepress-dsgvo')?></h4>
|
271 |
-
<?php endif; ?>
|
272 |
-
</td>
|
273 |
-
<td class="column-default"></td>
|
274 |
-
<td class="column-reason"></td>
|
275 |
-
</tr>
|
276 |
-
<?php endif; ?>
|
277 |
-
</tbody>
|
278 |
-
|
279 |
-
<tfoot>
|
280 |
-
<tr>
|
281 |
-
<th class="manage-column column-request_id" scope="col"><?php _e('ID','shapepress-dsgvo')?></th>
|
282 |
-
<th class="manage-column column-email" scope="col"><?php _e('Email','shapepress-dsgvo')?></th>
|
283 |
-
<th class="manage-column column-first_name" scope="col"><?php _e('First name','shapepress-dsgvo')?></th>
|
284 |
-
<th class="manage-column column-last_name" scope="col"><?php _e('Last name','shapepress-dsgvo')?></th>
|
285 |
-
<th class="manage-column column-dsgvo_accepted" scope="col"><?php _e('GDPR approval','shapepress-dsgvo')?></th>
|
286 |
-
<th class="manage-column column-status" scope="col"><?php _e('State','shapepress-dsgvo')?></th>
|
287 |
-
<th class="manage-column column-process" scope="col"><?php _e('Delete now','shapepress-dsgvo')?></th>
|
288 |
-
<!-- .i592995 -->
|
289 |
-
<th class="manage-column column-dismiss" scope="col"><?php _e('Dismiss','shapepress-dsgvo')?></th>
|
290 |
-
<!-- .i592995 -->
|
291 |
-
</tr>
|
292 |
-
</tfoot>
|
293 |
-
</table>
|
294 |
-
|
295 |
-
<?php if(isset($pending) && count($pending) !== 0): ?>
|
296 |
-
<p>
|
297 |
-
<a class="button-primary"
|
298 |
-
href="<?= wp_nonce_url(SPDSGVOSuperUnsubscribeAction::url(array('all' => '1')),
|
299 |
-
SPDSGVOSuperUnsubscribeAction::getActionName() .'-nonce')?>"><?php _e('Delete all','shapepress-dsgvo')?></a>
|
300 |
-
</p>
|
301 |
-
<?php endif; ?>
|
302 |
-
|
303 |
-
|
304 |
-
<br>
|
305 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
306 |
-
<input type="hidden" name="action"
|
307 |
-
value="<?= SPDSGVOSuperUnsubscribeFormAction::getActionName(); ?>"> <input
|
308 |
-
type="hidden" name="is_admin" value="1"> <br>
|
309 |
-
<?php wp_nonce_field( SPDSGVOSuperUnsubscribeFormAction::getActionName(). '-nonce' ); ?>
|
310 |
-
<br>
|
311 |
-
|
312 |
-
<h3><?php _e('Add entry','shapepress-dsgvo')?></h3>
|
313 |
-
<span style="color:red"><?php _e('ATTENTION: Executing this action deletes the account (except administrators).','shapepress-dsgvo')?></span>
|
314 |
-
<table class="form-table">
|
315 |
-
<tbody>
|
316 |
-
<tr>
|
317 |
-
<th scope="row"><label for="email"><?php _e('Email','shapepress-dsgvo')?> <span style="color: #F00">*</span></label></th>
|
318 |
-
<td><input name="email" type="email" id="email" value=""
|
319 |
-
class="regular-text ltr" required></td>
|
320 |
-
</tr>
|
321 |
-
<tr>
|
322 |
-
<th scope="row"><label for="first_name"><?php _e('First name','shapepress-dsgvo')?></label></th>
|
323 |
-
<td><input name="first_name" type="text" id="first_name" value=""
|
324 |
-
class="regular-text ltr"></td>
|
325 |
-
</tr>
|
326 |
-
<tr>
|
327 |
-
<th scope="row"><label for="last_name"><?php _e('Last name','shapepress-dsgvo')?></label></th>
|
328 |
-
<td><input name="last_name" type="text" id="last_name" value=""
|
329 |
-
class="regular-text ltr"></td>
|
330 |
-
</tr>
|
331 |
-
<tr>
|
332 |
-
<th scope="row"><label for="dsgvo_checkbox"><?php _e('GDPR approval','shapepress-dsgvo')?></label></th>
|
333 |
-
<td><input name="dsgvo_checkbox" type="checkbox" id="dsgvo_checkbox"
|
334 |
-
value="1"></td>
|
335 |
-
</tr>
|
336 |
-
<tr>
|
337 |
-
<th scope="row"><label for="process_now"><?php _e('Run without user confirmation','shapepress-dsgvo')?></label></th>
|
338 |
-
<td><input name="process_now" type="checkbox" id="process_now"
|
339 |
-
value="1"></td>
|
340 |
-
</tr>
|
341 |
-
</tbody>
|
342 |
-
</table>
|
343 |
-
|
344 |
-
<?php submit_button(__('Add','shapepress-dsgvo')); ?>
|
345 |
-
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/terms-conditions/class-sp-dsgvo-terms-conditions-action.php
DELETED
@@ -1,54 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOTermsConditionsAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'terms-conditions';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->checkCSRF();
|
9 |
-
$this->requireAdmin();
|
10 |
-
|
11 |
-
|
12 |
-
// Set T&C's Page
|
13 |
-
if($this->has('terms_conditions_page')){
|
14 |
-
SPDSGVOSettings::set('terms_conditions_page', $this->get('terms_conditions_page'));
|
15 |
-
}
|
16 |
-
|
17 |
-
// Set force explicit permission for authenticated users
|
18 |
-
if($this->has('force_explicit_permission_authenticated')){
|
19 |
-
SPDSGVOSettings::set('force_explicit_permission_authenticated', $this->get('force_explicit_permission_authenticated', '0'));
|
20 |
-
}
|
21 |
-
|
22 |
-
// Set force explicit permission for non-authenticated users
|
23 |
-
if($this->has('force_explicit_permission_public')){
|
24 |
-
SPDSGVOSettings::set('force_explicit_permission_public', $this->get('force_explicit_permission_public', '0'));
|
25 |
-
}
|
26 |
-
|
27 |
-
// Set explicit permission_page
|
28 |
-
if($this->has('explicit_permission_page')){
|
29 |
-
SPDSGVOSettings::set('explicit_permission_page', $this->get('explicit_permission_page'));
|
30 |
-
}
|
31 |
-
|
32 |
-
// Set opt out page
|
33 |
-
if($this->has('opt_out_page')){
|
34 |
-
SPDSGVOSettings::set('opt_out_page', $this->get('opt_out_page'));
|
35 |
-
}
|
36 |
-
|
37 |
-
// Update Terms & Conditions
|
38 |
-
if($this->has('terms_conditions')){
|
39 |
-
$version = SPDSGVOSettings::get('terms_conditions_version');
|
40 |
-
$version = intval($version);
|
41 |
-
$version++;
|
42 |
-
$version = SPDSGVOSettings::set('terms_conditions_version', $version);
|
43 |
-
SPDSGVOSettings::set('terms_conditions_hash', wp_hash($this->get('terms_conditions')));
|
44 |
-
|
45 |
-
SPDSGVOSettings::set('terms_conditions', $this->get('terms_conditions'));
|
46 |
-
SPDSGVOLog::insert("Terms and Conditions updated by {$this->user->user_email}");
|
47 |
-
}
|
48 |
-
|
49 |
-
|
50 |
-
$this->returnBack();
|
51 |
-
}
|
52 |
-
}
|
53 |
-
|
54 |
-
SPDSGVOTermsConditionsAction::listen();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/terms-conditions/class-sp-dsgvo-terms-conditions-tab.php
DELETED
@@ -1,14 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOTermsConditionsTab extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
public $title = 'Terms Conditions';
|
6 |
-
public $slug = 'terms-conditions';
|
7 |
-
public $isHidden = TRUE;
|
8 |
-
|
9 |
-
public function __construct(){}
|
10 |
-
|
11 |
-
public function page(){
|
12 |
-
include plugin_dir_path(__FILE__) .'page.php';
|
13 |
-
}
|
14 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/terms-conditions/page.php
DELETED
@@ -1,129 +0,0 @@
|
|
1 |
-
<h1>Terms & Conditions</h1>
|
2 |
-
<p>Use the shortcode <code>[terms_conditions]</code> to display the terms and conditions.</p>
|
3 |
-
<a href="#" class="button button-default btn-settings" data-state="closed"><span class="state">Show</span> Settings</a>
|
4 |
-
|
5 |
-
|
6 |
-
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
7 |
-
<input type="hidden" name="action" value="terms-conditions">
|
8 |
-
<?php wp_nonce_field( SPDSGVOTermsConditionsAction::getActionName(). '-nonce' ); ?>
|
9 |
-
|
10 |
-
<table class="form-table btn-settings-show" style="display: none;">
|
11 |
-
<tbody>
|
12 |
-
<tr>
|
13 |
-
<th scope="row">Terms & Conditions page</th>
|
14 |
-
<td>
|
15 |
-
<fieldset>
|
16 |
-
<legend class="screen-reader-text">
|
17 |
-
<span>Terms & Conditions page</span>
|
18 |
-
</legend>
|
19 |
-
|
20 |
-
<?php $termsConditionsPage = SPDSGVOSettings::get('terms_conditions_page'); ?>
|
21 |
-
<label for="terms_conditions_page">Page:
|
22 |
-
<select name="terms_conditions_page" id="terms_conditions_page">
|
23 |
-
<option value="0">Select</option>
|
24 |
-
<?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
|
25 |
-
<option <?= selected($termsConditionsPage == $page->ID) ?> value="<?= $page->ID ?>">
|
26 |
-
<?= $page->post_title ?>
|
27 |
-
</option>
|
28 |
-
<?php endforeach; ?>
|
29 |
-
</select>
|
30 |
-
</label>
|
31 |
-
|
32 |
-
<?php if($termsConditionsPage == '0'): ?>
|
33 |
-
<p>Create a page that use <a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('terms_conditions_page' => '1')) ?>">Create page</a></p>
|
34 |
-
<?php elseif(!pageContainsString($termsConditionsPage, 'terms_conditions')): ?>
|
35 |
-
<p>Warning: The shortcode <code>[terms_conditions]</code> was not detected on the page you have selected. <a href="<?= get_edit_post_link($termsConditionsPage) ?>">Edit Page</a></p>
|
36 |
-
<?php else: ?>
|
37 |
-
<a href="<?= get_edit_post_link($termsConditionsPage) ?>">Edit page</a>
|
38 |
-
<?php endif; ?>
|
39 |
-
</fieldset>
|
40 |
-
</td>
|
41 |
-
</tr>
|
42 |
-
|
43 |
-
<tr>
|
44 |
-
<th scope="row">Require users to give agree</th>
|
45 |
-
<td>
|
46 |
-
<fieldset>
|
47 |
-
<legend class="screen-reader-text">
|
48 |
-
<span>Require users to give agree</span>
|
49 |
-
</legend>
|
50 |
-
|
51 |
-
<p>
|
52 |
-
<label for="force_explicit_permission_authenticated">
|
53 |
-
<input name="force_explicit_permission_authenticated" type="checkbox" id="force_explicit_permission_authenticated" value="1" <?= checked(SPDSGVOSettings::get('force_explicit_permission_authenticated') === '1') ?>>
|
54 |
-
Logged in users
|
55 |
-
</label>
|
56 |
-
</p>
|
57 |
-
|
58 |
-
<p>
|
59 |
-
<label for="force_explicit_permission_public">
|
60 |
-
<input name="force_explicit_permission_public" type="checkbox" id="force_explicit_permission_public" value="1" <?= checked(SPDSGVOSettings::get('force_explicit_permission_public') === '1') ?>>
|
61 |
-
Not logged in users
|
62 |
-
</label>
|
63 |
-
<p class="description">This will redirect users to your terms and conditions page, they will have to agree to your T&C’s to access the site.</p>
|
64 |
-
</p>
|
65 |
-
|
66 |
-
|
67 |
-
<?php $explicitPermissionPage = SPDSGVOSettings::get('explicit_permission_page'); ?>
|
68 |
-
<label for="explicit_permission_page">Page:
|
69 |
-
<select name="explicit_permission_page" id="explicit_permission_page">
|
70 |
-
<option value="0">Select</option>
|
71 |
-
<?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
|
72 |
-
<option <?= selected($explicitPermissionPage == $page->ID) ?> value="<?= $page->ID ?>">
|
73 |
-
<?= $page->post_title ?>
|
74 |
-
</option>
|
75 |
-
<?php endforeach; ?>
|
76 |
-
</select>
|
77 |
-
</label>
|
78 |
-
|
79 |
-
<?php if($explicitPermissionPage == '0'): ?>
|
80 |
-
<p>Create a page that uses the shortcode <code>[explicit_permission]</code> <a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('explicit_permission_page' => '1')) ?>">Create page</a></p>
|
81 |
-
<?php elseif(!pageContainsString($explicitPermissionPage, 'explicit_permission')): ?>
|
82 |
-
<p>Warning: The shortcode <code>[explicit_permission]</code> was not detected on the page you have selected. <a href="<?= get_edit_post_link($explicitPermissionPage) ?>">Edit Page</a></p>
|
83 |
-
<?php else: ?>
|
84 |
-
<a href="<?= get_edit_post_link($explicitPermissionPage) ?>">Edit page</a>
|
85 |
-
<?php endif; ?>
|
86 |
-
</fieldset>
|
87 |
-
</td>
|
88 |
-
</tr>
|
89 |
-
|
90 |
-
<tr>
|
91 |
-
<th scope="row">Opt-out</th>
|
92 |
-
<td>
|
93 |
-
<fieldset>
|
94 |
-
<legend class="screen-reader-text">
|
95 |
-
<span>Opt-out</span>
|
96 |
-
</legend>
|
97 |
-
|
98 |
-
<?php $optOutPage = SPDSGVOSettings::get('opt_out_page'); ?>
|
99 |
-
<label for="opt_out_page">Page:
|
100 |
-
<select name="opt_out_page" id="opt_out_page">
|
101 |
-
<option value="0">Select</option>
|
102 |
-
<?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
|
103 |
-
<option <?= selected($optOutPage == $page->ID) ?> value="<?= $page->ID ?>">
|
104 |
-
<?= $page->post_title ?>
|
105 |
-
</option>
|
106 |
-
<?php endforeach; ?>
|
107 |
-
</select>
|
108 |
-
</label>
|
109 |
-
|
110 |
-
<?php if($optOutPage == '0'): ?>
|
111 |
-
<p>Create a page that uses the shortcode <code>[decline_permission]</code> <a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('opt_out_page' => '1')) ?>">Create page</a></p>
|
112 |
-
<?php elseif(!pageContainsString($optOutPage, 'decline_permission')): ?>
|
113 |
-
<p>Warning: The shortcode <code>[decline_permission]</code> was not detected on the page you have selected. <a href="<?= get_edit_post_link($optOutPage) ?>">Edit Page</a></p>
|
114 |
-
<?php else: ?>
|
115 |
-
<a href="<?= get_edit_post_link($optOutPage) ?>">Edit page</a>
|
116 |
-
<?php endif; ?>
|
117 |
-
</fieldset>
|
118 |
-
</td>
|
119 |
-
</tr>
|
120 |
-
</tbody>
|
121 |
-
</table>
|
122 |
-
<hr class="sp-dsgvo">
|
123 |
-
|
124 |
-
|
125 |
-
<br>
|
126 |
-
<?php wp_editor(SPDSGVOSettings::get('terms_conditions'), 'terms_conditions', array('textarea_rows'=> '20')); ?>
|
127 |
-
<?php submit_button(); ?>
|
128 |
-
</form>
|
129 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/tabs/v3/common-settings/class-sp-dsgvo-common-settings-action.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOCommonSettingsAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'admin-common-settings';
|
6 |
+
|
7 |
+
protected function run(){
|
8 |
+
$this->checkCSRF();
|
9 |
+
$this->requireAdmin();
|
10 |
+
|
11 |
+
|
12 |
+
$subform = $this->get('subform');
|
13 |
+
if (empty(($subform))) return;
|
14 |
+
|
15 |
+
if ($subform == 'common-settings')
|
16 |
+
{
|
17 |
+
SPDSGVOSettings::set('admin_email', $this->get('admin_email', ''));
|
18 |
+
SPDSGVOSettings::set('dsgvo_auto_update', $this->get('dsgvo_auto_update', '0'));
|
19 |
+
} elseif ($subform == 'forms')
|
20 |
+
{
|
21 |
+
/*
|
22 |
+
* not needed for now
|
23 |
+
SPDSGVOSettings::set('sp_dsgvo_comments_checkbox', $this->get('sp_dsgvo_comments_checkbox', '0'));
|
24 |
+
SPDSGVOSettings::set('spdsgvo_comments_checkbox_text', $this->get('spdsgvo_comments_checkbox_text', ''));
|
25 |
+
|
26 |
+
SPDSGVOSettings::set('sp_dsgvo_cf7_acceptance_replace', $this->get('sp_dsgvo_cf7_acceptance_replace', '0'));
|
27 |
+
|
28 |
+
SPDSGVOSettings::set('wp_signup_show_privacy_checkbox', $this->get('wp_signup_show_privacy_checkbox', '0'));
|
29 |
+
SPDSGVOSettings::set('wp_signup_checkbox_text', $this->get('wp_signup_checkbox_text', ''));
|
30 |
+
*/
|
31 |
+
SPDSGVOSettings::set('woo_show_privacy_checkbox', $this->get('woo_show_privacy_checkbox', '0'));
|
32 |
+
SPDSGVOSettings::set('woo_privacy_text', $this->get('woo_privacy_text', ''));
|
33 |
+
|
34 |
+
}
|
35 |
+
|
36 |
+
|
37 |
+
$this->returnBack();
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
SPDSGVOCommonSettingsAction::listen();
|
admin/tabs/{common-settings → v3/common-settings}/class-sp-dsgvo-common-settings-activate-action.php
RENAMED
@@ -1,118 +1,123 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOCommonSettingsActivateAction extends SPDSGVOAjaxAction
|
4 |
-
{
|
5 |
-
|
6 |
-
protected $action = 'admin-common-settings-activate';
|
7 |
-
|
8 |
-
protected function run()
|
9 |
-
{
|
10 |
-
$this->requireAdmin();
|
11 |
-
|
12 |
-
$oldLicenceKey = SPDSGVOSettings::get('dsgvo_licence');
|
13 |
-
$licenceKey = $this->get('dsgvo_licence', '');
|
14 |
-
|
15 |
-
if (SPDSGVOSettings::get('license_activated') === '0')
|
16 |
-
{
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
$
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
SPDSGVOSettings::set('license_key_error', '
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
SPDSGVOSettings::set('
|
94 |
-
SPDSGVOSettings::set('
|
95 |
-
SPDSGVOSettings::set('
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
if (isPremiumEdition() && strtotime($data->expiration_date)
|
104 |
-
{
|
105 |
-
SPDSGVOSettings::set('
|
106 |
-
}
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOCommonSettingsActivateAction extends SPDSGVOAjaxAction
|
4 |
+
{
|
5 |
+
|
6 |
+
protected $action = 'admin-common-settings-activate';
|
7 |
+
|
8 |
+
protected function run()
|
9 |
+
{
|
10 |
+
$this->requireAdmin();
|
11 |
+
|
12 |
+
$oldLicenceKey = SPDSGVOSettings::get('dsgvo_licence');
|
13 |
+
$licenceKey = $this->get('dsgvo_licence', '');
|
14 |
+
|
15 |
+
if (SPDSGVOSettings::get('license_activated') === '0')
|
16 |
+
{
|
17 |
+
$siteUrl = get_site_url();
|
18 |
+
$homeUrl = get_home_url();
|
19 |
+
|
20 |
+
//error_log('activating licence '.$licenceKey);
|
21 |
+
SPDSGVOSettings::set('license_activated', '0');
|
22 |
+
SPDSGVOSettings::set('license_key_error', '1');
|
23 |
+
|
24 |
+
$url = SPDSGVOConstants::LEGAL_WEB_BASE_URL .'/spdsgvo-bin/activate.php';
|
25 |
+
$url .= '?license_key=' .$licenceKey;
|
26 |
+
$url .= '&site_url=' .$siteUrl;
|
27 |
+
$url .= '&home_url=' .$homeUrl;
|
28 |
+
|
29 |
+
$request = wp_remote_get($url);
|
30 |
+
|
31 |
+
if( is_wp_error( $request ) ) {
|
32 |
+
|
33 |
+
error_log(__('error during license activation: ', 'shapepress-dsgvo') . $request->get_error_message()); // Bail early
|
34 |
+
} else {
|
35 |
+
$result = wp_remote_retrieve_body( $request );
|
36 |
+
if (strpos($result, 'OK') !== false) {
|
37 |
+
SPDSGVOSettings::set('license_key_error', '0');
|
38 |
+
SPDSGVOSettings::set('license_activated', '1');
|
39 |
+
} else
|
40 |
+
{
|
41 |
+
SPDSGVOSettings::set('license_activation_error', $result);
|
42 |
+
SPDSGVOSettings::set('license_key_error', '1');
|
43 |
+
}
|
44 |
+
|
45 |
+
}
|
46 |
+
} elseif(SPDSGVOSettings::get('license_activated') === '1')
|
47 |
+
{
|
48 |
+
$url = 'https://wp-dsgvo.eu/spdsgvo-bin/deactivate.php';
|
49 |
+
$url .= '?license_key=' .$licenceKey;
|
50 |
+
|
51 |
+
$request = wp_remote_get($url);
|
52 |
+
|
53 |
+
if( is_wp_error( $request ) ) {
|
54 |
+
|
55 |
+
error_log(__('error during license activation: ', 'shapepress-dsgvo').$request->get_error_message()); // Bail early
|
56 |
+
} else {
|
57 |
+
$result = wp_remote_retrieve_body( $request );
|
58 |
+
if (strpos($result, 'OK') !== false) {
|
59 |
+
SPDSGVOSettings::set('license_key_error', '1');
|
60 |
+
SPDSGVOSettings::set('license_activated', '0');
|
61 |
+
SPDSGVOSettings::set('licence_valid_to', '');
|
62 |
+
SPDSGVOSettings::set('licence_activated_on', '');
|
63 |
+
} else
|
64 |
+
{
|
65 |
+
|
66 |
+
}
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
|
71 |
+
if ($licenceKey !== '' && SPDSGVOSettings::get('license_activated') === '1') {
|
72 |
+
|
73 |
+
//error_log('validating licence '.$licenceKey);
|
74 |
+
|
75 |
+
$url = 'https://wp-dsgvo.eu/spdsgvo-bin/licensedetails.php';
|
76 |
+
$url .= '?license_key=' .$licenceKey;
|
77 |
+
|
78 |
+
$request = wp_remote_get($url);
|
79 |
+
|
80 |
+
if( is_wp_error( $request ) ) {
|
81 |
+
|
82 |
+
error_log(__('error during license details: ', 'shapepress-dsgvo').$request->get_error_message()); // Bail early
|
83 |
+
} else {
|
84 |
+
|
85 |
+
$body = wp_remote_retrieve_body( $request );
|
86 |
+
|
87 |
+
if ($body !== false)
|
88 |
+
{
|
89 |
+
if ($body !== false)
|
90 |
+
{
|
91 |
+
SPDSGVOSettings::set('licence_details_fetched', '1');
|
92 |
+
SPDSGVOSettings::set('licence_details_fetched_new', '1');
|
93 |
+
SPDSGVOSettings::set('licence_details_fetched_on', date("D M d, Y G:i"));
|
94 |
+
SPDSGVOSettings::set('show_invalid_license_notice', '0');
|
95 |
+
SPDSGVOSettings::set('show_revoke_license_notice', '0');
|
96 |
+
|
97 |
+
$data = json_decode( $body );
|
98 |
+
SPDSGVOSettings::set('licence_activated_on', $data->activation_date);
|
99 |
+
SPDSGVOSettings::set('licence_valid_to', $data->expiration_date);
|
100 |
+
SPDSGVOSettings::set('licence_number_use_remaining', $data->number_use_remaining);
|
101 |
+
SPDSGVOSettings::set('licence_status', $data->license_status);
|
102 |
+
|
103 |
+
if (isPremiumEdition() && strtotime($data->expiration_date) < strtotime('today'))
|
104 |
+
{
|
105 |
+
SPDSGVOSettings::set('show_invalid_license_notice', '1');
|
106 |
+
}
|
107 |
+
|
108 |
+
if (isPremiumEdition() && strtotime($data->expiration_date) <= strtotime('today -14 days'))
|
109 |
+
{
|
110 |
+
SPDSGVOSettings::set('show_revoke_license_notice', '1');
|
111 |
+
}
|
112 |
+
}
|
113 |
+
}
|
114 |
+
}
|
115 |
+
}
|
116 |
+
|
117 |
+
SPDSGVOSettings::set('dsgvo_licence', $licenceKey);
|
118 |
+
|
119 |
+
$this->returnBack();
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
SPDSGVOCommonSettingsActivateAction::listen();
|
admin/tabs/{common-settings → v3/common-settings}/class-sp-dsgvo-common-settings-tab.php
RENAMED
@@ -1,17 +1,17 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOCommonSettingsTab extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
public $title = '
|
6 |
-
public $slug = 'common-settings';
|
7 |
-
public $isHidden = FALSE;
|
8 |
-
|
9 |
-
public function __construct(){
|
10 |
-
|
11 |
-
|
12 |
-
}
|
13 |
-
|
14 |
-
public function page(){
|
15 |
-
include plugin_dir_path(__FILE__) .'page.php';
|
16 |
-
}
|
17 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOCommonSettingsTab extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $title = 'Common Settings';
|
6 |
+
public $slug = 'common-settings';
|
7 |
+
public $isHidden = FALSE;
|
8 |
+
|
9 |
+
public function __construct(){
|
10 |
+
|
11 |
+
//$this->title = __('Tracking Scripts (GA & FB Pixel)','shapepress-dsgvo');
|
12 |
+
}
|
13 |
+
|
14 |
+
public function page(){
|
15 |
+
include plugin_dir_path(__FILE__) .'page.php';
|
16 |
+
}
|
17 |
+
}
|
admin/tabs/{common-settings → v3/common-settings}/class-sp-dsgvo-common-settings-validate-license-action.php
RENAMED
@@ -1,81 +1,85 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOCommonSettingsValidateLicenseAction extends SPDSGVOAjaxAction
|
4 |
-
{
|
5 |
-
|
6 |
-
protected $action = 'admin-common-settings-validate-license';
|
7 |
-
|
8 |
-
protected function run()
|
9 |
-
{
|
10 |
-
$this->requireAdmin();
|
11 |
-
error_log('admin-common-settings-validate-license');
|
12 |
-
|
13 |
-
$licActivated = SPDSGVOSettings::get('license_activated');
|
14 |
-
$licenceKey = SPDSGVOSettings::get('dsgvo_licence');
|
15 |
-
$oldLicenseStatus = SPDSGVOSettings::get('licence_status');
|
16 |
-
|
17 |
-
if ($licenceKey !== '' && SPDSGVOSettings::get('license_activated') === '1') {
|
18 |
-
|
19 |
-
error_log('validating licence '.$licenceKey);
|
20 |
-
|
21 |
-
$
|
22 |
-
|
23 |
-
|
24 |
-
$
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
error_log('
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
SPDSGVOSettings::set('
|
41 |
-
|
42 |
-
|
43 |
-
SPDSGVOSettings::set('
|
44 |
-
SPDSGVOSettings::set('
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOCommonSettingsValidateLicenseAction extends SPDSGVOAjaxAction
|
4 |
+
{
|
5 |
+
|
6 |
+
protected $action = 'admin-common-settings-validate-license';
|
7 |
+
|
8 |
+
protected function run()
|
9 |
+
{
|
10 |
+
$this->requireAdmin();
|
11 |
+
error_log('admin-common-settings-validate-license');
|
12 |
+
|
13 |
+
$licActivated = SPDSGVOSettings::get('license_activated');
|
14 |
+
$licenceKey = SPDSGVOSettings::get('dsgvo_licence');
|
15 |
+
$oldLicenseStatus = SPDSGVOSettings::get('licence_status');
|
16 |
+
|
17 |
+
if ($licenceKey !== '' && SPDSGVOSettings::get('license_activated') === '1') {
|
18 |
+
|
19 |
+
error_log('validating licence '.$licenceKey);
|
20 |
+
$siteUrl = get_site_url();
|
21 |
+
$homeUrl = get_home_url();
|
22 |
+
|
23 |
+
$url = SPDSGVOConstants::LEGAL_WEB_BASE_URL .'/spdsgvo-bin/licensedetails.php';
|
24 |
+
$url .= '?license_key=' .$licenceKey;
|
25 |
+
$url .= '&site_url=' .$siteUrl;
|
26 |
+
$url .= '&home_url=' .$homeUrl;
|
27 |
+
|
28 |
+
$request = wp_remote_get($url);
|
29 |
+
|
30 |
+
if( is_wp_error( $request ) ) {
|
31 |
+
|
32 |
+
error_log(__('error during license validation: ', 'shapepress-dsgvo').$request->get_error_message()); // Bail early
|
33 |
+
} else {
|
34 |
+
|
35 |
+
$body = wp_remote_retrieve_body( $request );
|
36 |
+
error_log('body: '.$body);
|
37 |
+
|
38 |
+
if ($body !== false)
|
39 |
+
{
|
40 |
+
SPDSGVOSettings::set('licence_details_fetched', '1');
|
41 |
+
SPDSGVOSettings::set('licence_details_fetched_new', '1');
|
42 |
+
SPDSGVOSettings::set('licence_details_fetched_on', date("D M d, Y G:i"));
|
43 |
+
SPDSGVOSettings::set('show_invalid_license_notice', '0');
|
44 |
+
SPDSGVOSettings::set('show_revoke_license_notice', '0');
|
45 |
+
|
46 |
+
$data = json_decode( $body );
|
47 |
+
SPDSGVOSettings::set('licence_activated_on', $data->activation_date);
|
48 |
+
SPDSGVOSettings::set('licence_valid_to', $data->expiration_date);
|
49 |
+
SPDSGVOSettings::set('licence_number_use_remaining', $data->number_use_remaining);
|
50 |
+
SPDSGVOSettings::set('licence_status', $data->license_status);
|
51 |
+
|
52 |
+
if (isPremiumEdition() && isLicenceValid() === false)
|
53 |
+
{
|
54 |
+
error_log("WP DSGVO Tools (GDPR) license is invalid.");
|
55 |
+
SPDSGVOSettings::set('show_invalid_license_notice', '1');
|
56 |
+
}
|
57 |
+
|
58 |
+
if (licenseIsGoingToRunningOut())
|
59 |
+
{
|
60 |
+
error_log("WP DSGVO Tools (GDPR) license is going to running out in a few days");
|
61 |
+
SPDSGVOSettings::set('show_revoke_license_notice', '1');
|
62 |
+
}
|
63 |
+
|
64 |
+
if (hasValidLicenseStatus($oldLicenseStatus, $licActivated)=== true
|
65 |
+
&& hasValidLicenseStatus($data->license_status, $licActivated) === false)
|
66 |
+
{
|
67 |
+
error_log("WP DSGVO Tools (GDPR) license got invalid now. sending email to ".SPDSGVOSettings::get('admin_email'));
|
68 |
+
wp_mail(SPDSGVOSettings::get('admin_email'),
|
69 |
+
__('WP DSGVO Tools (GPDR) License Error','shapepress-dsgvo').': '. parse_url(home_url(), PHP_URL_HOST),
|
70 |
+
__('Your license has expired. Please renew it according to the hint at the plugin settings page.','shapepress-dsgvo'));
|
71 |
+
}
|
72 |
+
}
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
$this->returnBack();
|
77 |
+
}
|
78 |
+
|
79 |
+
public function doAction()
|
80 |
+
{
|
81 |
+
$this->run();
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
SPDSGVOCommonSettingsValidateLicenseAction::listen();
|
admin/tabs/{privacy-policy → v3/common-settings}/class-sp-dsgvo-privacy-policy-action.php
RENAMED
@@ -1,40 +1,49 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOPrivacyPolicyAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'privacy-policy';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
$this->checkCSRF();
|
9 |
-
$this->requireAdmin();
|
10 |
-
|
11 |
-
|
12 |
-
// Set privacy policy page
|
13 |
-
if($this->has('privacy_policy_page')){
|
14 |
-
SPDSGVOSettings::set('privacy_policy_page', $this->get('privacy_policy_page', '0'));
|
15 |
-
}
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOPrivacyPolicyAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'privacy-policy';
|
6 |
+
|
7 |
+
protected function run(){
|
8 |
+
$this->checkCSRF();
|
9 |
+
$this->requireAdmin();
|
10 |
+
|
11 |
+
|
12 |
+
// Set privacy policy page
|
13 |
+
if($this->has('privacy_policy_page')){
|
14 |
+
SPDSGVOSettings::set('privacy_policy_page', $this->get('privacy_policy_page', '0'));
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
SPDSGVOSettings::set('privacy_policy_title_html_htag', $this->get('privacy_policy_title_html_htag', 'h1'));
|
19 |
+
SPDSGVOSettings::set('privacy_policy_subtitle_html_htag', $this->get('privacy_policy_subtitle_html_htag', 'h2'));
|
20 |
+
SPDSGVOSettings::set('privacy_policy_subsubtitle_html_htag', $this->get('privacy_policy_subsubtitle_html_htag', 'h3'));
|
21 |
+
|
22 |
+
|
23 |
+
SPDSGVOSettings::set('woo_show_privacy_checkbox', $this->get('woo_show_privacy_checkbox', '0'));
|
24 |
+
SPDSGVOSettings::set('woo_show_privacy_checkbox_register', $this->get('woo_show_privacy_checkbox_register', '0'));
|
25 |
+
/* i592995 */
|
26 |
+
SPDSGVOSettings::set('woo_privacy_text', $this->get('woo_privacy_text', ''));
|
27 |
+
/* i592995 */
|
28 |
+
|
29 |
+
SPDSGVOSettings::set('pp_texts_notification_mail', $this->get('pp_texts_notification_mail', '0'));
|
30 |
+
|
31 |
+
// Update privacy policy
|
32 |
+
if($this->has('privacy_policy')){
|
33 |
+
$version = SPDSGVOSettings::get('privacy_policy_version');
|
34 |
+
$version = intval($version);
|
35 |
+
$version++;
|
36 |
+
$version = SPDSGVOSettings::set('privacy_policy_version', $version);
|
37 |
+
SPDSGVOSettings::set('privacy_policy_hash', wp_hash($this->get('privacy_policy')));
|
38 |
+
SPDSGVOSettings::set('privacy_policy', $this->get('privacy_policy'));
|
39 |
+
SPDSGVOLog::insert("Privacy policy updated by {$this->user->user_email}");
|
40 |
+
}
|
41 |
+
|
42 |
+
SPDSGVOSettings::set('wp_signup_show_privacy_checkbox', $this->get('wp_signup_show_privacy_checkbox', '0'));
|
43 |
+
SPDSGVOSettings::set('wp_signup_checkbox_text', $this->get('wp_signup_checkbox_text', ''));
|
44 |
+
|
45 |
+
$this->returnBack();
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
SPDSGVOPrivacyPolicyAction::listen();
|
admin/tabs/v3/common-settings/page.php
ADDED
@@ -0,0 +1,352 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$isPremium = isValidPremiumEdition();
|
3 |
+
$isBlog = isValidBlogEdition();
|
4 |
+
$hasValidLicense = isValidPremiumEdition() || isValidBlogEdition();
|
5 |
+
|
6 |
+
?>
|
7 |
+
<!--
|
8 |
+
<h1 class="module-title"><?php _e(SPDSGVOCommonSettingsTab::getTabTitle(), 'shapepress-dsgvo') ?></h1>
|
9 |
+
-->
|
10 |
+
|
11 |
+
<div class="card-columns">
|
12 |
+
|
13 |
+
<!-- licensing -->
|
14 |
+
<div class="card">
|
15 |
+
<div class="card-header">
|
16 |
+
<h4 class="card-title"><?php _e('Licensing', 'shapepress-dsgvo') ?></h4>
|
17 |
+
</div>
|
18 |
+
<div class="card-body">
|
19 |
+
<h6 class="card-subtitle mb-2"><?php _e('Activate Premium Version', 'shapepress-dsgvo') ?></h6>
|
20 |
+
|
21 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>" style="display: inline">
|
22 |
+
<input type="hidden" name="action" value="<?= SPDSGVOCommonSettingsActivateAction::getActionName() ?>">
|
23 |
+
<?php wp_nonce_field(SPDSGVOCommonSettingsActivateAction::getActionName() . '-nonce'); ?>
|
24 |
+
|
25 |
+
<div class="form-group">
|
26 |
+
<label for="exampleInputEmail1"><?php _e('License', 'shapepress-dsgvo') ?></label>
|
27 |
+
<input type="text" class="form-control" id="dsgvo_licence" name="dsgvo_licence" aria-describedby="licenseHelp" placeholder="<?= __('Enter License Number', 'shapepress-dsgvo'); ?>"
|
28 |
+
value="<?= SPDSGVOSettings::get('dsgvo_licence'); ?>">
|
29 |
+
<small id="licenseHelp" class="form-text text-muted"><?php _e('An activated license unlocks all features.', 'shapepress-dsgvo'); ?></small>
|
30 |
+
</div>
|
31 |
+
<div class="form-group">
|
32 |
+
<?php if (SPDSGVOSettings::get('license_activated') === '1'): ?>
|
33 |
+
<input type="submit" class="btn btn-primary btn-block"
|
34 |
+
value="<?= __('Deactivate license', 'shapepress-dsgvo') ?>"/>
|
35 |
+
<?php else: ?>
|
36 |
+
<input type="submit" class="btn btn-primary btn-block"
|
37 |
+
value="<?= __('Activate license', 'shapepress-dsgvo') ?>"/>
|
38 |
+
<span class="info-text"><?php _e('Activating the license unlocks more features.', 'shapepress-dsgvo'); ?></span>
|
39 |
+
<?php endif; ?>
|
40 |
+
</div>
|
41 |
+
|
42 |
+
</form>
|
43 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>" style="display: inline">
|
44 |
+
<div class="form-group">
|
45 |
+
<input type="hidden" name="action"
|
46 |
+
value="<?= SPDSGVOCommonSettingsValidateLicenseAction::getActionName() ?>">
|
47 |
+
<input type="submit" class="btn btn-secondary btn-block"
|
48 |
+
value="<?= __('Refresh license', 'shapepress-dsgvo') ?>"/>
|
49 |
+
</div>
|
50 |
+
</form>
|
51 |
+
<div>
|
52 |
+
<?php if (licenseIsGoingToRunningOut()): ?>
|
53 |
+
<a href="<?= getExtensionProductUrl(); ?>" class="btn btn-secondary btn-block"
|
54 |
+
style="background-color: #aed581;"
|
55 |
+
target="_blank"><?= __('Extend license now and gain discount', 'shapepress-dsgvo') ?></a>
|
56 |
+
<?php endif; ?>
|
57 |
+
</div>
|
58 |
+
<div>
|
59 |
+
<?php if (SPDSGVOSettings::get('license_activated') === '1'): ?>
|
60 |
+
<div style="font-weight:500">
|
61 |
+
<?php if (isPremiumEdition()): ?>
|
62 |
+
<?= isValidPremiumEdition() ? _e('Premium version has been activated', 'shapepress-dsgvo') : ('<span style ="color: red;">' . __('Invalid or expired license.', 'shapepress-dsgvo') . "</span>"); ?>
|
63 |
+
<?php endif; ?>
|
64 |
+
<?php if (isBlogEdition()): ?>
|
65 |
+
<?= isValidBlogEdition() ? _e('Blog version has been activated', 'shapepress-dsgvo') : _e('Invalid license.', 'shapepress-dsgvo'); ?>
|
66 |
+
<?php endif; ?>
|
67 |
+
</div>
|
68 |
+
|
69 |
+
<?php if (isPremiumEdition() && SPDSGVOSettings::get('licence_details_fetched') === '1'): ?>
|
70 |
+
<div>
|
71 |
+
<div style="font-weight:500; width: 150px; float:left;"><?php _e('Activated on:', 'shapepress-dsgvo'); ?></div> <?= date("d.m.Y", strtotime(SPDSGVOSettings::get('licence_activated_on'))); ?>
|
72 |
+
</div>
|
73 |
+
<div>
|
74 |
+
<div style="font-weight:500; width: 150px; float:left;"><?php _e('Status:', 'shapepress-dsgvo'); ?></div> <?= SPDSGVOSettings::get('licence_status'); ?>
|
75 |
+
</div>
|
76 |
+
<?php if (isUnlimitedLicense(SPDSGVOSettings::get('dsgvo_licence')) == false) : ?>
|
77 |
+
<div>
|
78 |
+
<div style="font-weight:500; width: 150px; float:left;"><?php _e('Valid to:', 'shapepress-dsgvo'); ?></div> <?= date("d.m.Y", strtotime(SPDSGVOSettings::get('licence_valid_to'))); ?>
|
79 |
+
</div>
|
80 |
+
<?php endif; ?>
|
81 |
+
<?php if (SPDSGVOSettings::get('licence_details_fetched_new') === '1'): ?>
|
82 |
+
<div>
|
83 |
+
<div style="font-weight:500; width: 150px; float:left;"><?php _e('Last validation:', 'shapepress-dsgvo'); ?></div> <?= date_i18n("d.m.Y H:i", strtotime(SPDSGVOSettings::get('licence_details_fetched_on'))); ?>
|
84 |
+
</div>
|
85 |
+
<div>
|
86 |
+
<div style="font-weight:500; width: 150px; float:left;"><?php _e('Remaining activations:', 'shapepress-dsgvo'); ?></div> <?= SPDSGVOSettings::get('licence_number_use_remaining'); ?>
|
87 |
+
</div>
|
88 |
+
<?php endif; ?>
|
89 |
+
<?php endif; ?>
|
90 |
+
<?php endif; ?>
|
91 |
+
</div>
|
92 |
+
|
93 |
+
</div>
|
94 |
+
</div>
|
95 |
+
|
96 |
+
<!-- common settings -->
|
97 |
+
<div class="card">
|
98 |
+
<div class="card-header">
|
99 |
+
<h4 class="card-title"><?php _e('Common Settings', 'shapepress-dsgvo') ?></h4>
|
100 |
+
</div>
|
101 |
+
<div class="card-body">
|
102 |
+
|
103 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
104 |
+
<input type="hidden" name="action" value="<?= SPDSGVOCommonSettingsAction::getActionName() ?>">
|
105 |
+
<?php wp_nonce_field(SPDSGVOCommonSettingsAction::getActionName() . '-nonce'); ?>
|
106 |
+
<input type="hidden" value="<?= SPDSGVOSettings::get('dsgvo_licence'); ?>" id="dsgvo_licence_hidden"
|
107 |
+
name="dsgvo_licence_hidden"/>
|
108 |
+
<input type="hidden" value="common-settings" id="subform" name="subform"/>
|
109 |
+
<?php
|
110 |
+
spDsgvoWriteInput('text', '', 'admin_email', SPDSGVOSettings::get('admin_email'),
|
111 |
+
__('Admin email address', 'shapepress-dsgvo'),
|
112 |
+
__('A valid email address', 'shapepress-dsgvo'),
|
113 |
+
__('Used for sending emails for notifications.', 'shapepress-dsgvo'));
|
114 |
+
|
115 |
+
/*
|
116 |
+
spDsgvoWriteInput('toggle', '', 'dsgvo_auto_update', SPDSGVOSettings::get('dsgvo_auto_update'),
|
117 |
+
__('Plugin auto-update', 'shapepress-dsgvo'),
|
118 |
+
'',
|
119 |
+
__('The plugin will install updates automatically.', 'shapepress-dsgvo'));
|
120 |
+
*/
|
121 |
+
?>
|
122 |
+
<div class="form-group">
|
123 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
124 |
+
</div>
|
125 |
+
</form>
|
126 |
+
|
127 |
+
</div>
|
128 |
+
</div>
|
129 |
+
|
130 |
+
<!-- privacy policy -->
|
131 |
+
<div class="card">
|
132 |
+
<div class="card-header">
|
133 |
+
<h4 class="card-title"><?php _e('Privacy Policy', 'shapepress-dsgvo') ?></h4>
|
134 |
+
</div>
|
135 |
+
<div class="card-body">
|
136 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
137 |
+
<input type="hidden" name="action" value="<?= SPDSGVOPrivacyPolicyAction::getActionName(); ?>">
|
138 |
+
<?php wp_nonce_field(SPDSGVOPrivacyPolicyAction::getActionName() . '-nonce'); ?>
|
139 |
+
|
140 |
+
<div class="form-group">
|
141 |
+
<?php $privacyPolicyPage = SPDSGVOSettings::get('privacy_policy_page'); ?>
|
142 |
+
<label for="privacy_policy_page"><?php _e('Privacy policy page', 'shapepress-dsgvo') ?></label>
|
143 |
+
<select class="form-control" name="privacy_policy_page" id="privacy_policy_page">
|
144 |
+
<option value="0"><?php _e('Select', 'shapepress-dsgvo'); ?></option>
|
145 |
+
<?php foreach (get_pages(array('number' => 0)) as $key => $page): ?>
|
146 |
+
<option <?= selected($privacyPolicyPage == $page->ID) ?> value="<?= $page->ID ?>">
|
147 |
+
<?= $page->post_title ?>
|
148 |
+
</option>
|
149 |
+
<?php endforeach; ?>
|
150 |
+
</select>
|
151 |
+
|
152 |
+
|
153 |
+
|
154 |
+
</div>
|
155 |
+
<div class="form-group">
|
156 |
+
<?php if ($privacyPolicyPage == '0'): ?>
|
157 |
+
<small><?php _e('Create a page that uses the shortcode <code>[privacy_policy]</code>.', 'shapepress-dsgvo') ?>
|
158 |
+
<a class="btn btn-secondary btn-block"
|
159 |
+
href="<?= SPDSGVOCreatePageAction::url(array('privacy_policy_page' => '1')) ?>"><?php _e('Create page', 'shapepress-dsgvo') ?></a>
|
160 |
+
</small>
|
161 |
+
<?php elseif (!pageContainsString($privacyPolicyPage, 'privacy_policy')): ?>
|
162 |
+
<small><?php _e('Attention: The shortcode <code>[privacy_policy]</code> was not found on the page you selected.', 'shapepress-dsgvo') ?>
|
163 |
+
<a class="btn btn-secondary btn-block" target="_blank"
|
164 |
+
href="<?= get_edit_post_link($privacyPolicyPage) ?>"><?php _e('Edit page', 'shapepress-dsgvo') ?></a>
|
165 |
+
</small>
|
166 |
+
<?php else: ?>
|
167 |
+
<small class="form-text text-muted"><?= __('The page can also by edited and text could be extended by the editing the selected page with the Wordpress page editor like Gutenberg.','shapepress-dsgvo') ?></small>
|
168 |
+
<a class="btn btn-secondary btn-block" target="_blank"
|
169 |
+
href="<?= get_edit_post_link($privacyPolicyPage) ?>"><?php _e('Edit page', 'shapepress-dsgvo') ?></a>
|
170 |
+
<?php endif; ?>
|
171 |
+
</div>
|
172 |
+
<div class="position-relative">
|
173 |
+
|
174 |
+
<div class="form-group">
|
175 |
+
<?php $hTagTitle = SPDSGVOSettings::get('privacy_policy_title_html_htag') ?>
|
176 |
+
<label for="privacy_policy_title_html_htag"><?php _e('Header stile of title', 'shapepress-dsgvo') ?></label>
|
177 |
+
<select class="form-control" name="privacy_policy_title_html_htag" id="privacy_policy_title_html_htag">
|
178 |
+
<option value="h1" <?= selected($hTagTitle == 'h1') ?>>h1</option>
|
179 |
+
<option value="h2" <?= selected($hTagTitle == 'h2') ?>>h2</option>
|
180 |
+
<option value="h3" <?= selected($hTagTitle == 'h3') ?>>h3</option>
|
181 |
+
<option value="h4" <?= selected($hTagTitle == 'h4') ?>>h4</option>
|
182 |
+
<option value="h5" <?= selected($hTagTitle == 'h5') ?>>h5</option>
|
183 |
+
<option value="h6" <?= selected($hTagTitle == 'h6') ?>>h6</option>
|
184 |
+
</select>
|
185 |
+
<small class="form-text text-muted"><?php _e('Specifies the html header tag of the header of the privacy policy.', 'shapepress-dsgvo') ?></small>
|
186 |
+
</div>
|
187 |
+
<div class="form-group">
|
188 |
+
<?php $hTagSubTitle = SPDSGVOSettings::get('privacy_policy_subtitle_html_htag') ?>
|
189 |
+
<label for="privacy_policy_title_html_htag"><?php _e('Header stile of subtitles', 'shapepress-dsgvo') ?></label>
|
190 |
+
<select class="form-control" name="privacy_policy_subtitle_html_htag" id="privacy_policy_subtitle_html_htag">
|
191 |
+
<option value="h1" <?= selected($hTagSubTitle == 'h1') ?>>h1</option>
|
192 |
+
<option value="h2" <?= selected($hTagSubTitle == 'h2') ?>>h2</option>
|
193 |
+
<option value="h3" <?= selected($hTagSubTitle == 'h3') ?>>h3</option>
|
194 |
+
<option value="h4" <?= selected($hTagSubTitle == 'h4') ?>>h4</option>
|
195 |
+
<option value="h5" <?= selected($hTagSubTitle == 'h5') ?>>h5</option>
|
196 |
+
<option value="h6" <?= selected($hTagSubTitle == 'h6') ?>>h6</option>
|
197 |
+
</select>
|
198 |
+
<small class="form-text text-muted"><?php _e('Specifies the html header tag of the subtitles of the privacy policy.', 'shapepress-dsgvo') ?></small>
|
199 |
+
</div>
|
200 |
+
<div class="form-group">
|
201 |
+
<?php $hTagSubSubTitle = SPDSGVOSettings::get('privacy_policy_subsubtitle_html_htag') ?>
|
202 |
+
<label for="privacy_policy_title_html_htag"><?php _e('Header stile of "subsubtitles"', 'shapepress-dsgvo') ?></label>
|
203 |
+
<select class="form-control" name="privacy_policy_subsubtitle_html_htag" id="privacy_policy_subsubtitle_html_htag">
|
204 |
+
<option value="h1" <?= selected($hTagSubSubTitle == 'h1') ?>>h1</option>
|
205 |
+
<option value="h2" <?= selected($hTagSubSubTitle == 'h2') ?>>h2</option>
|
206 |
+
<option value="h3" <?= selected($hTagSubSubTitle == 'h3') ?>>h3</option>
|
207 |
+
<option value="h4" <?= selected($hTagSubSubTitle == 'h4') ?>>h4</option>
|
208 |
+
<option value="h5" <?= selected($hTagSubSubTitle == 'h5') ?>>h5</option>
|
209 |
+
<option value="h6" <?= selected($hTagSubSubTitle == 'h6') ?>>h6</option>
|
210 |
+
</select>
|
211 |
+
<small class="form-text text-muted"><?php _e('Specifies the html header tag of the "subsubtitles" of the privacy policy.', 'shapepress-dsgvo') ?></small>
|
212 |
+
</div>
|
213 |
+
</div>
|
214 |
+
<?php
|
215 |
+
spDsgvoWriteInput('toggle', '', 'pp_texts_notification_mail', SPDSGVOSettings::get('pp_texts_notification_mail'),
|
216 |
+
__('Email notification when new texts are downloadable', 'shapepress-dsgvo'),
|
217 |
+
'',
|
218 |
+
'');
|
219 |
+
?>
|
220 |
+
<div class="form-group">
|
221 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
222 |
+
</div>
|
223 |
+
<div>
|
224 |
+
<label for="textsVersion"><?= __('Privacy policy texts','shapepress-dsgvo');?></label>
|
225 |
+
</div>
|
226 |
+
|
227 |
+
<div class="form-row">
|
228 |
+
|
229 |
+
<div class="col">
|
230 |
+
<label for="textsVersion"><?= __('Date of Version','shapepress-dsgvo');?></label>
|
231 |
+
<input type="text" readonly="" class="form-control-plaintext" id="textVersion" value="<?= date("d.m.y H:i", SPDSGVOSettings::get('legal_web_texts_version'))?>">
|
232 |
+
</div>
|
233 |
+
<div class="col">
|
234 |
+
<label for="textsVersion"><?= __('Last update check','shapepress-dsgvo');?></label>
|
235 |
+
<input type="text" readonly="" class="form-control-plaintext" id="textVersion" value="<?= date("d.m.y H:i",SPDSGVOSettings::get('legal_web_texts_last_check'))?>">
|
236 |
+
</div>
|
237 |
+
</div>
|
238 |
+
<div class="form-group">
|
239 |
+
<div class="progress" id="progress-pp-texts-reload" style="display: none">
|
240 |
+
<div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%"></div>
|
241 |
+
</div>
|
242 |
+
<input id="btn-refresh-pp-texts" type="button" class="btn btn-outline-primary btn-block privacy-policy-texts-refresh-link" value="<?= _e('Reload Privacy Policy texts', 'shapepress-dsgvo');?>">
|
243 |
+
</div>
|
244 |
+
|
245 |
+
</form>
|
246 |
+
</div>
|
247 |
+
</div>
|
248 |
+
|
249 |
+
|
250 |
+
<!-- forms -->
|
251 |
+
|
252 |
+
<div class="card">
|
253 |
+
<div class="card-header">
|
254 |
+
<h4 class="card-title"><?php _e('Additional Texts', 'shapepress-dsgvo') ?></h4>
|
255 |
+
</div>
|
256 |
+
<div class="card-body">
|
257 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
258 |
+
<input type="hidden" name="action" value="<?= SPDSGVOCommonSettingsAction::getActionName() ?>">
|
259 |
+
<?php wp_nonce_field(SPDSGVOCommonSettingsAction::getActionName() . '-nonce'); ?>
|
260 |
+
<input type="hidden" value="<?= SPDSGVOSettings::get('dsgvo_licence'); ?>" id="dsgvo_licence_hidden"
|
261 |
+
name="dsgvo_licence_hidden"/>
|
262 |
+
<input type="hidden" value="forms" id="subform" name="subform"/>
|
263 |
+
|
264 |
+
<div class="form-group">
|
265 |
+
<small class="form-text text-muted"><?= __('The registration form and comments feature do not require any additional phrases such as "I agree to the privacy policy" or "more privacy information". It is enough if there is a link to the privacy policy on the respective page in the footer.','shapepress-dsgvo'); ?></small>
|
266 |
+
</div>
|
267 |
+
<?php
|
268 |
+
/*
|
269 |
+
spDsgvoWriteInput('toggle', '', 'sp_dsgvo_comments_checkbox', SPDSGVOSettings::get('sp_dsgvo_comments_checkbox'),
|
270 |
+
__('Notice text at comments', 'shapepress-dsgvo'),
|
271 |
+
'',
|
272 |
+
__('Displays at notice text when creating a comment. Important: Not compatible in combination with Jetpack comment form.', 'shapepress-dsgvo'));
|
273 |
+
|
274 |
+
if (class_exists('WPCF7_ContactForm')) {
|
275 |
+
spDsgvoWriteInput('toggle', '', 'sp_dsgvo_cf7_acceptance_replace', SPDSGVOSettings::get('sp_dsgvo_cf7_acceptance_replace'),
|
276 |
+
__('Replace CF7 Acceptance text', 'shapepress-dsgvo'),
|
277 |
+
'',
|
278 |
+
__('Replaces the text of CF7 Acceptance Checkboxes with following text. (Add to your form: [acceptance dsgvo] Text[/acceptance])', 'shapepress-dsgvo'));
|
279 |
+
}
|
280 |
+
*/
|
281 |
+
?>
|
282 |
+
|
283 |
+
<div class="position-relative">
|
284 |
+
|
285 |
+
<? //php spDsgvoWritePremiumOverlayIfInvalid($isBlog || $isPremium); ?>
|
286 |
+
|
287 |
+
<?php
|
288 |
+
/*
|
289 |
+
spDsgvoWriteInput('textarea', '', 'spdsgvo_comments_checkbox_text',
|
290 |
+
htmlentities(trim(SPDSGVOSettings::get('spdsgvo_comments_checkbox_text'))),
|
291 |
+
__('Text to display at comment forms', 'shapepress-dsgvo'),
|
292 |
+
__('A message text', 'shapepress-dsgvo'),
|
293 |
+
__('This text gets displayed at every comment form on your page, so that your user confirm to the privacy policy with committing the form.', 'shapepress-dsgvo'));
|
294 |
+
*/
|
295 |
+
?>
|
296 |
+
</div>
|
297 |
+
|
298 |
+
<?php
|
299 |
+
/*
|
300 |
+
spDsgvoWriteInput('toggle', '', 'wp_signup_show_privacy_checkbox', SPDSGVOSettings::get('wp_signup_show_privacy_checkbox'),
|
301 |
+
__('Notice text at sign-up form', 'shapepress-dsgvo'),
|
302 |
+
'',
|
303 |
+
__('Displays a text at user sign-up form to confirm to the privacy policy.', 'shapepress-dsgvo'));
|
304 |
+
*/
|
305 |
+
?>
|
306 |
+
|
307 |
+
<div class="position-relative">
|
308 |
+
<?php spDsgvoWritePremiumOverlayIfInvalid($isBlog || $isPremium); ?>
|
309 |
+
<?php
|
310 |
+
/*
|
311 |
+
spDsgvoWriteInput('textarea', '', 'wp_signup_checkbox_text',
|
312 |
+
htmlentities(trim(SPDSGVOSettings::get('wp_signup_checkbox_text'))),
|
313 |
+
__('Text to display at sign-up form', 'shapepress-dsgvo'),
|
314 |
+
__('A message text', 'shapepress-dsgvo'),
|
315 |
+
__('This text gets displayed at the sign-up form on your page, so that your user confirm to the privacy policy with committing the form.', 'shapepress-dsgvo'));
|
316 |
+
*/
|
317 |
+
?>
|
318 |
+
</div>
|
319 |
+
|
320 |
+
<?php
|
321 |
+
spDsgvoWriteInput('toggle', '', 'woo_show_privacy_checkbox', SPDSGVOSettings::get('woo_show_privacy_checkbox'),
|
322 |
+
__('Checkout text at WooCommerce checkout', 'shapepress-dsgvo'),
|
323 |
+
'',
|
324 |
+
__('Possibility to display a custom text at the WooCommerce checkout form to ensure terms & conditions.', 'shapepress-dsgvo'));
|
325 |
+
?>
|
326 |
+
|
327 |
+
<div class="position-relative">
|
328 |
+
<?php spDsgvoWritePremiumOverlayIfInvalid($isBlog || $isPremium); ?>
|
329 |
+
<?php
|
330 |
+
spDsgvoWriteInput('textarea', '', 'woo_privacy_text',
|
331 |
+
htmlentities(trim(SPDSGVOSettings::get('woo_privacy_text'))),
|
332 |
+
__('Text to display at WooCommerce checkout form', 'shapepress-dsgvo'),
|
333 |
+
__('A message text', 'shapepress-dsgvo'),
|
334 |
+
'');
|
335 |
+
?>
|
336 |
+
</div>
|
337 |
+
|
338 |
+
<div class="form-group">
|
339 |
+
<?= __('<strong>Important Note:</strong> If you use WPML you can translate these inputs via WPML String Translations.', 'shapepress-dsgvo') ?>
|
340 |
+
</div>
|
341 |
+
<div class="form-group">
|
342 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
343 |
+
</div>
|
344 |
+
</form>
|
345 |
+
</div>
|
346 |
+
</div>
|
347 |
+
|
348 |
+
</div>
|
349 |
+
|
350 |
+
|
351 |
+
|
352 |
+
|
admin/tabs/v3/info/class-sp-dsgvo-info-tab.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOInfoTab extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $title = 'V3 must read';
|
6 |
+
public $slug = 'info';
|
7 |
+
public $isHidden = FALSE;
|
8 |
+
|
9 |
+
public function __construct(){
|
10 |
+
|
11 |
+
$this->title = __('V3 must read','shapepress-dsgvo');
|
12 |
+
}
|
13 |
+
|
14 |
+
public function page(){
|
15 |
+
include plugin_dir_path(__FILE__) .'page.php';
|
16 |
+
}
|
17 |
+
}
|
admin/tabs/v3/info/page.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$isPremium = isValidPremiumEdition();
|
3 |
+
$isBlog = isValidBlogEdition();
|
4 |
+
$hasValidLicense = isValidPremiumEdition() || isValidBlogEdition();
|
5 |
+
|
6 |
+
?>
|
7 |
+
|
8 |
+
<div class="card col-12">
|
9 |
+
<div class="card-header"><?php _e('IMPORTANT, OTHERWISE YOUR WEBSITE WILL NOT CONFORM TO PRIVACY','shapepress-dsgvo')?></div>
|
10 |
+
<div class="card-body">
|
11 |
+
<h6 class="card-subtitle"> <?php _e('You need to take 10 minutes to read this text and to reconfigure WP DSGVO Tools (GDPR).','shapepress-dsgvo')?></h6>
|
12 |
+
|
13 |
+
</div>
|
14 |
+
</div>
|
15 |
+
<div class="card-columns">
|
16 |
+
<div class="card">
|
17 |
+
<div class="card-header"><?php _e('1. GDPR GUIDANCE','shapepress-dsgvo')?></div>
|
18 |
+
<div class="card-body">
|
19 |
+
<?php _e('WP DSGVO Tools helps you to design your website correctly. Nevertheless, WP DSGVO does not replace any individual legal advice and no control over whether all aspects of your website have been taken into account.','shapepress-dsgvo'); ?>
|
20 |
+
</div>
|
21 |
+
</div>
|
22 |
+
<div class="card">
|
23 |
+
<div class="card-header"><?php _e('2. NEW LEGAL POSITION','shapepress-dsgvo')?></div>
|
24 |
+
<div class="card-body">
|
25 |
+
<?php _e('New judgments of the European Court of Justice and requirements of data protection authorities have a massive impact on websites and web marketing.<br />WP DSGVO V3 has implemented these requirements to get the consent of the web user to various services. WP DSGVO was fundamentally changed. with the support of data protection lawyer Peter Harlander of (§) MARKETINGRECHT.EU. WP DSGVO was fundamentally changed.<br /><strong> You must go through WP DSGVO point by point and make sure everything is set correctly. </strong> <br />If you are interested, you can read additional details on the legal requirements in the PDF from (§) MARKETINGRECHT.EU or directly from the data protection authorities:<br /><a href="https://www.marketingrecht.eu/downloads/legalweb-mr.pdf" target="_blank"> • https://www.marketingrecht.eu/downloads/legalweb-mr.pdf</a><br /><a href="https://www.baden-wuerttemberg.datenschutz.de/zum-einsatz-von-cookies-und-cookie-bannern-was-gilt-es-bei-einwilligungen-zu-tun-eugh-urteil-planet49/" target="_blank">• https://www.baden-wuerttemberg.datenschutz.de/zum-einsatz-von-cookies-und-cookie-bannern-was-gilt-es-bei-einwilligungen-zu-tun-eugh-urteil-planet49/</a><br />','shapepress-dsgvo'); ?>
|
26 |
+
</div>
|
27 |
+
</div>
|
28 |
+
<div class="card">
|
29 |
+
<div class="card-header"><?php _e('3. NEW OPTIONS','shapepress-dsgvo')?></div>
|
30 |
+
<div class="card-body">
|
31 |
+
<?php _e('Other providers sometimes offer options such as "resume consent", "pre-selected services" or "no disapprove button". These options are meanwhile illegal. The offerers who offer such options, want to meet the website operators who, contrary to the opinion of the courts and data protection authorities still want to have it.<br /><br />We have only included options that are currently considered to be privacy-compliant (according to most lawyers) because we believe that very few WP DSGVO Tools (GDPR) users will hire a privacy expert to design their website.<br /><br />WP DSGVO Tools (GDPR) does not replace individual legal advice, but we want to get you in the right direction as much as possible. This is only possible if we do not even offer unnecessary risk factors. Also you can find out more details in the PDF of (§) MARKETINGRECHT.EU.','shapepress-dsgvo'); ?>
|
32 |
+
</div>
|
33 |
+
</div>
|
34 |
+
<div class="card">
|
35 |
+
<div class="card-header"><?php _e('4. ALL IN ONE','shapepress-dsgvo')?></div>
|
36 |
+
<div class="card-body">
|
37 |
+
<?php _e('<strong>You need to configure WP DSGVO correctly.</strong> WP DSGVO will then create a legally compliant cookie popup and the corresponding privacy policy.<br /><br />The Free version primary contains all the services that private websites need. The Premium version includes services primarily used by professional marketing companies and agencies. It is important that you choose the version that contains as many services as possible of your website.<br /><br />For not included services you have to make your own. Our plugin is designed for standard configured services. Special settings may require special configurations.<br /><strong>Other services are ongoing</strong>. Soon, the Free Version and the Premium Version will be equipped with privacy tools for embeddings such as Youtube, Open Street Map, Google Maps, Facebook, Instagram etc. New marketing tools will be added to the Premium version.<br /><br />Requests for additional (frequently used) services for the Premium version can be made at <a href="https://legalweb.freshdesk.com" target="_blank">https://legalweb.freshdesk.com/</a>.','shapepress-dsgvo'); ?>
|
38 |
+
</div>
|
39 |
+
</div>
|
40 |
+
<div class="card">
|
41 |
+
<div class="card-header"><?php _e('5. BUT NO COOKIE POPUP?','shapepress-dsgvo')?></div>
|
42 |
+
<div class="card-body">
|
43 |
+
<?php _e('Many Web site operators were irritated because WP DSGVO Tools (GDPR) V3 does not produce a cookie popup (correct) in some configurations.<br /><br /><strong>In addition the short legal explanation:</strong> the Cookie Popup serves "only" to obtain the consent of the website users to the processing of their personal data. This consent is not necessary if the tool for operating the website is necessarily technically necessary. <br /><br />According to data protection authorities, an analysis tool is basically technically necessary. However, it is not necessary for the provider of the analysis tool to process the data for his own purposes. <br /><br />Therefore, a local Matomo or WP Statistics (the data remains with the website operator) do not need consent and thus no popup. <br /><br />A Google Analytics, however, according to the data protection authorities, a consent and thus the popup, because Google further processed the analysis data. (<a href="https://datenschutz-hamburg.de/pressemitteilungen/2019/11/2019-11-14-google-analytics" target="_blank">https://datenschutz-hamburg.de/pressemitteilungen/2019/11/2019-11-14-google-analytics</a>) <br /><br />If Matomo or WP Statistics are the only services, it will not pop up. If you really want to have it different (because he represents a different view of the law), there is now an option to include technically necessary services like Matomo or WP Statistics in the popup.','shapepress-dsgvo'); ?>
|
44 |
+
</div>
|
45 |
+
</div>
|
46 |
+
<div class="card">
|
47 |
+
<div class="card-header"><?php _e('6. FACEBOOK PIXEL','shapepress-dsgvo')?></div>
|
48 |
+
<div class="card-body">
|
49 |
+
<?php _e('The update brings a little re-sharpening. Facebook Pixel is no longer included in the Free Version. Facebook Pixel is primarily a marketing tool for optimizing paid Facebook advertising. Therefore, it has migrated to the premium version, which is aimed at companies and agencies. <br /><br />In return, the Free Version receives two new additional features: <br />• Access to multilingual legal texts created by lawyers and accurately translated by sworn and court-certified interpreters. <br /><br />• Access to privacy tools for embeddings such as Youtube, Google Maps, Open Street Map, Facebook, Instagram, etc. soon. <br /><br />The paid Blogger version still has access to Facebook Pixel and of course gets the same new features as the free version.','shapepress-dsgvo'); ?>
|
50 |
+
</div>
|
51 |
+
</div>
|
52 |
+
<div class="card">
|
53 |
+
<div class="card-header"><?php _e('7. LICENSE MODEL','shapepress-dsgvo')?></div>
|
54 |
+
<div class="card-body">
|
55 |
+
<?php _e('We simplified the license model. There are only Free and Premium (1, 25, 100). The Blogger version is no longer available. If you already have these, you can of course reuse them and even get new functions with the update.','shapepress-dsgvo'); ?>
|
56 |
+
</div>
|
57 |
+
</div>
|
58 |
+
<div class="card">
|
59 |
+
<div class="card-header"><?php _e('8. SUPPORT','shapepress-dsgvo')?></div>
|
60 |
+
<div class="card-body">
|
61 |
+
<?php _e('The conversion was really profound. With more than 40,000 installations, one or two websites may experience problems. We\'ll be happy to help if you report the problem at <a href="https://wordpress.org/support/plugin/shapepress-dsgvo/" target="_blank">https://wordpress.org/support/plugin/shapepress-dsgvo/</a> (for Free versions) or <a href="https://legalweb.freshdesk.com/" target="_blank">https://legalweb.freshdesk.com/</a> (for Blog and Premium versions).','shapepress-dsgvo'); ?>
|
62 |
+
</div>
|
63 |
+
</div>
|
64 |
+
<div class="card">
|
65 |
+
<div class="card-header"><?php _e('9. RATING','shapepress-dsgvo')?></div>
|
66 |
+
<div class="card-body">
|
67 |
+
<?php _e('Unfortunately, there were some users who did not ask a support question, but have immediately "avenged" conversion issues with a 1-star rating. As a result, we have fallen from 4.5 stars to 3.5 stars. Please do not do that and use the support, we really like to help!<br /> <br />1-star ratings for small bugs, which the support immediately does, are a real problem - for us and for all users of WP DSGVO. Because the long term can only handle the effort if at least some of the massive development costs come in again due to good valuations of premium versions. <br /> <br />Stuck in WP DSGVO<br />• Over 2,500 internal hours worked by developers and lawyers<br /> • External costs for developers for special requirements<br /> • High external costs for sworn and court-certified interpreters for 100 percent correct translation of legal texts<br /> <br />If this is worth more than 1 star, we would really appreciate it: <br /> <a href="https://wordpress.org/support/plugin/shapepress-dsgvo/reviews/#new-post" target="_blank">https://wordpress.org/support/plugin/shapepress-dsgvo/reviews/#new-post</a>','shapepress-dsgvo'); ?>
|
68 |
+
</div>
|
69 |
+
</div>
|
70 |
+
<div class="card">
|
71 |
+
<div class="card-header"><?php _e('10. COMMUNITY','shapepress-dsgvo')?></div>
|
72 |
+
<div class="card-body">
|
73 |
+
<?php _e('We are happy to be able to give the Wordpress Community WP DSGVO a small thank you for Wordpress and thousands of great plugins.<br /> <br />We will always provide the Wordpress community with a free version for private blogs and websites. <br /> <br />This is currently used by about 40,000 website operators.','shapepress-dsgvo'); ?>
|
74 |
+
</div>
|
75 |
+
</div>
|
76 |
+
<div class="card">
|
77 |
+
<div class="card-header"><?php _e('11. SHAPEPRESS + MARKETINGRECHT.EU = LEGALWEB','shapepress-dsgvo')?></div>
|
78 |
+
<div class="card-body">
|
79 |
+
<?php _e('No, we were not bought. On the contrary. We met with (§) MARKETINGRECHT.EU brought a data protection lawyer on board. This ensures that WP DSGVO is always up-to-date.','shapepress-dsgvo'); ?>
|
80 |
+
</div>
|
81 |
+
</div>
|
82 |
+
|
83 |
+
</div>
|
84 |
+
|
85 |
+
|
admin/tabs/v3/operator/class-sp-dsgvo-imprint-action.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOImprintAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'imprint';
|
6 |
+
|
7 |
+
protected function run(){
|
8 |
+
$this->checkCSRF();
|
9 |
+
$this->requireAdmin();
|
10 |
+
|
11 |
+
|
12 |
+
$subform = $this->get('subform');
|
13 |
+
if (empty(($subform))) return;
|
14 |
+
|
15 |
+
if ($subform == 'imprint-settings')
|
16 |
+
{
|
17 |
+
if($this->has('imprint_page')){
|
18 |
+
SPDSGVOSettings::set('imprint_page', $this->get('imprint_page', '0'));
|
19 |
+
}
|
20 |
+
} elseif ($subform == 'imprint-content')
|
21 |
+
{
|
22 |
+
// Update imprint
|
23 |
+
if($this->has('imprint')){
|
24 |
+
SPDSGVOSettings::set('imprint_hash', wp_hash($this->get('imprint')));
|
25 |
+
SPDSGVOSettings::set('imprint', $this->get('imprint'));
|
26 |
+
SPDSGVOLog::insert("Imprint updated by {$this->user->user_email}");
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
$this->returnBack();
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
SPDSGVOImprintAction::listen();
|
admin/tabs/v3/operator/class-sp-dsgvo-operator-action.php
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOOperatorAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'admin-operator';
|
6 |
+
|
7 |
+
protected function run(){
|
8 |
+
$this->checkCSRF();
|
9 |
+
$this->requireAdmin();
|
10 |
+
|
11 |
+
$textRefreshNeeded = $this->get('spdsgvo_company_info_countrycode', '') != SPDSGVOSettings::get('spdsgvo_company_info_countrycode');
|
12 |
+
|
13 |
+
SPDSGVOSettings::set('page_operator_type', $this->get('page_operator_type', ''));
|
14 |
+
SPDSGVOSettings::set('page_operator_corporate_name', $this->get('page_operator_corporate_name', ''));
|
15 |
+
SPDSGVOSettings::set('page_operator_corporate_ceo', $this->get('page_operator_corporate_ceo', ''));
|
16 |
+
|
17 |
+
SPDSGVOSettings::set('page_operator_company_law_person', $this->get('page_operator_company_law_person', ''));
|
18 |
+
SPDSGVOSettings::set('page_operator_company_name', $this->get('page_operator_company_name', ''));
|
19 |
+
SPDSGVOSettings::set('page_operator_operator_name', $this->get('page_operator_operator_name', ''));
|
20 |
+
SPDSGVOSettings::set('spdsgvo_company_info_countrycode', $this->get('spdsgvo_company_info_countrycode', ''));
|
21 |
+
|
22 |
+
SPDSGVOSettings::set('spdsgvo_company_info_street', $this->get('spdsgvo_company_info_street', ''));
|
23 |
+
SPDSGVOSettings::set('spdsgvo_company_info_loc', $this->get('spdsgvo_company_info_loc', ''));
|
24 |
+
SPDSGVOSettings::set('spdsgvo_company_info_zip', $this->get('spdsgvo_company_info_zip', ''));
|
25 |
+
SPDSGVOSettings::set('spdsgvo_company_info_countrycode', $this->get('spdsgvo_company_info_countrycode', ''));
|
26 |
+
SPDSGVOSettings::set('spdsgvo_company_info_phone', $this->get('spdsgvo_company_info_phone', ''));
|
27 |
+
SPDSGVOSettings::set('spdsgvo_company_info_email', $this->get('spdsgvo_company_info_email', ''));
|
28 |
+
|
29 |
+
SPDSGVOSettings::set('spdsgvo_company_fn_nr', $this->get('spdsgvo_company_fn_nr', ''));
|
30 |
+
SPDSGVOSettings::set('spdsgvo_company_law_loc', $this->get('spdsgvo_company_law_loc', ''));
|
31 |
+
SPDSGVOSettings::set('spdsgvo_company_uid_nr', $this->get('spdsgvo_company_uid_nr', ''));
|
32 |
+
SPDSGVOSettings::set('spdsgvo_company_law_person', $this->get('spdsgvo_company_law_person', ''));
|
33 |
+
SPDSGVOSettings::set('spdsgvo_company_chairmen', $this->get('spdsgvo_company_chairmen', ''));
|
34 |
+
SPDSGVOSettings::set('spdsgvo_company_resp_content', $this->get('spdsgvo_company_resp_content', ''));
|
35 |
+
|
36 |
+
SPDSGVOSettings::set('page_operator_society_name', $this->get('page_operator_society_name', ''));
|
37 |
+
SPDSGVOSettings::set('page_operator_society_board', $this->get('page_operator_society_board', ''));
|
38 |
+
SPDSGVOSettings::set('page_operator_society_number', $this->get('page_operator_society_number', ''));
|
39 |
+
|
40 |
+
SPDSGVOSettings::set('page_operator_privacy_shield', $this->get('page_operator_privacy_shield', '0'));
|
41 |
+
|
42 |
+
SPDSGVOSettings::set('operator_pp_responsibility_type', $this->get('operator_pp_responsibility_type', ''));
|
43 |
+
SPDSGVOSettings::set('operator_pp_dso_intern_name', $this->get('operator_pp_dso_intern_name', ''));
|
44 |
+
SPDSGVOSettings::set('operator_pp_dso_intern_phone', $this->get('operator_pp_dso_intern_phone', ''));
|
45 |
+
SPDSGVOSettings::set('operator_pp_dso_intern_email', $this->get('operator_pp_dso_intern_email', ''));
|
46 |
+
|
47 |
+
SPDSGVOSettings::set('operator_pp_dso_external_company', $this->get('operator_pp_dso_external_company', ''));
|
48 |
+
SPDSGVOSettings::set('operator_pp_dso_external_name', $this->get('operator_pp_dso_external_name', ''));
|
49 |
+
SPDSGVOSettings::set('operator_pp_dso_external_street', $this->get('operator_pp_dso_external_street', ''));
|
50 |
+
SPDSGVOSettings::set('operator_pp_dso_external_loc', $this->get('operator_pp_dso_external_loc', ''));
|
51 |
+
SPDSGVOSettings::set('operator_pp_dso_external_zip', $this->get('operator_pp_dso_external_zip', ''));
|
52 |
+
SPDSGVOSettings::set('operator_pp_dso_external_countrycode', $this->get('operator_pp_dso_external_countrycode', ''));
|
53 |
+
SPDSGVOSettings::set('operator_pp_dso_external_phone', $this->get('operator_pp_dso_external_phone', ''));
|
54 |
+
SPDSGVOSettings::set('operator_pp_dso_external_email', $this->get('operator_pp_dso_external_email', ''));
|
55 |
+
|
56 |
+
SPDSGVOSettings::set('operator_pp_responsibility_contact', $this->get('operator_pp_responsibility_contact', ''));
|
57 |
+
SPDSGVOSettings::set('operator_pp_dso_contact_intern_name', $this->get('operator_pp_dso_contact_intern_name', ''));
|
58 |
+
SPDSGVOSettings::set('operator_pp_dso_contact_intern_phone', $this->get('operator_pp_dso_contact_intern_phone', ''));
|
59 |
+
SPDSGVOSettings::set('operator_pp_dso_contact_intern_email', $this->get('operator_pp_dso_contact_intern_email', ''));
|
60 |
+
|
61 |
+
SPDSGVOSettings::set('operator_pp_dso_contact_external_company', $this->get('operator_pp_dso_contact_external_company', ''));
|
62 |
+
SPDSGVOSettings::set('operator_pp_dso_contact_external_name', $this->get('operator_pp_dso_contact_external_name', ''));
|
63 |
+
SPDSGVOSettings::set('operator_pp_dso_contact_external_street', $this->get('operator_pp_dso_contact_external_street', ''));
|
64 |
+
SPDSGVOSettings::set('operator_pp_dso_contact_external_loc', $this->get('operator_pp_dso_contact_external_loc', ''));
|
65 |
+
SPDSGVOSettings::set('operator_pp_dso_contact_external_zip', $this->get('operator_pp_dso_contact_external_zip', ''));
|
66 |
+
SPDSGVOSettings::set('operator_pp_dso_contact_external_countrycode', $this->get('operator_pp_dso_contact_external_countrycode', ''));
|
67 |
+
SPDSGVOSettings::set('operator_pp_dso_contact_external_phone', $this->get('operator_pp_dso_contact_external_phone', ''));
|
68 |
+
SPDSGVOSettings::set('operator_pp_dso_contact_external_email', $this->get('operator_pp_dso_contact_external_email', ''));
|
69 |
+
|
70 |
+
if ($textRefreshNeeded)
|
71 |
+
{
|
72 |
+
SPDSGVOSettings::set('show_notice_privacy_policy_texts_outdated', '1');
|
73 |
+
try {
|
74 |
+
SPDSGVOLanguageTools::updateLwTexts();
|
75 |
+
} catch (Exception $e) {}
|
76 |
+
}
|
77 |
+
|
78 |
+
SPDSGVOCacheManager::clearCaches();
|
79 |
+
$this->returnBack();
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
SPDSGVOOperatorAction::listen();
|
admin/tabs/v3/operator/class-sp-dsgvo-operator-tab.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOOperatorTab extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $title = 'Operator';
|
6 |
+
public $slug = 'operator';
|
7 |
+
public $isHidden = FALSE;
|
8 |
+
|
9 |
+
public function __construct(){
|
10 |
+
|
11 |
+
$this->title = __('Operator','shapepress-dsgvo');
|
12 |
+
}
|
13 |
+
|
14 |
+
public function page(){
|
15 |
+
include plugin_dir_path(__FILE__) .'page.php';
|
16 |
+
}
|
17 |
+
}
|
admin/tabs/v3/operator/page.php
ADDED
@@ -0,0 +1,557 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$isPremium = isValidPremiumEdition();
|
3 |
+
$isBlog = isValidBlogEdition();
|
4 |
+
$hasValidLicense = isValidPremiumEdition() || isValidBlogEdition();
|
5 |
+
|
6 |
+
?>
|
7 |
+
|
8 |
+
<div class="card-columns">
|
9 |
+
|
10 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
11 |
+
<input type="hidden" name="action" value="<?= SPDSGVOOperatorAction::getActionName() ?>">
|
12 |
+
<?php wp_nonce_field(SPDSGVOOperatorAction::getActionName() . '-nonce'); ?>
|
13 |
+
<!-- operator person details-->
|
14 |
+
<div class="card">
|
15 |
+
<div class="card-header">
|
16 |
+
<h4 class="card-title"><?php _e('Wordpress Page/Blog Operator', 'shapepress-dsgvo') ?></h4>
|
17 |
+
</div>
|
18 |
+
<div class="card-body">
|
19 |
+
<div class="form">
|
20 |
+
<input type="hidden" name="action" value="<?= SPDSGVOOperatorAction::getActionName() ?>">
|
21 |
+
<?php wp_nonce_field(SPDSGVOOperatorAction::getActionName() . '-nonce'); ?>
|
22 |
+
|
23 |
+
<div class="form-group">
|
24 |
+
<?php $operatorType = SPDSGVOSettings::get('page_operator_type');?>
|
25 |
+
<label for="page_operator_type"><?php _e('Page operator type', 'shapepress-dsgvo') ?></label>
|
26 |
+
<select class="form-control" id="page_operator_type" name="page_operator_type">
|
27 |
+
<option value="private" <?php if ($operatorType == 'private') {
|
28 |
+
echo 'selected';
|
29 |
+
} ?>><?php _e('Private citizen', 'shapepress-dsgvo') ?></option>
|
30 |
+
<option value="one-man" <?php if ($operatorType == 'one-man') {
|
31 |
+
echo 'selected';
|
32 |
+
} ?>><?php _e('One-man business', 'shapepress-dsgvo') ?></option>
|
33 |
+
<option value="corporation" <?php if ($operatorType == 'corporation') {
|
34 |
+
echo 'selected';
|
35 |
+
} ?>><?php _e('Corporation', 'shapepress-dsgvo') ?></option>
|
36 |
+
<option value="society" <?php if ($operatorType == 'society') {
|
37 |
+
echo 'selected';
|
38 |
+
} ?>><?php _e('Society', 'shapepress-dsgvo') ?></option>
|
39 |
+
|
40 |
+
</select>
|
41 |
+
</div>
|
42 |
+
|
43 |
+
<div class="page-operator-type-container page-operator-type-container-corporation <?= $operatorType == 'corporation' ? 'spdsgvo-d-block' : 'spdsgvo-d-none';?>">
|
44 |
+
<?php
|
45 |
+
// in case corperate
|
46 |
+
spDsgvoWriteInput('text', '', 'page_operator_corporate_name', SPDSGVOSettings::get('page_operator_corporate_name'),
|
47 |
+
__('Company + legal form', 'shapepress-dsgvo'),
|
48 |
+
'',
|
49 |
+
__('The name of the company including the legal form.', 'shapepress-dsgvo'));
|
50 |
+
?>
|
51 |
+
|
52 |
+
<?php
|
53 |
+
spDsgvoWriteInput('text', '', 'page_operator_corporate_ceo', SPDSGVOSettings::get('page_operator_corporate_ceo'),
|
54 |
+
__('Executive director', 'shapepress-dsgvo'),
|
55 |
+
'',
|
56 |
+
'');
|
57 |
+
?>
|
58 |
+
|
59 |
+
<?php
|
60 |
+
spDsgvoWriteInput('text', '', 'spdsgvo_company_chairmen', SPDSGVOSettings::get('spdsgvo_company_chairmen'),
|
61 |
+
__('Shareholder', 'shapepress-dsgvo'),
|
62 |
+
'',
|
63 |
+
'');
|
64 |
+
?>
|
65 |
+
</div>
|
66 |
+
|
67 |
+
<div class="page-operator-type-container page-operator-type-container-one-man <?= $operatorType == 'one-man' ? 'spdsgvo-d-block' : 'spdsgvo-d-none';?>">
|
68 |
+
<?php
|
69 |
+
// in case of one-man
|
70 |
+
spDsgvoWriteInput('text', '', 'page_operator_company_law_person', SPDSGVOSettings::get('page_operator_company_law_person'),
|
71 |
+
__('Full Name of the company owner', 'shapepress-dsgvo'),
|
72 |
+
'',
|
73 |
+
__('The name of person who legally represents the company including all titles if wished.', 'shapepress-dsgvo'));
|
74 |
+
?>
|
75 |
+
|
76 |
+
<?php
|
77 |
+
// in case of one-man
|
78 |
+
spDsgvoWriteInput('text', '', 'page_operator_company_name', SPDSGVOSettings::get('page_operator_company_name'),
|
79 |
+
__('Business name', 'shapepress-dsgvo'),
|
80 |
+
'',
|
81 |
+
__('The name of the company.', 'shapepress-dsgvo'));
|
82 |
+
?>
|
83 |
+
</div>
|
84 |
+
|
85 |
+
<div class="page-operator-type-container page-operator-type-container-private <?= $operatorType == 'private' ? 'spdsgvo-d-block' : 'spdsgvo-d-none';?>">
|
86 |
+
<?php
|
87 |
+
// in case of private
|
88 |
+
spDsgvoWriteInput('text', '', 'page_operator_operator_name', SPDSGVOSettings::get('page_operator_operator_name'),
|
89 |
+
__('First and last name', 'shapepress-dsgvo'),
|
90 |
+
'',
|
91 |
+
'');
|
92 |
+
?>
|
93 |
+
</div>
|
94 |
+
|
95 |
+
<div class="page-operator-type-container page-operator-type-container-society <?= $operatorType == 'society' ? 'spdsgvo-d-block' : 'spdsgvo-d-none';?>">
|
96 |
+
<?php
|
97 |
+
|
98 |
+
spDsgvoWriteInput('text', '', 'page_operator_society_name', SPDSGVOSettings::get('page_operator_society_name'),
|
99 |
+
__('Society name', 'shapepress-dsgvo'),
|
100 |
+
'',
|
101 |
+
__('The full name of the society.', 'shapepress-dsgvo'));
|
102 |
+
?>
|
103 |
+
<?php
|
104 |
+
|
105 |
+
spDsgvoWriteInput('text', '', 'page_operator_society_board', SPDSGVOSettings::get('page_operator_society_board'),
|
106 |
+
__('Simplifying board', 'shapepress-dsgvo'),
|
107 |
+
'',
|
108 |
+
'');
|
109 |
+
?>
|
110 |
+
<?php
|
111 |
+
|
112 |
+
spDsgvoWriteInput('text', '', 'page_operator_society_number', SPDSGVOSettings::get('page_operator_society_number'),
|
113 |
+
__('Society number', 'shapepress-dsgvo'),
|
114 |
+
'',
|
115 |
+
'');
|
116 |
+
?>
|
117 |
+
</div>
|
118 |
+
|
119 |
+
<div class="form-group">
|
120 |
+
<?php
|
121 |
+
$selectedCountry = SPDSGVOSettings::get('spdsgvo_company_info_countrycode');
|
122 |
+
$countryList = SPDSGVOConstants::getCountries();
|
123 |
+
?>
|
124 |
+
<div class="label-operator-type label-operator-type-private <?= $operatorType == 'private' ? 'spdsgvo-d-block' : 'spdsgvo-d-none'; ?>">
|
125 |
+
<label for="spdsgvo_company_info_countrycode"><?php _e('Place of residence', 'shapepress-dsgvo') ?></label>
|
126 |
+
</div>
|
127 |
+
<div class="label-operator-type label-operator-type-one-man <?= $operatorType == 'one-man' ? 'spdsgvo-d-block' : 'spdsgvo-d-none'; ?>">
|
128 |
+
<label for="spdsgvo_company_info_countrycode"><?php _e('Registered business address', 'shapepress-dsgvo') ?></label>
|
129 |
+
</div>
|
130 |
+
<div class="label-operator-type label-operator-type-society <?= $operatorType == 'society' ? 'spdsgvo-d-block' : 'spdsgvo-d-none'; ?>">
|
131 |
+
<label for="spdsgvo_company_info_countrycode"><?php _e('Club seat', 'shapepress-dsgvo') ?></label>
|
132 |
+
</div>
|
133 |
+
<div class="label-operator-type label-operator-type-corporation <?= $operatorType == 'corporation' ? 'spdsgvo-d-block' : 'spdsgvo-d-none'; ?>">
|
134 |
+
<label for="spdsgvo_company_info_countrycode"><?php _e('Registered business address', 'shapepress-dsgvo') ?></label>
|
135 |
+
</div>
|
136 |
+
|
137 |
+
<select name="spdsgvo_company_info_countrycode" id="spdsgvo_company_info_countrycode" class="form-control">
|
138 |
+
<?php foreach ($countryList as $key => $name) :?>
|
139 |
+
<option value="<?= $key?>" <?php selected($selectedCountry, $key); ?>><?= $name; ?></option>
|
140 |
+
<?php endforeach; ?>
|
141 |
+
</select>
|
142 |
+
<small class="form-text text-muted"><?php _e('Important: This setting defines the legal basis of all the texts which WP DSGVO Tools (GDPR) provides. Setting a wrong country risks to be not confirm with the GDPR.', 'shapepress-dsgvo') ?></small>
|
143 |
+
</div>
|
144 |
+
|
145 |
+
<?php
|
146 |
+
spDsgvoWriteInput('text', '', 'spdsgvo_company_info_street', SPDSGVOSettings::get('spdsgvo_company_info_street'),
|
147 |
+
__('Street', 'shapepress-dsgvo'),
|
148 |
+
'',
|
149 |
+
'');
|
150 |
+
?>
|
151 |
+
|
152 |
+
<?php
|
153 |
+
spDsgvoWriteInput('text', '', 'spdsgvo_company_info_zip', SPDSGVOSettings::get('spdsgvo_company_info_zip'),
|
154 |
+
__('ZIP code', 'shapepress-dsgvo'),
|
155 |
+
'',
|
156 |
+
'');
|
157 |
+
?>
|
158 |
+
|
159 |
+
<?php
|
160 |
+
spDsgvoWriteInput('text', '', 'spdsgvo_company_info_loc', SPDSGVOSettings::get('spdsgvo_company_info_loc'),
|
161 |
+
__('Location', 'shapepress-dsgvo'),
|
162 |
+
'',
|
163 |
+
'');
|
164 |
+
?>
|
165 |
+
|
166 |
+
|
167 |
+
|
168 |
+
<?php
|
169 |
+
spDsgvoWriteInput('text', '', 'spdsgvo_company_info_phone', SPDSGVOSettings::get('spdsgvo_company_info_phone'),
|
170 |
+
__('Phone', 'shapepress-dsgvo'),
|
171 |
+
'',
|
172 |
+
'');
|
173 |
+
?>
|
174 |
+
|
175 |
+
<?php
|
176 |
+
spDsgvoWriteInput('text', '', 'spdsgvo_company_info_email', SPDSGVOSettings::get('spdsgvo_company_info_email'),
|
177 |
+
__('Email', 'shapepress-dsgvo'),
|
178 |
+
'',
|
179 |
+
'');
|
180 |
+
?>
|
181 |
+
|
182 |
+
<!-- US privacy shield -->
|
183 |
+
|
184 |
+
<div class="page-operator-container-us <?= $selectedCountry == 'US' ? 'spdsgvo-d-block' : 'spdsgvo-d-none';?>"">
|
185 |
+
<?php
|
186 |
+
|
187 |
+
spDsgvoWriteInput('switch', '', 'page_operator_privacy_shield', SPDSGVOSettings::get('page_operator_privacy_shield', '0'),
|
188 |
+
__('Privacy Shield', 'shapepress-dsgvo'),
|
189 |
+
'',
|
190 |
+
__('Enable, if you/your business is privacy shield certified.','shapepress-dsgvo'));
|
191 |
+
|
192 |
+
?>
|
193 |
+
</div>
|
194 |
+
|
195 |
+
<div class="page-operator-type-container page-operator-type-container-one-man page-operator-type-container-corporation page-operator-type-container-society <?= $operatorType != 'private' ? 'spdsgvo-d-block' : 'spdsgvo-d-none';?>">
|
196 |
+
<?php
|
197 |
+
spDsgvoWriteInput('text', '', 'spdsgvo_company_fn_nr', SPDSGVOSettings::get('spdsgvo_company_fn_nr'),
|
198 |
+
__('Commercial book no.', 'shapepress-dsgvo'),
|
199 |
+
'',
|
200 |
+
'');
|
201 |
+
?>
|
202 |
+
|
203 |
+
<?php
|
204 |
+
spDsgvoWriteInput('text', '', 'spdsgvo_company_law_loc', SPDSGVOSettings::get('spdsgvo_company_law_loc'),
|
205 |
+
__('§11 Place of Jurisdiction', 'shapepress-dsgvo'),
|
206 |
+
'',
|
207 |
+
'');
|
208 |
+
?>
|
209 |
+
|
210 |
+
<?php
|
211 |
+
spDsgvoWriteInput('text', '', 'spdsgvo_company_uid_nr', SPDSGVOSettings::get('spdsgvo_company_uid_nr'),
|
212 |
+
__('VAT No.:', 'shapepress-dsgvo'),
|
213 |
+
'',
|
214 |
+
'');
|
215 |
+
?>
|
216 |
+
|
217 |
+
<?php
|
218 |
+
/*
|
219 |
+
spDsgvoWriteInput('text', '', 'spdsgvo_company_law_person', SPDSGVOSettings::get('spdsgvo_company_law_person'),
|
220 |
+
__('Legal representatives', 'shapepress-dsgvo'),
|
221 |
+
'',
|
222 |
+
__('The person who legally represents the company.', 'shapepress-dsgvo'));
|
223 |
+
*/
|
224 |
+
?>
|
225 |
+
</div>
|
226 |
+
|
227 |
+
|
228 |
+
|
229 |
+
|
230 |
+
<?php
|
231 |
+
spDsgvoWriteInput('text', '', 'spdsgvo_company_resp_content', SPDSGVOSettings::get('spdsgvo_company_resp_content'),
|
232 |
+
__('Responsible for content', 'shapepress-dsgvo'),
|
233 |
+
'',
|
234 |
+
__('The person who is responsible for the content of this website.', 'shapepress-dsgvo'));
|
235 |
+
?>
|
236 |
+
|
237 |
+
<div class="form-group">
|
238 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
239 |
+
</div>
|
240 |
+
|
241 |
+
</div>
|
242 |
+
</div>
|
243 |
+
</div>
|
244 |
+
|
245 |
+
<!-- dso -->
|
246 |
+
<div class="card">
|
247 |
+
<div class="card-header">
|
248 |
+
<h4 class="card-title"><?php _e('Privacy Policy Basics', 'shapepress-dsgvo') ?></h4>
|
249 |
+
</div>
|
250 |
+
<div class="card-body">
|
251 |
+
<div class="form">
|
252 |
+
<input type="hidden" name="action" value="<?= SPDSGVOOperatorAction::getActionName() ?>">
|
253 |
+
<?php wp_nonce_field(SPDSGVOOperatorAction::getActionName() . '-nonce'); ?>
|
254 |
+
|
255 |
+
<div class="form-group">
|
256 |
+
<?php $operator_pp_responsibility_type = SPDSGVOSettings::get('operator_pp_responsibility_type'); ?>
|
257 |
+
<label><?php _e('Do you have a data security officer?', 'shapepress-dsgvo') ?></label>
|
258 |
+
<?php
|
259 |
+
spDsgvoWriteInput('radio', 'operator_pp_responsibility_type_intern', 'operator_pp_responsibility_type',
|
260 |
+
$operator_pp_responsibility_type,
|
261 |
+
__('Yes, internal', 'shapepress-dsgvo'),
|
262 |
+
'',
|
263 |
+
'', false, '', 'internal');
|
264 |
+
?>
|
265 |
+
<?php
|
266 |
+
spDsgvoWriteInput('radio', 'operator_pp_responsibility_type_extern', 'operator_pp_responsibility_type',
|
267 |
+
$operator_pp_responsibility_type,
|
268 |
+
__('Yes, external', 'shapepress-dsgvo'),
|
269 |
+
'',
|
270 |
+
'', false, '', 'external');
|
271 |
+
?>
|
272 |
+
<?php
|
273 |
+
spDsgvoWriteInput('radio', 'operator_pp_responsibility_type_none', 'operator_pp_responsibility_type',
|
274 |
+
$operator_pp_responsibility_type,
|
275 |
+
__('No, we do not have', 'shapepress-dsgvo'),
|
276 |
+
'',
|
277 |
+
'', false, '', 'none');
|
278 |
+
?>
|
279 |
+
<small class="form-text text-muted"><?= __('Specifies if your company has an inhouse data security officer, an external person or no responsible person.', 'shapepress-dsgvo') ?></small>
|
280 |
+
</div>
|
281 |
+
|
282 |
+
<div id="container-pp-responsibility-internal" class="container-pp-responsibility <?= $operator_pp_responsibility_type == 'internal' ? 'spdsgvo-d-block' : 'spdsgvo-d-none'?>">
|
283 |
+
|
284 |
+
<label><?php _e('Internal data security officer', 'shapepress-dsgvo') ?></label>
|
285 |
+
|
286 |
+
<?php
|
287 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_intern_name', SPDSGVOSettings::get('operator_pp_dso_intern_name'),
|
288 |
+
__('Name', 'shapepress-dsgvo'),
|
289 |
+
'',
|
290 |
+
'');
|
291 |
+
?>
|
292 |
+
|
293 |
+
<?php
|
294 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_intern_phone', SPDSGVOSettings::get('operator_pp_dso_intern_phone'),
|
295 |
+
__('Phone', 'shapepress-dsgvo'),
|
296 |
+
'',
|
297 |
+
'');
|
298 |
+
?>
|
299 |
+
|
300 |
+
<?php
|
301 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_intern_email', SPDSGVOSettings::get('operator_pp_dso_intern_email'),
|
302 |
+
__('Email', 'shapepress-dsgvo'),
|
303 |
+
'',
|
304 |
+
'');
|
305 |
+
?>
|
306 |
+
|
307 |
+
</div>
|
308 |
+
|
309 |
+
<div id="container-pp-responsibility-external"
|
310 |
+
class="form-group container-pp-responsibility <?= $operator_pp_responsibility_type == 'external' ? 'spdsgvo-d-block' : 'spdsgvo-d-none'?>">
|
311 |
+
|
312 |
+
<label><?php _e('External data security officer', 'shapepress-dsgvo') ?></label>
|
313 |
+
|
314 |
+
<?php
|
315 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_external_company', SPDSGVOSettings::get('operator_pp_dso_external_company'),
|
316 |
+
__('Company name', 'shapepress-dsgvo'),
|
317 |
+
'',
|
318 |
+
'');
|
319 |
+
?>
|
320 |
+
|
321 |
+
<?php
|
322 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_external_name', SPDSGVOSettings::get('operator_pp_dso_external_name'),
|
323 |
+
__('Name', 'shapepress-dsgvo'),
|
324 |
+
'',
|
325 |
+
'');
|
326 |
+
?>
|
327 |
+
|
328 |
+
<?php
|
329 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_external_street', SPDSGVOSettings::get('operator_pp_dso_external_street'),
|
330 |
+
__('Street', 'shapepress-dsgvo'),
|
331 |
+
'',
|
332 |
+
'');
|
333 |
+
?>
|
334 |
+
|
335 |
+
<?php
|
336 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_external_zip', SPDSGVOSettings::get('operator_pp_dso_external_zip'),
|
337 |
+
__('ZIP code', 'shapepress-dsgvo'),
|
338 |
+
'',
|
339 |
+
'');
|
340 |
+
?>
|
341 |
+
|
342 |
+
<?php
|
343 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_external_loc', SPDSGVOSettings::get('operator_pp_dso_external_loc'),
|
344 |
+
__('Location', 'shapepress-dsgvo'),
|
345 |
+
'',
|
346 |
+
'');
|
347 |
+
?>
|
348 |
+
|
349 |
+
<div class="form-group">
|
350 |
+
<?php
|
351 |
+
$selectedCountry = SPDSGVOSettings::get('operator_pp_dso_external_countrycode');
|
352 |
+
?>
|
353 |
+
<label for="operator_pp_dso_external_countrycode"><?php _e('Country:', 'shapepress-dsgvo') ?></label>
|
354 |
+
<select name="operator_pp_dso_external_countrycode" id="operator_pp_dso_external_countrycode" class="form-control">
|
355 |
+
<option value="AT" <?php selected($selectedCountry, 'AT'); ?>><?php _e('Austria', 'shapepress-dsgvo') ?></option>
|
356 |
+
<option value="DE" <?php selected($selectedCountry, 'DE'); ?>><?php _e('Germany', 'shapepress-dsgvo') ?></option>
|
357 |
+
</select>
|
358 |
+
</div>
|
359 |
+
|
360 |
+
<?php
|
361 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_external_phone', SPDSGVOSettings::get('operator_pp_dso_external_phone'),
|
362 |
+
__('Phone', 'shapepress-dsgvo'),
|
363 |
+
'',
|
364 |
+
'');
|
365 |
+
?>
|
366 |
+
|
367 |
+
<?php
|
368 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_external_email', SPDSGVOSettings::get('operator_pp_dso_external_email'),
|
369 |
+
__('Email', 'shapepress-dsgvo'),
|
370 |
+
'',
|
371 |
+
'');
|
372 |
+
?>
|
373 |
+
|
374 |
+
</div>
|
375 |
+
|
376 |
+
<div id="container-pp-responsibility-none"
|
377 |
+
class="form-group container-pp-responsibility <?= $operator_pp_responsibility_type == 'none' ? 'spdsgvo-d-block' : 'spdsgvo-d-none'?>">
|
378 |
+
|
379 |
+
<?php $operator_pp_responsibility_contact = SPDSGVOSettings::get('operator_pp_responsibility_contact'); ?>
|
380 |
+
<label><?php _e('Does your company has responsible person for privacy issues?', 'shapepress-dsgvo') ?></label>
|
381 |
+
<?php
|
382 |
+
spDsgvoWriteInput('radio', 'operator_pp_responsibility_contact_intern', 'operator_pp_responsibility_contact',
|
383 |
+
$operator_pp_responsibility_contact,
|
384 |
+
__('Yes, internal', 'shapepress-dsgvo'),
|
385 |
+
'',
|
386 |
+
'', false, '', 'internal');
|
387 |
+
?>
|
388 |
+
<?php
|
389 |
+
spDsgvoWriteInput('radio', 'operator_pp_responsibility_contact_extern', 'operator_pp_responsibility_contact',
|
390 |
+
$operator_pp_responsibility_contact,
|
391 |
+
__('Yes, external', 'shapepress-dsgvo'),
|
392 |
+
'',
|
393 |
+
'', false, '', 'external');
|
394 |
+
?>
|
395 |
+
<?php
|
396 |
+
spDsgvoWriteInput('radio', 'operator_pp_responsibility_contact_none', 'operator_pp_responsibility_contact',
|
397 |
+
$operator_pp_responsibility_contact,
|
398 |
+
__('No, we do not have', 'shapepress-dsgvo'),
|
399 |
+
'',
|
400 |
+
'', false, '', 'no');
|
401 |
+
?>
|
402 |
+
<small class="form-text text-muted"><?= __('Specifies if your company has responsible person for privacy issues .', 'shapepress-dsgvo') ?></small>
|
403 |
+
|
404 |
+
</div>
|
405 |
+
|
406 |
+
<div id="container-dso-contact-internal"
|
407 |
+
class="container-dso-contact <?= $operator_pp_responsibility_type == 'none' && $operator_pp_responsibility_contact == 'internal' ? 'spdsgvo-d-block' : 'spdsgvo-d-none'?>">
|
408 |
+
|
409 |
+
<label><?php _e('Internal contact for privacy issues', 'shapepress-dsgvo') ?></label>
|
410 |
+
|
411 |
+
<?php
|
412 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_contact_intern_name', SPDSGVOSettings::get('operator_pp_dso_contact_intern_name'),
|
413 |
+
__('Name', 'shapepress-dsgvo'),
|
414 |
+
'',
|
415 |
+
'');
|
416 |
+
?>
|
417 |
+
|
418 |
+
<?php
|
419 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_contact_intern_phone', SPDSGVOSettings::get('operator_pp_dso_contact_intern_phone'),
|
420 |
+
__('Phone', 'shapepress-dsgvo'),
|
421 |
+
'',
|
422 |
+
'');
|
423 |
+
?>
|
424 |
+
|
425 |
+
<?php
|
426 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_contact_intern_email', SPDSGVOSettings::get('operator_pp_dso_contact_intern_email'),
|
427 |
+
__('Email', 'shapepress-dsgvo'),
|
428 |
+
'',
|
429 |
+
'');
|
430 |
+
?>
|
431 |
+
|
432 |
+
</div>
|
433 |
+
|
434 |
+
<div id="container-dso-contact-external"
|
435 |
+
class="container-dso-contact <?= $operator_pp_responsibility_type == 'none' && $operator_pp_responsibility_contact == 'external' ? 'spdsgvo-d-block' : 'spdsgvo-d-none'?>">
|
436 |
+
|
437 |
+
<label><?php _e('External contact for privacy issues', 'shapepress-dsgvo') ?></label>
|
438 |
+
|
439 |
+
|
440 |
+
<?php
|
441 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_contact_external_company', SPDSGVOSettings::get('operator_pp_dso_contact_external_company'),
|
442 |
+
__('Company/First- and lastname', 'shapepress-dsgvo'),
|
443 |
+
'',
|
444 |
+
'');
|
445 |
+
?>
|
446 |
+
|
447 |
+
<?php
|
448 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_contact_external_name', SPDSGVOSettings::get('operator_pp_dso_contact_external_name'),
|
449 |
+
__('Name', 'shapepress-dsgvo'),
|
450 |
+
'',
|
451 |
+
'');
|
452 |
+
?>
|
453 |
+
|
454 |
+
<?php
|
455 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_contact_external_street', SPDSGVOSettings::get('operator_pp_dso_contact_external_street'),
|
456 |
+
__('Street', 'shapepress-dsgvo'),
|
457 |
+
'',
|
458 |
+
'');
|
459 |
+
?>
|
460 |
+
|
461 |
+
<?php
|
462 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_contact_external_zip', SPDSGVOSettings::get('operator_pp_dso_contact_external_zip'),
|
463 |
+
__('ZIP code', 'shapepress-dsgvo'),
|
464 |
+
'',
|
465 |
+
'');
|
466 |
+
?>
|
467 |
+
|
468 |
+
<?php
|
469 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_contact_external_loc', SPDSGVOSettings::get('operator_pp_dso_contact_external_loc'),
|
470 |
+
__('Location', 'shapepress-dsgvo'),
|
471 |
+
'',
|
472 |
+
'');
|
473 |
+
?>
|
474 |
+
|
475 |
+
<div class="form-group">
|
476 |
+
<?php
|
477 |
+
$selectedCountry = SPDSGVOSettings::get('operator_pp_dso_contact_external_countrycode');
|
478 |
+
?>
|
479 |
+
<label for="operator_pp_dso_contact_external_countrycode"><?php _e('Country:', 'shapepress-dsgvo') ?></label>
|
480 |
+
<select name="operator_pp_dso_contact_external_countrycode" id="operator_pp_dso_contact_external_countrycode" class="form-control">
|
481 |
+
<option value="AT" <?php selected($selectedCountry, 'AT'); ?>><?php _e('Austria', 'shapepress-dsgvo') ?></option>
|
482 |
+
<option value="DE" <?php selected($selectedCountry, 'DE'); ?>><?php _e('Germany', 'shapepress-dsgvo') ?></option>
|
483 |
+
</select>
|
484 |
+
</div>
|
485 |
+
|
486 |
+
<?php
|
487 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_contact_external_phone', SPDSGVOSettings::get('operator_pp_dso_contact_external_phone'),
|
488 |
+
__('Phone', 'shapepress-dsgvo'),
|
489 |
+
'',
|
490 |
+
'');
|
491 |
+
?>
|
492 |
+
|
493 |
+
<?php
|
494 |
+
spDsgvoWriteInput('text', '', 'operator_pp_dso_contact_external_email', SPDSGVOSettings::get('operator_pp_dso_contact_external_email'),
|
495 |
+
__('Email', 'shapepress-dsgvo'),
|
496 |
+
'',
|
497 |
+
'');
|
498 |
+
?>
|
499 |
+
|
500 |
+
</div>
|
501 |
+
|
502 |
+
<div class="form-group">
|
503 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
504 |
+
</div>
|
505 |
+
</div>
|
506 |
+
</div>
|
507 |
+
</div>
|
508 |
+
|
509 |
+
</form>
|
510 |
+
<!-- imprint -->
|
511 |
+
<div class="card">
|
512 |
+
<div class="card-header">
|
513 |
+
<h4 class="card-title"><?php _e('Imprint settings', 'shapepress-dsgvo') ?></h4>
|
514 |
+
</div>
|
515 |
+
<div class="card-body">
|
516 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
517 |
+
<input type="hidden" name="action" value="<?= SPDSGVOImprintAction::getActionName(); ?>">
|
518 |
+
<?php wp_nonce_field(SPDSGVOImprintAction::getActionName() . '-nonce'); ?>
|
519 |
+
<input type="hidden" name="subform" value="imprint-settings">
|
520 |
+
|
521 |
+
<div class="form-group">
|
522 |
+
<?php $imprintPage = SPDSGVOSettings::get('imprint_page'); ?>
|
523 |
+
<label for="imprint_page"><?php _e('Imprint page', 'shapepress-dsgvo') ?></label>
|
524 |
+
<select class="form-control" name="imprint_page" id="imprint_page">
|
525 |
+
<option value="0"><?php _e('Select', 'shapepress-dsgvo'); ?></option>
|
526 |
+
<?php foreach (get_pages(array('number' => 0)) as $key => $page): ?>
|
527 |
+
<option <?= selected($imprintPage == $page->ID) ?> value="<?= $page->ID ?>">
|
528 |
+
<?= $page->post_title ?>
|
529 |
+
</option>
|
530 |
+
<?php endforeach; ?>
|
531 |
+
</select>
|
532 |
+
</div>
|
533 |
+
<div class="form-group">
|
534 |
+
<?php if ($imprintPage == '0'): ?>
|
535 |
+
<small><?php _e('Create a page that uses the shortcode <code>[imprint]</code>.', 'shapepress-dsgvo') ?>
|
536 |
+
<a class="btn btn-secondary btn-block"
|
537 |
+
href="<?= SPDSGVOCreatePageAction::url(array('imprint_page' => '1')) ?>"><?php _e('Create page', 'shapepress-dsgvo') ?></a>
|
538 |
+
</small>
|
539 |
+
<?php elseif (!pageContainsString($imprintPage, 'imprint')): ?>
|
540 |
+
<small><?php _e('Attention: The shortcode <code>[imprint]</code> was not found on the page you selected.', 'shapepress-dsgvo') ?>
|
541 |
+
<a class="btn btn-secondary btn-block"
|
542 |
+
href="<?= get_edit_post_link($imprintPage) ?>"><?php _e('Edit page', 'shapepress-dsgvo') ?></a>
|
543 |
+
</small>
|
544 |
+
<?php else: ?>
|
545 |
+
<small class="form-text text-muted"><?= __('The page can also by edited and text could be extended by the editing the selected page with the Wordpress page editor like Gutenberg.','shapepress-dsgvo') ?></small>
|
546 |
+
<a class="btn btn-secondary btn-block"
|
547 |
+
href="<?= get_edit_post_link($imprintPage) ?>"><?php _e('Edit page', 'shapepress-dsgvo') ?></a>
|
548 |
+
<?php endif; ?>
|
549 |
+
</div>
|
550 |
+
<div class="form-group">
|
551 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
552 |
+
</div>
|
553 |
+
</form>
|
554 |
+
</div>
|
555 |
+
</div>
|
556 |
+
|
557 |
+
</div>
|
admin/tabs/v3/page-basics/class-sp-dsgvo-page-basics-action.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOPageBasicsAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'admin-page-basics';
|
6 |
+
|
7 |
+
|
8 |
+
|
9 |
+
|
10 |
+
public static function getDefaultOtherText()
|
11 |
+
{
|
12 |
+
return __("<strong>Service:</strong> Name of the service<br /><strong>Operator:</strong> Company, address, state<br /><strong>Privacy Policy:</strong> Link Privacy Policy<br /><strong>Privacy Shield:</strong> Link Privacy Shield (only required with US service providers)<br />", 'shapepress-dsgvo');
|
13 |
+
}
|
14 |
+
|
15 |
+
|
16 |
+
protected function run(){
|
17 |
+
$this->checkCSRF();
|
18 |
+
$this->requireAdmin();
|
19 |
+
|
20 |
+
SPDSGVOSettings::set('page_basics_hosting_provider', $this->get('page_basics_hosting_provider'));
|
21 |
+
SPDSGVOSettings::set('page_basics_other_provider_text', $this->get('otherProviderText'));
|
22 |
+
|
23 |
+
SPDSGVOSettings::set('page_basics_use_logfiles', $this->get('page_basics_use_logfiles'));
|
24 |
+
SPDSGVOSettings::set('page_basics_logfiles_life', $this->get('page_basics_logfiles_life'));
|
25 |
+
|
26 |
+
SPDSGVOSettings::set('page_basics_use_cdn', $this->get('page_basics_use_cdn'));
|
27 |
+
SPDSGVOSettings::set('page_basics_cdn_provider', $this->get('page_basics_cdn_provider'));
|
28 |
+
SPDSGVOSettings::set('page_basics_other_cdn_provider_text', $this->get('otherCdnProviderText'));
|
29 |
+
|
30 |
+
SPDSGVOSettings::set('page_basics_use_payment_provider', $this->get('page_basics_use_payment_provider'));
|
31 |
+
SPDSGVOSettings::set('page_basics_payment_provider', $this->get('page_basics_payment_provider'));
|
32 |
+
|
33 |
+
SPDSGVOSettings::set('page_basics_font_provider', $this->get('page_basics_font_provider'));
|
34 |
+
SPDSGVOSettings::set('page_basics_block_google_fonts', $this->get('page_basics_block_google_fonts'));
|
35 |
+
|
36 |
+
|
37 |
+
SPDSGVOSettings::set('page_basics_forms_contact', $this->get('page_basics_forms_contact'));
|
38 |
+
SPDSGVOSettings::set('page_basics_forms_application', $this->get('page_basics_forms_application'));
|
39 |
+
SPDSGVOSettings::set('page_basics_forms_contest', $this->get('page_basics_forms_contest'));
|
40 |
+
SPDSGVOSettings::set('page_basics_forms_registration', $this->get('page_basics_forms_registration'));
|
41 |
+
SPDSGVOSettings::set('page_basics_forms_comments', $this->get('page_basics_forms_comments'));
|
42 |
+
SPDSGVOSettings::set('page_basics_forms_comments_publish_type', $this->get('page_basics_forms_comments_publish_type'));
|
43 |
+
|
44 |
+
SPDSGVOSettings::set('page_basics_security_provider', $this->get('page_basics_security_provider'));
|
45 |
+
SPDSGVOSettings::set('page_basics_other_security_provider_text', $this->get('otherSecurityProviderText'));
|
46 |
+
|
47 |
+
SPDSGVOSettings::set('page_basics_embeddings', $this->get('page_basics_embeddings'));
|
48 |
+
|
49 |
+
if (isValidPremiumEdition()) {
|
50 |
+
SPDSGVOSettings::set('page_basics_use_newsletter_provider', $this->get('page_basics_use_newsletter_provider'));
|
51 |
+
SPDSGVOSettings::set('page_basics_newsletter_provider', $this->get('page_basics_newsletter_provider'));
|
52 |
+
SPDSGVOSettings::set('page_basics_other_newsletter_provider_text', $this->get('page_basics_other_newsletter_provider_text'));
|
53 |
+
}
|
54 |
+
|
55 |
+
|
56 |
+
$this->returnBack();
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
SPDSGVOPageBasicsAction::listen();
|
admin/tabs/v3/page-basics/class-sp-dsgvo-page-basics-tab.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOPageBasicsTab extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $title = 'Page Basics';
|
6 |
+
public $slug = 'page-basics';
|
7 |
+
public $isHidden = FALSE;
|
8 |
+
|
9 |
+
public function __construct(){
|
10 |
+
|
11 |
+
$this->title = __('Page Basics','shapepress-dsgvo');
|
12 |
+
}
|
13 |
+
|
14 |
+
public function page(){
|
15 |
+
include plugin_dir_path(__FILE__) .'page.php';
|
16 |
+
}
|
17 |
+
}
|
admin/tabs/v3/page-basics/page.php
ADDED
@@ -0,0 +1,467 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$isPremium = isValidPremiumEdition();
|
3 |
+
$isBlog = isValidBlogEdition();
|
4 |
+
$hasValidLicense = isValidPremiumEdition() || isValidBlogEdition();
|
5 |
+
|
6 |
+
?>
|
7 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
8 |
+
<input type="hidden" name="action" value="<?= SPDSGVOPageBasicsAction::getActionName() ?>">
|
9 |
+
<?php wp_nonce_field(SPDSGVOPageBasicsAction::getActionName() . '-nonce'); ?>
|
10 |
+
|
11 |
+
<div class="card-columns">
|
12 |
+
<!-- hosting -->
|
13 |
+
<div class="card">
|
14 |
+
<div class="card-header">
|
15 |
+
<h4 class="card-title"><?php _e('Hosting Provider', 'shapepress-dsgvo') ?></h4>
|
16 |
+
</div>
|
17 |
+
<div class="card-body">
|
18 |
+
<div class="form">
|
19 |
+
<input type="hidden" name="action" value="<?= SPDSGVOPageBasicsAction::getActionName() ?>">
|
20 |
+
<?php wp_nonce_field(SPDSGVOPageBasicsAction::getActionName() . '-nonce'); ?>
|
21 |
+
|
22 |
+
<div class="form-group">
|
23 |
+
<?php
|
24 |
+
$selectedHostingProvider = SPDSGVOSettings::get('page_basics_hosting_provider');
|
25 |
+
if (empty($selectedHostingProvider)) $selectedHostingProvider = array();
|
26 |
+
foreach (SPDSGVOConstants::getHostingProvider() as $key => $value)
|
27 |
+
{
|
28 |
+
$checked = in_array($key, $selectedHostingProvider); // hack initial value
|
29 |
+
spDsgvoWriteInput('switch', 'page_basics_hosting_provider_'.$key, 'page_basics_hosting_provider[]',
|
30 |
+
$checked ? $key : $key.'1',
|
31 |
+
__($value, 'shapepress-dsgvo'),
|
32 |
+
'',
|
33 |
+
'', false,'', $key);
|
34 |
+
}
|
35 |
+
?>
|
36 |
+
</div>
|
37 |
+
|
38 |
+
<div class="form-group <?= checked(in_array('other', $selectedHostingProvider)) ? 'spdsgvo-d-block' : 'spdsgvo-d-none' ?>"
|
39 |
+
id="container-other-provider">
|
40 |
+
<label><?php _e('Other Hosting Provider', 'shapepress-dsgvo') ?></label>
|
41 |
+
<small class="form-text text-muted"><?php _e('Please complete those services that you have included in your website but are not listed in the list. The privacy policy of the respective service provider can be found on the website of the provider. In order to determine whether the US service provider Privacy Shield is certified, a query can be made in the list provided at this link: <a href="https://www.privacyshield.gov/list" target="_blank">https://www.privacyshield.gov/list.</a>', 'shapepress-dsgvo') ?></small>
|
42 |
+
|
43 |
+
<?php
|
44 |
+
$otherProviderText = SPDSGVOSettings::get('page_basics_other_provider_text');
|
45 |
+
if (empty($otherProviderText)) $otherProviderText = SPDSGVOPageBasicsAction::getDefaultOtherText();
|
46 |
+
?>
|
47 |
+
<?php wp_editor($otherProviderText, 'otherProviderText', array('textarea_rows' => '10', 'drag_drop_upload' => 'false', 'teeny' => true, 'media_buttons' => false)); ?>
|
48 |
+
|
49 |
+
</div>
|
50 |
+
|
51 |
+
<div class="form-group">
|
52 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
53 |
+
</div>
|
54 |
+
</div>
|
55 |
+
</div>
|
56 |
+
</div>
|
57 |
+
|
58 |
+
<div class="card">
|
59 |
+
<div class="card-header">
|
60 |
+
<h4 class="card-title"><?php _e('Server Basics', 'shapepress-dsgvo') ?></h4>
|
61 |
+
</div>
|
62 |
+
<div class="card-body">
|
63 |
+
<div class="form" >
|
64 |
+
|
65 |
+
<?php
|
66 |
+
$useLogFiles = SPDSGVOSettings::get('page_basics_use_logfiles');
|
67 |
+
|
68 |
+
spDsgvoWriteInput('switch', '', 'page_basics_use_logfiles', $useLogFiles,
|
69 |
+
__('Usage of log files', 'shapepress-dsgvo'),
|
70 |
+
'',
|
71 |
+
__('Enable, if your hoster/server stores log files.','shapepress-dsgvo'));
|
72 |
+
|
73 |
+
?>
|
74 |
+
|
75 |
+
<div id="container-logfiles-life" class="<?= $useLogFiles == 1 ? '' : 'spdsgvo-d-none';?>">
|
76 |
+
<?php
|
77 |
+
|
78 |
+
spDsgvoWriteInput('text', '', 'page_basics_logfiles_life', SPDSGVOSettings::get('page_basics_logfiles_life'),
|
79 |
+
__('Storage life (days)', 'shapepress-dsgvo'),
|
80 |
+
__('e.g. 7','shapepress-dsgvo'),
|
81 |
+
__('Specify after how much days the files will be deleted.','shapepress-dsgvo'));
|
82 |
+
|
83 |
+
?>
|
84 |
+
</div>
|
85 |
+
|
86 |
+
<div class="form-group">
|
87 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
88 |
+
</div>
|
89 |
+
</div>
|
90 |
+
</div>
|
91 |
+
</div>
|
92 |
+
|
93 |
+
<!-- cdn -->
|
94 |
+
<div class="card">
|
95 |
+
<div class="card-header">
|
96 |
+
<h4 class="card-title"><?php _e('CDN Provider', 'shapepress-dsgvo') ?></h4>
|
97 |
+
</div>
|
98 |
+
<div class="card-body">
|
99 |
+
<div class="form">
|
100 |
+
|
101 |
+
<?php
|
102 |
+
$useCdnProvider = SPDSGVOSettings::get('page_basics_use_cdn');
|
103 |
+
|
104 |
+
spDsgvoWriteInput('switch', '', 'page_basics_use_cdn', $useCdnProvider,
|
105 |
+
__('Use of a CDN Server/Provider', 'shapepress-dsgvo'),
|
106 |
+
'',
|
107 |
+
__('Enable, if you use a CDN server for static content (CSS, Javascripts, Images,...).','shapepress-dsgvo'));
|
108 |
+
|
109 |
+
?>
|
110 |
+
|
111 |
+
<div class="form-group <?= $useCdnProvider == 1 ? 'spdsgvo-d-block' : 'spdsgvo-d-none';?>" id="container-basics-use-cdn">
|
112 |
+
<label><?php _e('CDN Provider', 'shapepress-dsgvo') ?></label>
|
113 |
+
<?php
|
114 |
+
|
115 |
+
$selectedCdnProvider = SPDSGVOSettings::get('page_basics_cdn_provider');
|
116 |
+
if (empty($selectedCdnProvider)) $selectedCdnProvider = array();
|
117 |
+
foreach (SPDSGVOConstants::getCDNServers() as $key => $value)
|
118 |
+
{
|
119 |
+
$checked = in_array($key, $selectedCdnProvider); // hack initial value
|
120 |
+
spDsgvoWriteInput('switch', 'page_basics_cdn_provider_'.$key, 'page_basics_cdn_provider[]',
|
121 |
+
$checked ? $key : $key.'1',
|
122 |
+
__($value, 'shapepress-dsgvo'),
|
123 |
+
'',
|
124 |
+
'', false,'', $key);
|
125 |
+
}
|
126 |
+
?>
|
127 |
+
|
128 |
+
<div id="container-other-cdn" class="form-table <?= checked(in_array('other', $selectedCdnProvider)) ? 'spdsgvo-d-block' : 'spdsgvo-d-none' ?>">
|
129 |
+
|
130 |
+
<label><?php _e('Other CDN Provider', 'shapepress-dsgvo') ?></label>
|
131 |
+
<small class="form-text text-muted"><?php _e('If you do not use any of the services proposed by us, you would need to complete the privacy policy for the service you use in this text box.', 'shapepress-dsgvo') ?></small>
|
132 |
+
|
133 |
+
<?php
|
134 |
+
$otherCdnProviderText = SPDSGVOSettings::get('page_basics_other_cdn_provider_text');
|
135 |
+
if (empty($otherCdnProviderText)) $otherCdnProviderText = SPDSGVOPageBasicsAction::getDefaultOtherText();
|
136 |
+
?>
|
137 |
+
<?php wp_editor($otherCdnProviderText, 'otherCdnProviderText', array('textarea_rows' => '10', 'drag_drop_upload' => 'false', 'teeny' => true, 'media_buttons' => false)); ?>
|
138 |
+
|
139 |
+
</div>
|
140 |
+
|
141 |
+
</div>
|
142 |
+
<div class="form-group">
|
143 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
144 |
+
</div>
|
145 |
+
</div>
|
146 |
+
</div>
|
147 |
+
</div>
|
148 |
+
|
149 |
+
<!-- payment -->
|
150 |
+
<div class="card">
|
151 |
+
<div class="card-header">
|
152 |
+
<h4 class="card-title"><?php _e('Webshop/Check Out Process', 'shapepress-dsgvo') ?></h4>
|
153 |
+
</div>
|
154 |
+
<div class="card-body">
|
155 |
+
<div class="form">
|
156 |
+
|
157 |
+
<div class="position-relative">
|
158 |
+
<?php spDsgvoWritePremiumOverlayIfInvalid($hasValidLicense); ?>
|
159 |
+
<?php
|
160 |
+
$usePaymentProvider = SPDSGVOSettings::get('page_basics_use_payment_provider', '0');
|
161 |
+
|
162 |
+
spDsgvoWriteInput('switch', '', 'page_basics_use_payment_provider', $usePaymentProvider,
|
163 |
+
__('Use of Payment Provider', 'shapepress-dsgvo'),
|
164 |
+
'',
|
165 |
+
__('Enable, if you use payment provider in your online shop.','shapepress-dsgvo'));
|
166 |
+
|
167 |
+
?>
|
168 |
+
|
169 |
+
<div class="form-group <?= $usePaymentProvider == 1 ? 'spdsgvo-d-block' : 'spdsgvo-d-none';?>" id="container-basics-use-payment-provider">
|
170 |
+
<label><?php _e('Payment Provider', 'shapepress-dsgvo') ?></label>
|
171 |
+
<?php
|
172 |
+
|
173 |
+
$selectedPaymentProvider = SPDSGVOSettings::get('page_basics_payment_provider');
|
174 |
+
if (empty($selectedPaymentProvider)) $selectedPaymentProvider = array();
|
175 |
+
foreach (SPDSGVOConstants::getPaymentProvider() as $key => $value)
|
176 |
+
{
|
177 |
+
$checked = in_array($key, $selectedPaymentProvider); // hack initial value
|
178 |
+
spDsgvoWriteInput('switch', 'page_basics_payment_provider_'.$key, 'page_basics_payment_provider[]',
|
179 |
+
$checked ? $key : $key.'1',
|
180 |
+
__($value, 'shapepress-dsgvo'),
|
181 |
+
'',
|
182 |
+
'', false,'', $key);
|
183 |
+
}
|
184 |
+
?>
|
185 |
+
|
186 |
+
|
187 |
+
</div>
|
188 |
+
<div class="form-group">
|
189 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
190 |
+
</div>
|
191 |
+
</div>
|
192 |
+
</div>
|
193 |
+
</div>
|
194 |
+
</div>
|
195 |
+
|
196 |
+
<!-- fonts -->
|
197 |
+
<div class="card">
|
198 |
+
<div class="card-header">
|
199 |
+
<h4 class="card-title"><?php _e('Fonts', 'shapepress-dsgvo') ?></h4>
|
200 |
+
</div>
|
201 |
+
<div class="card-body">
|
202 |
+
<div class="form" method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
203 |
+
|
204 |
+
<div class="form-group">
|
205 |
+
<small class="form-text text-muted"><?php _e('Specify which types of font frameworks/services are used. This information is required for the generation of a valid privacy policy.', 'shapepress-dsgvo') ?></small>
|
206 |
+
|
207 |
+
</div>
|
208 |
+
<div class="form-group">
|
209 |
+
<?php
|
210 |
+
$selectedFontProvider = SPDSGVOSettings::get('page_basics_font_provider');
|
211 |
+
if (empty($selectedFontProvider)) $selectedFontProvider = array();
|
212 |
+
foreach (SPDSGVOConstants::getFontServices() as $key => $value)
|
213 |
+
{
|
214 |
+
$checked = in_array($key, $selectedFontProvider); // hack initial value
|
215 |
+
spDsgvoWriteInput('switch', 'page_basics_font_provider_'.$key, 'page_basics_font_provider[]',
|
216 |
+
$checked ? $key : $key.'1',
|
217 |
+
$value,
|
218 |
+
'',
|
219 |
+
'', false,'', $key);
|
220 |
+
}
|
221 |
+
?>
|
222 |
+
</div>
|
223 |
+
<div id="container-block-google-fonts" class="<?= checked('1', SPDSGVOSettings::get('page_basics_use_google_fonts')) ? 'spdsgvo-d-block' : 'spdsgvo-d-none' ?>">
|
224 |
+
<?php
|
225 |
+
spDsgvoWriteInput('switch', ''.$key, 'page_basics_block_google_fonts]', SPDSGVOSettings::get('page_basics_use_google_fonts'),
|
226 |
+
__('Block Google Fonts', 'shapepress-dsgvo'),
|
227 |
+
'',
|
228 |
+
__('Block Google Fonts until the visitor opted-in.', 'shapepress-dsgvo'));
|
229 |
+
?>
|
230 |
+
</div>
|
231 |
+
<div class="form-group">
|
232 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
233 |
+
</div>
|
234 |
+
</div>
|
235 |
+
</div>
|
236 |
+
</div>
|
237 |
+
|
238 |
+
<!-- forms -->
|
239 |
+
<div class="card">
|
240 |
+
<div class="card-header">
|
241 |
+
<h4 class="card-title"><?php _e('Forms', 'shapepress-dsgvo') ?></h4>
|
242 |
+
</div>
|
243 |
+
<div class="card-body">
|
244 |
+
<div class="form">
|
245 |
+
|
246 |
+
<div class="form-group">
|
247 |
+
<small class="form-text text-muted"><?php _e('If your website use any kind of forms, check them to provide the texts in the privacy policy.', 'shapepress-dsgvo') ?></small>
|
248 |
+
</div>
|
249 |
+
|
250 |
+
<?php
|
251 |
+
spDsgvoWriteInput('switch', '', 'page_basics_forms_contact', SPDSGVOSettings::get('page_basics_forms_contact'),
|
252 |
+
__('Contact form', 'shapepress-dsgvo'),
|
253 |
+
'',
|
254 |
+
__('Enable if your website provides a contact form.', 'shapepress-dsgvo'));
|
255 |
+
?>
|
256 |
+
<?php
|
257 |
+
spDsgvoWriteInput('switch', '', 'page_basics_forms_application', SPDSGVOSettings::get('page_basics_forms_application'),
|
258 |
+
__('Application form', 'shapepress-dsgvo'),
|
259 |
+
'',
|
260 |
+
__('Enable if your website provides a application form.', 'shapepress-dsgvo'));
|
261 |
+
?>
|
262 |
+
|
263 |
+
<?php
|
264 |
+
spDsgvoWriteInput('switch', '', 'page_basics_forms_contest', SPDSGVOSettings::get('page_basics_forms_contest'),
|
265 |
+
__('Promotional contest or game form', 'shapepress-dsgvo'),
|
266 |
+
'',
|
267 |
+
__('Enable if your website provides a contest form.', 'shapepress-dsgvo'));
|
268 |
+
?>
|
269 |
+
|
270 |
+
<?php
|
271 |
+
spDsgvoWriteInput('switch', '', 'page_basics_forms_registration', SPDSGVOSettings::get('page_basics_forms_registration'),
|
272 |
+
__('Registration/Sign up form', 'shapepress-dsgvo'),
|
273 |
+
'',
|
274 |
+
__('Enable if your website provides your visitors the possibility to sign up. Also during ordering process.', 'shapepress-dsgvo'));
|
275 |
+
?>
|
276 |
+
<?php
|
277 |
+
spDsgvoWriteInput('switch', '', 'page_basics_forms_comments', SPDSGVOSettings::get('page_basics_forms_comments'),
|
278 |
+
__('Comments form', 'shapepress-dsgvo'),
|
279 |
+
'',
|
280 |
+
__('Enable if your visitor can comment your posts.', 'shapepress-dsgvo'));
|
281 |
+
?>
|
282 |
+
|
283 |
+
<div class="container-basics-forms_comments <?= checked('1', SPDSGVOSettings::get('page_basics_forms_comments')) ? 'spdsgvo-d-block' : 'spdsgvo-d-none' ?>">
|
284 |
+
|
285 |
+
<div class="form-group">
|
286 |
+
<label><?php _e('Which personal data of the website visitor will be published in a commentary?', 'shapepress-dsgvo') ?></label>
|
287 |
+
<?php
|
288 |
+
spDsgvoWriteInput('radio', 'page_basics_forms_comments_name_comment', 'page_basics_forms_comments_publish_type',
|
289 |
+
SPDSGVOSettings::get('page_basics_forms_comments_publish_type'),
|
290 |
+
__('Name and comment', 'shapepress-dsgvo'),
|
291 |
+
'',
|
292 |
+
'', false, '', 'name_comment');
|
293 |
+
?>
|
294 |
+
<?php
|
295 |
+
spDsgvoWriteInput('radio', 'page_basics_forms_comments_nick_comment', 'page_basics_forms_comments_publish_type',
|
296 |
+
SPDSGVOSettings::get('page_basics_forms_comments_publish_type'),
|
297 |
+
__('Nick and comment', 'shapepress-dsgvo'),
|
298 |
+
'',
|
299 |
+
'', false, '', 'nick_comment');
|
300 |
+
?>
|
301 |
+
|
302 |
+
</div>
|
303 |
+
</div>
|
304 |
+
|
305 |
+
<div class="form-group">
|
306 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
307 |
+
</div>
|
308 |
+
</div>
|
309 |
+
</div>
|
310 |
+
</div>
|
311 |
+
|
312 |
+
<!-- security services -->
|
313 |
+
<div class="card">
|
314 |
+
<div class="card-header">
|
315 |
+
<h4 class="card-title"><?php _e('Captcha Services', 'shapepress-dsgvo') ?></h4>
|
316 |
+
</div>
|
317 |
+
<div class="card-body">
|
318 |
+
<div class="form">
|
319 |
+
|
320 |
+
<div class="form-group">
|
321 |
+
<small class="form-text text-muted"> <?php _e('Do you use Captcha services? E.g. as part of forms for preventing entries by bots?', 'shapepress-dsgvo') ?></small>
|
322 |
+
</div>
|
323 |
+
|
324 |
+
<div class="form-group">
|
325 |
+
|
326 |
+
<?php
|
327 |
+
$selectedSecurityProvider = SPDSGVOSettings::get('page_basics_security_provider');
|
328 |
+
if (empty($selectedSecurityProvider)) $selectedSecurityProvider = array();
|
329 |
+
foreach (SPDSGVOConstants::getSecurityServices() as $key => $value)
|
330 |
+
{
|
331 |
+
$checked = in_array($key, $selectedSecurityProvider); // hack initial value
|
332 |
+
spDsgvoWriteInput('switch', 'page_basics_security_provider_'.$key, 'page_basics_security_provider[]',
|
333 |
+
$checked ? $key : $key.'1',
|
334 |
+
$value,
|
335 |
+
'',
|
336 |
+
'', false,'', $key);
|
337 |
+
}
|
338 |
+
?>
|
339 |
+
|
340 |
+
</div>
|
341 |
+
|
342 |
+
<div id="container-other-security" class="form-table <?= checked(in_array('other', $selectedSecurityProvider)) ? 'spdsgvo-d-block' : 'spdsgvo-d-none' ?>">
|
343 |
+
|
344 |
+
<div class="form-group">
|
345 |
+
<small class="text-muted form-text"><?php _e('Please complete those services that you have included in your website but are not listed in the list. The privacy policy of the respective service provider can be found on the website of the provider. In order to determine whether the US service provider Privacy Shield is certified, a query can be made in the list provided at this link: <a href="https://www.privacyshield.gov/list" target="_blank">https://www.privacyshield.gov/list</a>.', 'shapepress-dsgvo') ?></small>
|
346 |
+
</div>
|
347 |
+
<div class="form-group">
|
348 |
+
<?php
|
349 |
+
$otherSecurityProviderText = SPDSGVOSettings::get('page_basics_other_security_provider_text');
|
350 |
+
if (empty($otherSecurityProviderText)) $otherSecurityProviderText = SPDSGVOPageBasicsAction::getDefaultOtherText();
|
351 |
+
?>
|
352 |
+
<?php wp_editor($otherSecurityProviderText, 'otherSecurityProviderText', array('textarea_rows' => '10', 'drag_drop_upload' => 'false', 'teeny' => true, 'media_buttons' => false)); ?>
|
353 |
+
</div>
|
354 |
+
|
355 |
+
</div>
|
356 |
+
|
357 |
+
<div class="form-group">
|
358 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
359 |
+
</div>
|
360 |
+
</div>
|
361 |
+
</div>
|
362 |
+
</div>
|
363 |
+
|
364 |
+
<!-- embeddings -->
|
365 |
+
<div class="card">
|
366 |
+
<div class="card-header">
|
367 |
+
<h4 class="card-title"><?php _e('Embeddings', 'shapepress-dsgvo') ?></h4>
|
368 |
+
</div>
|
369 |
+
<div class="card-body">
|
370 |
+
<div class="form" method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
371 |
+
|
372 |
+
<div class="form-group">
|
373 |
+
<small class="form-text text-muted"><?php _e('Specify which embeddings are used. This information is required for the generation of a valid privacy policy. Important: Opt-In functionality for these embeddings will come soon and is currently not supported.', 'shapepress-dsgvo') ?></small>
|
374 |
+
|
375 |
+
</div>
|
376 |
+
<div class="form-group">
|
377 |
+
<?php
|
378 |
+
$selectedEmbeddings = SPDSGVOSettings::get('page_basics_embeddings');
|
379 |
+
if (empty($selectedEmbeddings)) $selectedEmbeddings = array();
|
380 |
+
foreach (SPDSGVOConstants::getEmbeddingIntegrations() as $key => $value)
|
381 |
+
{
|
382 |
+
$checked = in_array($key, $selectedEmbeddings); // hack initial value
|
383 |
+
spDsgvoWriteInput('switch', 'page_basics_embeddings_'.$key, 'page_basics_embeddings[]',
|
384 |
+
$checked ? $key : $key.'1',
|
385 |
+
$value,
|
386 |
+
'',
|
387 |
+
'', false,'', $key);
|
388 |
+
}
|
389 |
+
?>
|
390 |
+
</div>
|
391 |
+
<div id="container-block-google-fonts" class="<?= checked('1', SPDSGVOSettings::get('page_basics_use_google_fonts')) ? 'spdsgvo-d-block' : 'spdsgvo-d-none' ?>">
|
392 |
+
<?php
|
393 |
+
spDsgvoWriteInput('switch', ''.$key, 'page_basics_block_google_fonts]', SPDSGVOSettings::get('page_basics_use_google_fonts'),
|
394 |
+
__('Block Google Fonts', 'shapepress-dsgvo'),
|
395 |
+
'',
|
396 |
+
__('Block Google Fonts until the visitor opted-in.', 'shapepress-dsgvo'));
|
397 |
+
?>
|
398 |
+
</div>
|
399 |
+
<div class="form-group">
|
400 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
401 |
+
</div>
|
402 |
+
</div>
|
403 |
+
</div>
|
404 |
+
</div>
|
405 |
+
|
406 |
+
<!-- newsletter service -->
|
407 |
+
<div class="card">
|
408 |
+
<div class="card-header">
|
409 |
+
<h4 class="card-title"><?php _e('Newsletter Services', 'shapepress-dsgvo') ?></h4>
|
410 |
+
</div>
|
411 |
+
<div class="card-body">
|
412 |
+
<div class="position-relative">
|
413 |
+
<?php spDsgvoWritePremiumOverlayIfInvalid($isPremium); ?>
|
414 |
+
<div class="form" method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
415 |
+
|
416 |
+
<?php
|
417 |
+
$useNewsletterProvider = SPDSGVOSettings::get('page_basics_use_newsletter_provider', '0');
|
418 |
+
|
419 |
+
spDsgvoWriteInput('switch', '', 'page_basics_use_newsletter_provider', $useNewsletterProvider,
|
420 |
+
__('Use of Newsletter Service', 'shapepress-dsgvo'),
|
421 |
+
'',
|
422 |
+
__('Enable, if you use newsletter provider/services. Important: Add a checkbox wherever you have your sign-up to the newsletter to request the users confirmation.','shapepress-dsgvo'));
|
423 |
+
|
424 |
+
?>
|
425 |
+
|
426 |
+
<div id="container-basics-use-newsletter" <div class="<?= $useNewsletterProvider == 1 ? 'spdsgvo-d-block' : 'spdsgvo-d-none';?>">
|
427 |
+
<div class="form-group">
|
428 |
+
<?php
|
429 |
+
$selectedNewsletter = SPDSGVOSettings::get('page_basics_newsletter_provider');
|
430 |
+
if (empty($selectedNewsletter)) $selectedNewsletter = array();
|
431 |
+
foreach (SPDSGVOConstants::getNewsletterIntegrations() as $key => $value)
|
432 |
+
{
|
433 |
+
$checked = in_array($key, $selectedNewsletter); // hack initial value
|
434 |
+
spDsgvoWriteInput('switch', 'page_basics_newsletter_'.$key, 'page_basics_newsletter_provider[]',
|
435 |
+
$checked ? $key : $key.'1',
|
436 |
+
$value,
|
437 |
+
'',
|
438 |
+
'', false,'', $key);
|
439 |
+
}
|
440 |
+
?>
|
441 |
+
</div>
|
442 |
+
|
443 |
+
<div id="container-other-newsletter" class="form-table <?= checked(in_array('other', $selectedNewsletter)) ? 'spdsgvo-d-block' : 'spdsgvo-d-none' ?>">
|
444 |
+
|
445 |
+
<div class="form-group">
|
446 |
+
<small class="text-muted form-text"><?php _e('Please complete those services that you have included in your website but are not listed in the list. The privacy policy of the respective service provider can be found on the website of the provider. In order to determine whether the US service provider Privacy Shield is certified, a query can be made in the list provided at this link: <a href="https://www.privacyshield.gov/list" target="_blank">https://www.privacyshield.gov/list</a>.', 'shapepress-dsgvo') ?></small>
|
447 |
+
</div>
|
448 |
+
<div class="form-group">
|
449 |
+
<?php
|
450 |
+
$otherNewsletterText = SPDSGVOSettings::get('page_basics_other_newsletter_provider_text');
|
451 |
+
if (empty($otherNewsletterText)) $otherNewsletterText = SPDSGVOPageBasicsAction::getDefaultOtherText();
|
452 |
+
?>
|
453 |
+
<?php wp_editor($otherNewsletterText, 'page_basics_other_newsletter_provider_text', array('textarea_rows' => '10', 'drag_drop_upload' => 'false', 'teeny' => true, 'media_buttons' => false)); ?>
|
454 |
+
</div>
|
455 |
+
|
456 |
+
</div>
|
457 |
+
</div>
|
458 |
+
<div class="form-group">
|
459 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
460 |
+
</div>
|
461 |
+
</div>
|
462 |
+
</div>
|
463 |
+
</div>
|
464 |
+
</div>
|
465 |
+
|
466 |
+
</div>
|
467 |
+
</form>
|
admin/tabs/v3/popup-notice/class-sp-dsgvo-cookie-notice-action.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOCookieNoticeAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'admin-cookie-notice';
|
6 |
+
|
7 |
+
protected function run(){
|
8 |
+
$this->checkCSRF();
|
9 |
+
$this->requireAdmin();
|
10 |
+
|
11 |
+
|
12 |
+
SPDSGVOSettings::set('cookie_notice_display', $this->get('cookie_notice_display', 'none'));
|
13 |
+
SPDSGVOSettings::set('show_notice_on_close', $this->get('show_notice_on_close', '0'));
|
14 |
+
SPDSGVOSettings::set('force_cookie_info', $this->get('force_cookie_info', '0'));
|
15 |
+
SPDSGVOSettings::set('cookie_notice_text', $this->get('cookie_notice_text', ''));
|
16 |
+
SPDSGVOSettings::set('cn_cookie_validity', $this->get('cn_cookie_validity', '86400'));
|
17 |
+
SPDSGVOSettings::set('cookie_version', $this->get('cookie_version', ''));
|
18 |
+
SPDSGVOSettings::set('cn_position', $this->get('cn_position', 'bottom'));
|
19 |
+
SPDSGVOSettings::set('cn_animation', $this->get('cn_animation', 'none'));
|
20 |
+
SPDSGVOSettings::set('cn_size_text', $this->get('cn_size_text', 'auto'));
|
21 |
+
SPDSGVOSettings::set('popup_dark_mode', $this->get('popup_dark_mode', '0'));
|
22 |
+
|
23 |
+
SPDSGVOSettings::set('cn_show_dsgvo_icon', $this->get('cn_show_dsgvo_icon', '0'));
|
24 |
+
|
25 |
+
|
26 |
+
SPDSGVOSettings::set('cn_background_color', $this->get('cn_background_color', '#333333'));
|
27 |
+
SPDSGVOSettings::set('cn_text_color', $this->get('cn_text_color', '#ffffff'));
|
28 |
+
SPDSGVOSettings::set('cn_background_color_button', $this->get('cn_background_color_button', '#F3F3F3'));
|
29 |
+
SPDSGVOSettings::set('cn_text_color_button', $this->get('cn_text_color_button', '#333333'));
|
30 |
+
SPDSGVOSettings::set('cn_custom_css_container', $this->get('cn_custom_css_container', ''));
|
31 |
+
SPDSGVOSettings::set('cn_custom_css_text', $this->get('cn_custom_css_text', ''));
|
32 |
+
SPDSGVOSettings::set('cn_custom_css_buttons', $this->get('cn_custom_css_buttons', ''));
|
33 |
+
|
34 |
+
|
35 |
+
SPDSGVOSettings::set('cn_height_container', $this->get('cn_height_container', 'auto'));
|
36 |
+
|
37 |
+
SPDSGVOSettings::set('cn_use_overlay', $this->get('cn_use_overlay', '0'));
|
38 |
+
|
39 |
+
|
40 |
+
SPDSGVOSettings::set('logo_image_id', $this->get('logo_image_id', ''));
|
41 |
+
SPDSGVOSettings::set('cookie_style', $this->get('cookie_style', '00'));
|
42 |
+
|
43 |
+
|
44 |
+
SPDSGVOCacheManager::clearCaches();
|
45 |
+
$this->returnBack();
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
SPDSGVOCookieNoticeAction::listen();
|
admin/tabs/{cookie-notice → v3/popup-notice}/class-sp-dsgvo-cookie-notice-tab.php
RENAMED
@@ -1,17 +1,17 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOCookieNoticeTab extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
public $title = 'Cookie Notice';
|
6 |
-
public $slug = 'cookie-notice';
|
7 |
-
public $isHidden = FALSE;
|
8 |
-
|
9 |
-
public function __construct(){
|
10 |
-
|
11 |
-
|
12 |
-
}
|
13 |
-
|
14 |
-
public function page(){
|
15 |
-
include plugin_dir_path(__FILE__) .'page.php';
|
16 |
-
}
|
17 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOCookieNoticeTab extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $title = 'Cookie Notice / Popup';
|
6 |
+
public $slug = 'cookie-notice';
|
7 |
+
public $isHidden = FALSE;
|
8 |
+
|
9 |
+
public function __construct(){
|
10 |
+
|
11 |
+
//$this->title = __('Cookie Notice / Popup','shapepress-dsgvo');
|
12 |
+
}
|
13 |
+
|
14 |
+
public function page(){
|
15 |
+
include plugin_dir_path(__FILE__) .'page.php';
|
16 |
+
}
|
17 |
+
}
|
admin/tabs/v3/popup-notice/page.php
ADDED
@@ -0,0 +1,375 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$isPremium = isValidPremiumEdition();
|
3 |
+
$isBlog = isValidBlogEdition();
|
4 |
+
$hasValidLicense = isValidPremiumEdition() || isValidBlogEdition();
|
5 |
+
|
6 |
+
?>
|
7 |
+
|
8 |
+
<div class="card-columns">
|
9 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
10 |
+
<input type="hidden" name="action" value="<?= SPDSGVOCookieNoticeAction::getActionName();?>">
|
11 |
+
<?php wp_nonce_field(SPDSGVOCookieNoticeAction::getActionName() . '-nonce'); ?>
|
12 |
+
<!-- notice/popup general -->
|
13 |
+
<div class="card">
|
14 |
+
<div class="card-header">
|
15 |
+
<h4 class="card-title"><?php _e('Common Settings Cookie Notice/Popup', 'shapepress-dsgvo') ?></h4>
|
16 |
+
</div>
|
17 |
+
<div class="card-body">
|
18 |
+
<div class="form">
|
19 |
+
|
20 |
+
<div class="form-group">
|
21 |
+
<label for="cookie_notice_display"><?php _e('Cookie Notice/Popup type', 'shapepress-dsgvo') ?></label>
|
22 |
+
<select class="form-control" id="cookie_notice_display" name="cookie_notice_display">
|
23 |
+
<option value="none" <?php if (SPDSGVOSettings::get('cookie_notice_display') == 'no_popup') {
|
24 |
+
echo 'selected';
|
25 |
+
} ?>><?php _e('No notice, no popup, no cookie selection.', 'shapepress-dsgvo') ?></option>
|
26 |
+
<option value="cookie_notice" <?php if (SPDSGVOSettings::get('cookie_notice_display') == 'cookie_notice') {
|
27 |
+
echo 'selected';
|
28 |
+
} ?>><?php _e('Cookie Notice', 'shapepress-dsgvo') ?></option>
|
29 |
+
|
30 |
+
<option value="policy_popup" <?php if (SPDSGVOSettings::get('cookie_notice_display') == 'policy_popup') {
|
31 |
+
echo 'selected';
|
32 |
+
} ?>><?php _e('Cookie Popup', 'shapepress-dsgvo') ?></option>
|
33 |
+
</select><!-- #cookie_notice_display -->
|
34 |
+
<small class="form-text text-muted"><?= __('Defines what the user gets shown when he visits the page. None means this feature is deactivated an no cookie selection can be made. You can show the popup again by giving any html element the class "sp-dsgvo-show-privacy-popup". If your visitor clicks on it, the popup gets shown again and the visitor can change his settings.', 'shapepress-dsgvo') ?></small>
|
35 |
+
</div>
|
36 |
+
|
37 |
+
<?php
|
38 |
+
spDsgvoWriteInput('toggle', '', 'show_notice_on_close', SPDSGVOSettings::get('show_notice_on_close'),
|
39 |
+
__('Show cookie notice when popup gets closed without choice', 'shapepress-dsgvo'),
|
40 |
+
'',
|
41 |
+
__('Show the cookie notice if the user does not make a choice because he closes the popup.', 'shapepress-dsgvo'));
|
42 |
+
|
43 |
+
?>
|
44 |
+
|
45 |
+
<?php
|
46 |
+
spDsgvoWriteInput('toggle', '', 'force_cookie_info', SPDSGVOSettings::get('force_cookie_info'),
|
47 |
+
__('Show cookie notice/popup in any case (though not required)', 'shapepress-dsgvo'),
|
48 |
+
'',
|
49 |
+
__('Show the cookie notice/popup although it is not necessary because no integrations are used. Also show technically necessary integrations and integrations like matomo/piwik/WP Statistics,.. for which no opt-in by your user is required by GDPR. If you have not any integrations enabled, only the popup with an OK button will be shown.', 'shapepress-dsgvo'));
|
50 |
+
|
51 |
+
?>
|
52 |
+
|
53 |
+
<div class="form-group">
|
54 |
+
<?php $cnCookieValidity = SPDSGVOSettings::get('cn_cookie_validity'); ?>
|
55 |
+
<label for="cn_cookie_validity"><?php _e('Cookie lifetime', 'shapepress-dsgvo') ?></label>
|
56 |
+
<select class="form-control" name="cn_cookie_validity" id="cn_cookie_validity">
|
57 |
+
<option value="86400" <?= selected($cnCookieValidity == 86400) ?>>1
|
58 |
+
<?php _e('Day', 'shapepress-dsgvo') ?></option>
|
59 |
+
<option value="604800" <?= selected($cnCookieValidity == 604800) ?>>1
|
60 |
+
<?php _e('Week', 'shapepress-dsgvo') ?></option>
|
61 |
+
<option value="2592000"
|
62 |
+
<?= selected($cnCookieValidity == 2592000) ?>>1 <?php _e('Month',
|
63 |
+
'shapepress-dsgvo') ?></option>
|
64 |
+
<option value="7862400"
|
65 |
+
<?= selected($cnCookieValidity == 7862400) ?>>2 <?php _e('Month',
|
66 |
+
'shapepress-dsgvo') ?></option>
|
67 |
+
<option value="15811200"
|
68 |
+
<?= selected($cnCookieValidity == 15811200) ?>>6 <?php _e('Month',
|
69 |
+
'shapepress-dsgvo') ?></option>
|
70 |
+
<option value="31536000"
|
71 |
+
<?= selected($cnCookieValidity == 31536000) ?>>1 <?php _e('Year',
|
72 |
+
'shapepress-dsgvo') ?></option>
|
73 |
+
</select>
|
74 |
+
<small class="form-text text-muted"><?php _e('For this period, the cookie gets stored. After this period your visitors have to make the cookie choice again.', 'shapepress-dsgvo') ?></small>
|
75 |
+
</div>
|
76 |
+
|
77 |
+
|
78 |
+
|
79 |
+
<?php
|
80 |
+
spDsgvoWriteInput('text', '', 'cookie_version', SPDSGVOSettings::get('cookie_version'),
|
81 |
+
__('Cookie version', 'shapepress-dsgvo'),
|
82 |
+
'',
|
83 |
+
'', true, '', '1', false);
|
84 |
+
|
85 |
+
?>
|
86 |
+
|
87 |
+
<div class="form-group">
|
88 |
+
<input id="btnIncreaseCookieVersion" type="button" class="btn btn-outline-primary btn-block" value="<?php _e('Refresh/Update Cookie Version', 'shapepress-dsgvo') ?>" />
|
89 |
+
<small class="form-text text-muted"><?php _e('If you have made changes at your cookie settings (style, integrations,..) you can force your visitors to make a choice again when you increase the version.', 'shapepress-dsgvo') ?></small>
|
90 |
+
</div>
|
91 |
+
|
92 |
+
<div class="form-group">
|
93 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
94 |
+
</div>
|
95 |
+
</div>
|
96 |
+
</div>
|
97 |
+
</div>
|
98 |
+
|
99 |
+
<! -- popup styling -->
|
100 |
+
<div class="card">
|
101 |
+
<div class="card-header">
|
102 |
+
<h4 class="card-title"><?php _e('Cookie Popup customization', 'shapepress-dsgvo') ?></h4>
|
103 |
+
</div>
|
104 |
+
<div class="card-body">
|
105 |
+
<div class="form">
|
106 |
+
|
107 |
+
<?php
|
108 |
+
spDsgvoWriteInput('toggle', '', 'popup_dark_mode', SPDSGVOSettings::get('popup_dark_mode'),
|
109 |
+
__('Enable Dark Mode of the popup', 'shapepress-dsgvo'),
|
110 |
+
'',
|
111 |
+
__('Shows the popup in dark colors.', 'shapepress-dsgvo'));
|
112 |
+
|
113 |
+
?>
|
114 |
+
|
115 |
+
|
116 |
+
<?php
|
117 |
+
$src = '';
|
118 |
+
$img_id = '';
|
119 |
+
if (SPDSGVOSettings::get('logo_image_id', '') != '') {
|
120 |
+
$img_id = SPDSGVOSettings::get('logo_image_id');
|
121 |
+
$src = wp_get_attachment_url(intval($img_id));
|
122 |
+
}
|
123 |
+
if (empty($src)) $src= sp_dsgvo_URL . 'public/images/legalwebio-icon.png';
|
124 |
+
?>
|
125 |
+
<div class="form-group dsgvo-image-upload">
|
126 |
+
<label><?php _e('Popup header logo', 'shapepress-dsgvo') ?></label>
|
127 |
+
<small class="form-text text-muted"><?php _e('We recommend to use a square image.', 'shapepress-dsgvo') ?></small>
|
128 |
+
<div class="image-preview-wrapper d-flex justify-content-center pb-2" >
|
129 |
+
<img id='logo_image-preview' class="image-preview mb-3" src='<?php echo $src; ?>'
|
130 |
+
style="height: 50px">
|
131 |
+
</div>
|
132 |
+
<div class="position-relative w-100">
|
133 |
+
|
134 |
+
<input id="logo_upload_image_button" type="button"
|
135 |
+
class="btn btn-secondary btn-block"
|
136 |
+
value="<?php _e('Upload image', 'shapepress-dsgvo'); ?>"/>
|
137 |
+
<input type='hidden' class="image-id" name='logo_image_id' id='logo_image_id'
|
138 |
+
value='<?php echo $img_id; ?>'>
|
139 |
+
</div>
|
140 |
+
</div><!-- .dsgvo-image-upload -->
|
141 |
+
<div class="form-group mt-5">
|
142 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
143 |
+
</div>
|
144 |
+
</div>
|
145 |
+
</div>
|
146 |
+
</div>
|
147 |
+
|
148 |
+
<! -- notice styling -->
|
149 |
+
<div class="card">
|
150 |
+
<div class="card-header">
|
151 |
+
<h4 class="card-title"><?php _e('Cookie Notice customization', 'shapepress-dsgvo') ?></h4>
|
152 |
+
</div>
|
153 |
+
<div class="card-body">
|
154 |
+
<div class="form">
|
155 |
+
|
156 |
+
|
157 |
+
<div class="position-relative">
|
158 |
+
|
159 |
+
<div class="form-group">
|
160 |
+
<label for="cookie_style"><?php _e('Cookie notice style', 'shapepress-dsgvo') ?></label>
|
161 |
+
|
162 |
+
<?php // todo: set names for styles, add default style?>
|
163 |
+
<?php $cnCookieStyle = SPDSGVOSettings::get('cookie_style'); ?>
|
164 |
+
<select class="form-control" id="cookie_style" name="cookie_style"
|
165 |
+
<?= $hasValidLicense == false ? 'disabled' : ''; ?>>
|
166 |
+
<option value="00" <?= selected($cnCookieStyle == '00') ?>><?php _e('Default', 'shapepress-dsgvo') ?></option>
|
167 |
+
<option value="01" <?= selected($cnCookieStyle == '01') ?>>1</option>
|
168 |
+
<option value="02" <?= selected($cnCookieStyle == '02') ?>>2</option>
|
169 |
+
<option value="03" <?= selected($cnCookieStyle == '03') ?>>3</option>
|
170 |
+
<option value="04" <?= selected($cnCookieStyle == '04') ?>>4</option>
|
171 |
+
<option value="05" <?= selected($cnCookieStyle == '05') ?>>5</option>
|
172 |
+
<option value="06" <?= selected($cnCookieStyle == '06') ?>>6</option>
|
173 |
+
<option value="07" <?= selected($cnCookieStyle == '07') ?>>7</option>
|
174 |
+
<option value="08" <?= selected($cnCookieStyle == '08') ?>>8</option>
|
175 |
+
<option value="09" <?= selected($cnCookieStyle == '09') ?>>9</option>
|
176 |
+
<option value="10" <?= selected($cnCookieStyle == '10') ?>>10</option>
|
177 |
+
<option value="11" <?= selected($cnCookieStyle == '11') ?>>11</option>
|
178 |
+
<option value="12" <?= selected($cnCookieStyle == '12') ?>>12</option>
|
179 |
+
<!--
|
180 |
+
<option value="13" <?= selected($cnCookieStyle == '13') ?>>13</option>
|
181 |
+
<option value="14" <?= selected($cnCookieStyle == '14') ?>>14</option>
|
182 |
+
-->
|
183 |
+
</select>
|
184 |
+
<small class="form-text text-muted"><?= __('Choose one of our cookie notice style templates.', 'shapepress-dsgvo') ?></small>
|
185 |
+
|
186 |
+
</div>
|
187 |
+
|
188 |
+
<div class="form-group">
|
189 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie1.png') ?>"
|
190 |
+
class="cookie-style-admin-show--01">
|
191 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie2.png') ?>"
|
192 |
+
class="cookie-style-admin-show--02">
|
193 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie3.png') ?>"
|
194 |
+
class="cookie-style-admin-show--03">
|
195 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie4.png') ?>"
|
196 |
+
class="cookie-style-admin-show--04">
|
197 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie5.png') ?>"
|
198 |
+
class="cookie-style-admin-show--05">
|
199 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie6.png') ?>"
|
200 |
+
class="cookie-style-admin-show--06">
|
201 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie7.png') ?>"
|
202 |
+
class="cookie-style-admin-show--07">
|
203 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie8.png') ?>"
|
204 |
+
class="cookie-style-admin-show--08">
|
205 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie9.png') ?>"
|
206 |
+
class="cookie-style-admin-show--09">
|
207 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie10.png') ?>"
|
208 |
+
class="cookie-style-admin-show--10">
|
209 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie11.png') ?>"
|
210 |
+
class="cookie-style-admin-show--11">
|
211 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie12.png') ?>"
|
212 |
+
class="cookie-style-admin-show--12">
|
213 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie13.png') ?>"
|
214 |
+
class="cookie-style-admin-show--13">
|
215 |
+
<img src="<?php echo SPDSGVO::pluginURI('admin\images\cookies\Cookie14.png') ?>"
|
216 |
+
class="cookie-style-admin-show--14">
|
217 |
+
</div>
|
218 |
+
</div>
|
219 |
+
<div class="form-group">
|
220 |
+
<?php
|
221 |
+
spDsgvoWriteInput('textarea', '', 'cookie_notice_text',
|
222 |
+
trim(SPDSGVOSettings::get('cookie_notice_text')),
|
223 |
+
__('Cookie Notice text', 'shapepress-dsgvo'),
|
224 |
+
__('A message text', 'shapepress-dsgvo'),
|
225 |
+
__('This text gets displayed within the cookie notice. If you use WPML you can translate these inputs via WPML String Translations.', 'shapepress-dsgvo'), false);
|
226 |
+
?>
|
227 |
+
<small class="form-text text-warning"><?= __('Warning: If you change this text by your own you risk not be confirm with the GDPR.', 'shapepress-dsgvo')?></small>
|
228 |
+
</div>
|
229 |
+
|
230 |
+
<div class="form-group">
|
231 |
+
<?php $cnNoticePosition = SPDSGVOSettings::get('cn_position'); ?>
|
232 |
+
<label for="cn_position"><?php _e('Position:', 'shapepress-dsgvo') ?></label>
|
233 |
+
<select class="form-control" name="cn_position" id="cn_position">
|
234 |
+
<option value="top" <?= selected($cnNoticePosition == 'top') ?>><?php _e('On top',
|
235 |
+
'shapepress-dsgvo') ?></option>
|
236 |
+
<option value="bottom"
|
237 |
+
<?= selected($cnNoticePosition == 'bottom') ?>><?php _e('Bottom',
|
238 |
+
'shapepress-dsgvo') ?></option>
|
239 |
+
</select>
|
240 |
+
<small class="form-text text-muted"><?php _e('Specifies the location where the cookie notice should be displayed.', 'shapepress-dsgvo') ?></small>
|
241 |
+
</div>
|
242 |
+
|
243 |
+
<div class="form-group">
|
244 |
+
<?php $cnNoticeAnimation = SPDSGVOSettings::get('cn_animation'); ?>
|
245 |
+
<label for="cn_animation"><?php _e('Animation', 'shapepress-dsgvo') ?></label>
|
246 |
+
<select class="form-control" name="cn_animation" id="cn_animation">
|
247 |
+
<option value="none" <?= selected($cnNoticeAnimation == 'none') ?>><?php _e('None',
|
248 |
+
'shapepress-dsgvo') ?></option>
|
249 |
+
<option value="fade"
|
250 |
+
<?= selected($cnNoticeAnimation == 'fade') ?>><?php _e('fade',
|
251 |
+
'shapepress-dsgvo') ?></option>
|
252 |
+
<option value="hide"
|
253 |
+
<?= selected($cnNoticeAnimation == 'hide') ?>><?php _e('hide',
|
254 |
+
'shapepress-dsgvo') ?></option>
|
255 |
+
</select>
|
256 |
+
<small class="form-text text-muted"><?php _e('Animation when accepting the cookie message.', 'shapepress-dsgvo') ?></small>
|
257 |
+
</div>
|
258 |
+
|
259 |
+
<div class="form-group">
|
260 |
+
<label for="cn_size_text"><?php _e('Font size', 'shapepress-dsgvo') ?></label>
|
261 |
+
|
262 |
+
<?php $cnSizeText = SPDSGVOSettings::get('cn_size_text'); ?>
|
263 |
+
<select class="form-control" name="cn_size_text"
|
264 |
+
id="cn_size_text">
|
265 |
+
<option value="inherit" <?= selected($cnSizeText == 'inherit') ?>><?php _e('Default',
|
266 |
+
'shapepress-dsgvo') ?></option>
|
267 |
+
<option value="11px" <?= selected($cnSizeText == '11px') ?>>11px</option>
|
268 |
+
<option value="12px" <?= selected($cnSizeText == '12px') ?>>12px</option>
|
269 |
+
<option value="13px" <?= selected($cnSizeText == '13px') ?>>13px</option>
|
270 |
+
<option value="14px" <?= selected($cnSizeText == '14px') ?>>14px</option>
|
271 |
+
<option value="15px" <?= selected($cnSizeText == '15px') ?>>15px</option>
|
272 |
+
<option value="16px" <?= selected($cnSizeText == '16px') ?>>16px</option>
|
273 |
+
<option value="17px" <?= selected($cnSizeText == '17px') ?>>17px</option>
|
274 |
+
<option value="18px" <?= selected($cnSizeText == '18px') ?>>18px</option>
|
275 |
+
<option value="19px" <?= selected($cnSizeText == '19px') ?>>19px</option>
|
276 |
+
<option value="20px" <?= selected($cnSizeText == '20px') ?>>20px</option>
|
277 |
+
</select>
|
278 |
+
</div>
|
279 |
+
<div class="position-relative">
|
280 |
+
|
281 |
+
|
282 |
+
<div class="cn-customize-standard-notice-container <?= $cnCookieStyle == '00' ? 'spdsgvo-d-block': 'spdsgvo-d-none'?>">
|
283 |
+
|
284 |
+
|
285 |
+
<?php
|
286 |
+
spDsgvoWriteInput('color', '', 'cn_background_color', SPDSGVOSettings::get('cn_background_color'),
|
287 |
+
__('Background color', 'shapepress-dsgvo'),
|
288 |
+
'',
|
289 |
+
__('Specifies the background color of the cookie notice.', 'shapepress-dsgvo'));
|
290 |
+
?>
|
291 |
+
|
292 |
+
<?php
|
293 |
+
spDsgvoWriteInput('color', '', 'cn_text_color', SPDSGVOSettings::get('cn_text_color'),
|
294 |
+
__('Text/Font color', 'shapepress-dsgvo'),
|
295 |
+
'',
|
296 |
+
__('Specifies the text/font color of the cookie notice text.', 'shapepress-dsgvo'));
|
297 |
+
?>
|
298 |
+
|
299 |
+
<?php
|
300 |
+
spDsgvoWriteInput('color', '', 'cn_background_color_button', SPDSGVOSettings::get('cn_background_color_button'),
|
301 |
+
__('Button background color', 'shapepress-dsgvo'),
|
302 |
+
'',
|
303 |
+
__('Specifies the background color of the cookie notice button.', 'shapepress-dsgvo'));
|
304 |
+
?>
|
305 |
+
|
306 |
+
<?php
|
307 |
+
spDsgvoWriteInput('color', '', 'cn_text_color_button', SPDSGVOSettings::get('cn_text_color_button'),
|
308 |
+
__('Button text/font color', 'shapepress-dsgvo'),
|
309 |
+
'',
|
310 |
+
__('Specifies the text/font color of the cookie notice button.', 'shapepress-dsgvo'));
|
311 |
+
?>
|
312 |
+
|
313 |
+
<?php
|
314 |
+
spDsgvoWriteInput('text', '', 'cn_custom_css_container', SPDSGVOSettings::get('cn_custom_css_container'),
|
315 |
+
__('CSS class cookie notice', 'shapepress-dsgvo'),
|
316 |
+
__('.myClass1 .myClass2', 'shapepress-dsgvo'),
|
317 |
+
__('Specifies one or multiple additional classes for the cookie notice. Please specify them without leading "."', 'shapepress-dsgvo'));
|
318 |
+
?>
|
319 |
+
|
320 |
+
<?php
|
321 |
+
spDsgvoWriteInput('text', '', 'cn_custom_css_text', SPDSGVOSettings::get('cn_custom_css_text'),
|
322 |
+
__('CSS class text', 'shapepress-dsgvo'),
|
323 |
+
__('.myClass1 .myClass2', 'shapepress-dsgvo'),
|
324 |
+
__('Specifies one or multiple additional classes for the text of cookie notice. Please specify them with leading "."', 'shapepress-dsgvo'));
|
325 |
+
?>
|
326 |
+
|
327 |
+
<?php
|
328 |
+
spDsgvoWriteInput('text', '', 'cn_custom_css_buttons', SPDSGVOSettings::get('cn_custom_css_buttons'),
|
329 |
+
__('CSS class button', 'shapepress-dsgvo'),
|
330 |
+
__('.myClass1 .myClass2', 'shapepress-dsgvo'),
|
331 |
+
__('Specifies one or multiple additional classes for the button of cookie notice. Please specify them with leading "."', 'shapepress-dsgvo'));
|
332 |
+
?>
|
333 |
+
|
334 |
+
|
335 |
+
|
336 |
+
<div class="form-group">
|
337 |
+
<label for="cn_height_container"><?php _e('Height of cookie notice', 'shapepress-dsgvo') ?></label>
|
338 |
+
|
339 |
+
<?php $cnHeightContainer = SPDSGVOSettings::get('cn_height_container'); ?>
|
340 |
+
<select class="form-control" name="cn_height_container"
|
341 |
+
id="cn_height_container">
|
342 |
+
<option value="auto" <?= selected($cnHeightContainer == 'auto') ?>><?php _e('Default',
|
343 |
+
'shapepress-dsgvo') ?></option>
|
344 |
+
<option value="40px" <?= selected($cnHeightContainer == '40px') ?>>40px</option>
|
345 |
+
<option value="45px" <?= selected($cnHeightContainer == '45px') ?>>45px</option>
|
346 |
+
<option value="50px" <?= selected($cnHeightContainer == '50px') ?>>50px</option>
|
347 |
+
<option value="55px" <?= selected($cnHeightContainer == '55px') ?>>55px</option>
|
348 |
+
<option value="60px" <?= selected($cnHeightContainer == '60px') ?>>60px</option>
|
349 |
+
<option value="65px" <?= selected($cnHeightContainer == '65px') ?>>65px</option>
|
350 |
+
<option value="70px" <?= selected($cnHeightContainer == '70px') ?>>70px</option>
|
351 |
+
<option value="75px" <?= selected($cnHeightContainer == '75px') ?>>75px</option>
|
352 |
+
<option value="80px" <?= selected($cnHeightContainer == '80px') ?>>80px</option>
|
353 |
+
</select>
|
354 |
+
</div>
|
355 |
+
|
356 |
+
</div>
|
357 |
+
</div>
|
358 |
+
|
359 |
+
|
360 |
+
<div class="form-group cn-customize-standard-notice-container <?= $cnCookieStyle == '00' ? 'spdsgvo-d-block': 'spdsgvo-d-none'?>">
|
361 |
+
<?php
|
362 |
+
spDsgvoWriteInput('toggle', '', 'cn_show_dsgvo_icon', SPDSGVOSettings::get('cn_show_dsgvo_icon'),
|
363 |
+
__('Show WP DSGVO Tools (GDPR) icon', 'shapepress-dsgvo'),
|
364 |
+
'',
|
365 |
+
__('Displays the WP DSGVO Tools (GDPR) icon on the left side of the cookie notice.', 'shapepress-dsgvo'));
|
366 |
+
?>
|
367 |
+
</div>
|
368 |
+
<div class="form-group">
|
369 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
370 |
+
</div>
|
371 |
+
</div>
|
372 |
+
</div>
|
373 |
+
</div>
|
374 |
+
</form>
|
375 |
+
</div>
|
admin/tabs/v3/stats/class-sp-dsgvo-stats-action.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOStatisticIntegrationAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'admin-statistic-integrations';
|
6 |
+
|
7 |
+
|
8 |
+
|
9 |
+
|
10 |
+
protected function run(){
|
11 |
+
$this->checkCSRF();
|
12 |
+
$this->requireAdmin();
|
13 |
+
|
14 |
+
|
15 |
+
$this->returnBack();
|
16 |
+
}
|
17 |
+
}
|
18 |
+
|
19 |
+
SPDSGVOStatisticIntegrationAction::listen();
|
admin/tabs/v3/stats/class-sp-dsgvo-stats-tab.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOStatisticIntegrationsTab extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $title = 'Statistics';
|
6 |
+
public $slug = 'statistic-integrations';
|
7 |
+
public $isHidden = FALSE;
|
8 |
+
|
9 |
+
public function __construct(){
|
10 |
+
|
11 |
+
$this->title = __('Statistics','shapepress-dsgvo');
|
12 |
+
}
|
13 |
+
|
14 |
+
public function page(){
|
15 |
+
include plugin_dir_path(__FILE__) .'page.php';
|
16 |
+
}
|
17 |
+
}
|
admin/tabs/v3/stats/page.php
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$isPremium = isValidPremiumEdition();
|
3 |
+
$isBlog = isValidBlogEdition();
|
4 |
+
$hasValidLicense = isValidPremiumEdition() || isValidBlogEdition();
|
5 |
+
|
6 |
+
?>
|
7 |
+
|
8 |
+
<div class="card-columns">
|
9 |
+
|
10 |
+
|
11 |
+
|
12 |
+
|
13 |
+
<?php
|
14 |
+
$integrations = SPDSGVOIntegration::getAllIntegrations(SPDSGVOConstants::CATEGORY_SLUG_STATISTICS, FALSE);
|
15 |
+
|
16 |
+
$integrationsMandatory = SPDSGVOIntegration::getAllIntegrations(SPDSGVOConstants::CATEGORY_SLUG_MANDATORY, FALSE);
|
17 |
+
foreach($integrationsMandatory as $key => $integration)
|
18 |
+
{
|
19 |
+
if ($integration->apiInstance->getCategory(true) == SPDSGVOConstants::CATEGORY_SLUG_STATISTICS)
|
20 |
+
{
|
21 |
+
$integrations[] = $integration;
|
22 |
+
}
|
23 |
+
}
|
24 |
+
|
25 |
+
uasort($integrations, function($a, $b) {
|
26 |
+
return $a->isPremium < $b->isPremium ? -1 : 1;
|
27 |
+
});
|
28 |
+
|
29 |
+
//sort_integrations_by_premium_and_name($integrations,array('isPremium', 'title'));
|
30 |
+
?>
|
31 |
+
<?php if(count($integrations) === 0): ?>
|
32 |
+
|
33 |
+
<div class="card">
|
34 |
+
<div class="card-header"><?php _e('Information','shapepress-dsgvo')?></div>
|
35 |
+
<div class="card-body"><?php _e('No integrations installed','shapepress-dsgvo')?></div>
|
36 |
+
</div>
|
37 |
+
</div>
|
38 |
+
|
39 |
+
<?php else: ?>
|
40 |
+
|
41 |
+
<?php foreach($integrations as $key => $integration): ?>
|
42 |
+
|
43 |
+
<?php $integration->view() ?>
|
44 |
+
|
45 |
+
<?php endforeach; ?>
|
46 |
+
<?php endif; ?>
|
47 |
+
|
48 |
+
</div>
|
49 |
+
|
50 |
+
|
admin/tabs/v3/subject-access-request/class-sp-dsgvo-subject-access-request-action.php
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOAdminSubjectAccessRequestAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'admin-subject-access-request';
|
6 |
+
|
7 |
+
protected function run(){
|
8 |
+
$this->checkCSRF();
|
9 |
+
$this->requireAdmin();
|
10 |
+
|
11 |
+
if ($this->has('process') == false && $this->get('all') != '1')
|
12 |
+
{
|
13 |
+
$subform = $this->get('subform');
|
14 |
+
if (empty(($subform))) return;
|
15 |
+
|
16 |
+
if ($subform == 'common-settings')
|
17 |
+
{
|
18 |
+
SPDSGVOSettings::set('sar_cron', $this->get('sar_cron', '0'));
|
19 |
+
SPDSGVOSettings::set('sar_dsgvo_accepted_text', $this->get('sar_dsgvo_accepted_text', ''));
|
20 |
+
if($this->has('sar_page')){
|
21 |
+
SPDSGVOSettings::set('sar_page', $this->get('sar_page'));
|
22 |
+
}
|
23 |
+
|
24 |
+
} elseif ($subform == 'notification-settings')
|
25 |
+
{
|
26 |
+
if (isValidPremiumEdition())
|
27 |
+
{
|
28 |
+
SPDSGVOSettings::set('sar_email_notification', $this->get('sar_email_notification', '0'));
|
29 |
+
SPDSGVOSettings::set('sar_email_title', $this->get('sar_email_title', ''));
|
30 |
+
SPDSGVOSettings::set('sar_email_content', $this->get('sar_email_content', ''));
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
}
|
35 |
+
|
36 |
+
if($this->has('process')){
|
37 |
+
$ID = $this->get('process');
|
38 |
+
SPDSGVOSubjectAccessRequest::doByID($ID);
|
39 |
+
}
|
40 |
+
|
41 |
+
if($this->get('all') == '1'){
|
42 |
+
foreach(SPDSGVOSubjectAccessRequest::finder('pending') as $sar){
|
43 |
+
$sar->doSubjectAccessRequest();
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
|
48 |
+
$this->returnBack();
|
49 |
+
}
|
50 |
+
}
|
51 |
+
|
52 |
+
SPDSGVOAdminSubjectAccessRequestAction::listen();
|
admin/tabs/{subject-access-request → v3/subject-access-request}/class-sp-dsgvo-subject-access-request-tab.php
RENAMED
@@ -1,16 +1,16 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOSubjectAccessRequestTab extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
public $title ='Subject Access Request';
|
6 |
-
public $slug = 'subject-access-request';
|
7 |
-
|
8 |
-
public function __construct(){
|
9 |
-
|
10 |
-
$this->title = __('Subject Access Request','shapepress-dsgvo');
|
11 |
-
}
|
12 |
-
|
13 |
-
public function page(){
|
14 |
-
include plugin_dir_path(__FILE__) .'page.php';
|
15 |
-
}
|
16 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOSubjectAccessRequestTab extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $title ='Subject Access Request';
|
6 |
+
public $slug = 'subject-access-request';
|
7 |
+
|
8 |
+
public function __construct(){
|
9 |
+
|
10 |
+
$this->title = __('Subject Access Request','shapepress-dsgvo');
|
11 |
+
}
|
12 |
+
|
13 |
+
public function page(){
|
14 |
+
include plugin_dir_path(__FILE__) .'page.php';
|
15 |
+
}
|
16 |
+
}
|
admin/tabs/v3/subject-access-request/page.php
ADDED
@@ -0,0 +1,298 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$isPremium = isValidPremiumEdition();
|
3 |
+
$isBlog = isValidBlogEdition();
|
4 |
+
$hasValidLicense = isValidPremiumEdition() || isValidBlogEdition();
|
5 |
+
|
6 |
+
?>
|
7 |
+
|
8 |
+
<div class="card-columns">
|
9 |
+
|
10 |
+
<!-- sar general -->
|
11 |
+
<div class="card">
|
12 |
+
<div class="card-header">
|
13 |
+
<h4 class="card-title"><?php _e('Common Settings', 'shapepress-dsgvo') ?></h4>
|
14 |
+
</div>
|
15 |
+
<div class="card-body">
|
16 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
17 |
+
<input type="hidden" name="action" value="<?= SPDSGVOAdminSubjectAccessRequestAction::getActionName(); ?>">
|
18 |
+
<input type="hidden" name="subform" value="common-settings" />
|
19 |
+
<?php wp_nonce_field(SPDSGVOAdminSubjectAccessRequestAction::getActionName() . '-nonce'); ?>
|
20 |
+
|
21 |
+
<div class="form-group">
|
22 |
+
<label for="sar_cron"><?php _e('Automatic processing', 'shapepress-dsgvo') ?></label>
|
23 |
+
<?php $sarCron = SPDSGVOSettings::get('sar_cron'); ?>
|
24 |
+
<select class="form-control" name="sar_cron" id="sar_cron">
|
25 |
+
<option value="0" <?= selected($sarCron === '0') ?>><?php _e('none', 'shapepress-dsgvo') ?></option>
|
26 |
+
<option value="1" <?= selected($sarCron === '1') ?>>
|
27 |
+
1 <?php _e('day', 'shapepress-dsgvo') ?></option>
|
28 |
+
<option value="2" <?= selected($sarCron === '2') ?>>
|
29 |
+
2 <?php _e('days', 'shapepress-dsgvo') ?></option>
|
30 |
+
<option value="3" <?= selected($sarCron === '3') ?>>
|
31 |
+
3 <?php _e('days', 'shapepress-dsgvo') ?></option>
|
32 |
+
<option value="7" <?= selected($sarCron === '4') ?>>
|
33 |
+
1 <?php _e('weeks', 'shapepress-dsgvo') ?></option>
|
34 |
+
</select>
|
35 |
+
|
36 |
+
<small class="form-text text-muted"><?php _e('Requests will be automatically processed after the set time and sent to the user.', 'shapepress-dsgvo') ?></small>
|
37 |
+
</div>
|
38 |
+
|
39 |
+
<?php
|
40 |
+
spDsgvoWriteInput('textarea', '', 'sar_dsgvo_accepted_text', SPDSGVOSettings::get('sar_dsgvo_accepted_text'),
|
41 |
+
__('GDPR consent text', 'shapepress-dsgvo'),
|
42 |
+
'',
|
43 |
+
__('The text which gets displayed during a SAR request.', 'shapepress-dsgvo'));
|
44 |
+
?>
|
45 |
+
|
46 |
+
<div class="form-group">
|
47 |
+
<?php $sarPage = SPDSGVOSettings::get('sar_page'); ?>
|
48 |
+
<label for="sar_page"><?php _e('SAR request page', 'shapepress-dsgvo') ?></label>
|
49 |
+
<select class="form-control" name="sar_page" id="sar_page">
|
50 |
+
<option value="0"><?php _e('Select', 'shapepress-dsgvo'); ?></option>
|
51 |
+
<?php foreach (get_pages(array('number' => 0)) as $key => $page): ?>
|
52 |
+
<option <?= selected($sarPage == $page->ID) ?> value="<?= $page->ID ?>">
|
53 |
+
<?= $page->post_title ?>
|
54 |
+
</option>
|
55 |
+
<?php endforeach; ?>
|
56 |
+
</select>
|
57 |
+
<small class="form-text text-muted"><?php _e('Specifies the page on which users have the option to request their data extract.', 'shapepress-dsgvo') ?></small>
|
58 |
+
|
59 |
+
|
60 |
+
</div>
|
61 |
+
<div class="form-group">
|
62 |
+
<?php if ($sarPage == '0'): ?>
|
63 |
+
<small><?php _e('Create a page that uses the shortcode <code>[sar_form]</code>.', 'shapepress-dsgvo') ?>
|
64 |
+
<a class="btn btn-secondary btn-block"
|
65 |
+
href="<?= SPDSGVOCreatePageAction::url(array('sar' => '1')) ?>"><?php _e('Create page', 'shapepress-dsgvo') ?></a>
|
66 |
+
</small>
|
67 |
+
<?php elseif (!pageContainsString($sarPage, 'sar_form')): ?>
|
68 |
+
<small><?php _e('Attention: The shortcode <code>[sar_form]</code> was not found on the page you selected.', 'shapepress-dsgvo') ?>
|
69 |
+
<a class="btn btn-secondary btn-block"
|
70 |
+
href="<?= get_edit_post_link($sarPage) ?>"><?php _e('Edit page', 'shapepress-dsgvo') ?></a>
|
71 |
+
</small>
|
72 |
+
<?php else: ?>
|
73 |
+
<a class="btn btn-secondary btn-block"
|
74 |
+
href="<?= get_edit_post_link($sarPage) ?>"><?php _e('Edit page', 'shapepress-dsgvo') ?></a>
|
75 |
+
<?php endif; ?>
|
76 |
+
</div>
|
77 |
+
|
78 |
+
<div class="form-group">
|
79 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
80 |
+
</div>
|
81 |
+
|
82 |
+
</form>
|
83 |
+
</div>
|
84 |
+
</div>
|
85 |
+
|
86 |
+
<!-- notifaction settings -->
|
87 |
+
<div class="card">
|
88 |
+
<div class="card-header">
|
89 |
+
<h4 class="card-title"><?php _e('Notification settings', 'shapepress-dsgvo') ?></h4>
|
90 |
+
</div>
|
91 |
+
<div class="card-body">
|
92 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
93 |
+
<input type="hidden" name="action"
|
94 |
+
value="<?= SPDSGVOAdminSubjectAccessRequestAction::getActionName(); ?>">
|
95 |
+
<input type="hidden" name="subform" value="notification-settings" />
|
96 |
+
<?php wp_nonce_field(SPDSGVOAdminSubjectAccessRequestAction::getActionName() . '-nonce'); ?>
|
97 |
+
|
98 |
+
<div class="position-relative">
|
99 |
+
<?php spDsgvoWritePremiumOverlayIfInvalid($hasValidLicense); ?>
|
100 |
+
|
101 |
+
<?php
|
102 |
+
spDsgvoWriteInput('switch', '', 'sar_email_notification', SPDSGVOSettings::get('sar_email_notification'),
|
103 |
+
__('Email for new application', 'shapepress-dsgvo'),
|
104 |
+
'',
|
105 |
+
__('If enabled a notification by email gets send to the email of the admin.', 'shapepress-dsgvo'));
|
106 |
+
?>
|
107 |
+
|
108 |
+
<?php
|
109 |
+
|
110 |
+
|
111 |
+
$title = !empty(SPDSGVOSettings::get('sar_email_title')) ? SPDSGVOSettings::get('sar_email_title') : __('Confirmation of delete request', 'shapepress-dsgvo');
|
112 |
+
$content = !empty(SPDSGVOSettings::get('sar_email_content')) ? SPDSGVOSettings::get('sar_email_content') : '';
|
113 |
+
?>
|
114 |
+
|
115 |
+
<?php
|
116 |
+
spDsgvoWriteInput('text', '', 'sar_email_title', $title,
|
117 |
+
__('Title of the email', 'shapepress-dsgvo'),
|
118 |
+
'',
|
119 |
+
'');
|
120 |
+
?>
|
121 |
+
|
122 |
+
|
123 |
+
|
124 |
+
<div class="form-group">
|
125 |
+
<label><?= __('Content of the email', 'shapepress-dsgvo')?></label>
|
126 |
+
<?php wp_editor($content, 'sar_email_content',
|
127 |
+
array('textarea_rows' => '10', 'drag_drop_upload' => 'false', 'teeny' => true, 'media_buttons' => false)); ?>
|
128 |
+
<small class="form-text text-muted"><?= __('Specify the email body. Use {{breakdown}} for data summary, {{count}} for amount of data, {{zip_link}} for URL to the data download and {{confirm_link}} for delete confirmation URL.','shapepress-dsgvo');?></small>
|
129 |
+
</div>
|
130 |
+
|
131 |
+
</div>
|
132 |
+
|
133 |
+
<div class="form-group">
|
134 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
135 |
+
</div>
|
136 |
+
</form>
|
137 |
+
</div>
|
138 |
+
</div>
|
139 |
+
</div>
|
140 |
+
|
141 |
+
<div class="card col-12">
|
142 |
+
<div class="card-header">
|
143 |
+
<h4 class="card-title"><?php _e('Subject Access Requests', 'shapepress-dsgvo') ?></h4>
|
144 |
+
<small class="card-subtitle text-muted"><?php _e('This feature allows users to request a digest of all data stored by you. <br> All data in your database is checked for confidential data and sent to the User by email.', 'shapepress-dsgvo') ?></small>
|
145 |
+
</div>
|
146 |
+
<div class="card-body">
|
147 |
+
<?php $pending = SPDSGVOSubjectAccessRequest::finder('pending'); ?>
|
148 |
+
<table class="table table-hover table-striped " cellspacing="0">
|
149 |
+
<thead>
|
150 |
+
<tr>
|
151 |
+
<th id="request_id" class="manage-column column-request_id"
|
152 |
+
scope="col" style="width: 10%"><?php _e('ID', 'shapepress-dsgvo') ?></th>
|
153 |
+
<th id="email" class="manage-column column-email" scope="col"
|
154 |
+
style="width: 20%"><?php _e('Email', 'shapepress-dsgvo') ?></th>
|
155 |
+
<th id="first_name" class="manage-column column-first_name"
|
156 |
+
scope="col" style="width: 15%"><?php _e('First name', 'shapepress-dsgvo') ?></th>
|
157 |
+
<th id="last_name" class="manage-column column-last_name" scope="col"
|
158 |
+
style="width: 15%"><?php _e('Last name', 'shapepress-dsgvo') ?></th>
|
159 |
+
<th id="dsgvo_accepted" class="manage-column column-dsgvo_accepted" scope="col"
|
160 |
+
style="width: 15%"><?php _e('GDPR approval', 'shapepress-dsgvo') ?></th>
|
161 |
+
<th id="process" class="manage-column column-process" scope="col"
|
162 |
+
style="width: 15%"><?php _e('Run', 'shapepress-dsgvo') ?></th>
|
163 |
+
<!-- i592995 -->
|
164 |
+
<th id="dismiss" class="manage-column column-dismiss" scope="col"
|
165 |
+
style="width: 15%"><?php _e('Dismiss', 'shapepress-dsgvo') ?></th>
|
166 |
+
<!-- i592995 -->
|
167 |
+
</tr>
|
168 |
+
</thead>
|
169 |
+
|
170 |
+
<tbody>
|
171 |
+
<?php if (count($pending) !== 0): ?>
|
172 |
+
<?php foreach ($pending as $key => $pendingRequest): ?>
|
173 |
+
|
174 |
+
<tr class="<?= ($key % 2 == 0) ? 'alternate' : '' ?>">
|
175 |
+
<td class="column-request-id">
|
176 |
+
<?= $pendingRequest->ID ?>
|
177 |
+
</td>
|
178 |
+
<td class="column-email"><strong><?= $pendingRequest->email ?></strong>
|
179 |
+
</td>
|
180 |
+
<td class="column-integrations">
|
181 |
+
<?= $pendingRequest->first_name ?>
|
182 |
+
</td>
|
183 |
+
<td class="column-auto-deleting-on">
|
184 |
+
<?= $pendingRequest->last_name ?>
|
185 |
+
</td>
|
186 |
+
<td class="column-auto-deleting-on">
|
187 |
+
<?= $pendingRequest->dsgvo_accepted === '1' ? __('Yes', 'shapepress-dsgvo') : __('No', 'shapepress-dsgvo') ?>
|
188 |
+
</td>
|
189 |
+
<td class="column-unsubscribe-user"><a class="btn btn-outline-primary"
|
190 |
+
href="<?= wp_nonce_url(SPDSGVOAdminSubjectAccessRequestAction::url(array('process' => $pendingRequest->ID)),
|
191 |
+
SPDSGVOAdminSubjectAccessRequestAction::getActionName() . '-nonce') ?>"><?php _e('Run', 'shapepress-dsgvo'); ?></a>
|
192 |
+
</td>
|
193 |
+
<!-- i592995 -->
|
194 |
+
<td class="column-dismiss">
|
195 |
+
<svg class="unsubscribe-dismiss" width="10" height="10"
|
196 |
+
data-id="<?php echo $pendingRequest->ID; ?>">
|
197 |
+
<line x1="0" y1="0" x2="10" y2="10"/>
|
198 |
+
<line x1="0" y1="10" x2="10" y2="0"/>
|
199 |
+
</svg>
|
200 |
+
</td>
|
201 |
+
<!-- i592995 -->
|
202 |
+
</tr>
|
203 |
+
|
204 |
+
<?php endforeach; ?>
|
205 |
+
<?php else: ?>
|
206 |
+
<tr>
|
207 |
+
<td class="column-slug" colspan="5"><?php _e('No open requests', 'shapepress-dsgvo') ?></td>
|
208 |
+
<td class="column-default"></td>
|
209 |
+
<td class="column-reason"></td>
|
210 |
+
</tr>
|
211 |
+
<?php endif; ?>
|
212 |
+
</tbody>
|
213 |
+
|
214 |
+
<tfoot>
|
215 |
+
<tr>
|
216 |
+
<th class="manage-column column-request_id" scope="col"><?php _e('ID', 'shapepress-dsgvo') ?></th>
|
217 |
+
<th class="manage-column column-email" scope="col"><?php _e('Email', 'shapepress-dsgvo') ?></th>
|
218 |
+
<th class="manage-column column-first_name" scope="col"><?php _e('First name', 'shapepress-dsgvo') ?></th>
|
219 |
+
<th class="manage-column column-last_name" scope="col"><?php _e('Last name', 'shapepress-dsgvo') ?></th>
|
220 |
+
<th class="manage-column column-dsgvo_accepted"
|
221 |
+
scope="col"><?php _e('GDPR approval', 'shapepress-dsgvo') ?></th>
|
222 |
+
<th class="manage-column column-process" scope="col"><?php _e('Run', 'shapepress-dsgvo') ?></th>
|
223 |
+
<!-- i592995 -->
|
224 |
+
<th class="manage-column column-dismiss" scope="col"><?php _e('Dismiss', 'shapepress-dsgvo') ?></th>
|
225 |
+
<!-- i592995 -->
|
226 |
+
</tr>
|
227 |
+
</tfoot>
|
228 |
+
</table>
|
229 |
+
|
230 |
+
<?php if (count($pending) !== 0): ?>
|
231 |
+
<p>
|
232 |
+
<a class="button-primary"
|
233 |
+
href="<?= wp_nonce_url(SPDSGVOAdminSubjectAccessRequestAction::url(array('all' => '1')),
|
234 |
+
SPDSGVOAdminSubjectAccessRequestAction::getActionName() . '-nonce') ?>"><?php _e('Run all', 'shapepress-dsgvo') ?></a>
|
235 |
+
</p>
|
236 |
+
<?php endif; ?>
|
237 |
+
</div>
|
238 |
+
</div>
|
239 |
+
|
240 |
+
<div class="card-columns">
|
241 |
+
<div class="card">
|
242 |
+
<div class="card-header">
|
243 |
+
<h4 class="card-title"><?php _e('Add entry', 'shapepress-dsgvo') ?></h4>
|
244 |
+
</div>
|
245 |
+
<div class="card-body">
|
246 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
247 |
+
<input type="hidden" name="action"
|
248 |
+
value="<?= SPDSGVOSubjectAccessRequestAction::getActionName(); ?>"> <input
|
249 |
+
type="hidden" name="is_admin" value="1"> <br>
|
250 |
+
<?php wp_nonce_field(SPDSGVOSubjectAccessRequestAction::getActionName() . '-nonce'); ?>
|
251 |
+
|
252 |
+
<?php
|
253 |
+
spDsgvoWriteInput('text', '', 'email', '',
|
254 |
+
__('Email', 'shapepress-dsgvo'),
|
255 |
+
'',
|
256 |
+
'');
|
257 |
+
?>
|
258 |
+
|
259 |
+
<?php
|
260 |
+
spDsgvoWriteInput('text', '', 'first_name', '',
|
261 |
+
__('First name', 'shapepress-dsgvo'),
|
262 |
+
'',
|
263 |
+
'');
|
264 |
+
?>
|
265 |
+
|
266 |
+
<?php
|
267 |
+
spDsgvoWriteInput('text', '', 'last_name', '',
|
268 |
+
__('Last name', 'shapepress-dsgvo'),
|
269 |
+
'',
|
270 |
+
'');
|
271 |
+
?>
|
272 |
+
|
273 |
+
<?php
|
274 |
+
spDsgvoWriteInput('switch', '', 'dsgvo_checkbox', '',
|
275 |
+
__('GDPR confirmation', 'shapepress-dsgvo'),
|
276 |
+
'',
|
277 |
+
'');
|
278 |
+
?>
|
279 |
+
|
280 |
+
<?php
|
281 |
+
spDsgvoWriteInput('switch', '', 'process_now', '',
|
282 |
+
__('Run now', 'shapepress-dsgvo'),
|
283 |
+
'',
|
284 |
+
'');
|
285 |
+
?>
|
286 |
+
<?php
|
287 |
+
spDsgvoWriteInput('switch', '', 'display_email', '',
|
288 |
+
__('Show email', 'shapepress-dsgvo'),
|
289 |
+
'',
|
290 |
+
'');
|
291 |
+
?>
|
292 |
+
<div class="form-group">
|
293 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Add entry', 'shapepress-dsgvo');?>">
|
294 |
+
</div>
|
295 |
+
</form>
|
296 |
+
</div>
|
297 |
+
</div>
|
298 |
+
</div>
|
admin/tabs/{super-unsubscribe → v3/super-unsubscribe}/class-sp-dsgvo-dismiss-unsubscribe-action.php
RENAMED
@@ -1,20 +1,16 @@
|
|
1 |
-
<?php
|
2 |
-
/* i592995 */
|
3 |
-
Class SPDSGVODismissUnsubscribeAction extends SPDSGVOAjaxAction{
|
4 |
-
|
5 |
-
protected $action = 'admin-dismiss-unsubscribe';
|
6 |
-
|
7 |
-
protected function run(){
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
SPDSGVODismissUnsubscribeAction::listen();
|
19 |
-
|
20 |
-
/* i592995 */
|
1 |
+
<?php
|
2 |
+
/* i592995 */
|
3 |
+
Class SPDSGVODismissUnsubscribeAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'admin-dismiss-unsubscribe';
|
6 |
+
|
7 |
+
protected function run(){
|
8 |
+
$id = $this->get('id');
|
9 |
+
wp_delete_post($id);
|
10 |
+
die();
|
11 |
+
}
|
12 |
+
}
|
13 |
+
|
14 |
+
SPDSGVODismissUnsubscribeAction::listen();
|
15 |
+
|
16 |
+
/* i592995 */
|
|
|
|
|
|
|
|
admin/tabs/v3/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-action.php
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOSuperUnsubscribeAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'admin-super-unsubscribe';
|
6 |
+
|
7 |
+
protected function run(){
|
8 |
+
$this->checkCSRF();
|
9 |
+
$this->requireAdmin();
|
10 |
+
|
11 |
+
if ($this->has('process') == false && $this->get('all') != '1')
|
12 |
+
{
|
13 |
+
$subform = $this->get('subform');
|
14 |
+
if (empty(($subform))) return;
|
15 |
+
|
16 |
+
if ($subform == 'common-settings')
|
17 |
+
{
|
18 |
+
SPDSGVOSettings::set('unsubscribe_auto_delete', $this->get('unsubscribe_auto_delete', '0'));
|
19 |
+
SPDSGVOSettings::set('su_auto_del_time', $this->get('su_auto_del_time', '0'));
|
20 |
+
SPDSGVOSettings::set('su_dsgvo_accepted_text', $this->get('su_dsgvo_accepted_text', ''));
|
21 |
+
|
22 |
+
// Set super_unsubscribe_page
|
23 |
+
if($this->has('super_unsubscribe_page')){
|
24 |
+
SPDSGVOSettings::set('super_unsubscribe_page', $this->get('super_unsubscribe_page'));
|
25 |
+
}
|
26 |
+
|
27 |
+
}elseif ($subform == 'notification-settings') {
|
28 |
+
|
29 |
+
if (isValidPremiumEdition())
|
30 |
+
{
|
31 |
+
SPDSGVOSettings::set('su_email_notification', $this->get('su_email_notification', '0'));
|
32 |
+
SPDSGVOSettings::set('su_email_title', $this->get('su_email_title', ''));
|
33 |
+
SPDSGVOSettings::set('su_email_content', $this->get('su_email_content', ''));
|
34 |
+
}
|
35 |
+
} elseif ($subform == 'integration-settings') {
|
36 |
+
if (isValidPremiumEdition())
|
37 |
+
{
|
38 |
+
SPDSGVOSettings::set('su_woo_data_action', $this->get('su_woo_data_action', 'ignore'));
|
39 |
+
SPDSGVOSettings::set('su_bbpress_data_action', $this->get('su_bbpress_data_action', 'ignore'));
|
40 |
+
SPDSGVOSettings::set('su_buddypress_data_action', $this->get('su_buddypress_data_action', 'ignore'));
|
41 |
+
SPDSGVOSettings::set('su_cf7_data_action', $this->get('su_cf7_data_action', 'ignore'));
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
|
46 |
+
// unsubscribe_auto_delete
|
47 |
+
|
48 |
+
|
49 |
+
|
50 |
+
|
51 |
+
|
52 |
+
}
|
53 |
+
|
54 |
+
// Unsubscribe single user
|
55 |
+
if($this->has('process')){
|
56 |
+
$unsubscriber = SPDSGVOUnsubscriber::find($this->get('process'));
|
57 |
+
if(isset($unsubscriber)){
|
58 |
+
$unsubscriber->doSuperUnsubscribe();
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
|
63 |
+
// Unsubscribe all
|
64 |
+
if($this->get('all') == '1'){
|
65 |
+
foreach(SPDSGVOUnsubscriber::all() as $unsubscriber){
|
66 |
+
$unsubscriber->doSuperUnsubscribe();
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
|
71 |
+
$this->returnBack();
|
72 |
+
}
|
73 |
+
}
|
74 |
+
|
75 |
+
SPDSGVOSuperUnsubscribeAction::listen();
|
admin/tabs/{super-unsubscribe → v3/super-unsubscribe}/class-sp-dsgvo-super-unsubscribe-tab.php
RENAMED
@@ -1,15 +1,15 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOSuperUnsubscribeTab extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
public $title = 'Delete request';
|
6 |
-
public $slug = 'super-unsubscribe';
|
7 |
-
|
8 |
-
public function __construct(){
|
9 |
-
$this->title = __('Delete request','shapepress-dsgvo');
|
10 |
-
}
|
11 |
-
|
12 |
-
public function page(){
|
13 |
-
include plugin_dir_path(__FILE__) .'page.php';
|
14 |
-
}
|
15 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOSuperUnsubscribeTab extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $title = 'Delete request';
|
6 |
+
public $slug = 'super-unsubscribe';
|
7 |
+
|
8 |
+
public function __construct(){
|
9 |
+
$this->title = __('Delete request','shapepress-dsgvo');
|
10 |
+
}
|
11 |
+
|
12 |
+
public function page(){
|
13 |
+
include plugin_dir_path(__FILE__) .'page.php';
|
14 |
+
}
|
15 |
+
}
|
admin/tabs/v3/super-unsubscribe/page.php
ADDED
@@ -0,0 +1,433 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$isPremium = isValidPremiumEdition();
|
3 |
+
$isBlog = isValidBlogEdition();
|
4 |
+
$hasValidLicense = isValidPremiumEdition() || isValidBlogEdition();
|
5 |
+
|
6 |
+
?>
|
7 |
+
|
8 |
+
<div class="card-columns">
|
9 |
+
|
10 |
+
<div class="card">
|
11 |
+
<div class="card-header">
|
12 |
+
<h4 class="card-title"><?php _e('Common Settings', 'shapepress-dsgvo') ?></h4>
|
13 |
+
</div>
|
14 |
+
<div class="card-body">
|
15 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
16 |
+
<input type="hidden" name="action" value="<?= SPDSGVOSuperUnsubscribeAction::getActionName(); ?>"> <input
|
17 |
+
type="hidden" name="CSRF" value="<?= sp_dsgvo_CSRF_TOKEN() ?>">
|
18 |
+
<input type="hidden" name="subform" value="common-settings" />
|
19 |
+
<?php wp_nonce_field(SPDSGVOSuperUnsubscribeAction::getActionName() . '-nonce'); ?>
|
20 |
+
|
21 |
+
<?php
|
22 |
+
spDsgvoWriteInput('switch', '', 'unsubscribe_auto_delete', SPDSGVOSettings::get('unsubscribe_auto_delete'),
|
23 |
+
__('Automatic processing on request', 'shapepress-dsgvo'),
|
24 |
+
'',
|
25 |
+
__('If enabled, delete requests are performed immediately.', 'shapepress-dsgvo'));
|
26 |
+
?>
|
27 |
+
|
28 |
+
<div class="form-group">
|
29 |
+
<label for="sar_cron"><?php _e('After period', 'shapepress-dsgvo') ?></label>
|
30 |
+
<?php $suAutoDelTime = SPDSGVOSettings::get('su_auto_del_time'); ?>
|
31 |
+
<select class="form-control" name="su_auto_del_time" id="su_auto_del_time">
|
32 |
+
<option value="0" <?= selected($suAutoDelTime === '0') ?>><?php _e('none', 'shapepress-dsgvo') ?></option>
|
33 |
+
<option value="1m" <?= selected($suAutoDelTime === '1m') ?>>
|
34 |
+
1 <?php _e('month', 'shapepress-dsgvo') ?></option>
|
35 |
+
<option value="3m" <?= selected($suAutoDelTime === '3m') ?>>
|
36 |
+
3 <?php _e('months', 'shapepress-dsgvo') ?></option>
|
37 |
+
<option value="6m" <?= selected($suAutoDelTime === '6m') ?>>
|
38 |
+
6 <?php _e('months', 'shapepress-dsgvo') ?></option>
|
39 |
+
<option value="1y" <?= selected($suAutoDelTime === '1y') ?>>
|
40 |
+
1 <?php _e('year', 'shapepress-dsgvo') ?></option>
|
41 |
+
<option value="6y" <?= selected($suAutoDelTime === '6y') ?>>
|
42 |
+
6 <?php _e('years', 'shapepress-dsgvo') ?></option>
|
43 |
+
<option value="7y" <?= selected($suAutoDelTime === '7y') ?>>
|
44 |
+
7 <?php _e('years', 'shapepress-dsgvo') ?></option>
|
45 |
+
</select>
|
46 |
+
|
47 |
+
<small class="form-text text-muted"><?php _e('Data is automatically deleted after the set time. Ensures the maximum retention time.', 'shapepress-dsgvo') ?></small>
|
48 |
+
</div>
|
49 |
+
|
50 |
+
<?php
|
51 |
+
spDsgvoWriteInput('textarea', '', 'su_dsgvo_accepted_text', SPDSGVOSettings::get('su_dsgvo_accepted_text'),
|
52 |
+
__('Text on new application', 'shapepress-dsgvo'),
|
53 |
+
'',
|
54 |
+
__('The text which gets displayed during a delete request.', 'shapepress-dsgvo'));
|
55 |
+
?>
|
56 |
+
|
57 |
+
<div class="form-group">
|
58 |
+
<?php $suPage = SPDSGVOSettings::get('super_unsubscribe_page');
|
59 |
+
if (isset($suPage) == false) $suPage = 0;
|
60 |
+
?>
|
61 |
+
<label for="super_unsubscribe_page"><?php _e('Delete request page', 'shapepress-dsgvo') ?></label>
|
62 |
+
<select class="form-control" name="super_unsubscribe_page" id="super_unsubscribe_page">
|
63 |
+
<option value="0"><?php _e('Select', 'shapepress-dsgvo'); ?></option>
|
64 |
+
<?php foreach (get_pages(array('number' => 0)) as $key => $page): ?>
|
65 |
+
<option <?= selected($suPage == $page->ID) ?> value="<?= $page->ID ?>">
|
66 |
+
<?= $page->post_title ?>
|
67 |
+
</option>
|
68 |
+
<?php endforeach; ?>
|
69 |
+
</select>
|
70 |
+
<small class="form-text text-muted"><?php _e('Specifies the page on which users have the option to delete their data.', 'shapepress-dsgvo') ?></small>
|
71 |
+
</div>
|
72 |
+
<div class="form-group">
|
73 |
+
<?php if ($suPage == '0'): ?>
|
74 |
+
<small><?php _e('Create a page that uses the shortcode <code>[unsubscribe_form]</code>.', 'shapepress-dsgvo') ?>
|
75 |
+
<a class="btn btn-secondary btn-block"
|
76 |
+
href="<?= SPDSGVOCreatePageAction::url(array('super_unsubscribe_page' => '1')) ?>"><?php _e('Create page', 'shapepress-dsgvo') ?></a>
|
77 |
+
</small>
|
78 |
+
<?php elseif (!pageContainsString($suPage, 'unsubscribe_form')): ?>
|
79 |
+
<small><?php _e('Attention: The shortcode <code>[unsubscribe_form]</code> that should be on the selected page was not found. Thus, the user has no opportunity to ask a deletion request.', 'shapepress-dsgvo') ?>
|
80 |
+
<a class="btn btn-secondary btn-block"
|
81 |
+
href="<?= get_edit_post_link($suPage) ?>"><?php _e('Edit page', 'shapepress-dsgvo') ?></a>
|
82 |
+
</small>
|
83 |
+
<?php else: ?>
|
84 |
+
<a class="btn btn-secondary btn-block"
|
85 |
+
href="<?= get_edit_post_link($suPage) ?>"><?php _e('Edit page', 'shapepress-dsgvo') ?></a>
|
86 |
+
<?php endif; ?>
|
87 |
+
</div>
|
88 |
+
|
89 |
+
<div class="form-group">
|
90 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
91 |
+
</div>
|
92 |
+
|
93 |
+
</form>
|
94 |
+
|
95 |
+
</div>
|
96 |
+
</div>
|
97 |
+
|
98 |
+
<div class="card">
|
99 |
+
<div class="card-header">
|
100 |
+
<h4 class="card-title"><?php _e('Integrations', 'shapepress-dsgvo') ?></h4>
|
101 |
+
</div>
|
102 |
+
<div class="card-body">
|
103 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
104 |
+
<input type="hidden" name="action"
|
105 |
+
value="<?= SPDSGVOSuperUnsubscribeAction::getActionName(); ?>">
|
106 |
+
<input type="hidden" name="subform" value="integration-settings" />
|
107 |
+
<?php wp_nonce_field(SPDSGVOSuperUnsubscribeAction::getActionName() . '-nonce'); ?>
|
108 |
+
|
109 |
+
<div class="position-relative">
|
110 |
+
<?php spDsgvoWritePremiumOverlayIfInvalid($hasValidLicense); ?>
|
111 |
+
|
112 |
+
<div class="form-group">
|
113 |
+
<label for="su_woo_data_action"><?php _e('WooCommerce Data', 'shapepress-dsgvo') ?></label>
|
114 |
+
<?php $wooDataAction = SPDSGVOSettings::get('su_woo_data_action'); ?>
|
115 |
+
<select class="form-control" name="su_woo_data_action" id="su_woo_data_action">
|
116 |
+
<option value="ignore" <?= selected($wooDataAction === 'ignore') ?>><?php _e('No action', 'shapepress-dsgvo') ?></option>
|
117 |
+
<option value="pseudo" <?= selected($wooDataAction === 'pseudo') ?>><?php _e('Pseudonymise', 'shapepress-dsgvo') ?></option>
|
118 |
+
<option value="del" <?= selected($wooDataAction === 'del') ?>><?php _e('Delete', 'shapepress-dsgvo') ?></option>
|
119 |
+
</select>
|
120 |
+
<small class="form-text text-muted"><?php _e('Specifies what should happen to personal data of orders.', 'shapepress-dsgvo') ?></small>
|
121 |
+
</div>
|
122 |
+
|
123 |
+
<div class="form-group">
|
124 |
+
<label for="su_bbpress_data_action"><?php _e('bbPress Data', 'shapepress-dsgvo') ?></label>
|
125 |
+
<?php $bbPDataAction = SPDSGVOSettings::get('su_bbpress_data_action'); ?>
|
126 |
+
<select class="form-control" name="su_bbpress_data_action" id="su_bbpress_data_action">
|
127 |
+
<option value="ignore" <?= selected($bbPDataAction === 'ignore') ?>><?php _e('No action', 'shapepress-dsgvo') ?></option>
|
128 |
+
<option value="pseudo" <?= selected($bbPDataAction === 'pseudo') ?>><?php _e('Pseudonymise', 'shapepress-dsgvo') ?></option>
|
129 |
+
<option value="del" <?= selected($bbPDataAction === 'del') ?>><?php _e('Delete', 'shapepress-dsgvo') ?></option>
|
130 |
+
</select>
|
131 |
+
<small class="form-text text-muted"><?php _e('Specifies what should happen with forum entries.', 'shapepress-dsgvo') ?></small>
|
132 |
+
</div>
|
133 |
+
|
134 |
+
<div class="form-group">
|
135 |
+
<label for="su_buddypress_data_action"><?php _e('buddyPress Data', 'shapepress-dsgvo') ?></label>
|
136 |
+
<?php $buddyPressDataAction = SPDSGVOSettings::get('su_buddypress_data_action'); ?>
|
137 |
+
<select class="form-control" name="su_buddypress_data_action" id="su_buddypress_data_action">
|
138 |
+
<option value="ignore" <?= selected($buddyPressDataAction === 'ignore') ?>><?php _e('No action', 'shapepress-dsgvo') ?></option>
|
139 |
+
<option value="pseudo" <?= selected($buddyPressDataAction === 'pseudo') ?>><?php _e('Pseudonymise', 'shapepress-dsgvo') ?></option>
|
140 |
+
<option value="del" <?= selected($buddyPressDataAction === 'del') ?>><?php _e('Delete', 'shapepress-dsgvo') ?></option>
|
141 |
+
</select>
|
142 |
+
<small class="form-text text-muted"><?php _e('Specifies what should happen with forum entries.', 'shapepress-dsgvo') ?></small>
|
143 |
+
</div>
|
144 |
+
|
145 |
+
<div class="form-group">
|
146 |
+
<label for="su_cf7_data_action"><?php _e('CF7/Flamingo Data', 'shapepress-dsgvo') ?></label>
|
147 |
+
<?php $cf7DataAction = SPDSGVOSettings::get('su_cf7_data_action'); ?>
|
148 |
+
<select class="form-control" name="su_cf7_data_action" id="su_cf7_data_action">
|
149 |
+
<option value="ignore" <?= selected($cf7DataAction === 'ignore') ?>><?php _e('No action', 'shapepress-dsgvo') ?></option>
|
150 |
+
<option value="pseudo" <?= selected($cf7DataAction === 'pseudo') ?>><?php _e('Pseudonymise', 'shapepress-dsgvo') ?></option>
|
151 |
+
<option value="del" <?= selected($cf7DataAction === 'del') ?>><?php _e('Delete', 'shapepress-dsgvo') ?></option>
|
152 |
+
</select>
|
153 |
+
<small class="form-text text-muted"><?php _e('Specifies what to do with contact entries and messages.', 'shapepress-dsgvo') ?></small>
|
154 |
+
</div>
|
155 |
+
|
156 |
+
<div class="form-group">
|
157 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
158 |
+
</div>
|
159 |
+
</div>
|
160 |
+
|
161 |
+
</form>
|
162 |
+
</div>
|
163 |
+
</div>
|
164 |
+
|
165 |
+
<div class="card">
|
166 |
+
<div class="card-header">
|
167 |
+
<h4 class="card-title"><?php _e('Notification settings', 'shapepress-dsgvo') ?></h4>
|
168 |
+
</div>
|
169 |
+
<div class="card-body">
|
170 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
171 |
+
<input type="hidden" name="action"
|
172 |
+
value="<?= SPDSGVOSuperUnsubscribeAction::getActionName(); ?>">
|
173 |
+
<input type="hidden" name="subform" value="notification-settings" />
|
174 |
+
<?php wp_nonce_field(SPDSGVOSuperUnsubscribeAction::getActionName() . '-nonce'); ?>
|
175 |
+
|
176 |
+
<div class="position-relative">
|
177 |
+
<?php spDsgvoWritePremiumOverlayIfInvalid($hasValidLicense); ?>
|
178 |
+
|
179 |
+
<?php
|
180 |
+
spDsgvoWriteInput('switch', '', 'su_email_notification', SPDSGVOSettings::get('su_email_notification'),
|
181 |
+
__('Email for new application', 'shapepress-dsgvo'),
|
182 |
+
'',
|
183 |
+
__('If enabled a notification by email gets send to the email of the admin.', 'shapepress-dsgvo'));
|
184 |
+
?>
|
185 |
+
|
186 |
+
<?php
|
187 |
+
|
188 |
+
wp_enqueue_editor();
|
189 |
+
|
190 |
+
$title = !empty(SPDSGVOSettings::get('su_email_title')) ? SPDSGVOSettings::get('su_email_title') : __('Confirmation of delete request', 'shapepress-dsgvo');
|
191 |
+
$content = !empty(SPDSGVOSettings::get('su_email_content')) ? SPDSGVOSettings::get('su_email_content') : '';
|
192 |
+
?>
|
193 |
+
|
194 |
+
<?php
|
195 |
+
spDsgvoWriteInput('text', '', 'su_email_title', $title,
|
196 |
+
__('Title of the email', 'shapepress-dsgvo'),
|
197 |
+
'',
|
198 |
+
'');
|
199 |
+
?>
|
200 |
+
|
201 |
+
<?php
|
202 |
+
spDsgvoWriteInput('textarea', '', 'su_email_content', $content,
|
203 |
+
__('Content of the email', 'shapepress-dsgvo'),
|
204 |
+
'',
|
205 |
+
__('Specify the delete request email body. Use {{confirm_link}} for confirmation URL and {{website} for website URL.','shapepress-dsgvo'));
|
206 |
+
?>
|
207 |
+
|
208 |
+
</div>
|
209 |
+
|
210 |
+
<div class="form-group">
|
211 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Save changes', 'shapepress-dsgvo');?>">
|
212 |
+
</div>
|
213 |
+
</form>
|
214 |
+
</div>
|
215 |
+
</div>
|
216 |
+
</div>
|
217 |
+
|
218 |
+
<?php
|
219 |
+
$statuses = array(
|
220 |
+
'pending',
|
221 |
+
'done'
|
222 |
+
);
|
223 |
+
if (isset($_GET['status']) && in_array($_GET['status'], $statuses)) {
|
224 |
+
$status = sanitize_text_field($_GET['status']);
|
225 |
+
} else {
|
226 |
+
$status = 'pending';
|
227 |
+
}
|
228 |
+
?>
|
229 |
+
|
230 |
+
<div class="card col-12">
|
231 |
+
<div class="card-header">
|
232 |
+
<h4 class="card-title"><?php _e('Delete Requests', 'shapepress-dsgvo') ?></h4>
|
233 |
+
<small class="card-subtitle text-muted"><?php _e('Here you will find all deletion requests that users have made on their site. With a click on "delete now " you delete all stored data of the user on their side including Plugins.', 'shapepress-dsgvo') ?></small>
|
234 |
+
</div>
|
235 |
+
<div class="card-body">
|
236 |
+
<?php $confirmed = SPDSGVOUnsubscriber::finder('status', array('status' => $status)); ?>
|
237 |
+
<ul class="subsubsub">
|
238 |
+
<li>
|
239 |
+
<a
|
240 |
+
href="<?= SPDSGVO::adminURL(array('tab' => 'super-unsubscribe', 'status' => 'pending')) ?>"
|
241 |
+
class="<?= ($status === 'pending') ? 'current' : ''; ?>" aria-current="page">
|
242 |
+
<?php _e('Pending', 'shapepress-dsgvo') ?>
|
243 |
+
</a>
|
244 |
+
</li>
|
245 |
+
<li>
|
246 |
+
<a
|
247 |
+
href="<?= SPDSGVO::adminURL(array('tab' => 'super-unsubscribe', 'status' => 'done')) ?>"
|
248 |
+
class="<?= ($status === 'done') ? 'current' : ''; ?>" aria-current="page">
|
249 |
+
<?php _e('Done', 'shapepress-dsgvo') ?>
|
250 |
+
</a>
|
251 |
+
</li>
|
252 |
+
</ul>
|
253 |
+
<table class="table table-striped table-hover" cellspacing="0">
|
254 |
+
<thead>
|
255 |
+
|
256 |
+
<tr>
|
257 |
+
<th id="request_id" class="manage-column column-request_id"
|
258 |
+
scope="col" style="width: 10%"><?php _e('ID', 'shapepress-dsgvo') ?></th>
|
259 |
+
<th id="email" class="manage-column column-email" scope="col"
|
260 |
+
style="width: 20%"><?php _e('Email', 'shapepress-dsgvo') ?></th>
|
261 |
+
<th id="first_name" class="manage-column column-first_name"
|
262 |
+
scope="col" style="width: 15%"><?php _e('First name', 'shapepress-dsgvo') ?></th>
|
263 |
+
<th id="last_name" class="manage-column column-last_name" scope="col"
|
264 |
+
style="width: 15%"><?php _e('Last name', 'shapepress-dsgvo') ?></th>
|
265 |
+
<th id="dsgvo_accepted" class="manage-column column-dsgvo_accepted" scope="col"
|
266 |
+
style="width: 15%"><?php _e('GDPR approval', 'shapepress-dsgvo') ?></th>
|
267 |
+
<th id="status" class="manage-column column-status" scope="col"
|
268 |
+
style="width: 15%"><?php _e('State', 'shapepress-dsgvo') ?></th>
|
269 |
+
<th id="process" class="manage-column column-process" scope="col"
|
270 |
+
style="width: 15%"><?php _e('Delete now', 'shapepress-dsgvo') ?></th>
|
271 |
+
<!-- .i592995 -->
|
272 |
+
<th id="dismiss" class="manage-column column-dismiss" scope="col"
|
273 |
+
style="width: 15%"><?php _e('Dismiss', 'shapepress-dsgvo') ?></th>
|
274 |
+
<!-- .i592995 -->
|
275 |
+
</tr>
|
276 |
+
</thead>
|
277 |
+
|
278 |
+
<tbody>
|
279 |
+
<?php if (count($confirmed) !== 0): ?>
|
280 |
+
<?php foreach ($confirmed as $key => $confirmedRequest): ?>
|
281 |
+
|
282 |
+
<tr class="<?= ($key % 2 == 0) ? 'alternate' : '' ?>">
|
283 |
+
<td class="column-request-id">
|
284 |
+
<span class="wpk-services-table-name"><?php _e('ID', 'shapepress-dsgvo') ?></span>
|
285 |
+
<?= $confirmedRequest->ID ?>
|
286 |
+
</td>
|
287 |
+
<td class="column-email">
|
288 |
+
<span class="wpk-services-table-name"><?php _e('Email', 'shapepress-dsgvo') ?></span>
|
289 |
+
<strong><?= $confirmedRequest->email ?></strong>
|
290 |
+
</td>
|
291 |
+
<td class="column-integrations">
|
292 |
+
<span class="wpk-services-table-name"><?php _e('First name', 'shapepress-dsgvo') ?></span>
|
293 |
+
<?= $confirmedRequest->first_name ?>
|
294 |
+
</td>
|
295 |
+
<td class="column-auto-deleting-on">
|
296 |
+
<span class="wpk-services-table-name"><?php _e('Last name', 'shapepress-dsgvo') ?></span>
|
297 |
+
<?= $confirmedRequest->last_name ?>
|
298 |
+
</td>
|
299 |
+
<td class="column-auto-deleting-on">
|
300 |
+
<span class="wpk-services-table-name"><?php _e('GDPR approval', 'shapepress-dsgvo') ?></span>
|
301 |
+
<?= $confirmedRequest->dsgvo_accepted === '1' ? _e('Yes', 'shapepress-dsgvo') : _e('No', 'shapepress-dsgvo') ?>
|
302 |
+
</td>
|
303 |
+
<td class="column-auto-deleting-on">
|
304 |
+
<span class="wpk-services-table-name"><?php _e('State', 'shapepress-dsgvo') ?></span>
|
305 |
+
<?= ucfirst($confirmedRequest->status) ?>
|
306 |
+
</td>
|
307 |
+
<td class="column-unsubscribe-user">
|
308 |
+
<span class="wpk-services-table-name"><?php _e('Delete now', 'shapepress-dsgvo') ?></span>
|
309 |
+
<?php if ($status == 'done'): ?>
|
310 |
+
<a class="button-primary disabled" href="#"><?php _e('Delete', 'shapepress-dsgvo') ?></a>
|
311 |
+
<?php else: ?>
|
312 |
+
<a class="button-primary"
|
313 |
+
href="<?= wp_nonce_url(SPDSGVOSuperUnsubscribeAction::url(array('process' => $confirmedRequest->ID)),
|
314 |
+
SPDSGVOSuperUnsubscribeAction::getActionName() . '-nonce') ?>"><?php _e('Delete now', 'shapepress-dsgvo') ?></a>
|
315 |
+
<?php endif; ?>
|
316 |
+
</td>
|
317 |
+
<!-- .i592995 -->
|
318 |
+
<td class="column-dismiss">
|
319 |
+
<span class="wpk-services-table-name"><?php _e('Dismiss', 'shapepress-dsgvo') ?></span>
|
320 |
+
<svg class="unsubscribe-dismiss" width="10" height="10"
|
321 |
+
data-id="<?php echo $confirmedRequest->ID; ?>">
|
322 |
+
<line x1="0" y1="0" x2="10" y2="10"/>
|
323 |
+
<line x1="0" y1="10" x2="10" y2="0"/>
|
324 |
+
</svg>
|
325 |
+
</td>
|
326 |
+
<!-- .i592995 -->
|
327 |
+
</tr>
|
328 |
+
|
329 |
+
<?php endforeach; ?>
|
330 |
+
<?php else: ?>
|
331 |
+
<tr>
|
332 |
+
<td class="column-slug" colspan="6">
|
333 |
+
<?php if ($status == 'done'): ?>
|
334 |
+
<?php _e('No requests done', 'shapepress-dsgvo') ?>
|
335 |
+
<?php else: ?>
|
336 |
+
<?php _e('No pending requests', 'shapepress-dsgvo') ?>
|
337 |
+
<?php endif; ?>
|
338 |
+
</td>
|
339 |
+
<td class="column-default"></td>
|
340 |
+
<td class="column-reason"></td>
|
341 |
+
</tr>
|
342 |
+
<?php endif; ?>
|
343 |
+
</tbody>
|
344 |
+
|
345 |
+
<tfoot>
|
346 |
+
<tr>
|
347 |
+
<th class="manage-column column-request_id" scope="col"><?php _e('ID', 'shapepress-dsgvo') ?></th>
|
348 |
+
<th class="manage-column column-email" scope="col"><?php _e('Email', 'shapepress-dsgvo') ?></th>
|
349 |
+
<th class="manage-column column-first_name" scope="col"><?php _e('First name', 'shapepress-dsgvo') ?></th>
|
350 |
+
<th class="manage-column column-last_name" scope="col"><?php _e('Last name', 'shapepress-dsgvo') ?></th>
|
351 |
+
<th class="manage-column column-dsgvo_accepted"
|
352 |
+
scope="col"><?php _e('GDPR approval', 'shapepress-dsgvo') ?></th>
|
353 |
+
<th class="manage-column column-status" scope="col"><?php _e('State', 'shapepress-dsgvo') ?></th>
|
354 |
+
<th class="manage-column column-process" scope="col"><?php _e('Delete now', 'shapepress-dsgvo') ?></th>
|
355 |
+
<!-- .i592995 -->
|
356 |
+
<th class="manage-column column-dismiss" scope="col"><?php _e('Dismiss', 'shapepress-dsgvo') ?></th>
|
357 |
+
<!-- .i592995 -->
|
358 |
+
</tr>
|
359 |
+
</tfoot>
|
360 |
+
</table>
|
361 |
+
|
362 |
+
<?php if (isset($pending) && count($pending) !== 0): ?>
|
363 |
+
<p>
|
364 |
+
<a class="button-primary"
|
365 |
+
href="<?= wp_nonce_url(SPDSGVOSuperUnsubscribeAction::url(array('all' => '1')),
|
366 |
+
SPDSGVOSuperUnsubscribeAction::getActionName() . '-nonce') ?>"><?php _e('Delete all', 'shapepress-dsgvo') ?></a>
|
367 |
+
</p>
|
368 |
+
<?php endif; ?>
|
369 |
+
</div>
|
370 |
+
</div>
|
371 |
+
|
372 |
+
|
373 |
+
|
374 |
+
<div class="card-columns">
|
375 |
+
<div class="card">
|
376 |
+
<div class="card-header">
|
377 |
+
<h4 class="card-title"><?php _e('Add entry', 'shapepress-dsgvo') ?></h4>
|
378 |
+
<small class="card-subtitle text-danger"><?php _e('ATTENTION: Executing this action deletes the account (except administrators).', 'shapepress-dsgvo') ?></small>
|
379 |
+
</div>
|
380 |
+
<div class="card-body">
|
381 |
+
<form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
|
382 |
+
<input type="hidden" name="action"
|
383 |
+
value="<?= SPDSGVOSuperUnsubscribeFormAction::getActionName(); ?>"> <input
|
384 |
+
type="hidden" name="is_admin" value="1"> <br>
|
385 |
+
<?php wp_nonce_field(SPDSGVOSuperUnsubscribeFormAction::getActionName() . '-nonce'); ?>
|
386 |
+
|
387 |
+
<?php
|
388 |
+
spDsgvoWriteInput('text', '', 'email', '',
|
389 |
+
__('Email', 'shapepress-dsgvo'),
|
390 |
+
'',
|
391 |
+
'');
|
392 |
+
?>
|
393 |
+
|
394 |
+
<?php
|
395 |
+
spDsgvoWriteInput('text', '', 'first_name', '',
|
396 |
+
__('First name', 'shapepress-dsgvo'),
|
397 |
+
'',
|
398 |
+
'');
|
399 |
+
?>
|
400 |
+
|
401 |
+
<?php
|
402 |
+
spDsgvoWriteInput('text', '', 'last_name', '',
|
403 |
+
__('Last name', 'shapepress-dsgvo'),
|
404 |
+
'',
|
405 |
+
'');
|
406 |
+
?>
|
407 |
+
|
408 |
+
<?php
|
409 |
+
spDsgvoWriteInput('switch', '', 'dsgvo_checkbox', '',
|
410 |
+
__('GDPR confirmation', 'shapepress-dsgvo'),
|
411 |
+
'',
|
412 |
+
'');
|
413 |
+
?>
|
414 |
+
|
415 |
+
<?php
|
416 |
+
spDsgvoWriteInput('switch', '', 'process_now', '',
|
417 |
+
__('Run without user confirmation', 'shapepress-dsgvo'),
|
418 |
+
'',
|
419 |
+
'');
|
420 |
+
?>
|
421 |
+
<?php
|
422 |
+
spDsgvoWriteInput('switch', '', 'display_email', '',
|
423 |
+
__('Show email', 'shapepress-dsgvo'),
|
424 |
+
'',
|
425 |
+
'');
|
426 |
+
?>
|
427 |
+
<div class="form-group">
|
428 |
+
<input type="submit" class="btn btn-primary btn-block" value="<?= _e('Add entry', 'shapepress-dsgvo');?>">
|
429 |
+
</div>
|
430 |
+
</form>
|
431 |
+
</div>
|
432 |
+
</div>
|
433 |
+
</div>
|
admin/tabs/v3/targeting/class-sp-dsgvo-targeting-action.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOTargetingIntegrationAction extends SPDSGVOAjaxAction{
|
4 |
+
|
5 |
+
protected $action = 'admin-targeting-integrations';
|
6 |
+
|
7 |
+
|
8 |
+
|
9 |
+
|
10 |
+
protected function run(){
|
11 |
+
$this->checkCSRF();
|
12 |
+
$this->requireAdmin();
|
13 |
+
|
14 |
+
|
15 |
+
$this->returnBack();
|
16 |
+
}
|
17 |
+
}
|
18 |
+
|
19 |
+
SPDSGVOTargetingIntegrationAction::listen();
|
admin/tabs/v3/targeting/class-sp-dsgvo-targeting-tab.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOTargetingIntegrationsTab extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $title = 'Targeting';
|
6 |
+
public $slug = 'targeting-integrations';
|
7 |
+
public $isHidden = FALSE;
|
8 |
+
|
9 |
+
public function __construct(){
|
10 |
+
|
11 |
+
$this->title = __('Targeting','shapepress-dsgvo');
|
12 |
+
}
|
13 |
+
|
14 |
+
public function page(){
|
15 |
+
include plugin_dir_path(__FILE__) .'page.php';
|
16 |
+
}
|
17 |
+
}
|
admin/tabs/v3/targeting/page.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$isPremium = isValidPremiumEdition();
|
3 |
+
$isBlog = isValidBlogEdition();
|
4 |
+
$hasValidLicense = isValidPremiumEdition() || isValidBlogEdition();
|
5 |
+
|
6 |
+
?>
|
7 |
+
|
8 |
+
<div class="card-columns">
|
9 |
+
|
10 |
+
|
11 |
+
|
12 |
+
|
13 |
+
<?php
|
14 |
+
$integrations = SPDSGVOIntegration::getAllIntegrations(SPDSGVOConstants::CATEGORY_SLUG_TARGETING, FALSE);
|
15 |
+
?>
|
16 |
+
<?php if(count($integrations) === 0): ?>
|
17 |
+
|
18 |
+
<div class="card">
|
19 |
+
<div class="card-header"><?php _e('Information','shapepress-dsgvo')?></div>
|
20 |
+
<div class="card-body"><?php _e('No integrations installed','shapepress-dsgvo')?></div>
|
21 |
+
</div>
|
22 |
+
</div>
|
23 |
+
|
24 |
+
<?php else: ?>
|
25 |
+
|
26 |
+
<?php foreach($integrations as $key => $integration): ?>
|
27 |
+
|
28 |
+
<?php $integration->view() ?>
|
29 |
+
|
30 |
+
<?php endforeach; ?>
|
31 |
+
<?php endif; ?>
|
32 |
+
|
33 |
+
</div>
|
34 |
+
|
imprint.txt
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
[company_name]
|
2 |
-
Inhaber: [company_owner]
|
3 |
-
[adress_street]
|
4 |
-
[adress_zip_location]
|
5 |
-
|
6 |
-
Geschäftsführung: [company_law_person]
|
7 |
-
Gesellschafter: [company_management]
|
8 |
-
|
9 |
-
Telefonnummer: [comm_phone]
|
10 |
-
E-Mailadresse: [comm_email]
|
11 |
-
|
12 |
-
Registergericht & Registernummer: [company_register_court], [company_register_nr]
|
13 |
-
|
14 |
-
Umsatzsteuer-Identifikationsnummer: [company_uid]
|
15 |
-
|
16 |
-
Inhaltlich verantwortlich: [content_responsible]
|
17 |
-
|
18 |
-
Plattform der Europäischen Kommission zur Online-Streitbeilegung (OS) für Verbraucher: <a href"https://ec.europa.eu/consumers/odr/" target="_blank">https://ec.europa.eu/consumers/odr/</a>. Wir sind nicht bereit und nicht verpflichtet an einem Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/class-sp-dsgvo-activator.php
CHANGED
@@ -1,35 +1,35 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Fired during plugin activation
|
5 |
-
*
|
6 |
-
* @link http://example.com
|
7 |
-
* @since 1.0.0
|
8 |
-
*
|
9 |
-
* @package WP DSGVO Tools
|
10 |
-
* @subpackage WP DSGVO Tools/includes
|
11 |
-
*/
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Fired during plugin activation.
|
15 |
-
*
|
16 |
-
* This class defines all code necessary to run during the plugin's activation.
|
17 |
-
*
|
18 |
-
* @since 1.0.0
|
19 |
-
* @package WP DSGVO Tools
|
20 |
-
* @subpackage WP DSGVO Tools/includes
|
21 |
-
* @author Shapepress eU
|
22 |
-
*/
|
23 |
-
class SPDSGVOActivator {
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Short Description. (use period)
|
27 |
-
*
|
28 |
-
* Long Description.
|
29 |
-
*
|
30 |
-
* @since 1.0.0
|
31 |
-
*/
|
32 |
-
public static function activate() {
|
33 |
-
|
34 |
-
}
|
35 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Fired during plugin activation
|
5 |
+
*
|
6 |
+
* @link http://example.com
|
7 |
+
* @since 1.0.0
|
8 |
+
*
|
9 |
+
* @package WP DSGVO Tools
|
10 |
+
* @subpackage WP DSGVO Tools/includes
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Fired during plugin activation.
|
15 |
+
*
|
16 |
+
* This class defines all code necessary to run during the plugin's activation.
|
17 |
+
*
|
18 |
+
* @since 1.0.0
|
19 |
+
* @package WP DSGVO Tools
|
20 |
+
* @subpackage WP DSGVO Tools/includes
|
21 |
+
* @author Shapepress eU
|
22 |
+
*/
|
23 |
+
class SPDSGVOActivator {
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Short Description. (use period)
|
27 |
+
*
|
28 |
+
* Long Description.
|
29 |
+
*
|
30 |
+
* @since 1.0.0
|
31 |
+
*/
|
32 |
+
public static function activate() {
|
33 |
+
|
34 |
+
}
|
35 |
+
}
|
includes/class-sp-dsgvo-ajax-action.php
CHANGED
@@ -1,240 +1,220 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* The file that defines the core plugin class
|
5 |
-
*
|
6 |
-
* A class definition that includes attributes and functions used across both the
|
7 |
-
* public-facing side of the site and the admin area.
|
8 |
-
*
|
9 |
-
* @link https://wp-dsgvo.eu
|
10 |
-
* @since 1.0.0
|
11 |
-
*
|
12 |
-
* @package WP DSGVO Tools
|
13 |
-
* @subpackage WP DSGVO Tools/includes
|
14 |
-
*/
|
15 |
-
|
16 |
-
/**
|
17 |
-
* The core plugin class.
|
18 |
-
*
|
19 |
-
* This is used to define internationalization, admin-specific hooks, and
|
20 |
-
* public-facing site hooks.
|
21 |
-
*
|
22 |
-
* Also maintains the unique identifier of this plugin as well as the current
|
23 |
-
* version of the plugin.
|
24 |
-
*
|
25 |
-
* @since 1.0.0
|
26 |
-
* @package WP DSGVO Tools
|
27 |
-
* @subpackage WP DSGVO Tools/includes
|
28 |
-
* @author Shapepress eU
|
29 |
-
*/
|
30 |
-
abstract class SPDSGVOAjaxAction{
|
31 |
-
|
32 |
-
protected $action;
|
33 |
-
public $request;
|
34 |
-
public $user;
|
35 |
-
|
36 |
-
abstract protected function run();
|
37 |
-
|
38 |
-
public function __construct(){
|
39 |
-
$this->request = $_REQUEST;
|
40 |
-
if($this->isLoggedIn()){
|
41 |
-
$this->user = wp_get_current_user();
|
42 |
-
}
|
43 |
-
}
|
44 |
-
|
45 |
-
public static function boot(){
|
46 |
-
$class = self::getClassName();
|
47 |
-
$action = new $class;
|
48 |
-
$action->run();
|
49 |
-
|
50 |
-
if($action->has('href')){
|
51 |
-
wp_redirect($action->get('href'));
|
52 |
-
}else{
|
53 |
-
if(isset($_SERVER['HTTP_REFERER'])) {
|
54 |
-
header('Location: '. $_SERVER['HTTP_REFERER']);
|
55 |
-
}
|
56 |
-
else
|
57 |
-
{
|
58 |
-
//it was not sent, perform your default actions here
|
59 |
-
}
|
60 |
-
|
61 |
-
}
|
62 |
-
|
63 |
-
die;
|
64 |
-
}
|
65 |
-
|
66 |
-
public static function listen($public = TRUE){
|
67 |
-
$actionName = self::getActionName();
|
68 |
-
$className = self::getClassName();
|
69 |
-
add_action("wp_ajax_{$actionName}", array($className, 'boot'));
|
70 |
-
|
71 |
-
if($public){
|
72 |
-
add_action("wp_ajax_nopriv_{$actionName}", array($className, 'boot'));
|
73 |
-
}
|
74 |
-
}
|
75 |
-
|
76 |
-
|
77 |
-
// -----------------------------------------------------
|
78 |
-
// UTILITY METHODS
|
79 |
-
// -----------------------------------------------------
|
80 |
-
public static function getClassName(){
|
81 |
-
return get_called_class();
|
82 |
-
}
|
83 |
-
|
84 |
-
public static function formURL(){
|
85 |
-
return admin_url('/admin-ajax.php');
|
86 |
-
}
|
87 |
-
|
88 |
-
public static function getActionName(){
|
89 |
-
$class = self::getClassName();
|
90 |
-
$reflection = new ReflectionClass($class);
|
91 |
-
$action = $reflection->newInstanceWithoutConstructor();
|
92 |
-
if(!isset($action->action)){
|
93 |
-
throw new Exception(__("Public property \$action not provied", 'shapepress-dsgvo'));
|
94 |
-
}
|
95 |
-
return $action->action;
|
96 |
-
}
|
97 |
-
|
98 |
-
public function requireAdmin(){
|
99 |
-
if(!current_user_can('administrator')){
|
100 |
-
echo '0';
|
101 |
-
die;
|
102 |
-
}
|
103 |
-
}
|
104 |
-
|
105 |
-
public function checkCSRF(){
|
106 |
-
|
107 |
-
$actionName = self::getActionName().'-nonce';
|
108 |
-
$submittedNonce = $_REQUEST['_wpnonce'];
|
109 |
-
|
110 |
-
if ( wp_verify_nonce( $submittedNonce, $actionName ) ) {
|
111 |
-
return TRUE;
|
112 |
-
} else
|
113 |
-
{
|
114 |
-
echo 'CSRF ERROR: Nonce not valid';
|
115 |
-
die;
|
116 |
-
//return FALSE;
|
117 |
-
}
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
}
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
public function
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
public
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
public function
|
212 |
-
if(
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
$url .= '?'. http_build_query($params);
|
222 |
-
header('Location: '. $url);
|
223 |
-
die();
|
224 |
-
}
|
225 |
-
|
226 |
-
/**
|
227 |
-
* @param string|array $type The type of request you want to check. If an array
|
228 |
-
* this method will return true if the request matches any type.
|
229 |
-
* @return [type] [description]
|
230 |
-
*/
|
231 |
-
public function requestType($requestType = NULL){
|
232 |
-
if(!is_null($requestType)){
|
233 |
-
if(is_array($requestType)){
|
234 |
-
return in_array($_SERVER['REQUEST_METHOD'], array_map('strtoupper', $requestType));
|
235 |
-
}
|
236 |
-
return ($_SERVER['REQUEST_METHOD'] === strtoupper($requestType));
|
237 |
-
}
|
238 |
-
return $_SERVER['REQUEST_METHOD'];
|
239 |
-
}
|
240 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* The file that defines the core plugin class
|
5 |
+
*
|
6 |
+
* A class definition that includes attributes and functions used across both the
|
7 |
+
* public-facing side of the site and the admin area.
|
8 |
+
*
|
9 |
+
* @link https://wp-dsgvo.eu
|
10 |
+
* @since 1.0.0
|
11 |
+
*
|
12 |
+
* @package WP DSGVO Tools
|
13 |
+
* @subpackage WP DSGVO Tools/includes
|
14 |
+
*/
|
15 |
+
|
16 |
+
/**
|
17 |
+
* The core plugin class.
|
18 |
+
*
|
19 |
+
* This is used to define internationalization, admin-specific hooks, and
|
20 |
+
* public-facing site hooks.
|
21 |
+
*
|
22 |
+
* Also maintains the unique identifier of this plugin as well as the current
|
23 |
+
* version of the plugin.
|
24 |
+
*
|
25 |
+
* @since 1.0.0
|
26 |
+
* @package WP DSGVO Tools
|
27 |
+
* @subpackage WP DSGVO Tools/includes
|
28 |
+
* @author Shapepress eU
|
29 |
+
*/
|
30 |
+
abstract class SPDSGVOAjaxAction{
|
31 |
+
|
32 |
+
protected $action;
|
33 |
+
public $request;
|
34 |
+
public $user;
|
35 |
+
|
36 |
+
abstract protected function run();
|
37 |
+
|
38 |
+
public function __construct(){
|
39 |
+
$this->request = $_REQUEST;
|
40 |
+
if($this->isLoggedIn()){
|
41 |
+
$this->user = wp_get_current_user();
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
public static function boot(){
|
46 |
+
$class = self::getClassName();
|
47 |
+
$action = new $class;
|
48 |
+
$action->run();
|
49 |
+
|
50 |
+
if($action->has('href')){
|
51 |
+
wp_redirect($action->get('href'));
|
52 |
+
}else{
|
53 |
+
if(isset($_SERVER['HTTP_REFERER'])) {
|
54 |
+
header('Location: '. $_SERVER['HTTP_REFERER']);
|
55 |
+
}
|
56 |
+
else
|
57 |
+
{
|
58 |
+
//it was not sent, perform your default actions here
|
59 |
+
}
|
60 |
+
|
61 |
+
}
|
62 |
+
|
63 |
+
die;
|
64 |
+
}
|
65 |
+
|
66 |
+
public static function listen($public = TRUE){
|
67 |
+
$actionName = self::getActionName();
|
68 |
+
$className = self::getClassName();
|
69 |
+
add_action("wp_ajax_{$actionName}", array($className, 'boot'));
|
70 |
+
|
71 |
+
if($public){
|
72 |
+
add_action("wp_ajax_nopriv_{$actionName}", array($className, 'boot'));
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
|
77 |
+
// -----------------------------------------------------
|
78 |
+
// UTILITY METHODS
|
79 |
+
// -----------------------------------------------------
|
80 |
+
public static function getClassName(){
|
81 |
+
return get_called_class();
|
82 |
+
}
|
83 |
+
|
84 |
+
public static function formURL(){
|
85 |
+
return admin_url('/admin-ajax.php');
|
86 |
+
}
|
87 |
+
|
88 |
+
public static function getActionName(){
|
89 |
+
$class = self::getClassName();
|
90 |
+
$reflection = new ReflectionClass($class);
|
91 |
+
$action = $reflection->newInstanceWithoutConstructor();
|
92 |
+
if(!isset($action->action)){
|
93 |
+
throw new Exception(__("Public property \$action not provied", 'shapepress-dsgvo'));
|
94 |
+
}
|
95 |
+
return $action->action;
|
96 |
+
}
|
97 |
+
|
98 |
+
public function requireAdmin(){
|
99 |
+
if(!current_user_can('administrator')){
|
100 |
+
echo '0';
|
101 |
+
die;
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
public function checkCSRF(){
|
106 |
+
|
107 |
+
$actionName = self::getActionName().'-nonce';
|
108 |
+
$submittedNonce = $_REQUEST['_wpnonce'];
|
109 |
+
|
110 |
+
if ( wp_verify_nonce( $submittedNonce, $actionName ) ) {
|
111 |
+
return TRUE;
|
112 |
+
} else
|
113 |
+
{
|
114 |
+
echo 'CSRF ERROR: Nonce not valid';
|
115 |
+
die;
|
116 |
+
//return FALSE;
|
117 |
+
}
|
118 |
+
|
119 |
+
}
|
120 |
+
|
121 |
+
public function error($message){
|
122 |
+
echo $message;
|
123 |
+
die();
|
124 |
+
}
|
125 |
+
|
126 |
+
|
127 |
+
// -----------------------------------------------------
|
128 |
+
// JSONResponse
|
129 |
+
// -----------------------------------------------------
|
130 |
+
public function JSONResponse($response){
|
131 |
+
wp_send_json($response);
|
132 |
+
}
|
133 |
+
|
134 |
+
|
135 |
+
// -----------------------------------------------------
|
136 |
+
// Helpers
|
137 |
+
// -----------------------------------------------------
|
138 |
+
public static function ajaxURL(){
|
139 |
+
?>
|
140 |
+
<script type="text/javascript">
|
141 |
+
var ajaxurl = '<?php echo admin_url('/admin-ajax.php'); ?>';
|
142 |
+
</script>
|
143 |
+
<?php
|
144 |
+
}
|
145 |
+
|
146 |
+
public static function WP_HeadAjaxURL(){
|
147 |
+
add_action('wp_head', array('WP_AJAX', 'ajaxURL'));
|
148 |
+
}
|
149 |
+
|
150 |
+
public static function url($params = array()){
|
151 |
+
$params = http_build_query(array_merge(array(
|
152 |
+
'action' => (new static())->action,
|
153 |
+
), $params));
|
154 |
+
|
155 |
+
return admin_url('/admin-ajax.php') .'?'. $params;
|
156 |
+
}
|
157 |
+
|
158 |
+
public function isLoggedIn(){
|
159 |
+
return is_user_logged_in();
|
160 |
+
}
|
161 |
+
|
162 |
+
public function has($key){
|
163 |
+
if(isset($this->request[$key])){
|
164 |
+
return TRUE;
|
165 |
+
}
|
166 |
+
return FALSE;
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Get parameter from $_REQUEST array
|
171 |
+
* @param string $key key
|
172 |
+
* @param string $default default string
|
173 |
+
* @return mixed
|
174 |
+
*/
|
175 |
+
public function get($key, $default = NULL, $stripslashes = TRUE){
|
176 |
+
if($this->has($key)){
|
177 |
+
|
178 |
+
if(is_array($this->request[$key])){
|
179 |
+
return $this->request[$key];
|
180 |
+
}
|
181 |
+
|
182 |
+
if($stripslashes){
|
183 |
+
return stripslashes($this->request[$key]);
|
184 |
+
}
|
185 |
+
|
186 |
+
return $this->request[$key];
|
187 |
+
}
|
188 |
+
return $default;
|
189 |
+
}
|
190 |
+
|
191 |
+
public function returnBack(){
|
192 |
+
if(isset($_SERVER['HTTP_REFERER'])){
|
193 |
+
header('Location: '. $_SERVER['HTTP_REFERER']);
|
194 |
+
die();
|
195 |
+
}
|
196 |
+
|
197 |
+
return FALSE;
|
198 |
+
}
|
199 |
+
|
200 |
+
public function returnRedirect($url, $params = array()){
|
201 |
+
$url .= '?'. http_build_query($params);
|
202 |
+
header('Location: '. $url);
|
203 |
+
die();
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* @param string|array $type The type of request you want to check. If an array
|
208 |
+
* this method will return true if the request matches any type.
|
209 |
+
* @return [type] [description]
|
210 |
+
*/
|
211 |
+
public function requestType($requestType = NULL){
|
212 |
+
if(!is_null($requestType)){
|
213 |
+
if(is_array($requestType)){
|
214 |
+
return in_array($_SERVER['REQUEST_METHOD'], array_map('strtoupper', $requestType));
|
215 |
+
}
|
216 |
+
return ($_SERVER['REQUEST_METHOD'] === strtoupper($requestType));
|
217 |
+
}
|
218 |
+
return $_SERVER['REQUEST_METHOD'];
|
219 |
+
}
|
220 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/class-sp-dsgvo-cache-manager.php
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOCacheManager
|
4 |
+
{
|
5 |
+
|
6 |
+
public static function clearCaches()
|
7 |
+
{
|
8 |
+
try {
|
9 |
+
|
10 |
+
// clear autoptimize
|
11 |
+
if (class_exists('autoptimizeCache')) {
|
12 |
+
if (function_exists('autoptimizeCache')) {
|
13 |
+
autoptimizeCache::clearall();
|
14 |
+
}
|
15 |
+
}
|
16 |
+
|
17 |
+
// Clear Litespeed cache
|
18 |
+
method_exists('LiteSpeed_Cache_API', 'purge_all') && LiteSpeed_Cache_API::purge_all();
|
19 |
+
|
20 |
+
// WP Super Cache
|
21 |
+
if (function_exists('wp_cache_clear_cache'))
|
22 |
+
{
|
23 |
+
wp_cache_clear_cache();
|
24 |
+
}
|
25 |
+
// W3 Total Cache
|
26 |
+
if (function_exists('w3tc_pgcache_flush'))
|
27 |
+
{
|
28 |
+
w3tc_pgcache_flush();
|
29 |
+
}
|
30 |
+
// Site Ground Cache
|
31 |
+
if (class_exists('SG_CachePress_Supercacher') && method_exists('SG_CachePress_Supercacher ', 'purge_cache'))
|
32 |
+
{
|
33 |
+
SG_CachePress_Supercacher::purge_cache(true);
|
34 |
+
}
|
35 |
+
// Endurance Cache
|
36 |
+
if (class_exists('Endurance_Page_Cache'))
|
37 |
+
{
|
38 |
+
$e = new Endurance_Page_Cache;
|
39 |
+
$e->purge_all();
|
40 |
+
}
|
41 |
+
// WP Fastest Cache
|
42 |
+
if (isset($GLOBALS['wp_fastest_cache']) && method_exists($GLOBALS['wp_fastest_cache'], 'deleteCache'))
|
43 |
+
{
|
44 |
+
$GLOBALS['wp_fastest_cache']->deleteCache(true);
|
45 |
+
}
|
46 |
+
|
47 |
+
} catch (Exception $e) {
|
48 |
+
}
|
49 |
+
}
|
50 |
+
}
|
includes/class-sp-dsgvo-constants.php
ADDED
@@ -0,0 +1,418 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOConstants
|
4 |
+
{
|
5 |
+
const CATEGORY_SLUG_STATISTICS = 'statistics';
|
6 |
+
const CATEGORY_SLUG_TARGETING = 'targeting';
|
7 |
+
const CATEGORY_SLUG_EMBEDDINGS = 'embeddings';
|
8 |
+
const CATEGORY_SLUG_LIVECHAT = 'live-chat';
|
9 |
+
const CATEGORY_SLUG_CHATBOTS = 'chat-bots';
|
10 |
+
const CATEGORY_SLUG_PLUGINS = 'plugins';
|
11 |
+
const CATEGORY_SLUG_MANDATORY = 'necessary';
|
12 |
+
|
13 |
+
|
14 |
+
|
15 |
+
const LEGAL_WEB_BASE_URL = "https://www.legalweb.io";
|
16 |
+
const LEGAL_WEB_TEXT_SERVICE_URL = 'https://www.legalweb.io/textservice/textService.php';
|
17 |
+
const LEGAL_WEB_TEXT_SERVICE_VERSION = '1';
|
18 |
+
|
19 |
+
const CCOKIE_NAME = 'sp_dsgvo_cookie_settings';
|
20 |
+
const CCOKIE_NAME_INTEGRATION = 'sp_dsgvo_integration_settings';
|
21 |
+
|
22 |
+
const OPTIONS_PREFIX = "sp_dsgvo_";
|
23 |
+
|
24 |
+
public static function getSecurityServices()
|
25 |
+
{
|
26 |
+
return array('local-security-question' => 'Eine lokale Sicherheitsabfrage',
|
27 |
+
'google-recaptcha' => 'Google reCAPTCHA',
|
28 |
+
'other' => 'Sonstige');
|
29 |
+
}
|
30 |
+
|
31 |
+
public static function getCDNServers()
|
32 |
+
{
|
33 |
+
return array('akamai-cdn' => 'Akamai CDN',
|
34 |
+
'aws-cloudfront-cdn' => 'AWS Cloudfront CDN',
|
35 |
+
'azure-cdn' => 'Azure CDN',
|
36 |
+
'bunny-cdn' => 'Bunny CDN',
|
37 |
+
'cachefly' => 'CacheFly',
|
38 |
+
'cdn-net' => 'CDN.NET',
|
39 |
+
'cdn-77' => 'CDN 77',
|
40 |
+
'cloudflare' => 'Cloudflare CDN',
|
41 |
+
'fastly-cdn' => 'Fastly CDN',
|
42 |
+
'google-cloud' => 'Google Cloud CDN',
|
43 |
+
'g-core-labs-cdn' => 'G-Core Labs CDN',
|
44 |
+
//'key' => 'Key CDN',
|
45 |
+
'medianova' => 'Medianova',
|
46 |
+
'ovh-cdn' => 'OVH CDN',
|
47 |
+
'stackpath' => 'StackPath',
|
48 |
+
'other' => __('Other Server','shapepress-dsvgo')
|
49 |
+
);
|
50 |
+
}
|
51 |
+
|
52 |
+
public static function getHostingProvider()
|
53 |
+
{
|
54 |
+
return array (
|
55 |
+
'eins-und-eins-ionos-se' => '1&1 IONOS SE',
|
56 |
+
'einsblue' => '1blu',
|
57 |
+
'amazon-aws' => 'Amazon AWS',
|
58 |
+
'alfahosting' => 'Alfahosting',
|
59 |
+
'all-inkl' => 'All-inkl.com',
|
60 |
+
'awardspace' => 'Awardspace',
|
61 |
+
'contabo' => 'Contabo',
|
62 |
+
'dogado' => 'Dogado',
|
63 |
+
'domainfactory' => 'domainfactory GmbH',
|
64 |
+
'dzwi' => 'DWZI GmbH',
|
65 |
+
'godaddy' => 'GoDaddy',
|
66 |
+
'hetzner' => 'Hetzner Online GmbH',
|
67 |
+
'host-europe' => 'Host Europe GmbH',
|
68 |
+
'host-profis' => 'HostProfis ISP Telekom GmbH',
|
69 |
+
'lima-city' => 'Lima City',
|
70 |
+
'magenta' => 'Magenta-/ T-Mobile Austria GmbH',
|
71 |
+
'mittwald' => 'Mittwald CM Service GmbH & Co. KG',
|
72 |
+
'microsoft-azure' => 'Microsoft Azure',
|
73 |
+
'netcup' => 'Netcup',
|
74 |
+
'platform-sh' => 'platformSH',
|
75 |
+
'rackspace' => 'Rackspace',
|
76 |
+
'raidboxes' => 'Raidboxes',
|
77 |
+
'schlundtech' => 'Schlundtech',
|
78 |
+
'siteground' => 'SiteGround',
|
79 |
+
'strato' => 'Strato',
|
80 |
+
'telekom-austria' => 'Telekom Austria AG',
|
81 |
+
'uniteddomains' => 'UnitedDomains',
|
82 |
+
'vautron' => 'Vautron Rechenzentrum AG',
|
83 |
+
'webgo' => 'webgo',
|
84 |
+
'worldfouryou' => 'World4You Internet Services GmbH',
|
85 |
+
//'wix' => 'wix.com',
|
86 |
+
'zap-hosting' => 'ZAP-Hosting',
|
87 |
+
'other' => __('Other Provider','shapepress-dsvgo')
|
88 |
+
);
|
89 |
+
}
|
90 |
+
|
91 |
+
public static function getFontServices()
|
92 |
+
{
|
93 |
+
return array('google-fonts' => 'Google Fonts',
|
94 |
+
'adobe-fonts' => 'Adobe Fonts',
|
95 |
+
'fontawesome' => 'Font Awesome',
|
96 |
+
'fonts-com' => 'Fonts.com');
|
97 |
+
}
|
98 |
+
|
99 |
+
public static function getPaymentProvider()
|
100 |
+
{
|
101 |
+
return array (
|
102 |
+
'cash' => __('Cash','shapepress-dsgvo'),
|
103 |
+
'cod' => __('Cash on delivery','shapepress-dsgvo'),
|
104 |
+
'bank-transfer' => __('Bank Transfer','shapepress-dsgvo'),
|
105 |
+
'ein-und-eins' => '1 & 1 ipayment',
|
106 |
+
'amazon-pay' => 'Amazon Pay',
|
107 |
+
'apple-pay' => 'Apple Pay',
|
108 |
+
'arvato' => 'Arvato Infoscore',
|
109 |
+
'bs-card-service' => 'B+S Card Services',
|
110 |
+
'commdoo' => 'Commdoo',
|
111 |
+
'concardis' => 'Concardis',
|
112 |
+
'deutsche-card-services' => 'Deutsche Card Services',
|
113 |
+
'docdata-payments' => 'Docdata Payments',
|
114 |
+
'easycash' => 'Easycash',
|
115 |
+
'easypay' => 'Easypay',
|
116 |
+
'ecardon' => 'Ecardon',
|
117 |
+
'eos' => 'EOS',
|
118 |
+
'google-pay' => 'Google Pay',
|
119 |
+
'heidelpay' => 'Heidelpay',
|
120 |
+
'klarna' => 'Klarna',
|
121 |
+
'girosolution' => 'Girosolution',
|
122 |
+
'micropayment' => 'Micropayment',
|
123 |
+
'mpay' => 'mPay24',
|
124 |
+
'novalnet' => 'Novalnet',
|
125 |
+
'paymorrow' => 'Paymorrow',
|
126 |
+
'payone' => 'PAYONE',
|
127 |
+
'paypal' => 'PayPal',
|
128 |
+
'secupay' => 'Secupay',
|
129 |
+
'stripe' => 'Stripe',
|
130 |
+
'telecash' => 'Telecash',
|
131 |
+
'vr-pay-virtuell' => 'VR-Pay Virtuell',
|
132 |
+
'wirecard' => 'Wirecard',
|
133 |
+
);
|
134 |
+
}
|
135 |
+
|
136 |
+
public static function getEmbeddingIntegrations()
|
137 |
+
{
|
138 |
+
return array(
|
139 |
+
'google-maps' => 'Google Maps',
|
140 |
+
'open-street-map' => 'OpenStreetMap',
|
141 |
+
'youtube' => 'YouTube',
|
142 |
+
'vimeo' => 'Vimeo'
|
143 |
+
);
|
144 |
+
}
|
145 |
+
|
146 |
+
public static function getNewsletterIntegrations()
|
147 |
+
{
|
148 |
+
return array(
|
149 |
+
'own' => __('By own web/email server','shapepress-dsvgo'),
|
150 |
+
'aweber' => 'AWeber',
|
151 |
+
'active-campaign' => 'ActiveCampaign',
|
152 |
+
'clever-research' => 'CleverReach',
|
153 |
+
'mail-chimp' => 'MailChimp',
|
154 |
+
'mail-jet' => 'Mailjet',
|
155 |
+
'mailpoet' => 'MailPoet',
|
156 |
+
'newsletter-2-go' => 'newslettertwogo',
|
157 |
+
'rapid-mail' => 'Rapidmail',
|
158 |
+
'other' => __('Other','shapepress-dsvgo')
|
159 |
+
);
|
160 |
+
}
|
161 |
+
|
162 |
+
|
163 |
+
public static function getCountries()
|
164 |
+
{
|
165 |
+
return array(
|
166 |
+
'AF' => __('Afghanistan', 'shapepress-dsgvo'),
|
167 |
+
'AX' => __('Åland Islands', 'shapepress-dsgvo'),
|
168 |
+
'AL' => __('Albania', 'shapepress-dsgvo'),
|
169 |
+
'DZ' => __('Algeria', 'shapepress-dsgvo'),
|
170 |
+
'AS' => __('American Samoa', 'shapepress-dsgvo'),
|
171 |
+
'AD' => __('Andorra', 'shapepress-dsgvo'),
|
172 |
+
'AO' => __('Angola', 'shapepress-dsgvo'),
|
173 |
+
'AI' => __('Anguilla', 'shapepress-dsgvo'),
|
174 |
+
'AQ' => __('Antarctica', 'shapepress-dsgvo'),
|
175 |
+
'AG' => __('Antigua and Barbuda', 'shapepress-dsgvo'),
|
176 |
+
'AR' => __('Argentina', 'shapepress-dsgvo'),
|
177 |
+
'AM' => __('Armenia', 'shapepress-dsgvo'),
|
178 |
+
'AW' => __('Aruba', 'shapepress-dsgvo'),
|
179 |
+
'AU' => __('Australia', 'shapepress-dsgvo'),
|
180 |
+
'AT' => __('Austria', 'shapepress-dsgvo'),
|
181 |
+
'AZ' => __('Azerbaijan', 'shapepress-dsgvo'),
|
182 |
+
'BS' => __('Bahamas', 'shapepress-dsgvo'),
|
183 |
+
'BH' => __('Bahrain', 'shapepress-dsgvo'),
|
184 |
+
'BD' => __('Bangladesh', 'shapepress-dsgvo'),
|
185 |
+
'BB' => __('Barbados', 'shapepress-dsgvo'),
|
186 |
+
'BY' => __('Belarus', 'shapepress-dsgvo'),
|
187 |
+
'BE' => __('Belgium', 'shapepress-dsgvo'),
|
188 |
+
'PW' => __('Belau', 'shapepress-dsgvo'),
|
189 |
+
'BZ' => __('Belize', 'shapepress-dsgvo'),
|
190 |
+
'BJ' => __('Benin', 'shapepress-dsgvo'),
|
191 |
+
'BM' => __('Bermuda', 'shapepress-dsgvo'),
|
192 |
+
'BT' => __('Bhutan', 'shapepress-dsgvo'),
|
193 |
+
'BO' => __('Bolivia', 'shapepress-dsgvo'),
|
194 |
+
'BQ' => __('Bonaire, Saint Eustatius and Saba', 'shapepress-dsgvo'),
|
195 |
+
'BA' => __('Bosnia and Herzegovina', 'shapepress-dsgvo'),
|
196 |
+
'BW' => __('Botswana', 'shapepress-dsgvo'),
|
197 |
+
'BV' => __('Bouvet Island', 'shapepress-dsgvo'),
|
198 |
+
'BR' => __('Brazil', 'shapepress-dsgvo'),
|
199 |
+
'IO' => __('British Indian Ocean Territory', 'shapepress-dsgvo'),
|
200 |
+
'BN' => __('Brunei', 'shapepress-dsgvo'),
|
201 |
+
'BG' => __('Bulgaria', 'shapepress-dsgvo'),
|
202 |
+
'BF' => __('Burkina Faso', 'shapepress-dsgvo'),
|
203 |
+
'BI' => __('Burundi', 'shapepress-dsgvo'),
|
204 |
+
'KH' => __('Cambodia', 'shapepress-dsgvo'),
|
205 |
+
'CM' => __('Cameroon', 'shapepress-dsgvo'),
|
206 |
+
'CA' => __('Canada', 'shapepress-dsgvo'),
|
207 |
+
'CV' => __('Cape Verde', 'shapepress-dsgvo'),
|
208 |
+
'KY' => __('Cayman Islands', 'shapepress-dsgvo'),
|
209 |
+
'CF' => __('Central African Republic', 'shapepress-dsgvo'),
|
210 |
+
'TD' => __('Chad', 'shapepress-dsgvo'),
|
211 |
+
'CL' => __('Chile', 'shapepress-dsgvo'),
|
212 |
+
'CN' => __('China', 'shapepress-dsgvo'),
|
213 |
+
'CX' => __('Christmas Island', 'shapepress-dsgvo'),
|
214 |
+
'CC' => __('Cocos (Keeling) Islands', 'shapepress-dsgvo'),
|
215 |
+
'CO' => __('Colombia', 'shapepress-dsgvo'),
|
216 |
+
'KM' => __('Comoros', 'shapepress-dsgvo'),
|
217 |
+
'CG' => __('Congo (Brazzaville)', 'shapepress-dsgvo'),
|
218 |
+
'CD' => __('Congo (Kinshasa)', 'shapepress-dsgvo'),
|
219 |
+
'CK' => __('Cook Islands', 'shapepress-dsgvo'),
|
220 |
+
'CR' => __('Costa Rica', 'shapepress-dsgvo'),
|
221 |
+
'HR' => __('Croatia', 'shapepress-dsgvo'),
|
222 |
+
'CU' => __('Cuba', 'shapepress-dsgvo'),
|
223 |
+
'CW' => __('Curaçao', 'shapepress-dsgvo'),
|
224 |
+
'CY' => __('Cyprus', 'shapepress-dsgvo'),
|
225 |
+
'CZ' => __('Czech Republic', 'shapepress-dsgvo'),
|
226 |
+
'DK' => __('Denmark', 'shapepress-dsgvo'),
|
227 |
+
'DJ' => __('Djibouti', 'shapepress-dsgvo'),
|
228 |
+
'DM' => __('Dominica', 'shapepress-dsgvo'),
|
229 |
+
'DO' => __('Dominican Republic', 'shapepress-dsgvo'),
|
230 |
+
'EC' => __('Ecuador', 'shapepress-dsgvo'),
|
231 |
+
'EG' => __('Egypt', 'shapepress-dsgvo'),
|
232 |
+
'SV' => __('El Salvador', 'shapepress-dsgvo'),
|
233 |
+
'GQ' => __('Equatorial Guinea', 'shapepress-dsgvo'),
|
234 |
+
'ER' => __('Eritrea', 'shapepress-dsgvo'),
|
235 |
+
'EE' => __('Estonia', 'shapepress-dsgvo'),
|
236 |
+
'ET' => __('Ethiopia', 'shapepress-dsgvo'),
|
237 |
+
'FK' => __('Falkland Islands', 'shapepress-dsgvo'),
|
238 |
+
'FO' => __('Faroe Islands', 'shapepress-dsgvo'),
|
239 |
+
'FJ' => __('Fiji', 'shapepress-dsgvo'),
|
240 |
+
'FI' => __('Finland', 'shapepress-dsgvo'),
|
241 |
+
'FR' => __('France', 'shapepress-dsgvo'),
|
242 |
+
'GF' => __('French Guiana', 'shapepress-dsgvo'),
|
243 |
+
'PF' => __('French Polynesia', 'shapepress-dsgvo'),
|
244 |
+
'TF' => __('French Southern Territories', 'shapepress-dsgvo'),
|
245 |
+
'GA' => __('Gabon', 'shapepress-dsgvo'),
|
246 |
+
'GM' => __('Gambia', 'shapepress-dsgvo'),
|
247 |
+
'GE' => __('Georgia', 'shapepress-dsgvo'),
|
248 |
+
'DE' => __('Germany', 'shapepress-dsgvo'),
|
249 |
+
'GH' => __('Ghana', 'shapepress-dsgvo'),
|
250 |
+
'GI' => __('Gibraltar', 'shapepress-dsgvo'),
|
251 |
+
'GR' => __('Greece', 'shapepress-dsgvo'),
|
252 |
+
'GL' => __('Greenland', 'shapepress-dsgvo'),
|
253 |
+
'GD' => __('Grenada', 'shapepress-dsgvo'),
|
254 |
+
'GP' => __('Guadeloupe', 'shapepress-dsgvo'),
|
255 |
+
'GU' => __('Guam', 'shapepress-dsgvo'),
|
256 |
+
'GT' => __('Guatemala', 'shapepress-dsgvo'),
|
257 |
+
'GG' => __('Guernsey', 'shapepress-dsgvo'),
|
258 |
+
'GN' => __('Guinea', 'shapepress-dsgvo'),
|
259 |
+
'GW' => __('Guinea-Bissau', 'shapepress-dsgvo'),
|
260 |
+
'GY' => __('Guyana', 'shapepress-dsgvo'),
|
261 |
+
'HT' => __('Haiti', 'shapepress-dsgvo'),
|
262 |
+
'HM' => __('Heard Island and McDonald Islands', 'shapepress-dsgvo'),
|
263 |
+
'HN' => __('Honduras', 'shapepress-dsgvo'),
|
264 |
+
'HK' => __('Hong Kong', 'shapepress-dsgvo'),
|
265 |
+
'HU' => __('Hungary', 'shapepress-dsgvo'),
|
266 |
+
'IS' => __('Iceland', 'shapepress-dsgvo'),
|
267 |
+
'IN' => __('India', 'shapepress-dsgvo'),
|
268 |
+
'ID' => __('Indonesia', 'shapepress-dsgvo'),
|
269 |
+
'IR' => __('Iran', 'shapepress-dsgvo'),
|
270 |
+
'IQ' => __('Iraq', 'shapepress-dsgvo'),
|
271 |
+
'IE' => __('Ireland', 'shapepress-dsgvo'),
|
272 |
+
'IM' => __('Isle of Man', 'shapepress-dsgvo'),
|
273 |
+
'IL' => __('Israel', 'shapepress-dsgvo'),
|
274 |
+
'IT' => __('Italy', 'shapepress-dsgvo'),
|
275 |
+
'CI' => __('Ivory Coast', 'shapepress-dsgvo'),
|
276 |
+
'JM' => __('Jamaica', 'shapepress-dsgvo'),
|
277 |
+
'JP' => __('Japan', 'shapepress-dsgvo'),
|
278 |
+
'JE' => __('Jersey', 'shapepress-dsgvo'),
|
279 |
+
'JO' => __('Jordan', 'shapepress-dsgvo'),
|
280 |
+
'KZ' => __('Kazakhstan', 'shapepress-dsgvo'),
|
281 |
+
'KE' => __('Kenya', 'shapepress-dsgvo'),
|
282 |
+
'KI' => __('Kiribati', 'shapepress-dsgvo'),
|
283 |
+
'KW' => __('Kuwait', 'shapepress-dsgvo'),
|
284 |
+
'KG' => __('Kyrgyzstan', 'shapepress-dsgvo'),
|
285 |
+
'LA' => __('Laos', 'shapepress-dsgvo'),
|
286 |
+
'LV' => __('Latvia', 'shapepress-dsgvo'),
|
287 |
+
'LB' => __('Lebanon', 'shapepress-dsgvo'),
|
288 |
+
'LS' => __('Lesotho', 'shapepress-dsgvo'),
|
289 |
+
'LR' => __('Liberia', 'shapepress-dsgvo'),
|
290 |
+
'LY' => __('Libya', 'shapepress-dsgvo'),
|
291 |
+
'LI' => __('Liechtenstein', 'shapepress-dsgvo'),
|
292 |
+
'LT' => __('Lithuania', 'shapepress-dsgvo'),
|
293 |
+
'LU' => __('Luxembourg', 'shapepress-dsgvo'),
|
294 |
+
'MO' => __('Macao', 'shapepress-dsgvo'),
|
295 |
+
'MK' => __('North Macedonia', 'shapepress-dsgvo'),
|
296 |
+
'MG' => __('Madagascar', 'shapepress-dsgvo'),
|
297 |
+
'MW' => __('Malawi', 'shapepress-dsgvo'),
|
298 |
+
'MY' => __('Malaysia', 'shapepress-dsgvo'),
|
299 |
+
'MV' => __('Maldives', 'shapepress-dsgvo'),
|
300 |
+
'ML' => __('Mali', 'shapepress-dsgvo'),
|
301 |
+
'MT' => __('Malta', 'shapepress-dsgvo'),
|
302 |
+
'MH' => __('Marshall Islands', 'shapepress-dsgvo'),
|
303 |
+
'MQ' => __('Martinique', 'shapepress-dsgvo'),
|
304 |
+
'MR' => __('Mauritania', 'shapepress-dsgvo'),
|
305 |
+
'MU' => __('Mauritius', 'shapepress-dsgvo'),
|
306 |
+
'YT' => __('Mayotte', 'shapepress-dsgvo'),
|
307 |
+
'MX' => __('Mexico', 'shapepress-dsgvo'),
|
308 |
+
'FM' => __('Micronesia', 'shapepress-dsgvo'),
|
309 |
+
'MD' => __('Moldova', 'shapepress-dsgvo'),
|
310 |
+
'MC' => __('Monaco', 'shapepress-dsgvo'),
|
311 |
+
'MN' => __('Mongolia', 'shapepress-dsgvo'),
|
312 |
+
'ME' => __('Montenegro', 'shapepress-dsgvo'),
|
313 |
+
'MS' => __('Montserrat', 'shapepress-dsgvo'),
|
314 |
+
'MA' => __('Morocco', 'shapepress-dsgvo'),
|
315 |
+
'MZ' => __('Mozambique', 'shapepress-dsgvo'),
|
316 |
+
'MM' => __('Myanmar', 'shapepress-dsgvo'),
|
317 |
+
'NA' => __('Namibia', 'shapepress-dsgvo'),
|
318 |
+
'NR' => __('Nauru', 'shapepress-dsgvo'),
|
319 |
+
'NP' => __('Nepal', 'shapepress-dsgvo'),
|
320 |
+
'NL' => __('Netherlands', 'shapepress-dsgvo'),
|
321 |
+
'NC' => __('New Caledonia', 'shapepress-dsgvo'),
|
322 |
+
'NZ' => __('New Zealand', 'shapepress-dsgvo'),
|
323 |
+
'NI' => __('Nicaragua', 'shapepress-dsgvo'),
|
324 |
+
'NE' => __('Niger', 'shapepress-dsgvo'),
|
325 |
+
'NG' => __('Nigeria', 'shapepress-dsgvo'),
|
326 |
+
'NU' => __('Niue', 'shapepress-dsgvo'),
|
327 |
+
'NF' => __('Norfolk Island', 'shapepress-dsgvo'),
|
328 |
+
'MP' => __('Northern Mariana Islands', 'shapepress-dsgvo'),
|
329 |
+
'KP' => __('North Korea', 'shapepress-dsgvo'),
|
330 |
+
'NO' => __('Norway', 'shapepress-dsgvo'),
|
331 |
+
'OM' => __('Oman', 'shapepress-dsgvo'),
|
332 |
+
'PK' => __('Pakistan', 'shapepress-dsgvo'),
|
333 |
+
'PS' => __('Palestinian Territory', 'shapepress-dsgvo'),
|
334 |
+
'PA' => __('Panama', 'shapepress-dsgvo'),
|
335 |
+
'PG' => __('Papua New Guinea', 'shapepress-dsgvo'),
|
336 |
+
'PY' => __('Paraguay', 'shapepress-dsgvo'),
|
337 |
+
'PE' => __('Peru', 'shapepress-dsgvo'),
|
338 |
+
'PH' => __('Philippines', 'shapepress-dsgvo'),
|
339 |
+
'PN' => __('Pitcairn', 'shapepress-dsgvo'),
|
340 |
+
'PL' => __('Poland', 'shapepress-dsgvo'),
|
341 |
+
'PT' => __('Portugal', 'shapepress-dsgvo'),
|
342 |
+
'PR' => __('Puerto Rico', 'shapepress-dsgvo'),
|
343 |
+
'QA' => __('Qatar', 'shapepress-dsgvo'),
|
344 |
+
'RE' => __('Reunion', 'shapepress-dsgvo'),
|
345 |
+
'RO' => __('Romania', 'shapepress-dsgvo'),
|
346 |
+
'RU' => __('Russia', 'shapepress-dsgvo'),
|
347 |
+
'RW' => __('Rwanda', 'shapepress-dsgvo'),
|
348 |
+
'BL' => __('Saint Barthélemy', 'shapepress-dsgvo'),
|
349 |
+
'SH' => __('Saint Helena', 'shapepress-dsgvo'),
|
350 |
+
'KN' => __('Saint Kitts and Nevis', 'shapepress-dsgvo'),
|
351 |
+
'LC' => __('Saint Lucia', 'shapepress-dsgvo'),
|
352 |
+
'MF' => __('Saint Martin (French part)', 'shapepress-dsgvo'),
|
353 |
+
'SX' => __('Saint Martin (Dutch part)', 'shapepress-dsgvo'),
|
354 |
+
'PM' => __('Saint Pierre and Miquelon', 'shapepress-dsgvo'),
|
355 |
+
'VC' => __('Saint Vincent and the Grenadines', 'shapepress-dsgvo'),
|
356 |
+
'SM' => __('San Marino', 'shapepress-dsgvo'),
|
357 |
+
'ST' => __('São Tomé and Príncipe', 'shapepress-dsgvo'),
|
358 |
+
'SA' => __('Saudi Arabia', 'shapepress-dsgvo'),
|
359 |
+
'SN' => __('Senegal', 'shapepress-dsgvo'),
|
360 |
+
'RS' => __('Serbia', 'shapepress-dsgvo'),
|
361 |
+
'SC' => __('Seychelles', 'shapepress-dsgvo'),
|
362 |
+
'SL' => __('Sierra Leone', 'shapepress-dsgvo'),
|
363 |
+
'SG' => __('Singapore', 'shapepress-dsgvo'),
|
364 |
+
'SK' => __('Slovakia', 'shapepress-dsgvo'),
|
365 |
+
'SI' => __('Slovenia', 'shapepress-dsgvo'),
|
366 |
+
'SB' => __('Solomon Islands', 'shapepress-dsgvo'),
|
367 |
+
'SO' => __('Somalia', 'shapepress-dsgvo'),
|
368 |
+
'ZA' => __('South Africa', 'shapepress-dsgvo'),
|
369 |
+
'GS' => __('South Georgia/Sandwich Islands', 'shapepress-dsgvo'),
|
370 |
+
'KR' => __('South Korea', 'shapepress-dsgvo'),
|
371 |
+
'SS' => __('South Sudan', 'shapepress-dsgvo'),
|
372 |
+
'ES' => __('Spain', 'shapepress-dsgvo'),
|
373 |
+
'LK' => __('Sri Lanka', 'shapepress-dsgvo'),
|
374 |
+
'SD' => __('Sudan', 'shapepress-dsgvo'),
|
375 |
+
'SR' => __('Suriname', 'shapepress-dsgvo'),
|
376 |
+
'SJ' => __('Svalbard and Jan Mayen', 'shapepress-dsgvo'),
|
377 |
+
'SZ' => __('Swaziland', 'shapepress-dsgvo'),
|
378 |
+
'SE' => __('Sweden', 'shapepress-dsgvo'),
|
379 |
+
'CH' => __('Switzerland', 'shapepress-dsgvo'),
|
380 |
+
'SY' => __('Syria', 'shapepress-dsgvo'),
|
381 |
+
'TW' => __('Taiwan', 'shapepress-dsgvo'),
|
382 |
+
'TJ' => __('Tajikistan', 'shapepress-dsgvo'),
|
383 |
+
'TZ' => __('Tanzania', 'shapepress-dsgvo'),
|
384 |
+
'TH' => __('Thailand', 'shapepress-dsgvo'),
|
385 |
+
'TL' => __('Timor-Leste', 'shapepress-dsgvo'),
|
386 |
+
'TG' => __('Togo', 'shapepress-dsgvo'),
|
387 |
+
'TK' => __('Tokelau', 'shapepress-dsgvo'),
|
388 |
+
'TO' => __('Tonga', 'shapepress-dsgvo'),
|
389 |
+
'TT' => __('Trinidad and Tobago', 'shapepress-dsgvo'),
|
390 |
+
'TN' => __('Tunisia', 'shapepress-dsgvo'),
|
391 |
+
'TR' => __('Turkey', 'shapepress-dsgvo'),
|
392 |
+
'TM' => __('Turkmenistan', 'shapepress-dsgvo'),
|
393 |
+
'TC' => __('Turks and Caicos Islands', 'shapepress-dsgvo'),
|
394 |
+
'TV' => __('Tuvalu', 'shapepress-dsgvo'),
|
395 |
+
'UG' => __('Uganda', 'shapepress-dsgvo'),
|
396 |
+
'UA' => __('Ukraine', 'shapepress-dsgvo'),
|
397 |
+
'AE' => __('United Arab Emirates', 'shapepress-dsgvo'),
|
398 |
+
'GB' => __('United Kingdom (UK)', 'shapepress-dsgvo'),
|
399 |
+
'US' => __('United States (US)', 'shapepress-dsgvo'),
|
400 |
+
'UM' => __('United States (US) Minor Outlying Islands', 'shapepress-dsgvo'),
|
401 |
+
'UY' => __('Uruguay', 'shapepress-dsgvo'),
|
402 |
+
'UZ' => __('Uzbekistan', 'shapepress-dsgvo'),
|
403 |
+
'VU' => __('Vanuatu', 'shapepress-dsgvo'),
|
404 |
+
'VA' => __('Vatican', 'shapepress-dsgvo'),
|
405 |
+
'VE' => __('Venezuela', 'shapepress-dsgvo'),
|
406 |
+
'VN' => __('Vietnam', 'shapepress-dsgvo'),
|
407 |
+
'VG' => __('Virgin Islands (British)', 'shapepress-dsgvo'),
|
408 |
+
'VI' => __('Virgin Islands (US)', 'shapepress-dsgvo'),
|
409 |
+
'WF' => __('Wallis and Futuna', 'shapepress-dsgvo'),
|
410 |
+
'EH' => __('Western Sahara', 'shapepress-dsgvo'),
|
411 |
+
'WS' => __('Samoa', 'shapepress-dsgvo'),
|
412 |
+
'YE' => __('Yemen', 'shapepress-dsgvo'),
|
413 |
+
'ZM' => __('Zambia', 'shapepress-dsgvo'),
|
414 |
+
'ZW' => __('Zimbabwe', 'shapepress-dsgvo'),
|
415 |
+
);
|
416 |
+
|
417 |
+
}
|
418 |
+
}
|
includes/class-sp-dsgvo-cookie-category-api.php
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOCookieCategoryApi
|
4 |
+
{
|
5 |
+
|
6 |
+
public static function getAllCategoryNames()
|
7 |
+
{
|
8 |
+
$result[] = SPDSGVOConstants::CATEGORY_SLUG_STATISTICS;
|
9 |
+
$result[] = SPDSGVOConstants::CATEGORY_SLUG_TARGETING;
|
10 |
+
$result[] = SPDSGVOConstants::CATEGORY_SLUG_EMBEDDINGS;
|
11 |
+
$result[] = SPDSGVOConstants::CATEGORY_SLUG_LIVECHAT;
|
12 |
+
$result[] = SPDSGVOConstants::CATEGORY_SLUG_CHATBOTS;
|
13 |
+
$result[] = SPDSGVOConstants::CATEGORY_SLUG_MANDATORY;
|
14 |
+
|
15 |
+
return $result;
|
16 |
+
}
|
17 |
+
|
18 |
+
public static function getCookieCategories()
|
19 |
+
{
|
20 |
+
$cookieCategories = array(
|
21 |
+
SPDSGVOConstants::CATEGORY_SLUG_STATISTICS => array(
|
22 |
+
'title' => __('Analysis / Statistics', 'shapepress-dsgvo'),
|
23 |
+
'slug' => SPDSGVOConstants::CATEGORY_SLUG_STATISTICS,
|
24 |
+
'description' => __('Anonymous evaluation for troubleshooting and further development', 'shapepress-dsgvo'),
|
25 |
+
'orderId' => '10'
|
26 |
+
),
|
27 |
+
SPDSGVOConstants::CATEGORY_SLUG_TARGETING => array(
|
28 |
+
'title' => __('Targeting / Profiling / Ads', 'shapepress-dsgvo'),
|
29 |
+
'slug' => SPDSGVOConstants::CATEGORY_SLUG_TARGETING,
|
30 |
+
'description' => __('Target group-specific information outside our website', 'shapepress-dsgvo'),
|
31 |
+
'orderId' => '20'
|
32 |
+
),
|
33 |
+
SPDSGVOConstants::CATEGORY_SLUG_EMBEDDINGS => array(
|
34 |
+
'title' => __('Embeddings', 'shapepress-dsgvo'),
|
35 |
+
'slug' => SPDSGVOConstants::CATEGORY_SLUG_EMBEDDINGS,
|
36 |
+
'description' => __('Integration of additional information', 'shapepress-dsgvo'),
|
37 |
+
'orderId' => '30'
|
38 |
+
),
|
39 |
+
SPDSGVOConstants::CATEGORY_SLUG_LIVECHAT => array(
|
40 |
+
'title' => __('Live Chat', 'shapepress-dsgvo'),
|
41 |
+
'slug' => SPDSGVOConstants::CATEGORY_SLUG_LIVECHAT,
|
42 |
+
'description' => __('Personal support from our support team', 'shapepress-dsgvo'),
|
43 |
+
'orderId' => '40'
|
44 |
+
),
|
45 |
+
SPDSGVOConstants::CATEGORY_SLUG_CHATBOTS => array(
|
46 |
+
'title' => __('Chat Bots', 'shapepress-dsgvo'),
|
47 |
+
'slug' => SPDSGVOConstants::CATEGORY_SLUG_CHATBOTS,
|
48 |
+
'description' => __('Support from our support team', 'shapepress-dsgvo'),
|
49 |
+
'orderId' => '50'
|
50 |
+
),
|
51 |
+
SPDSGVOConstants::CATEGORY_SLUG_MANDATORY => array(
|
52 |
+
'title' => __('Necessaray Services', 'shapepress-dsgvo'),
|
53 |
+
'slug' => SPDSGVOConstants::CATEGORY_SLUG_MANDATORY,
|
54 |
+
'description' => __('Unconditional technically necessary services for the provision of the website', 'shapepress-dsgvo'),
|
55 |
+
'orderId' => '100'
|
56 |
+
)
|
57 |
+
);
|
58 |
+
|
59 |
+
uasort($cookieCategories, function($a, $b) {
|
60 |
+
return $a['orderId'] > $b['orderId'] ? 1 : -1;
|
61 |
+
});
|
62 |
+
|
63 |
+
return $cookieCategories;
|
64 |
+
}
|
65 |
+
|
66 |
+
public static function getCookieCategory($categorySlug)
|
67 |
+
{
|
68 |
+
if (array_key_exists($categorySlug, self::getCookieCategories()) == false) return null;
|
69 |
+
|
70 |
+
return self::getCookieCategories()[$categorySlug];
|
71 |
+
}
|
72 |
+
|
73 |
+
|
74 |
+
|
75 |
+
}
|
includes/class-sp-dsgvo-cron.php
CHANGED
@@ -1,88 +1,88 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class SPDSGVOCron{
|
4 |
-
|
5 |
-
public function slug(){
|
6 |
-
$reflect = new ReflectionClass($this);
|
7 |
-
$class = $reflect->getShortName();
|
8 |
-
return 'wp_cron__'. strtolower($class);
|
9 |
-
}
|
10 |
-
|
11 |
-
public function schedule(){
|
12 |
-
return 'schedule_'. $this->slug();
|
13 |
-
}
|
14 |
-
|
15 |
-
public function calculateInterval(){
|
16 |
-
if(is_array($this->interval)){
|
17 |
-
$interval = 0;
|
18 |
-
|
19 |
-
if( isset($this->interval['seconds']) &&
|
20 |
-
(is_int($this->interval['seconds']) || is_float($this->interval['seconds']))){
|
21 |
-
$interval = $interval + ($this->interval['seconds']);
|
22 |
-
}
|
23 |
-
|
24 |
-
if( isset($this->interval['minutes']) &&
|
25 |
-
(is_int($this->interval['minutes']) || is_float($this->interval['minutes']))){
|
26 |
-
$interval = $interval + ($this->interval['minutes'] * 60);
|
27 |
-
}
|
28 |
-
|
29 |
-
if( isset($this->interval['hours']) &&
|
30 |
-
(is_int($this->interval['hours']) || is_float($this->interval['hours']))){
|
31 |
-
$interval = $interval + ($this->interval['hours'] * 3600);
|
32 |
-
}
|
33 |
-
|
34 |
-
if( isset($this->interval['days']) &&
|
35 |
-
(is_int($this->interval['days']) || is_float($this->interval['days']))){
|
36 |
-
$interval = $interval + ($this->interval['days'] * 86400);
|
37 |
-
}
|
38 |
-
|
39 |
-
if( isset($this->interval['weeks']) &&
|
40 |
-
(is_int($this->interval['weeks']) || is_float($this->interval['weeks']))){
|
41 |
-
$interval = $interval + ($this->interval['weeks'] * 604800);
|
42 |
-
}
|
43 |
-
|
44 |
-
if( isset($this->interval['months']) &&
|
45 |
-
(is_int($this->interval['months']) || is_float($this->interval['months']))){
|
46 |
-
$interval = $interval + ($this->interval['months'] * 2628000);
|
47 |
-
}
|
48 |
-
|
49 |
-
return $interval;
|
50 |
-
|
51 |
-
}else if(is_int($this->interval)){
|
52 |
-
return $this->interval;
|
53 |
-
}else{
|
54 |
-
// parse string??
|
55 |
-
}
|
56 |
-
|
57 |
-
throw new Exception("Interval not valid");
|
58 |
-
}
|
59 |
-
|
60 |
-
public function scheduleFilter($schedules){
|
61 |
-
$interval = $this->calculateInterval();
|
62 |
-
|
63 |
-
if(!in_array($this->schedule(), array_keys($schedules))){
|
64 |
-
$schedules[$this->schedule()] = array(
|
65 |
-
'interval' => $interval,
|
66 |
-
'display' => __('All', 'shapepress-dsgvo') . ' '. floor($interval / 60) .' ' . __('Minutes', 'shapepress-dsgvo'),
|
67 |
-
);
|
68 |
-
}
|
69 |
-
|
70 |
-
return $schedules;
|
71 |
-
}
|
72 |
-
|
73 |
-
public static function register(){
|
74 |
-
$class = get_called_class();
|
75 |
-
$self = new $class;
|
76 |
-
$slug = $self->slug();
|
77 |
-
|
78 |
-
add_filter('cron_schedules', array($self, 'scheduleFilter'));
|
79 |
-
|
80 |
-
if(!wp_next_scheduled($slug)){
|
81 |
-
wp_schedule_event(time(), $self->schedule(), $slug);
|
82 |
-
}
|
83 |
-
|
84 |
-
if(method_exists($self, 'handle')){
|
85 |
-
add_action($slug, array($self, 'handle'));
|
86 |
-
}
|
87 |
-
}
|
88 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class SPDSGVOCron{
|
4 |
+
|
5 |
+
public function slug(){
|
6 |
+
$reflect = new ReflectionClass($this);
|
7 |
+
$class = $reflect->getShortName();
|
8 |
+
return 'wp_cron__'. strtolower($class);
|
9 |
+
}
|
10 |
+
|
11 |
+
public function schedule(){
|
12 |
+
return 'schedule_'. $this->slug();
|
13 |
+
}
|
14 |
+
|
15 |
+
public function calculateInterval(){
|
16 |
+
if(is_array($this->interval)){
|
17 |
+
$interval = 0;
|
18 |
+
|
19 |
+
if( isset($this->interval['seconds']) &&
|
20 |
+
(is_int($this->interval['seconds']) || is_float($this->interval['seconds']))){
|
21 |
+
$interval = $interval + ($this->interval['seconds']);
|
22 |
+
}
|
23 |
+
|
24 |
+
if( isset($this->interval['minutes']) &&
|
25 |
+
(is_int($this->interval['minutes']) || is_float($this->interval['minutes']))){
|
26 |
+
$interval = $interval + ($this->interval['minutes'] * 60);
|
27 |
+
}
|
28 |
+
|
29 |
+
if( isset($this->interval['hours']) &&
|
30 |
+
(is_int($this->interval['hours']) || is_float($this->interval['hours']))){
|
31 |
+
$interval = $interval + ($this->interval['hours'] * 3600);
|
32 |
+
}
|
33 |
+
|
34 |
+
if( isset($this->interval['days']) &&
|
35 |
+
(is_int($this->interval['days']) || is_float($this->interval['days']))){
|
36 |
+
$interval = $interval + ($this->interval['days'] * 86400);
|
37 |
+
}
|
38 |
+
|
39 |
+
if( isset($this->interval['weeks']) &&
|
40 |
+
(is_int($this->interval['weeks']) || is_float($this->interval['weeks']))){
|
41 |
+
$interval = $interval + ($this->interval['weeks'] * 604800);
|
42 |
+
}
|
43 |
+
|
44 |
+
if( isset($this->interval['months']) &&
|
45 |
+
(is_int($this->interval['months']) || is_float($this->interval['months']))){
|
46 |
+
$interval = $interval + ($this->interval['months'] * 2628000);
|
47 |
+
}
|
48 |
+
|
49 |
+
return $interval;
|
50 |
+
|
51 |
+
}else if(is_int($this->interval)){
|
52 |
+
return $this->interval;
|
53 |
+
}else{
|
54 |
+
// parse string??
|
55 |
+
}
|
56 |
+
|
57 |
+
throw new Exception("Interval not valid");
|
58 |
+
}
|
59 |
+
|
60 |
+
public function scheduleFilter($schedules){
|
61 |
+
$interval = $this->calculateInterval();
|
62 |
+
|
63 |
+
if(!in_array($this->schedule(), array_keys($schedules))){
|
64 |
+
$schedules[$this->schedule()] = array(
|
65 |
+
'interval' => $interval,
|
66 |
+
'display' => __('All', 'shapepress-dsgvo') . ' '. floor($interval / 60) .' ' . __('Minutes', 'shapepress-dsgvo'),
|
67 |
+
);
|
68 |
+
}
|
69 |
+
|
70 |
+
return $schedules;
|
71 |
+
}
|
72 |
+
|
73 |
+
public static function register(){
|
74 |
+
$class = get_called_class();
|
75 |
+
$self = new $class;
|
76 |
+
$slug = $self->slug();
|
77 |
+
|
78 |
+
add_filter('cron_schedules', array($self, 'scheduleFilter'));
|
79 |
+
|
80 |
+
if(!wp_next_scheduled($slug)){
|
81 |
+
wp_schedule_event(time(), $self->schedule(), $slug);
|
82 |
+
}
|
83 |
+
|
84 |
+
if(method_exists($self, 'handle')){
|
85 |
+
add_action($slug, array($self, 'handle'));
|
86 |
+
}
|
87 |
+
}
|
88 |
+
}
|
includes/class-sp-dsgvo-data-collecter.php
CHANGED
@@ -1,469 +1,469 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Fired during plugin deactivation
|
5 |
-
*
|
6 |
-
* @link https://wp-dsgvo.eu
|
7 |
-
* @since 1.0.0
|
8 |
-
*
|
9 |
-
* @package WP DSGVO Tools
|
10 |
-
* @subpackage WP DSGVO Tools/includes
|
11 |
-
*/
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Fired during plugin deactivation.
|
15 |
-
*
|
16 |
-
* This class defines all code necessary to run during the plugin's deactivation.
|
17 |
-
*
|
18 |
-
* @since 1.0.0
|
19 |
-
* @package WP DSGVO Tools
|
20 |
-
* @subpackage WP DSGVO Tools/includes
|
21 |
-
* @author Shapepress eU
|
22 |
-
*/
|
23 |
-
class SPDSGVODataCollecter
|
24 |
-
{
|
25 |
-
|
26 |
-
public $email;
|
27 |
-
|
28 |
-
public $firstName;
|
29 |
-
|
30 |
-
public $lastName;
|
31 |
-
|
32 |
-
public $user = NULL;
|
33 |
-
|
34 |
-
public $totalFound = 0;
|
35 |
-
|
36 |
-
public $data = array();
|
37 |
-
|
38 |
-
public $identifiers = array();
|
39 |
-
|
40 |
-
public $tables = array();
|
41 |
-
|
42 |
-
public $sensativeKeys = array(
|
43 |
-
'company',
|
44 |
-
'country',
|
45 |
-
'county',
|
46 |
-
'city',
|
47 |
-
'state',
|
48 |
-
'address',
|
49 |
-
'first_name',
|
50 |
-
'last_name',
|
51 |
-
'zip',
|
52 |
-
'zip_code',
|
53 |
-
'post_code',
|
54 |
-
'postcode',
|
55 |
-
'email',
|
56 |
-
'phone',
|
57 |
-
'ip',
|
58 |
-
'ip_address'
|
59 |
-
);
|
60 |
-
|
61 |
-
public function __construct($email, $firstName = '', $lastName = '')
|
62 |
-
{
|
63 |
-
$this->email = $email;
|
64 |
-
|
65 |
-
if (! empty($firstName)) {
|
66 |
-
$this->addIdentifier($firstName, __('Name','shapepress-dsgvo'));
|
67 |
-
$this->firstName = $firstName;
|
68 |
-
}
|
69 |
-
|
70 |
-
if (! empty($lastName)) {
|
71 |
-
$this->addIdentifier($lastName, __('Name','shapepress-dsgvo'));
|
72 |
-
$this->lastName = $lastName;
|
73 |
-
}
|
74 |
-
|
75 |
-
$this->user = get_user_by('email', $this->email);
|
76 |
-
if (is_a($this->user, 'WP_User')) {
|
77 |
-
$this->addIdentifier($this->user->user_login, __('Login','shapepress-dsgvo'));
|
78 |
-
$this->addIdentifier($this->user->user_nicename, __('Name','shapepress-dsgvo'));
|
79 |
-
$this->addIdentifier($this->user->user_email, __('Email','shapepress-dsgvo'));
|
80 |
-
$this->addIdentifier($this->user->user_url, __('Url','shapepress-dsgvo'));
|
81 |
-
$this->addIdentifier($this->user->display_name, __('Display Name','shapepress-dsgvo'));
|
82 |
-
$this->addIdentifier(str_replace('www.', '', @parse_url($this->user->user_url)['host']), __('Url','shapepress-dsgvo'));
|
83 |
-
}
|
84 |
-
}
|
85 |
-
|
86 |
-
public function sar()
|
87 |
-
{
|
88 |
-
if (is_a($this->user, 'WP_User')) {
|
89 |
-
$this->crawlLocal();
|
90 |
-
}else
|
91 |
-
{
|
92 |
-
$this->crawlLocal(); // both for now because it only crawls comments
|
93 |
-
}
|
94 |
-
|
95 |
-
$this->integrationsSAR();
|
96 |
-
|
97 |
-
if (isValidPremiumEdition())
|
98 |
-
{
|
99 |
-
try {
|
100 |
-
$customData = apply_filters('spdsgvo_custom_sar', $this->email);
|
101 |
-
|
102 |
-
//error_log('custom filter result. '.$customData);
|
103 |
-
if ($customData === $this->email) $customData = NULL;
|
104 |
-
if ($customData)
|
105 |
-
{
|
106 |
-
foreach ($customData as $data) {
|
107 |
-
$this->addData($data, __('Advanced', 'shapepress-dsgvo'), 'spdsgvo_custom_sar');
|
108 |
-
}
|
109 |
-
}
|
110 |
-
|
111 |
-
} catch (Exception $e) {
|
112 |
-
error_log($e);
|
113 |
-
}
|
114 |
-
}
|
115 |
-
|
116 |
-
return $this->getData();
|
117 |
-
}
|
118 |
-
|
119 |
-
public function crawlLocal()
|
120 |
-
{
|
121 |
-
global $wpdb;
|
122 |
-
|
123 |
-
if (! is_a($this->user, 'WP_User')) {
|
124 |
-
|
125 |
-
// search public comments and then return
|
126 |
-
|
127 |
-
$comments = get_comments(array(
|
128 |
-
'author_email' => $this->email,
|
129 |
-
'type' => ''
|
130 |
-
));
|
131 |
-
foreach ($comments as $comment) {
|
132 |
-
$this->addData($comment->comment_author, __('Name','shapepress-dsgvo'));
|
133 |
-
$this->addData($comment->comment_author_email, __('Email','shapepress-dsgvo'));
|
134 |
-
$this->addData($comment->comment_author_url, __('Url','shapepress-dsgvo'));
|
135 |
-
$this->addData($comment->comment_author_IP, __('IP Address','shapepress-dsgvo'));
|
136 |
-
$this->addData($comment->comment_content, __('Comment','shapepress-dsgvo'));
|
137 |
-
}
|
138 |
-
|
139 |
-
return;
|
140 |
-
}
|
141 |
-
|
142 |
-
// ====================================================
|
143 |
-
// WP_User
|
144 |
-
// ====================================================
|
145 |
-
$this->addData($this->user->user_login, __('User name','shapepress-dsgvo'));
|
146 |
-
$this->addData($this->user->user_nicename, __('Name','shapepress-dsgvo'));
|
147 |
-
$this->addData($this->user->user_url, __('Url','shapepress-dsgvo'));
|
148 |
-
$this->addData($this->user->display_name, __('Display name','shapepress-dsgvo'));
|
149 |
-
|
150 |
-
// ====================================================
|
151 |
-
// WP_Usermeta
|
152 |
-
// ====================================================
|
153 |
-
foreach (get_user_meta($this->user->ID) as $key => $meta) {
|
154 |
-
if ($this->isSensativeKey($key)) {
|
155 |
-
foreach ($meta as $metaValue) {
|
156 |
-
$this->addData($metaValue);
|
157 |
-
}
|
158 |
-
}
|
159 |
-
}
|
160 |
-
|
161 |
-
// ====================================================
|
162 |
-
// WP_Comments
|
163 |
-
// ====================================================
|
164 |
-
$comments = get_comments(array(
|
165 |
-
'user_id' => $this->user->ID
|
166 |
-
));
|
167 |
-
//error_log('comments1: '.implode(', ',$comments));
|
168 |
-
foreach ($comments as $comment) {
|
169 |
-
$this->addData($comment->comment_author, __('Name','shapepress-dsgvo'));
|
170 |
-
$this->addData($comment->comment_author_email, __('Email','shapepress-dsgvo'));
|
171 |
-
$this->addData($comment->comment_author_url, __('Url','shapepress-dsgvo'));
|
172 |
-
$this->addData($comment->comment_author_IP, __('IP Address','shapepress-dsgvo'));
|
173 |
-
$this->addData($comment->comment_content, __('Comment','shapepress-dsgvo'));
|
174 |
-
}
|
175 |
-
|
176 |
-
|
177 |
-
}
|
178 |
-
|
179 |
-
public function integrationsSAR()
|
180 |
-
{
|
181 |
-
foreach (SPDSGVOIntegration::getAllIntegrations() as $integration) {
|
182 |
-
if (method_exists($integration, 'onSubjectAccessRequest')) {
|
183 |
-
try {
|
184 |
-
$data = $integration->onSubjectAccessRequest($this->email, $this->firstName, $this->lastName, $this->user);
|
185 |
-
if (is_array($data)) {
|
186 |
-
foreach ($data as $value) {
|
187 |
-
if (is_string($value)) {
|
188 |
-
$this->addData($value, $integration->title, $integration->name);
|
189 |
-
} else if (is_array($value)) {
|
190 |
-
foreach ($value as $valueItem) {
|
191 |
-
if (is_string($valueItem)) {
|
192 |
-
$this->addData($valueItem, $integration->title, $integration->name);
|
193 |
-
}
|
194 |
-
}
|
195 |
-
}
|
196 |
-
}
|
197 |
-
}
|
198 |
-
} catch (Exception $e) {}
|
199 |
-
}
|
200 |
-
}
|
201 |
-
}
|
202 |
-
|
203 |
-
public function superUnsubscribe()
|
204 |
-
{
|
205 |
-
$this->user = get_user_by('email', $this->email);
|
206 |
-
|
207 |
-
if (is_a($this->user, 'WP_User')) {
|
208 |
-
$this->superUnsubscribeLocal();
|
209 |
-
} else
|
210 |
-
{
|
211 |
-
$this->superUnsubscribeLocal();
|
212 |
-
}
|
213 |
-
|
214 |
-
if (isValidPremiumEdition())
|
215 |
-
{
|
216 |
-
try {
|
217 |
-
apply_filters('spdsgvo_custom_unsubscribe', $this->email);
|
218 |
-
|
219 |
-
} catch (Exception $e) {
|
220 |
-
error_log($e);
|
221 |
-
}
|
222 |
-
}
|
223 |
-
|
224 |
-
$this->superUnsubscribeIntegrations();
|
225 |
-
}
|
226 |
-
|
227 |
-
public function superUnsubscribeLocal()
|
228 |
-
{
|
229 |
-
global $wpdb;
|
230 |
-
|
231 |
-
if (! is_a($this->user, 'WP_User')) { // only do commments for not registered ones
|
232 |
-
|
233 |
-
// ======================================================================
|
234 |
-
// WP_Comments
|
235 |
-
// ======================================================================
|
236 |
-
//error_log('not a user '.$this->email);
|
237 |
-
$wpdb->get_results($wpdb->prepare("
|
238 |
-
UPDATE $wpdb->comments
|
239 |
-
SET
|
240 |
-
comment_author = 'Deleted User',
|
241 |
-
comment_author_email = %s,
|
242 |
-
comment_author_url = '',
|
243 |
-
comment_author_IP = '000.000.000.00'
|
244 |
-
WHERE comment_author_email = '". $this->email ."'", 'deleted_user_' . wp_generate_password(10, FALSE, FALSE) . '@example.com'));
|
245 |
-
|
246 |
-
|
247 |
-
return;
|
248 |
-
}
|
249 |
-
|
250 |
-
$userID = wp_update_user(array(
|
251 |
-
'ID' => $this->user->ID,
|
252 |
-
'user_pass' => wp_generate_password(),
|
253 |
-
'user_nicename' => 'Deleted User',
|
254 |
-
'user_url' => '',
|
255 |
-
'display_name' => 'Deleted User',
|
256 |
-
'nickname' => 'Deleted User',
|
257 |
-
'first_name' => 'Deleted',
|
258 |
-
'last_name' => 'User',
|
259 |
-
'description' => '',
|
260 |
-
'rich_editing' => '',
|
261 |
-
'user_registered' => '',
|
262 |
-
'role' => '',
|
263 |
-
'jabber' => '',
|
264 |
-
'aim' => '',
|
265 |
-
'yim' => '',
|
266 |
-
'show_admin_bar_front' => ''
|
267 |
-
));
|
268 |
-
|
269 |
-
$wpdb->get_results($wpdb->prepare("
|
270 |
-
UPDATE $wpdb->users
|
271 |
-
SET
|
272 |
-
user_login = %s,
|
273 |
-
user_email = %s
|
274 |
-
WHERE ID = {$this->user->ID}", 'deleted_user_' . wp_generate_password(10, FALSE, FALSE), 'deleted_user_' . wp_generate_password(10, FALSE, FALSE) . '@example.com'));
|
275 |
-
|
276 |
-
// ======================================================================
|
277 |
-
// WP_Comments
|
278 |
-
// ======================================================================
|
279 |
-
$wpdb->get_results($wpdb->prepare("
|
280 |
-
UPDATE $wpdb->comments
|
281 |
-
SET
|
282 |
-
comment_author = 'Deleted User',
|
283 |
-
comment_author_email = %s,
|
284 |
-
comment_author_url = '',
|
285 |
-
comment_author_IP = '000.000.000.00'
|
286 |
-
WHERE user_id = %d", $this->user->ID, 'deleted_user_' . wp_generate_password(10, FALSE, FALSE) . '@example.com'));
|
287 |
-
|
288 |
-
// ======================================================================
|
289 |
-
// WP_UserMeta
|
290 |
-
// ======================================================================
|
291 |
-
$meta = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d", $this->user->ID));
|
292 |
-
|
293 |
-
foreach ($meta as $row) {
|
294 |
-
if ($this->isSensativeKey($row->meta_key)) {
|
295 |
-
$wpdb->get_results($wpdb->prepare("
|
296 |
-
UPDATE $wpdb->usermeta
|
297 |
-
SET
|
298 |
-
meta_value = 'Deleted'
|
299 |
-
WHERE umeta_id = %d", $row->umeta_id));
|
300 |
-
}
|
301 |
-
}
|
302 |
-
}
|
303 |
-
|
304 |
-
public function superUnsubscribeIntegrations()
|
305 |
-
{
|
306 |
-
foreach (SPDSGVOIntegration::getAllIntegrations() as $integration) {
|
307 |
-
if (method_exists($integration, 'onSuperUnsubscribe')) {
|
308 |
-
try {
|
309 |
-
$integration->onSuperUnsubscribe($this->email, $this->firstName, $this->lastName, $this->user);
|
310 |
-
} catch (Exception $e) {}
|
311 |
-
}
|
312 |
-
}
|
313 |
-
}
|
314 |
-
|
315 |
-
// ======================================================================
|
316 |
-
// Helpers
|
317 |
-
// ======================================================================
|
318 |
-
public function addIdentifier($identifier, $type)
|
319 |
-
{
|
320 |
-
$identifier = strtolower($identifier);
|
321 |
-
|
322 |
-
if (empty($identifier)) {
|
323 |
-
return;
|
324 |
-
}
|
325 |
-
|
326 |
-
if (! in_array($identifier, $this->identifiers)) {
|
327 |
-
$this->identifiers[] = (object) [
|
328 |
-
'value' => $identifier,
|
329 |
-
'type' => $type
|
330 |
-
];
|
331 |
-
}
|
332 |
-
}
|
333 |
-
|
334 |
-
public function addData($data, $type = 'misc', $source = 'database')
|
335 |
-
{
|
336 |
-
// $data = strtolower($data);
|
337 |
-
if (empty($data)) {
|
338 |
-
return;
|
339 |
-
}
|
340 |
-
if ($data === '::1') {
|
341 |
-
return;
|
342 |
-
}
|
343 |
-
|
344 |
-
foreach ($this->data as $d) {
|
345 |
-
if ($d->data === $data) {
|
346 |
-
return;
|
347 |
-
}
|
348 |
-
}
|
349 |
-
|
350 |
-
if ($type === 'misc') {
|
351 |
-
$type = $this->guessDataType($data);
|
352 |
-
$type = ($type === FALSE) ? 'misc' : $type;
|
353 |
-
}
|
354 |
-
|
355 |
-
$this->data[] = (object) array(
|
356 |
-
'data' => $data,
|
357 |
-
'type' => $type,
|
358 |
-
'source' => $source
|
359 |
-
);
|
360 |
-
$this->totalFound ++;
|
361 |
-
}
|
362 |
-
|
363 |
-
public function guessDataType($data)
|
364 |
-
{
|
365 |
-
$dataToCheck = strtolower($data);
|
366 |
-
|
367 |
-
// IP Addresses
|
368 |
-
preg_match_all('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $dataToCheck, $IPAddresses);
|
369 |
-
foreach ($IPAddresses[0] as $ip) {
|
370 |
-
return 'IP';
|
371 |
-
}
|
372 |
-
|
373 |
-
// Email
|
374 |
-
preg_match_all('/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $dataToCheck, $emailAdresses);
|
375 |
-
foreach ($emailAdresses[0] as $emailAddress) {
|
376 |
-
return __('Email','shapepress-dsgvo');
|
377 |
-
}
|
378 |
-
|
379 |
-
// Post Code
|
380 |
-
preg_match_all('/((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2}))/i', $dataToCheck, $postCodes);
|
381 |
-
foreach ($postCodes[0] as $postCode) {
|
382 |
-
return __('ZIP Code','shapepress-dsgvo');
|
383 |
-
}
|
384 |
-
|
385 |
-
// Phone Number
|
386 |
-
preg_match_all('/^[().+\d -]{5,15}$/', $dataToCheck, $phoneNumbers);
|
387 |
-
foreach ($phoneNumbers[0] as $phoneNumber) {
|
388 |
-
if (strlen($phoneNumber) >= 7) {
|
389 |
-
return __('Phone number','shapepress-dsgvo');
|
390 |
-
}
|
391 |
-
}
|
392 |
-
|
393 |
-
// URLs
|
394 |
-
preg_match_all('#[-a-zA-Z0-9@:%_\+.~\#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~\#?&//=]*)?#si', $dataToCheck, $URLs);
|
395 |
-
foreach ($URLs[0] as $url) {
|
396 |
-
if (! empty($url)) {
|
397 |
-
if (strpos($url, @parse_url($url)['host']) === FALSE) {
|
398 |
-
if (filter_var($url, FILTER_VALIDATE_URL)) {
|
399 |
-
return __('Url','shapepress-dsgvo');
|
400 |
-
}
|
401 |
-
}
|
402 |
-
}
|
403 |
-
}
|
404 |
-
|
405 |
-
// Address
|
406 |
-
if (strpos($dataToCheck, 'road') !== FALSE || strpos($dataToCheck, 'street') !== FALSE) {
|
407 |
-
return __('Address','shapepress-dsgvo');
|
408 |
-
}
|
409 |
-
|
410 |
-
foreach ($this->identifiers as $key => $identifier) {
|
411 |
-
if ($identifier->value == $dataToCheck) {
|
412 |
-
return $identifier->type;
|
413 |
-
}
|
414 |
-
}
|
415 |
-
|
416 |
-
return false;
|
417 |
-
}
|
418 |
-
|
419 |
-
public function getData()
|
420 |
-
{
|
421 |
-
$done = array();
|
422 |
-
$data = array();
|
423 |
-
|
424 |
-
foreach ($this->data as $d) {
|
425 |
-
if (! in_array($d->data, $done)) {
|
426 |
-
$done[] = $d->data;
|
427 |
-
$data[] = $d;
|
428 |
-
}
|
429 |
-
}
|
430 |
-
|
431 |
-
return $data;
|
432 |
-
}
|
433 |
-
|
434 |
-
public function getDataByType()
|
435 |
-
{
|
436 |
-
$done = array();
|
437 |
-
$data = array();
|
438 |
-
|
439 |
-
foreach ($this->data as $d) {
|
440 |
-
if (! in_array($d->data, $done)) {
|
441 |
-
$done[] = $d->data;
|
442 |
-
|
443 |
-
if (! isset($data[$d->type])) {
|
444 |
-
$data[$d->type] = array();
|
445 |
-
}
|
446 |
-
|
447 |
-
$data[$d->type][] = $d;
|
448 |
-
}
|
449 |
-
}
|
450 |
-
|
451 |
-
return $data;
|
452 |
-
}
|
453 |
-
|
454 |
-
public function isSensativeKey($key)
|
455 |
-
{
|
456 |
-
return (str_replace($this->sensativeKeys, '', $key) !== $key);
|
457 |
-
}
|
458 |
-
|
459 |
-
public function searchStringForKnownIdentifiers($string)
|
460 |
-
{
|
461 |
-
$identifiers = array_unique($this->identifiers);
|
462 |
-
|
463 |
-
foreach ($identifiers as $identifier) {
|
464 |
-
if (strpos($string, $identifier) !== FALSE) {
|
465 |
-
$this->addData($string);
|
466 |
-
}
|
467 |
-
}
|
468 |
-
}
|
469 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Fired during plugin deactivation
|
5 |
+
*
|
6 |
+
* @link https://wp-dsgvo.eu
|
7 |
+
* @since 1.0.0
|
8 |
+
*
|
9 |
+
* @package WP DSGVO Tools
|
10 |
+
* @subpackage WP DSGVO Tools/includes
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Fired during plugin deactivation.
|
15 |
+
*
|
16 |
+
* This class defines all code necessary to run during the plugin's deactivation.
|
17 |
+
*
|
18 |
+
* @since 1.0.0
|
19 |
+
* @package WP DSGVO Tools
|
20 |
+
* @subpackage WP DSGVO Tools/includes
|
21 |
+
* @author Shapepress eU
|
22 |
+
*/
|
23 |
+
class SPDSGVODataCollecter
|
24 |
+
{
|
25 |
+
|
26 |
+
public $email;
|
27 |
+
|
28 |
+
public $firstName;
|
29 |
+
|
30 |
+
public $lastName;
|
31 |
+
|
32 |
+
public $user = NULL;
|
33 |
+
|
34 |
+
public $totalFound = 0;
|
35 |
+
|
36 |
+
public $data = array();
|
37 |
+
|
38 |
+
public $identifiers = array();
|
39 |
+
|
40 |
+
public $tables = array();
|
41 |
+
|
42 |
+
public $sensativeKeys = array(
|
43 |
+
'company',
|
44 |
+
'country',
|
45 |
+
'county',
|
46 |
+
'city',
|
47 |
+
'state',
|
48 |
+
'address',
|
49 |
+
'first_name',
|
50 |
+
'last_name',
|
51 |
+
'zip',
|
52 |
+
'zip_code',
|
53 |
+
'post_code',
|
54 |
+
'postcode',
|
55 |
+
'email',
|
56 |
+
'phone',
|
57 |
+
'ip',
|
58 |
+
'ip_address'
|
59 |
+
);
|
60 |
+
|
61 |
+
public function __construct($email, $firstName = '', $lastName = '')
|
62 |
+
{
|
63 |
+
$this->email = $email;
|
64 |
+
|
65 |
+
if (! empty($firstName)) {
|
66 |
+
$this->addIdentifier($firstName, __('Name','shapepress-dsgvo'));
|
67 |
+
$this->firstName = $firstName;
|
68 |
+
}
|
69 |
+
|
70 |
+
if (! empty($lastName)) {
|
71 |
+
$this->addIdentifier($lastName, __('Name','shapepress-dsgvo'));
|
72 |
+
$this->lastName = $lastName;
|
73 |
+
}
|
74 |
+
|
75 |
+
$this->user = get_user_by('email', $this->email);
|
76 |
+
if (is_a($this->user, 'WP_User')) {
|
77 |
+
$this->addIdentifier($this->user->user_login, __('Login','shapepress-dsgvo'));
|
78 |
+
$this->addIdentifier($this->user->user_nicename, __('Name','shapepress-dsgvo'));
|
79 |
+
$this->addIdentifier($this->user->user_email, __('Email','shapepress-dsgvo'));
|
80 |
+
$this->addIdentifier($this->user->user_url, __('Url','shapepress-dsgvo'));
|
81 |
+
$this->addIdentifier($this->user->display_name, __('Display Name','shapepress-dsgvo'));
|
82 |
+
$this->addIdentifier(str_replace('www.', '', @parse_url($this->user->user_url)['host']), __('Url','shapepress-dsgvo'));
|
83 |
+
}
|
84 |
+
}
|
85 |
+
|
86 |
+
public function sar()
|
87 |
+
{
|
88 |
+
if (is_a($this->user, 'WP_User')) {
|
89 |
+
$this->crawlLocal();
|
90 |
+
}else
|
91 |
+
{
|
92 |
+
$this->crawlLocal(); // both for now because it only crawls comments
|
93 |
+
}
|
94 |
+
|
95 |
+
$this->integrationsSAR();
|
96 |
+
|
97 |
+
if (isValidPremiumEdition())
|
98 |
+
{
|
99 |
+
try {
|
100 |
+
$customData = apply_filters('spdsgvo_custom_sar', $this->email);
|
101 |
+
|
102 |
+
//error_log('custom filter result. '.$customData);
|
103 |
+
if ($customData === $this->email) $customData = NULL;
|
104 |
+
if ($customData)
|
105 |
+
{
|
106 |
+
foreach ($customData as $data) {
|
107 |
+
$this->addData($data, __('Advanced', 'shapepress-dsgvo'), 'spdsgvo_custom_sar');
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
} catch (Exception $e) {
|
112 |
+
error_log($e);
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
116 |
+
return $this->getData();
|
117 |
+
}
|
118 |
+
|
119 |
+
public function crawlLocal()
|
120 |
+
{
|
121 |
+
global $wpdb;
|
122 |
+
|
123 |
+
if (! is_a($this->user, 'WP_User')) {
|
124 |
+
|
125 |
+
// search public comments and then return
|
126 |
+
|
127 |
+
$comments = get_comments(array(
|
128 |
+
'author_email' => $this->email,
|
129 |
+
'type' => ''
|
130 |
+
));
|
131 |
+
foreach ($comments as $comment) {
|
132 |
+
$this->addData($comment->comment_author, __('Name','shapepress-dsgvo'));
|
133 |
+
$this->addData($comment->comment_author_email, __('Email','shapepress-dsgvo'));
|
134 |
+
$this->addData($comment->comment_author_url, __('Url','shapepress-dsgvo'));
|
135 |
+
$this->addData($comment->comment_author_IP, __('IP Address','shapepress-dsgvo'));
|
136 |
+
$this->addData($comment->comment_content, __('Comment','shapepress-dsgvo'));
|
137 |
+
}
|
138 |
+
|
139 |
+
return;
|
140 |
+
}
|
141 |
+
|
142 |
+
// ====================================================
|
143 |
+
// WP_User
|
144 |
+
// ====================================================
|
145 |
+
$this->addData($this->user->user_login, __('User name','shapepress-dsgvo'));
|
146 |
+
$this->addData($this->user->user_nicename, __('Name','shapepress-dsgvo'));
|
147 |
+
$this->addData($this->user->user_url, __('Url','shapepress-dsgvo'));
|
148 |
+
$this->addData($this->user->display_name, __('Display name','shapepress-dsgvo'));
|
149 |
+
|
150 |
+
// ====================================================
|
151 |
+
// WP_Usermeta
|
152 |
+
// ====================================================
|
153 |
+
foreach (get_user_meta($this->user->ID) as $key => $meta) {
|
154 |
+
if ($this->isSensativeKey($key)) {
|
155 |
+
foreach ($meta as $metaValue) {
|
156 |
+
$this->addData($metaValue);
|
157 |
+
}
|
158 |
+
}
|
159 |
+
}
|
160 |
+
|
161 |
+
// ====================================================
|
162 |
+
// WP_Comments
|
163 |
+
// ====================================================
|
164 |
+
$comments = get_comments(array(
|
165 |
+
'user_id' => $this->user->ID
|
166 |
+
));
|
167 |
+
//error_log('comments1: '.implode(', ',$comments));
|
168 |
+
foreach ($comments as $comment) {
|
169 |
+
$this->addData($comment->comment_author, __('Name','shapepress-dsgvo'));
|
170 |
+
$this->addData($comment->comment_author_email, __('Email','shapepress-dsgvo'));
|
171 |
+
$this->addData($comment->comment_author_url, __('Url','shapepress-dsgvo'));
|
172 |
+
$this->addData($comment->comment_author_IP, __('IP Address','shapepress-dsgvo'));
|
173 |
+
$this->addData($comment->comment_content, __('Comment','shapepress-dsgvo'));
|
174 |
+
}
|
175 |
+
|
176 |
+
|
177 |
+
}
|
178 |
+
|
179 |
+
public function integrationsSAR()
|
180 |
+
{
|
181 |
+
foreach (SPDSGVOIntegration::getAllIntegrations(SPDSGVOConstants::CATEGORY_SLUG_PLUGINS) as $integration) {
|
182 |
+
if (method_exists($integration, 'onSubjectAccessRequest')) {
|
183 |
+
try {
|
184 |
+
$data = $integration->onSubjectAccessRequest($this->email, $this->firstName, $this->lastName, $this->user);
|
185 |
+
if (is_array($data)) {
|
186 |
+
foreach ($data as $value) {
|
187 |
+
if (is_string($value)) {
|
188 |
+
$this->addData($value, $integration->title, $integration->name);
|
189 |
+
} else if (is_array($value)) {
|
190 |
+
foreach ($value as $valueItem) {
|
191 |
+
if (is_string($valueItem)) {
|
192 |
+
$this->addData($valueItem, $integration->title, $integration->name);
|
193 |
+
}
|
194 |
+
}
|
195 |
+
}
|
196 |
+
}
|
197 |
+
}
|
198 |
+
} catch (Exception $e) {}
|
199 |
+
}
|
200 |
+
}
|
201 |
+
}
|
202 |
+
|
203 |
+
public function superUnsubscribe()
|
204 |
+
{
|
205 |
+
$this->user = get_user_by('email', $this->email);
|
206 |
+
|
207 |
+
if (is_a($this->user, 'WP_User')) {
|
208 |
+
$this->superUnsubscribeLocal();
|
209 |
+
} else
|
210 |
+
{
|
211 |
+
$this->superUnsubscribeLocal();
|
212 |
+
}
|
213 |
+
|
214 |
+
if (isValidPremiumEdition())
|
215 |
+
{
|
216 |
+
try {
|
217 |
+
apply_filters('spdsgvo_custom_unsubscribe', $this->email);
|
218 |
+
|
219 |
+
} catch (Exception $e) {
|
220 |
+
error_log($e);
|
221 |
+
}
|
222 |
+
}
|
223 |
+
|
224 |
+
$this->superUnsubscribeIntegrations();
|
225 |
+
}
|
226 |
+
|
227 |
+
public function superUnsubscribeLocal()
|
228 |
+
{
|
229 |
+
global $wpdb;
|
230 |
+
|
231 |
+
if (! is_a($this->user, 'WP_User')) { // only do commments for not registered ones
|
232 |
+
|
233 |
+
// ======================================================================
|
234 |
+
// WP_Comments
|
235 |
+
// ======================================================================
|
236 |
+
//error_log('not a user '.$this->email);
|
237 |
+
$wpdb->get_results($wpdb->prepare("
|
238 |
+
UPDATE $wpdb->comments
|
239 |
+
SET
|
240 |
+
comment_author = 'Deleted User',
|
241 |
+
comment_author_email = %s,
|
242 |
+
comment_author_url = '',
|
243 |
+
comment_author_IP = '000.000.000.00'
|
244 |
+
WHERE comment_author_email = '". $this->email ."'", 'deleted_user_' . wp_generate_password(10, FALSE, FALSE) . '@example.com'));
|
245 |
+
|
246 |
+
|
247 |
+
return;
|
248 |
+
}
|
249 |
+
|
250 |
+
$userID = wp_update_user(array(
|
251 |
+
'ID' => $this->user->ID,
|
252 |
+
'user_pass' => wp_generate_password(),
|
253 |
+
'user_nicename' => 'Deleted User',
|
254 |
+
'user_url' => '',
|
255 |
+
'display_name' => 'Deleted User',
|
256 |
+
'nickname' => 'Deleted User',
|
257 |
+
'first_name' => 'Deleted',
|
258 |
+
'last_name' => 'User',
|
259 |
+
'description' => '',
|
260 |
+
'rich_editing' => '',
|
261 |
+
'user_registered' => '',
|
262 |
+
'role' => '',
|
263 |
+
'jabber' => '',
|
264 |
+
'aim' => '',
|
265 |
+
'yim' => '',
|
266 |
+
'show_admin_bar_front' => ''
|
267 |
+
));
|
268 |
+
|
269 |
+
$wpdb->get_results($wpdb->prepare("
|
270 |
+
UPDATE $wpdb->users
|
271 |
+
SET
|
272 |
+
user_login = %s,
|
273 |
+
user_email = %s
|
274 |
+
WHERE ID = {$this->user->ID}", 'deleted_user_' . wp_generate_password(10, FALSE, FALSE), 'deleted_user_' . wp_generate_password(10, FALSE, FALSE) . '@example.com'));
|
275 |
+
|
276 |
+
// ======================================================================
|
277 |
+
// WP_Comments
|
278 |
+
// ======================================================================
|
279 |
+
$wpdb->get_results($wpdb->prepare("
|
280 |
+
UPDATE $wpdb->comments
|
281 |
+
SET
|
282 |
+
comment_author = 'Deleted User',
|
283 |
+
comment_author_email = %s,
|
284 |
+
comment_author_url = '',
|
285 |
+
comment_author_IP = '000.000.000.00'
|
286 |
+
WHERE user_id = %d", $this->user->ID, 'deleted_user_' . wp_generate_password(10, FALSE, FALSE) . '@example.com'));
|
287 |
+
|
288 |
+
// ======================================================================
|
289 |
+
// WP_UserMeta
|
290 |
+
// ======================================================================
|
291 |
+
$meta = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d", $this->user->ID));
|
292 |
+
|
293 |
+
foreach ($meta as $row) {
|
294 |
+
if ($this->isSensativeKey($row->meta_key)) {
|
295 |
+
$wpdb->get_results($wpdb->prepare("
|
296 |
+
UPDATE $wpdb->usermeta
|
297 |
+
SET
|
298 |
+
meta_value = 'Deleted'
|
299 |
+
WHERE umeta_id = %d", $row->umeta_id));
|
300 |
+
}
|
301 |
+
}
|
302 |
+
}
|
303 |
+
|
304 |
+
public function superUnsubscribeIntegrations()
|
305 |
+
{
|
306 |
+
foreach (SPDSGVOIntegration::getAllIntegrations(SPDSGVOConstants::CATEGORY_SLUG_PLUGINS) as $integration) {
|
307 |
+
if (method_exists($integration, 'onSuperUnsubscribe')) {
|
308 |
+
try {
|
309 |
+
$integration->onSuperUnsubscribe($this->email, $this->firstName, $this->lastName, $this->user);
|
310 |
+
} catch (Exception $e) {}
|
311 |
+
}
|
312 |
+
}
|
313 |
+
}
|
314 |
+
|
315 |
+
// ======================================================================
|
316 |
+
// Helpers
|
317 |
+
// ======================================================================
|
318 |
+
public function addIdentifier($identifier, $type)
|
319 |
+
{
|
320 |
+
$identifier = strtolower($identifier);
|
321 |
+
|
322 |
+
if (empty($identifier)) {
|
323 |
+
return;
|
324 |
+
}
|
325 |
+
|
326 |
+
if (! in_array($identifier, $this->identifiers)) {
|
327 |
+
$this->identifiers[] = (object) [
|
328 |
+
'value' => $identifier,
|
329 |
+
'type' => $type
|
330 |
+
];
|
331 |
+
}
|
332 |
+
}
|
333 |
+
|
334 |
+
public function addData($data, $type = 'misc', $source = 'database')
|
335 |
+
{
|
336 |
+
// $data = strtolower($data);
|
337 |
+
if (empty($data)) {
|
338 |
+
return;
|
339 |
+
}
|
340 |
+
if ($data === '::1') {
|
341 |
+
return;
|
342 |
+
}
|
343 |
+
|
344 |
+
foreach ($this->data as $d) {
|
345 |
+
if ($d->data === $data) {
|
346 |
+
return;
|
347 |
+
}
|
348 |
+
}
|
349 |
+
|
350 |
+
if ($type === 'misc') {
|
351 |
+
$type = $this->guessDataType($data);
|
352 |
+
$type = ($type === FALSE) ? 'misc' : $type;
|
353 |
+
}
|
354 |
+
|
355 |
+
$this->data[] = (object) array(
|
356 |
+
'data' => $data,
|
357 |
+
'type' => $type,
|
358 |
+
'source' => $source
|
359 |
+
);
|
360 |
+
$this->totalFound ++;
|
361 |
+
}
|
362 |
+
|
363 |
+
public function guessDataType($data)
|
364 |
+
{
|
365 |
+
$dataToCheck = strtolower($data);
|
366 |
+
|
367 |
+
// IP Addresses
|
368 |
+
preg_match_all('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $dataToCheck, $IPAddresses);
|
369 |
+
foreach ($IPAddresses[0] as $ip) {
|
370 |
+
return 'IP';
|
371 |
+
}
|
372 |
+
|
373 |
+
// Email
|
374 |
+
preg_match_all('/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $dataToCheck, $emailAdresses);
|
375 |
+
foreach ($emailAdresses[0] as $emailAddress) {
|
376 |
+
return __('Email','shapepress-dsgvo');
|
377 |
+
}
|
378 |
+
|
379 |
+
// Post Code
|
380 |
+
preg_match_all('/((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2}))/i', $dataToCheck, $postCodes);
|
381 |
+
foreach ($postCodes[0] as $postCode) {
|
382 |
+
return __('ZIP Code','shapepress-dsgvo');
|
383 |
+
}
|
384 |
+
|
385 |
+
// Phone Number
|
386 |
+
preg_match_all('/^[().+\d -]{5,15}$/', $dataToCheck, $phoneNumbers);
|
387 |
+
foreach ($phoneNumbers[0] as $phoneNumber) {
|
388 |
+
if (strlen($phoneNumber) >= 7) {
|
389 |
+
return __('Phone number','shapepress-dsgvo');
|
390 |
+
}
|
391 |
+
}
|
392 |
+
|
393 |
+
// URLs
|
394 |
+
preg_match_all('#[-a-zA-Z0-9@:%_\+.~\#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~\#?&//=]*)?#si', $dataToCheck, $URLs);
|
395 |
+
foreach ($URLs[0] as $url) {
|
396 |
+
if (! empty($url)) {
|
397 |
+
if (strpos($url, @parse_url($url)['host']) === FALSE) {
|
398 |
+
if (filter_var($url, FILTER_VALIDATE_URL)) {
|
399 |
+
return __('Url','shapepress-dsgvo');
|
400 |
+
}
|
401 |
+
}
|
402 |
+
}
|
403 |
+
}
|
404 |
+
|
405 |
+
// Address
|
406 |
+
if (strpos($dataToCheck, 'road') !== FALSE || strpos($dataToCheck, 'street') !== FALSE) {
|
407 |
+
return __('Address','shapepress-dsgvo');
|
408 |
+
}
|
409 |
+
|
410 |
+
foreach ($this->identifiers as $key => $identifier) {
|
411 |
+
if ($identifier->value == $dataToCheck) {
|
412 |
+
return $identifier->type;
|
413 |
+
}
|
414 |
+
}
|
415 |
+
|
416 |
+
return false;
|
417 |
+
}
|
418 |
+
|
419 |
+
public function getData()
|
420 |
+
{
|
421 |
+
$done = array();
|
422 |
+
$data = array();
|
423 |
+
|
424 |
+
foreach ($this->data as $d) {
|
425 |
+
if (! in_array($d->data, $done)) {
|
426 |
+
$done[] = $d->data;
|
427 |
+
$data[] = $d;
|
428 |
+
}
|
429 |
+
}
|
430 |
+
|
431 |
+
return $data;
|
432 |
+
}
|
433 |
+
|
434 |
+
public function getDataByType()
|
435 |
+
{
|
436 |
+
$done = array();
|
437 |
+
$data = array();
|
438 |
+
|
439 |
+
foreach ($this->data as $d) {
|
440 |
+
if (! in_array($d->data, $done)) {
|
441 |
+
$done[] = $d->data;
|
442 |
+
|
443 |
+
if (! isset($data[$d->type])) {
|
444 |
+
$data[$d->type] = array();
|
445 |
+
}
|
446 |
+
|
447 |
+
$data[$d->type][] = $d;
|
448 |
+
}
|
449 |
+
}
|
450 |
+
|
451 |
+
return $data;
|
452 |
+
}
|
453 |
+
|
454 |
+
public function isSensativeKey($key)
|
455 |
+
{
|
456 |
+
return (str_replace($this->sensativeKeys, '', $key) !== $key);
|
457 |
+
}
|
458 |
+
|
459 |
+
public function searchStringForKnownIdentifiers($string)
|
460 |
+
{
|
461 |
+
$identifiers = array_unique($this->identifiers);
|
462 |
+
|
463 |
+
foreach ($identifiers as $identifier) {
|
464 |
+
if (strpos($string, $identifier) !== FALSE) {
|
465 |
+
$this->addData($string);
|
466 |
+
}
|
467 |
+
}
|
468 |
+
}
|
469 |
+
}
|
includes/class-sp-dsgvo-deactivator.php
CHANGED
@@ -1,36 +1,36 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Fired during plugin deactivation
|
5 |
-
*
|
6 |
-
* @link https://wp-dsgvo.eu
|
7 |
-
* @since 1.0.0
|
8 |
-
*
|
9 |
-
* @package WP DSGVO Tools
|
10 |
-
* @subpackage WP DSGVO Tools/includes
|
11 |
-
*/
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Fired during plugin deactivation.
|
15 |
-
*
|
16 |
-
* This class defines all code necessary to run during the plugin's deactivation.
|
17 |
-
*
|
18 |
-
* @since 1.0.0
|
19 |
-
* @package WP DSGVO Tools
|
20 |
-
* @subpackage WP DSGVO Tools/includes
|
21 |
-
* @author Shapepress eU
|
22 |
-
*/
|
23 |
-
class SPDSGVODeactivator {
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Short Description. (use period)
|
27 |
-
*
|
28 |
-
* Long Description.
|
29 |
-
*
|
30 |
-
* @since 1.0.0
|
31 |
-
*/
|
32 |
-
public static function deactivate(){
|
33 |
-
|
34 |
-
}
|
35 |
-
|
36 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Fired during plugin deactivation
|
5 |
+
*
|
6 |
+
* @link https://wp-dsgvo.eu
|
7 |
+
* @since 1.0.0
|
8 |
+
*
|
9 |
+
* @package WP DSGVO Tools
|
10 |
+
* @subpackage WP DSGVO Tools/includes
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Fired during plugin deactivation.
|
15 |
+
*
|
16 |
+
* This class defines all code necessary to run during the plugin's deactivation.
|
17 |
+
*
|
18 |
+
* @since 1.0.0
|
19 |
+
* @package WP DSGVO Tools
|
20 |
+
* @subpackage WP DSGVO Tools/includes
|
21 |
+
* @author Shapepress eU
|
22 |
+
*/
|
23 |
+
class SPDSGVODeactivator {
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Short Description. (use period)
|
27 |
+
*
|
28 |
+
* Long Description.
|
29 |
+
*
|
30 |
+
* @since 1.0.0
|
31 |
+
*/
|
32 |
+
public static function deactivate(){
|
33 |
+
|
34 |
+
}
|
35 |
+
|
36 |
+
}
|
includes/class-sp-dsgvo-integration-api-base.php
ADDED
@@ -0,0 +1,291 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
abstract class SPDSGVOIntegrationApiBase
|
4 |
+
{
|
5 |
+
|
6 |
+
public $name = "";
|
7 |
+
public $company = "";
|
8 |
+
public $country = "";
|
9 |
+
public $slug = '';
|
10 |
+
public $storageId = '';
|
11 |
+
public $cookieCategory ='';
|
12 |
+
public $cookieNames = '';
|
13 |
+
public $isPremium = false;
|
14 |
+
public $insertLocation = 'body';
|
15 |
+
public $isTagManagerCompatible = false;
|
16 |
+
public $optInNeeded = true;
|
17 |
+
public $optionTechMandatory = false;
|
18 |
+
|
19 |
+
protected function __construct()
|
20 |
+
{
|
21 |
+
}
|
22 |
+
|
23 |
+
final private function __clone()
|
24 |
+
{
|
25 |
+
}
|
26 |
+
|
27 |
+
final public static function getInstance()
|
28 |
+
{
|
29 |
+
static $instances = array();
|
30 |
+
|
31 |
+
$calledClass = get_called_class();
|
32 |
+
|
33 |
+
if (!isset($instances[$calledClass]))
|
34 |
+
{
|
35 |
+
$instances[$calledClass] = new $calledClass();
|
36 |
+
}
|
37 |
+
|
38 |
+
return $instances[$calledClass];
|
39 |
+
}
|
40 |
+
|
41 |
+
public final function getName()
|
42 |
+
{
|
43 |
+
return $this->name;
|
44 |
+
}
|
45 |
+
|
46 |
+
public final function getCompany()
|
47 |
+
{
|
48 |
+
return $this->company;
|
49 |
+
}
|
50 |
+
|
51 |
+
public final function getCountry()
|
52 |
+
{
|
53 |
+
return __($this->country, 'shapepress-dsgvo');
|
54 |
+
}
|
55 |
+
|
56 |
+
public final function getStorageId()
|
57 |
+
{
|
58 |
+
return $this->storageId;
|
59 |
+
}
|
60 |
+
|
61 |
+
public final function getSlug()
|
62 |
+
{
|
63 |
+
return $this->slug;
|
64 |
+
}
|
65 |
+
|
66 |
+
public final function getCookieNames()
|
67 |
+
{
|
68 |
+
return $this->cookieNames;
|
69 |
+
}
|
70 |
+
|
71 |
+
public final function getCategory($backendMode = false)
|
72 |
+
{
|
73 |
+
if ($backendMode == false && $this->getIsTechMandatoryOptionEnabled() == true)
|
74 |
+
{
|
75 |
+
$settings = $this->getSettings();
|
76 |
+
if ($settings['showAsTechMandatory'] == '1') return SPDSGVOConstants::CATEGORY_SLUG_MANDATORY;
|
77 |
+
else return $this->cookieCategory;
|
78 |
+
} else {
|
79 |
+
return $this->cookieCategory;
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
public final function getIsPremium()
|
84 |
+
{
|
85 |
+
return $this->isPremium;
|
86 |
+
}
|
87 |
+
|
88 |
+
public final function getInsertLocation()
|
89 |
+
{
|
90 |
+
return $this->insertLocation;
|
91 |
+
|
92 |
+
}
|
93 |
+
|
94 |
+
public final function getIsTagManagerCompatible()
|
95 |
+
{
|
96 |
+
return $this->isTagManagerCompatible;
|
97 |
+
|
98 |
+
}
|
99 |
+
|
100 |
+
public function getIfOptInNeeded()
|
101 |
+
{
|
102 |
+
return $this->optInNeeded;
|
103 |
+
|
104 |
+
}
|
105 |
+
|
106 |
+
public function getIsTechMandatoryOptionEnabled()
|
107 |
+
{
|
108 |
+
return $this->optionTechMandatory;
|
109 |
+
}
|
110 |
+
|
111 |
+
public function getDefaultSettings($ownCodeEnabledByDefault = false)
|
112 |
+
{
|
113 |
+
$settings = array();
|
114 |
+
$settings['enabled'] = '0';
|
115 |
+
$settings['propertyId'] = '';
|
116 |
+
$settings['useOwnCode'] = $ownCodeEnabledByDefault ? '1' : '0';
|
117 |
+
$settings['jsCode'] = $this->getDefaultJsCode('YourCodeHere');
|
118 |
+
$settings['cookieNames'] = $this->cookieNames;
|
119 |
+
$settings['withGtm'] = '0';
|
120 |
+
$settings['showAsTechMandatory'] = '0';
|
121 |
+
|
122 |
+
return $settings;
|
123 |
+
}
|
124 |
+
|
125 |
+
public function getJsCode($settings = null)
|
126 |
+
{
|
127 |
+
if (isset($settings) == false)
|
128 |
+
{
|
129 |
+
$settings = $this->getSettings();
|
130 |
+
}
|
131 |
+
|
132 |
+
if (empty($settings['jsCode'])) {
|
133 |
+
$settings['jsCode'] = $this->getDefaultJsCode($settings['propertyId']);
|
134 |
+
}
|
135 |
+
|
136 |
+
return $settings['jsCode'];
|
137 |
+
}
|
138 |
+
|
139 |
+
public final function checkIfIntegrationIsAllowed($integrationSlug)
|
140 |
+
{
|
141 |
+
// first check if the visitor interacted with our notice/plugin
|
142 |
+
$cookieDecisionMade = isset($_COOKIE[SPDSGVOConstants::CCOKIE_NAME]);
|
143 |
+
if ($cookieDecisionMade == false) return false;
|
144 |
+
|
145 |
+
// the settings are stored in an array like "integration-slug" => '0'
|
146 |
+
$integrationSettings = json_decode(stripslashes($_COOKIE[SPDSGVOConstants::CCOKIE_NAME]));
|
147 |
+
if (isset($integrationSettings->integrations) == false) return false;
|
148 |
+
|
149 |
+
return in_array($integrationSlug, $integrationSettings->integrations);
|
150 |
+
|
151 |
+
|
152 |
+
}
|
153 |
+
|
154 |
+
public final function getIsEnabled()
|
155 |
+
{
|
156 |
+
$settings = $this->getSettings();
|
157 |
+
|
158 |
+
return $settings['enabled'] == '1';
|
159 |
+
}
|
160 |
+
|
161 |
+
public final function getSettings()
|
162 |
+
{
|
163 |
+
$storageId = 'integration_'.$this->storageId;
|
164 |
+
$defaultSettings = $this->getDefaultSettings();
|
165 |
+
$settings = SPDSGVOSettings::get($storageId);
|
166 |
+
if (is_array($settings) == false) $settings = [];
|
167 |
+
|
168 |
+
$settings = array_merge($defaultSettings, $settings);
|
169 |
+
|
170 |
+
return $settings;
|
171 |
+
}
|
172 |
+
|
173 |
+
public final function setSettings($settings)
|
174 |
+
{
|
175 |
+
$storageId = 'integration_'.$this->storageId;
|
176 |
+
|
177 |
+
SPDSGVOSettings::set($storageId, $settings);
|
178 |
+
SPDSGVOCacheManager::clearCaches();
|
179 |
+
}
|
180 |
+
|
181 |
+
protected function checkIfIntegrationIsAllowedByCookie($settings)
|
182 |
+
{
|
183 |
+
$integrationAllowed = false;
|
184 |
+
if ($this->getIfOptInNeeded() == false) return true;
|
185 |
+
|
186 |
+
if (array_key_exists('cloudMode', $settings) && $settings['cloudMode'] == '0')
|
187 |
+
{
|
188 |
+
$integrationAllowed = true;
|
189 |
+
} else
|
190 |
+
{
|
191 |
+
$integrationAllowed = $this->checkIfIntegrationIsAllowed($this->slug);
|
192 |
+
}
|
193 |
+
|
194 |
+
return $integrationAllowed;
|
195 |
+
}
|
196 |
+
|
197 |
+
public function processHeadAction()
|
198 |
+
{
|
199 |
+
if ($this->insertLocation != 'head') return;
|
200 |
+
|
201 |
+
$settings = $this->getSettings();
|
202 |
+
|
203 |
+
if ($settings['enabled'] == '0') return;
|
204 |
+
$propertyId = $settings['propertyId'];
|
205 |
+
|
206 |
+
$integrationAllowed = $this->checkIfIntegrationIsAllowedByCookie($settings);
|
207 |
+
|
208 |
+
$jsCode = $this->getJsCode($settings);
|
209 |
+
|
210 |
+
$result = "";
|
211 |
+
|
212 |
+
$result = "<!-- id='sp-dsgvo-script-container-$this->slug' class='sp-dsgvo-script-container'-->$jsCode<!-- end sp-dsgvo-script-container-$this->slug -->";
|
213 |
+
|
214 |
+
if ($integrationAllowed) {
|
215 |
+
echo $result;
|
216 |
+
}
|
217 |
+
return;
|
218 |
+
}
|
219 |
+
|
220 |
+
public function processBodyEndAction()
|
221 |
+
{
|
222 |
+
if ($this->insertLocation != 'body') return;
|
223 |
+
|
224 |
+
$settings = $this->getSettings();
|
225 |
+
|
226 |
+
if ($settings['enabled'] == '0') return;
|
227 |
+
$propertyId = $settings['propertyId'];
|
228 |
+
|
229 |
+
$integrationAllowed = $this->checkIfIntegrationIsAllowedByCookie($settings);
|
230 |
+
$jsCode = $this->getJsCode($settings);
|
231 |
+
|
232 |
+
$result = "";
|
233 |
+
|
234 |
+
$result = "<div class='sp-dsgvo-script-container sp-dsgvo-script-container-$this->slug'>
|
235 |
+
$jsCode<!-- hook body-->
|
236 |
+
</div>";
|
237 |
+
|
238 |
+
if ($integrationAllowed) {
|
239 |
+
echo $result;
|
240 |
+
}
|
241 |
+
return;
|
242 |
+
}
|
243 |
+
|
244 |
+
public function processBodyStartAction()
|
245 |
+
{
|
246 |
+
if ($this->insertLocation != 'body') return;
|
247 |
+
|
248 |
+
$settings = $this->getSettings();
|
249 |
+
|
250 |
+
if ($settings['enabled'] == '0') return;
|
251 |
+
$propertyId = $settings['propertyId'];
|
252 |
+
|
253 |
+
$integrationAllowed = $this->checkIfIntegrationIsAllowedByCookie($settings);
|
254 |
+
$jsCode = $this->getJsCode($settings);
|
255 |
+
|
256 |
+
$result = "";
|
257 |
+
|
258 |
+
$result = "<div class='sp-dsgvo-script-container sp-dsgvo-script-container-$this->slug'>
|
259 |
+
$jsCode<!-- hook body-->
|
260 |
+
</div>";
|
261 |
+
|
262 |
+
if ($integrationAllowed) {
|
263 |
+
echo $result;
|
264 |
+
}
|
265 |
+
return;
|
266 |
+
}
|
267 |
+
|
268 |
+
public final function register(){
|
269 |
+
$class = get_called_class();
|
270 |
+
$self = new $class();
|
271 |
+
|
272 |
+
add_filter('sp_dsgvo_integrationapis_'.$this->getCategory(), array($class::getInstance(), 'registerCallback'));
|
273 |
+
|
274 |
+
}
|
275 |
+
|
276 |
+
public function registerCallback($integrations)
|
277 |
+
{
|
278 |
+
|
279 |
+
$class = get_called_class();
|
280 |
+
$slug = $class::getInstance()->getSlug();
|
281 |
+
|
282 |
+
$integrations[$slug] = $class::getInstance();
|
283 |
+
return $integrations;
|
284 |
+
|
285 |
+
}
|
286 |
+
|
287 |
+
public static function getAllIntegrationApis($type, $safe = TRUE)
|
288 |
+
{
|
289 |
+
return apply_filters('sp_dsgvo_integrationapis_'.$type, array());
|
290 |
+
}
|
291 |
+
}
|
includes/class-sp-dsgvo-integration.php
CHANGED
@@ -1,98 +1,104 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class SPDSGVOIntegration extends SPDSGVOAdminTab{
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
$
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
}
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
$
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
$
|
53 |
-
return
|
54 |
-
}
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
}
|
97 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOIntegration extends SPDSGVOAdminTab{
|
4 |
+
|
5 |
+
public $integrationCategory = '';
|
6 |
+
public $slug = '';
|
7 |
+
public $title = '';
|
8 |
+
public $isPremium = false;
|
9 |
+
public $apiInstance = null;
|
10 |
+
|
11 |
+
public function __construct(){
|
12 |
+
$this->isHidden = FALSE;
|
13 |
+
|
14 |
+
if(method_exists($this, 'boot')){
|
15 |
+
$this->boot();
|
16 |
+
}
|
17 |
+
}
|
18 |
+
|
19 |
+
public static function register(){
|
20 |
+
$class = get_called_class();
|
21 |
+
$self = new $class();
|
22 |
+
|
23 |
+
if(method_exists($self, 'viewSubmit')){
|
24 |
+
$action = $class::action();
|
25 |
+
add_action("wp_ajax_{$action}", array($self, 'viewSubmit'));
|
26 |
+
add_action("wp_ajax_nopriv_{$action}", array($self, 'viewSubmit'));
|
27 |
+
}
|
28 |
+
|
29 |
+
add_filter('sp_dsgvo_integrations_'.$self->integrationCategory, array($class, 'registerCallback'));
|
30 |
+
|
31 |
+
if(self::isEnabled($self->slug)){
|
32 |
+
add_filter('sp_dsgvo_integrations_safe_'.$self->integrationCategory, array($class, 'registerCallback'));
|
33 |
+
}
|
34 |
+
}
|
35 |
+
|
36 |
+
public static function registerCallback($integrations){
|
37 |
+
$class = get_called_class();
|
38 |
+
$self = new $class;
|
39 |
+
$integrations[$self->slug] = $self;
|
40 |
+
return $integrations;
|
41 |
+
}
|
42 |
+
|
43 |
+
public static function getAllIntegrations($type, $safe = TRUE){
|
44 |
+
if($safe){
|
45 |
+
return apply_filters('sp_dsgvo_integrations_safe_'.$type, array());
|
46 |
+
}else{
|
47 |
+
return apply_filters('sp_dsgvo_integrations_'.$type, array());
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
public static function action(){
|
52 |
+
$class = get_called_class();
|
53 |
+
return 'SPDSGVO-integration-'. self::slug();
|
54 |
+
}
|
55 |
+
|
56 |
+
public static function slug(){
|
57 |
+
$class = get_called_class();
|
58 |
+
$self = new $class;
|
59 |
+
return $self->slug;
|
60 |
+
}
|
61 |
+
|
62 |
+
// Note: I did this because I don't
|
63 |
+
// like the method name page() now,
|
64 |
+
// I prefur name view() instead. So
|
65 |
+
// that's why this dirty function exists
|
66 |
+
public function page(){
|
67 |
+
if(method_exists($this, 'view')){
|
68 |
+
$this->view();
|
69 |
+
}
|
70 |
+
}
|
71 |
+
|
72 |
+
|
73 |
+
// -----------------------------------------------------
|
74 |
+
// Helpers
|
75 |
+
// -----------------------------------------------------
|
76 |
+
public static function formURL(){
|
77 |
+
return admin_url('/admin-ajax.php');
|
78 |
+
}
|
79 |
+
|
80 |
+
public static function isEnabled($slug){
|
81 |
+
return SPDSGVOSettings::get('is_enabled_'.$slug) === SPDSGVOSettings::get('integration_enable_key');
|
82 |
+
}
|
83 |
+
|
84 |
+
public function has($key){
|
85 |
+
return isset($_REQUEST[$key]);
|
86 |
+
}
|
87 |
+
|
88 |
+
public function get($key, $default = NULL, $stripslashes = TRUE){
|
89 |
+
if($this->has($key)){
|
90 |
+
if($stripslashes){
|
91 |
+
return stripslashes($_REQUEST[$key]);
|
92 |
+
}
|
93 |
+
return $_REQUEST[$key];
|
94 |
+
}
|
95 |
+
return $default;
|
96 |
+
}
|
97 |
+
|
98 |
+
public function redirectBack(){
|
99 |
+
ob_clean();
|
100 |
+
header('Location: '. $_SERVER['HTTP_REFERER']);
|
101 |
+
die();
|
102 |
+
}
|
103 |
+
|
104 |
}
|
includes/class-sp-dsgvo-javascript.php
ADDED
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOJavascript
|
4 |
+
{
|
5 |
+
final public static function getInstance()
|
6 |
+
{
|
7 |
+
static $instances = array();
|
8 |
+
|
9 |
+
$calledClass = get_called_class();
|
10 |
+
|
11 |
+
if (!isset($instances[$calledClass]))
|
12 |
+
{
|
13 |
+
$instances[$calledClass] = new $calledClass();
|
14 |
+
}
|
15 |
+
|
16 |
+
return $instances[$calledClass];
|
17 |
+
}
|
18 |
+
|
19 |
+
public function register()
|
20 |
+
{
|
21 |
+
$settings = SPDSGVOSettings::getAll();
|
22 |
+
|
23 |
+
$integrationConfig = array();
|
24 |
+
|
25 |
+
$allCategories = SPDSGVOCookieCategoryApi::getCookieCategories();
|
26 |
+
|
27 |
+
$allIntegrationSlugs = [];
|
28 |
+
$gtmNeeded = 0;
|
29 |
+
foreach ($allCategories as $currentCategory)
|
30 |
+
{
|
31 |
+
$categorySlug = $currentCategory['slug'];
|
32 |
+
$categoryData = $currentCategory;
|
33 |
+
if ($categoryData == null) return;
|
34 |
+
|
35 |
+
|
36 |
+
// fetch all integrations with given category and check if they are enabled
|
37 |
+
$integrations = SPDSGVOIntegrationApiBase::getAllIntegrationApis($categorySlug, FALSE);
|
38 |
+
|
39 |
+
foreach ($integrations as $integrationSlug => $integration)
|
40 |
+
{
|
41 |
+
if ($integration->getIsEnabled() == false) continue;
|
42 |
+
if ($integration->getIfOptInNeeded() == false) continue;
|
43 |
+
|
44 |
+
$allIntegrationSlugs[] = $integrationSlug;
|
45 |
+
|
46 |
+
$integrationSettings = $settings['integration_'.$integration->getStorageId()];
|
47 |
+
$integrationConfig[] = [
|
48 |
+
'slug' => $integrationSlug,
|
49 |
+
'category' => $integration->getCategory(),
|
50 |
+
//'enabled' => $integration->getIsEnabled(),
|
51 |
+
'cookieNames' => $integration->getCookieNames(),
|
52 |
+
'insertLocation' => $integration->getInsertLocation(),
|
53 |
+
'withGtm' => (array_key_exists('withGtm', $integrationSettings) && $integrationSettings['withGtm'] != '0') ? '1' : '0',
|
54 |
+
'jsCode' => base64_encode(($integration->getJsCode($integrationSettings)))
|
55 |
+
];
|
56 |
+
|
57 |
+
$gtmNeeded += (array_key_exists('withGtm', $integrationSettings) && $integrationSettings['withGtm'] != '0') ? 1 : 0;
|
58 |
+
if ($gtmNeeded > 0)
|
59 |
+
{
|
60 |
+
$allIntegrationSlugs[] = SPDSGVOGoogleTagmanagerApi::getInstance()->getSlug();
|
61 |
+
$integrationConfig[] = [
|
62 |
+
'slug' => SPDSGVOGoogleTagmanagerApi::getInstance()->getSlug(),
|
63 |
+
'category' => SPDSGVOGoogleTagmanagerApi::getInstance()->getCategory(),
|
64 |
+
//'enabled' => $integration->getIsEnabled(),
|
65 |
+
'cookieNames' => SPDSGVOGoogleTagmanagerApi::getInstance()->getCookieNames(),
|
66 |
+
'insertLocation' => SPDSGVOGoogleTagmanagerApi::getInstance()->getInsertLocation(),
|
67 |
+
'withGtm' => '0',
|
68 |
+
'jsCode' => base64_encode((SPDSGVOGoogleTagmanagerApi::getInstance()->getJsCode()))
|
69 |
+
];
|
70 |
+
}
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
$generalConfig = [
|
75 |
+
'ajaxUrl' => admin_url('admin-ajax.php'),
|
76 |
+
'cookieName' => SPDSGVOConstants::CCOKIE_NAME,
|
77 |
+
'cookieVersion' => $settings['cookie_version'],
|
78 |
+
'cookieLifeTime' => $settings['cn_cookie_validity'],
|
79 |
+
//'cookieDomain' => '',
|
80 |
+
'locale' => SPDSGVOLanguageTools::getInstance()->getCurrentLanguageCode(),
|
81 |
+
'privacyPolicyPageId' => $settings['privacy_policy_page'],
|
82 |
+
'privacyPolicyPageUrl' => get_permalink($settings['privacy_policy_page']),
|
83 |
+
'imprintPageId' => $settings['imprint_page'],
|
84 |
+
'imprintPageUrl' => get_permalink($settings['imprint_page']),
|
85 |
+
'showNoticeOnClose' => $settings['show_notice_on_close'],
|
86 |
+
'initialDisplayType' => $settings['cookie_notice_display'],
|
87 |
+
'allIntegrationSlugs' => $allIntegrationSlugs,
|
88 |
+
'noticeHideEffect' =>$settings['cn_animation'],
|
89 |
+
'noticeOnScroll' => false,
|
90 |
+
'noticeOnScrollOffset' => 100,
|
91 |
+
'currentPageId' => get_the_ID(),
|
92 |
+
'forceCookieInfo' => $settings['force_cookie_info']
|
93 |
+
];
|
94 |
+
|
95 |
+
wp_localize_script(sp_dsgvo_NAME, 'spDsgvoGeneralConfig', $generalConfig);
|
96 |
+
|
97 |
+
|
98 |
+
wp_localize_script(sp_dsgvo_NAME, 'spDsgvoIntegrationConfig', $integrationConfig);
|
99 |
+
|
100 |
+
}
|
101 |
+
|
102 |
+
}
|
includes/class-sp-dsgvo-language-tools.php
ADDED
@@ -0,0 +1,219 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOLanguageTools
|
4 |
+
{
|
5 |
+
public $defaultLanguage = 'en_EN';
|
6 |
+
|
7 |
+
|
8 |
+
private static $instance;
|
9 |
+
|
10 |
+
public function __construct()
|
11 |
+
{
|
12 |
+
$this->defaultLanguage = get_option('WPLANG', 'en_EN');
|
13 |
+
}
|
14 |
+
|
15 |
+
|
16 |
+
public static function init()
|
17 |
+
{
|
18 |
+
return new self;
|
19 |
+
}
|
20 |
+
|
21 |
+
public static function getInstance()
|
22 |
+
{
|
23 |
+
if (null === self::$instance) {
|
24 |
+
self::$instance = new self;
|
25 |
+
}
|
26 |
+
|
27 |
+
return self::$instance;
|
28 |
+
}
|
29 |
+
|
30 |
+
public function checkIfLanguagePluginIsActive()
|
31 |
+
{
|
32 |
+
return $this->getTypeOfLanguagePlugin() != 'none';
|
33 |
+
}
|
34 |
+
|
35 |
+
public function getTypeOfLanguagePlugin()
|
36 |
+
{
|
37 |
+
if ((defined('ICL_LANGUAGE_CODE') || defined('POLYLANG_FILE')) == false) return 'none';
|
38 |
+
else {
|
39 |
+
if(function_exists('icl_get_languages')) return 'wpml';
|
40 |
+
if(function_exists('pll_current_language')) return 'polylang';
|
41 |
+
}
|
42 |
+
|
43 |
+
return "none";
|
44 |
+
}
|
45 |
+
|
46 |
+
public function getCurrentLanguageCode()
|
47 |
+
{
|
48 |
+
$currentLanguage = null;
|
49 |
+
|
50 |
+
switch ($this->getTypeOfLanguagePlugin())
|
51 |
+
{
|
52 |
+
case "wpml":
|
53 |
+
$currentLanguage = apply_filters('wpml_current_language', null);
|
54 |
+
break;
|
55 |
+
case "polylang":
|
56 |
+
$currentLanguage = pll_current_language();
|
57 |
+
// get default language if we dont get a current one
|
58 |
+
if (empty($currentLanguage)) {
|
59 |
+
$currentLanguage = pll_default_language();
|
60 |
+
}
|
61 |
+
break;
|
62 |
+
case "none":
|
63 |
+
$currentLanguage = $this->defaultLanguage;
|
64 |
+
break;
|
65 |
+
default:
|
66 |
+
$currentLanguage = $this->defaultLanguage;
|
67 |
+
}
|
68 |
+
|
69 |
+
if (empty($currentLanguage) || $currentLanguage === 'all') {
|
70 |
+
$currentLanguage = $this->getDefaultLanguageCode();
|
71 |
+
}
|
72 |
+
|
73 |
+
return $this->normalizeLocaleCode($currentLanguage);
|
74 |
+
}
|
75 |
+
|
76 |
+
public function getDefaultLanguageCode()
|
77 |
+
{
|
78 |
+
$currentLanguage = null;
|
79 |
+
|
80 |
+
switch ($this->getTypeOfLanguagePlugin())
|
81 |
+
{
|
82 |
+
case "wpml":
|
83 |
+
$currentLanguage = apply_filters('wpml_default_language', null);
|
84 |
+
break;
|
85 |
+
case "polylang":
|
86 |
+
$currentLanguage = pll_default_language();
|
87 |
+
// get default language if we dont get a current one
|
88 |
+
if (empty($currentLanguage)) {
|
89 |
+
$currentLanguage = pll_default_language();
|
90 |
+
}
|
91 |
+
break;
|
92 |
+
case "none":
|
93 |
+
$currentLanguage = $this->defaultLanguage;
|
94 |
+
break;
|
95 |
+
default:
|
96 |
+
$currentLanguage = $this->defaultLanguage;
|
97 |
+
}
|
98 |
+
|
99 |
+
if (empty($currentLanguage) || $currentLanguage === 'all') {
|
100 |
+
$currentLanguage = $this->defaultLanguage;
|
101 |
+
}
|
102 |
+
|
103 |
+
return $this->normalizeLocaleCode($currentLanguage);
|
104 |
+
|
105 |
+
}
|
106 |
+
|
107 |
+
static function normalizeLocaleCode($locale)
|
108 |
+
{
|
109 |
+
try {
|
110 |
+
if (substr( $locale, 0, 2 ) === 'de') $locale = 'de_DE';
|
111 |
+
if (substr( $locale, 0, 2 ) === 'en') $locale = 'en_EN';
|
112 |
+
if (substr( $locale, 0, 2 ) === 'fr') $locale = 'fr_FR';
|
113 |
+
if (substr( $locale, 0, 2 ) === 'it') $locale = 'it_IT';
|
114 |
+
if ($locale === "") $locale = "en_EN";
|
115 |
+
return $locale;
|
116 |
+
} catch (Exception $e) {
|
117 |
+
return 'en_EN';
|
118 |
+
}
|
119 |
+
}
|
120 |
+
|
121 |
+
public static function updateLwTexts()
|
122 |
+
{
|
123 |
+
$lang = SPDSGVOSettings::get('spdsgvo_company_info_countrycode', '');
|
124 |
+
if ($lang == '') return;
|
125 |
+
|
126 |
+
|
127 |
+
$version = SPDSGVOSettings::get('legal_web_texts_version', '0');
|
128 |
+
|
129 |
+
$url = SPDSGVOConstants::LEGAL_WEB_TEXT_SERVICE_URL;
|
130 |
+
$url .= '?lang=' . $lang;
|
131 |
+
$url .= '&version=' . $version;
|
132 |
+
$url .= '&apiVersion=' . SPDSGVOConstants::LEGAL_WEB_TEXT_SERVICE_VERSION;
|
133 |
+
|
134 |
+
$request = wp_remote_get($url);
|
135 |
+
|
136 |
+
if (is_wp_error($request)) {
|
137 |
+
|
138 |
+
error_log(__('error while updating language texts: ', 'shapepress-dsgvo') . $request->get_error_message()); // Bail early
|
139 |
+
} else {
|
140 |
+
SPDSGVOSettings::set('legal_web_texts_last_check', time());
|
141 |
+
|
142 |
+
$result = wp_remote_retrieve_body($request);
|
143 |
+
if (strpos($result, "INFO") === 0)
|
144 |
+
{
|
145 |
+
// file actual, just return saved texts
|
146 |
+
$existingTexts = SPDSGVOSettings::get('legal_web_texts', '');
|
147 |
+
return $existingTexts;
|
148 |
+
} else if (strpos($result, "ERROR") !== 0) {
|
149 |
+
|
150 |
+
$resultCleaned = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $result);
|
151 |
+
|
152 |
+
// try to create json. if success then store
|
153 |
+
$xmlTextsJson = json_decode($resultCleaned, true);
|
154 |
+
|
155 |
+
if ($xmlTextsJson != null) {
|
156 |
+
$xmlTextsBase64 = base64_encode($xmlTextsJson['Texts']);
|
157 |
+
$version = $xmlTextsJson['Version'];
|
158 |
+
$lang = $xmlTextsJson['Language'];
|
159 |
+
if ($version == null || $version == '') $version = time();
|
160 |
+
|
161 |
+
SPDSGVOSettings::set('legal_web_texts', $xmlTextsBase64);
|
162 |
+
SPDSGVOSettings::set('legal_web_texts_version', $version);
|
163 |
+
SPDSGVOSettings::set('legal_web_texts_lang', $lang);
|
164 |
+
SPDSGVOSettings::set('legal_web_texts_last_update', time());
|
165 |
+
SPDSGVOSettings::set('show_notice_privacy_policy_texts_outdated', '0');
|
166 |
+
|
167 |
+
return $xmlTextsBase64;
|
168 |
+
} else {
|
169 |
+
$jsonError = json_last_error();
|
170 |
+
error_log('wrong texts received. json_error: '.$jsonError); // Bail early
|
171 |
+
}
|
172 |
+
|
173 |
+
} else
|
174 |
+
{
|
175 |
+
error_log('shapepress-dsgvo: updateLwTexts: '. $result);
|
176 |
+
}
|
177 |
+
}
|
178 |
+
}
|
179 |
+
|
180 |
+
|
181 |
+
static function getLwText($slug, $textId, $lang = '')
|
182 |
+
{
|
183 |
+
|
184 |
+
$enc = SPDSGVOSettings::get('legal_web_texts', '');
|
185 |
+
if ($enc == null || strlen($enc) < 10)
|
186 |
+
{
|
187 |
+
$enc = self::updateLwTexts();
|
188 |
+
}
|
189 |
+
if ($enc == null || strlen($enc) < 10) return '';
|
190 |
+
|
191 |
+
$dec = base64_decode($enc);
|
192 |
+
$xmlTexts = json_decode($dec, true);
|
193 |
+
if ($xmlTexts == false) return '';
|
194 |
+
|
195 |
+
if (array_key_exists($slug, $xmlTexts) == false) return '';
|
196 |
+
|
197 |
+
if ($lang == '' )$lang = self::normalizeLocaleCode((new self)->getCurrentLanguageCode());
|
198 |
+
if (array_key_exists($textId, $xmlTexts[$slug]) == false) return '';
|
199 |
+
// check if needed lang exists. if not, take default lang
|
200 |
+
if (array_key_exists($lang, $xmlTexts[$slug][$textId]) == false)
|
201 |
+
{
|
202 |
+
$defaultLang = self::normalizeLocaleCode(SPDSGVOLanguageTools::getInstance()->getDefaultLanguageCode());
|
203 |
+
if (array_key_exists($defaultLang, $xmlTexts[$slug][$textId]) == false)
|
204 |
+
{
|
205 |
+
return trim($xmlTexts[$slug][$textId]['en_EN']);
|
206 |
+
} else {
|
207 |
+
return trim($xmlTexts[$slug][$textId][$defaultLang]);
|
208 |
+
}
|
209 |
+
|
210 |
+
}
|
211 |
+
|
212 |
+
return trim($xmlTexts[$slug][$textId][$lang]);
|
213 |
+
}
|
214 |
+
|
215 |
+
static function getPrivacyPolicyText($slug, $lang='')
|
216 |
+
{
|
217 |
+
return self::getLwText($slug, 'privacy-policy', $lang);
|
218 |
+
}
|
219 |
+
}
|
includes/class-sp-dsgvo-loader.php
CHANGED
@@ -1,128 +1,128 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Register all actions and filters for the plugin
|
5 |
-
*
|
6 |
-
* @link https://wp-dsgvo.eu
|
7 |
-
* @since 1.0.0
|
8 |
-
*
|
9 |
-
* @package WP DSGVO Tools
|
10 |
-
* @subpackage WP DSGVO Tools/includes
|
11 |
-
*/
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Register all actions and filters for the plugin.
|
15 |
-
*
|
16 |
-
* Maintain a list of all hooks that are registered throughout
|
17 |
-
* the plugin, and register them with the WordPress API. Call the
|
18 |
-
* run function to execute the list of actions and filters.
|
19 |
-
*
|
20 |
-
* @package WP DSGVO Tools
|
21 |
-
* @subpackage WP DSGVO Tools/includes
|
22 |
-
* @author Shapepress eU
|
23 |
-
*/
|
24 |
-
class SPDSGVOLoader{
|
25 |
-
|
26 |
-
/**
|
27 |
-
* The array of actions registered with WordPress.
|
28 |
-
*
|
29 |
-
* @since 1.0.0
|
30 |
-
* @access protected
|
31 |
-
* @var array $actions The actions registered with WordPress to fire when the plugin loads.
|
32 |
-
*/
|
33 |
-
protected $actions;
|
34 |
-
|
35 |
-
/**
|
36 |
-
* The array of filters registered with WordPress.
|
37 |
-
*
|
38 |
-
* @since 1.0.0
|
39 |
-
* @access protected
|
40 |
-
* @var array $filters The filters registered with WordPress to fire when the plugin loads.
|
41 |
-
*/
|
42 |
-
protected $filters;
|
43 |
-
|
44 |
-
/**
|
45 |
-
* Initialize the collections used to maintain the actions and filters.
|
46 |
-
*
|
47 |
-
* @since 1.0.0
|
48 |
-
*/
|
49 |
-
public function __construct() {
|
50 |
-
|
51 |
-
$this->actions = array();
|
52 |
-
$this->filters = array();
|
53 |
-
|
54 |
-
}
|
55 |
-
|
56 |
-
/**
|
57 |
-
* Add a new action to the collection to be registered with WordPress.
|
58 |
-
*
|
59 |
-
* @since 1.0.0
|
60 |
-
* @param string $hook The name of the WordPress action that is being registered.
|
61 |
-
* @param object $component A reference to the instance of the object on which the action is defined.
|
62 |
-
* @param string $callback The name of the function definition on the $component.
|
63 |
-
* @param int $priority Optional. The priority at which the function should be fired. Default is 10.
|
64 |
-
* @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1.
|
65 |
-
*/
|
66 |
-
public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
|
67 |
-
$this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args );
|
68 |
-
}
|
69 |
-
|
70 |
-
/**
|
71 |
-
* Add a new filter to the collection to be registered with WordPress.
|
72 |
-
*
|
73 |
-
* @since 1.0.0
|
74 |
-
* @param string $hook The name of the WordPress filter that is being registered.
|
75 |
-
* @param object $component A reference to the instance of the object on which the filter is defined.
|
76 |
-
* @param string $callback The name of the function definition on the $component.
|
77 |
-
* @param int $priority Optional. The priority at which the function should be fired. Default is 10.
|
78 |
-
* @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1
|
79 |
-
*/
|
80 |
-
public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
|
81 |
-
$this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args );
|
82 |
-
}
|
83 |
-
|
84 |
-
/**
|
85 |
-
* A utility function that is used to register the actions and hooks into a single
|
86 |
-
* collection.
|
87 |
-
*
|
88 |
-
* @since 1.0.0
|
89 |
-
* @access private
|
90 |
-
* @param array $hooks The collection of hooks that is being registered (that is, actions or filters).
|
91 |
-
* @param string $hook The name of the WordPress filter that is being registered.
|
92 |
-
* @param object $component A reference to the instance of the object on which the filter is defined.
|
93 |
-
* @param string $callback The name of the function definition on the $component.
|
94 |
-
* @param int $priority The priority at which the function should be fired.
|
95 |
-
* @param int $accepted_args The number of arguments that should be passed to the $callback.
|
96 |
-
* @return array The collection of actions and filters registered with WordPress.
|
97 |
-
*/
|
98 |
-
private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) {
|
99 |
-
|
100 |
-
$hooks[] = array(
|
101 |
-
'hook' => $hook,
|
102 |
-
'component' => $component,
|
103 |
-
'callback' => $callback,
|
104 |
-
'priority' => $priority,
|
105 |
-
'accepted_args' => $accepted_args
|
106 |
-
);
|
107 |
-
|
108 |
-
return $hooks;
|
109 |
-
|
110 |
-
}
|
111 |
-
|
112 |
-
/**
|
113 |
-
* Register the filters and actions with WordPress.
|
114 |
-
*
|
115 |
-
* @since 1.0.0
|
116 |
-
*/
|
117 |
-
public function run(){
|
118 |
-
foreach ( $this->filters as $hook ) {
|
119 |
-
add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
|
120 |
-
}
|
121 |
-
|
122 |
-
foreach ( $this->actions as $hook ) {
|
123 |
-
add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
|
124 |
-
}
|
125 |
-
|
126 |
-
}
|
127 |
-
|
128 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Register all actions and filters for the plugin
|
5 |
+
*
|
6 |
+
* @link https://wp-dsgvo.eu
|
7 |
+
* @since 1.0.0
|
8 |
+
*
|
9 |
+
* @package WP DSGVO Tools
|
10 |
+
* @subpackage WP DSGVO Tools/includes
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Register all actions and filters for the plugin.
|
15 |
+
*
|
16 |
+
* Maintain a list of all hooks that are registered throughout
|
17 |
+
* the plugin, and register them with the WordPress API. Call the
|
18 |
+
* run function to execute the list of actions and filters.
|
19 |
+
*
|
20 |
+
* @package WP DSGVO Tools
|
21 |
+
* @subpackage WP DSGVO Tools/includes
|
22 |
+
* @author Shapepress eU
|
23 |
+
*/
|
24 |
+
class SPDSGVOLoader{
|
25 |
+
|
26 |
+
/**
|
27 |
+
* The array of actions registered with WordPress.
|
28 |
+
*
|
29 |
+
* @since 1.0.0
|
30 |
+
* @access protected
|
31 |
+
* @var array $actions The actions registered with WordPress to fire when the plugin loads.
|
32 |
+
*/
|
33 |
+
protected $actions;
|
34 |
+
|
35 |
+
/**
|
36 |
+
* The array of filters registered with WordPress.
|
37 |
+
*
|
38 |
+
* @since 1.0.0
|
39 |
+
* @access protected
|
40 |
+
* @var array $filters The filters registered with WordPress to fire when the plugin loads.
|
41 |
+
*/
|
42 |
+
protected $filters;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Initialize the collections used to maintain the actions and filters.
|
46 |
+
*
|
47 |
+
* @since 1.0.0
|
48 |
+
*/
|
49 |
+
public function __construct() {
|
50 |
+
|
51 |
+
$this->actions = array();
|
52 |
+
$this->filters = array();
|
53 |
+
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Add a new action to the collection to be registered with WordPress.
|
58 |
+
*
|
59 |
+
* @since 1.0.0
|
60 |
+
* @param string $hook The name of the WordPress action that is being registered.
|
61 |
+
* @param object $component A reference to the instance of the object on which the action is defined.
|
62 |
+
* @param string $callback The name of the function definition on the $component.
|
63 |
+
* @param int $priority Optional. The priority at which the function should be fired. Default is 10.
|
64 |
+
* @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1.
|
65 |
+
*/
|
66 |
+
public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
|
67 |
+
$this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args );
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Add a new filter to the collection to be registered with WordPress.
|
72 |
+
*
|
73 |
+
* @since 1.0.0
|
74 |
+
* @param string $hook The name of the WordPress filter that is being registered.
|
75 |
+
* @param object $component A reference to the instance of the object on which the filter is defined.
|
76 |
+
* @param string $callback The name of the function definition on the $component.
|
77 |
+
* @param int $priority Optional. The priority at which the function should be fired. Default is 10.
|
78 |
+
* @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1
|
79 |
+
*/
|
80 |
+
public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
|
81 |
+
$this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args );
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* A utility function that is used to register the actions and hooks into a single
|
86 |
+
* collection.
|
87 |
+
*
|
88 |
+
* @since 1.0.0
|
89 |
+
* @access private
|
90 |
+
* @param array $hooks The collection of hooks that is being registered (that is, actions or filters).
|
91 |
+
* @param string $hook The name of the WordPress filter that is being registered.
|
92 |
+
* @param object $component A reference to the instance of the object on which the filter is defined.
|
93 |
+
* @param string $callback The name of the function definition on the $component.
|
94 |
+
* @param int $priority The priority at which the function should be fired.
|
95 |
+
* @param int $accepted_args The number of arguments that should be passed to the $callback.
|
96 |
+
* @return array The collection of actions and filters registered with WordPress.
|
97 |
+
*/
|
98 |
+
private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) {
|
99 |
+
|
100 |
+
$hooks[] = array(
|
101 |
+
'hook' => $hook,
|
102 |
+
'component' => $component,
|
103 |
+
'callback' => $callback,
|
104 |
+
'priority' => $priority,
|
105 |
+
'accepted_args' => $accepted_args
|
106 |
+
);
|
107 |
+
|
108 |
+
return $hooks;
|
109 |
+
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Register the filters and actions with WordPress.
|
114 |
+
*
|
115 |
+
* @since 1.0.0
|
116 |
+
*/
|
117 |
+
public function run(){
|
118 |
+
foreach ( $this->filters as $hook ) {
|
119 |
+
add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
|
120 |
+
}
|
121 |
+
|
122 |
+
foreach ( $this->actions as $hook ) {
|
123 |
+
add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
|
124 |
+
}
|
125 |
+
|
126 |
+
}
|
127 |
+
|
128 |
+
}
|
includes/class-sp-dsgvo-log.php
CHANGED
@@ -1,147 +1,147 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Post Model for Logs
|
5 |
-
*
|
6 |
-
* @link http://example.com
|
7 |
-
* @since 1.0.0
|
8 |
-
*
|
9 |
-
* @package WP DSGVO Tools
|
10 |
-
* @subpackage WP DSGVO Tools/includes
|
11 |
-
*/
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Post Model for Logs
|
15 |
-
*
|
16 |
-
* @since 1.0.0
|
17 |
-
* @package WP DSGVO Tools
|
18 |
-
* @subpackage WP DSGVO Tools/includes
|
19 |
-
* @author Shapepress eU
|
20 |
-
*/
|
21 |
-
class SPDSGVOLog
|
22 |
-
{
|
23 |
-
|
24 |
-
public static $tableName = 'sp_dsgvo_logs';
|
25 |
-
|
26 |
-
public $ID;
|
27 |
-
|
28 |
-
public $date;
|
29 |
-
|
30 |
-
public $content;
|
31 |
-
|
32 |
-
public function __construct($content = '')
|
33 |
-
{
|
34 |
-
$this->content = $content;
|
35 |
-
$this->date = date("Y-m-d H:i:s");
|
36 |
-
|
37 |
-
try {
|
38 |
-
if($this->tableExists() === FALSE){
|
39 |
-
$this->migrate();
|
40 |
-
}
|
41 |
-
} catch (Exception $e){}
|
42 |
-
}
|
43 |
-
|
44 |
-
public function boot()
|
45 |
-
{
|
46 |
-
global $wpdb;
|
47 |
-
$tableName = $wpdb->prefix . self::$tableName;
|
48 |
-
$result = $wpdb->get_results("SELECT * from {$tableName} WHERE `ID` = {$this->ID}");
|
49 |
-
|
50 |
-
if (isset($result[0]->log_content)) {
|
51 |
-
$this->date = $result[0]->log_date;
|
52 |
-
$this->content = $result[0]->log_content;
|
53 |
-
}
|
54 |
-
}
|
55 |
-
|
56 |
-
public static function migrate()
|
57 |
-
{
|
58 |
-
global $wpdb;
|
59 |
-
$tableName = $wpdb->prefix . self::$tableName;
|
60 |
-
|
61 |
-
$wpdb->get_var("
|
62 |
-
CREATE TABLE `{$tableName}` (
|
63 |
-
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
64 |
-
`log_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
65 |
-
`log_content` longtext NOT NULL,
|
66 |
-
PRIMARY KEY (`ID`)
|
67 |
-
)
|
68 |
-
");
|
69 |
-
|
70 |
-
$error = $wpdb->last_error;
|
71 |
-
return ($error) ? $error : TRUE;
|
72 |
-
}
|
73 |
-
|
74 |
-
public static function tableExists()
|
75 |
-
{
|
76 |
-
global $wpdb;
|
77 |
-
|
78 |
-
$tableName = $wpdb->prefix . self::$tableName;
|
79 |
-
|
80 |
-
return $wpdb->get_var("SHOW TABLES LIKE '$tableName'") == $tableName;
|
81 |
-
}
|
82 |
-
|
83 |
-
public static function insert($content)
|
84 |
-
{
|
85 |
-
$log = new self($content);
|
86 |
-
$log->save();
|
87 |
-
return $log;
|
88 |
-
}
|
89 |
-
|
90 |
-
public static function find($ID)
|
91 |
-
{
|
92 |
-
$log = new self();
|
93 |
-
$log->ID = $ID;
|
94 |
-
$log->boot();
|
95 |
-
return $log;
|
96 |
-
}
|
97 |
-
|
98 |
-
public static function all()
|
99 |
-
{
|
100 |
-
try {
|
101 |
-
global $wpdb;
|
102 |
-
$tableName = $wpdb->prefix . self::$tableName;
|
103 |
-
|
104 |
-
$result = $wpdb->get_results("SELECT * FROM {$tableName} ORDER BY ID DESC");
|
105 |
-
|
106 |
-
$logs = array();
|
107 |
-
foreach ($result as $key => $row) {
|
108 |
-
array_push($logs, self::find($row->ID));
|
109 |
-
}
|
110 |
-
|
111 |
-
return $logs;
|
112 |
-
} catch (Exception $e){
|
113 |
-
return array();
|
114 |
-
}
|
115 |
-
}
|
116 |
-
|
117 |
-
public static function mostRecent($limit = 15)
|
118 |
-
{
|
119 |
-
try {
|
120 |
-
global $wpdb;
|
121 |
-
$tableName = $wpdb->prefix . self::$tableName;
|
122 |
-
|
123 |
-
$result = $wpdb->get_results("SELECT * FROM {$tableName} ORDER BY ID DESC LIMIT {$limit}");
|
124 |
-
|
125 |
-
$logs = array();
|
126 |
-
foreach ($result as $key => $row) {
|
127 |
-
array_push($logs, self::find($row->ID));
|
128 |
-
}
|
129 |
-
|
130 |
-
return $logs;
|
131 |
-
} catch (Exception $e){
|
132 |
-
return array();
|
133 |
-
}
|
134 |
-
}
|
135 |
-
|
136 |
-
public function save()
|
137 |
-
{
|
138 |
-
try {
|
139 |
-
global $wpdb;
|
140 |
-
$tableName = $wpdb->prefix . self::$tableName;
|
141 |
-
|
142 |
-
$wpdb->get_results("
|
143 |
-
INSERT INTO {$tableName} (log_date, log_content) VALUES('{$this->date}', '$this->content')
|
144 |
-
");
|
145 |
-
} catch (Exception $e){}
|
146 |
-
}
|
147 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Post Model for Logs
|
5 |
+
*
|
6 |
+
* @link http://example.com
|
7 |
+
* @since 1.0.0
|
8 |
+
*
|
9 |
+
* @package WP DSGVO Tools
|
10 |
+
* @subpackage WP DSGVO Tools/includes
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Post Model for Logs
|
15 |
+
*
|
16 |
+
* @since 1.0.0
|
17 |
+
* @package WP DSGVO Tools
|
18 |
+
* @subpackage WP DSGVO Tools/includes
|
19 |
+
* @author Shapepress eU
|
20 |
+
*/
|
21 |
+
class SPDSGVOLog
|
22 |
+
{
|
23 |
+
|
24 |
+
public static $tableName = 'sp_dsgvo_logs';
|
25 |
+
|
26 |
+
public $ID;
|
27 |
+
|
28 |
+
public $date;
|
29 |
+
|
30 |
+
public $content;
|
31 |
+
|
32 |
+
public function __construct($content = '')
|
33 |
+
{
|
34 |
+
$this->content = $content;
|
35 |
+
$this->date = date("Y-m-d H:i:s");
|
36 |
+
|
37 |
+
try {
|
38 |
+
if($this->tableExists() === FALSE){
|
39 |
+
$this->migrate();
|
40 |
+
}
|
41 |
+
} catch (Exception $e){}
|
42 |
+
}
|
43 |
+
|
44 |
+
public function boot()
|
45 |
+
{
|
46 |
+
global $wpdb;
|
47 |
+
$tableName = $wpdb->prefix . self::$tableName;
|
48 |
+
$result = $wpdb->get_results("SELECT * from {$tableName} WHERE `ID` = {$this->ID}");
|
49 |
+
|
50 |
+
if (isset($result[0]->log_content)) {
|
51 |
+
$this->date = $result[0]->log_date;
|
52 |
+
$this->content = $result[0]->log_content;
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
public static function migrate()
|
57 |
+
{
|
58 |
+
global $wpdb;
|
59 |
+
$tableName = $wpdb->prefix . self::$tableName;
|
60 |
+
|
61 |
+
$wpdb->get_var("
|
62 |
+
CREATE TABLE `{$tableName}` (
|
63 |
+
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
64 |
+
`log_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
65 |
+
`log_content` longtext NOT NULL,
|
66 |
+
PRIMARY KEY (`ID`)
|
67 |
+
)
|
68 |
+
");
|
69 |
+
|
70 |
+
$error = $wpdb->last_error;
|
71 |
+
return ($error) ? $error : TRUE;
|
72 |
+
}
|
73 |
+
|
74 |
+
public static function tableExists()
|
75 |
+
{
|
76 |
+
global $wpdb;
|
77 |
+
|
78 |
+
$tableName = $wpdb->prefix . self::$tableName;
|
79 |
+
|
80 |
+
return $wpdb->get_var("SHOW TABLES LIKE '$tableName'") == $tableName;
|
81 |
+
}
|
82 |
+
|
83 |
+
public static function insert($content)
|
84 |
+
{
|
85 |
+
$log = new self($content);
|
86 |
+
$log->save();
|
87 |
+
return $log;
|
88 |
+
}
|
89 |
+
|
90 |
+
public static function find($ID)
|
91 |
+
{
|
92 |
+
$log = new self();
|
93 |
+
$log->ID = $ID;
|
94 |
+
$log->boot();
|
95 |
+
return $log;
|
96 |
+
}
|
97 |
+
|
98 |
+
public static function all()
|
99 |
+
{
|
100 |
+
try {
|
101 |
+
global $wpdb;
|
102 |
+
$tableName = $wpdb->prefix . self::$tableName;
|
103 |
+
|
104 |
+
$result = $wpdb->get_results("SELECT * FROM {$tableName} ORDER BY ID DESC");
|
105 |
+
|
106 |
+
$logs = array();
|
107 |
+
foreach ($result as $key => $row) {
|
108 |
+
array_push($logs, self::find($row->ID));
|
109 |
+
}
|
110 |
+
|
111 |
+
return $logs;
|
112 |
+
} catch (Exception $e){
|
113 |
+
return array();
|
114 |
+
}
|
115 |
+
}
|
116 |
+
|
117 |
+
public static function mostRecent($limit = 15)
|
118 |
+
{
|
119 |
+
try {
|
120 |
+
global $wpdb;
|
121 |
+
$tableName = $wpdb->prefix . self::$tableName;
|
122 |
+
|
123 |
+
$result = $wpdb->get_results("SELECT * FROM {$tableName} ORDER BY ID DESC LIMIT {$limit}");
|
124 |
+
|
125 |
+
$logs = array();
|
126 |
+
foreach ($result as $key => $row) {
|
127 |
+
array_push($logs, self::find($row->ID));
|
128 |
+
}
|
129 |
+
|
130 |
+
return $logs;
|
131 |
+
} catch (Exception $e){
|
132 |
+
return array();
|
133 |
+
}
|
134 |
+
}
|
135 |
+
|
136 |
+
public function save()
|
137 |
+
{
|
138 |
+
try {
|
139 |
+
global $wpdb;
|
140 |
+
$tableName = $wpdb->prefix . self::$tableName;
|
141 |
+
|
142 |
+
$wpdb->get_results("
|
143 |
+
INSERT INTO {$tableName} (log_date, log_content) VALUES('{$this->date}', '$this->content')
|
144 |
+
");
|
145 |
+
} catch (Exception $e){}
|
146 |
+
}
|
147 |
}
|
includes/class-sp-dsgvo-mail.php
CHANGED
@@ -1,399 +1,399 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* WP_Mail
|
5 |
-
*
|
6 |
-
* A simple class for creating and
|
7 |
-
* sending Emails using WordPress
|
8 |
-
*
|
9 |
-
* @author Shapepress.com
|
10 |
-
*/
|
11 |
-
Class SPDSGVOMail
|
12 |
-
{
|
13 |
-
|
14 |
-
private $to = array();
|
15 |
-
private $cc = array();
|
16 |
-
private $bcc = array();
|
17 |
-
private $subject = '';
|
18 |
-
private $from = '';
|
19 |
-
private $headers = array();
|
20 |
-
private $attachments = array();
|
21 |
-
private $sendAsHTML = TRUE;
|
22 |
-
|
23 |
-
private $beforeTemplate = FALSE;
|
24 |
-
private $beforeVariables = array();
|
25 |
-
private $template = FALSE;
|
26 |
-
private $variables = array();
|
27 |
-
private $afterTemplate = FALSE;
|
28 |
-
private $afterVariables = array();
|
29 |
-
|
30 |
-
|
31 |
-
public function __construct(){}
|
32 |
-
|
33 |
-
public static function init(){
|
34 |
-
return new self;
|
35 |
-
}
|
36 |
-
|
37 |
-
|
38 |
-
/**
|
39 |
-
* Set recipients
|
40 |
-
* @param Array|String $to
|
41 |
-
* @return Object $this
|
42 |
-
*/
|
43 |
-
public function to($to){
|
44 |
-
if(is_array($to)){
|
45 |
-
$this->to = $to;
|
46 |
-
}else{
|
47 |
-
$this->to = array($to);
|
48 |
-
}
|
49 |
-
return $this;
|
50 |
-
}
|
51 |
-
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Get recipients
|
55 |
-
* @return Array $to
|
56 |
-
*/
|
57 |
-
public function getTo(){
|
58 |
-
return $this->to;
|
59 |
-
}
|
60 |
-
|
61 |
-
|
62 |
-
/**
|
63 |
-
* Set Cc recipients
|
64 |
-
* @param String|Array $cc
|
65 |
-
* @return Object $this
|
66 |
-
*/
|
67 |
-
public function cc($cc){
|
68 |
-
if(is_array($cc)){
|
69 |
-
$this->cc = $cc;
|
70 |
-
}else{
|
71 |
-
$this->cc = array($cc);
|
72 |
-
}
|
73 |
-
return $this;
|
74 |
-
}
|
75 |
-
|
76 |
-
|
77 |
-
/**
|
78 |
-
* Get Cc recipients
|
79 |
-
* @return Array $cc
|
80 |
-
*/
|
81 |
-
public function getCc(){
|
82 |
-
return $this->cc;
|
83 |
-
}
|
84 |
-
|
85 |
-
|
86 |
-
/**
|
87 |
-
* Set Email Bcc recipients
|
88 |
-
* @param String|Array $bcc
|
89 |
-
* @return Object $this
|
90 |
-
*/
|
91 |
-
public function bcc($bcc){
|
92 |
-
if(is_array($bcc)){
|
93 |
-
$this->bcc = $bcc;
|
94 |
-
}else{
|
95 |
-
$this->bcc = array($bcc);
|
96 |
-
}
|
97 |
-
|
98 |
-
return $this;
|
99 |
-
}
|
100 |
-
|
101 |
-
|
102 |
-
/**
|
103 |
-
* Set email Bcc recipients
|
104 |
-
* @return Array $bcc
|
105 |
-
*/
|
106 |
-
public function getBcc(){
|
107 |
-
return $this->bcc;
|
108 |
-
}
|
109 |
-
|
110 |
-
|
111 |
-
/**
|
112 |
-
* Set email Subject
|
113 |
-
* @param Srting $subject
|
114 |
-
* @return Object $this
|
115 |
-
*/
|
116 |
-
public function subject($subject){
|
117 |
-
$this->subject = $subject;
|
118 |
-
return $this;
|
119 |
-
}
|
120 |
-
|
121 |
-
|
122 |
-
/**
|
123 |
-
* Retruns email subject
|
124 |
-
* @return Array
|
125 |
-
*/
|
126 |
-
public function getSubject(){
|
127 |
-
return $this->subject;
|
128 |
-
}
|
129 |
-
|
130 |
-
|
131 |
-
/**
|
132 |
-
* Set From header
|
133 |
-
* @param String
|
134 |
-
* @return Object $this
|
135 |
-
*/
|
136 |
-
public function from($from){
|
137 |
-
$this->from = $from;
|
138 |
-
return $this;
|
139 |
-
}
|
140 |
-
|
141 |
-
/**
|
142 |
-
* Set the email's headers
|
143 |
-
* @param String|Array $headers [description]
|
144 |
-
* @return Object $this
|
145 |
-
*/
|
146 |
-
public function headers($headers){
|
147 |
-
if(is_array($headers)){
|
148 |
-
$this->headers = $headers;
|
149 |
-
}else{
|
150 |
-
$this->headers = array($headers);
|
151 |
-
}
|
152 |
-
|
153 |
-
return $this;
|
154 |
-
}
|
155 |
-
|
156 |
-
|
157 |
-
/**
|
158 |
-
* Retruns headers
|
159 |
-
* @return Array
|
160 |
-
*/
|
161 |
-
public function getHeaders(){
|
162 |
-
return $this->headers;
|
163 |
-
}
|
164 |
-
|
165 |
-
|
166 |
-
/**
|
167 |
-
* Returns email content type
|
168 |
-
* @return String
|
169 |
-
*/
|
170 |
-
public function HTMLFilter(){
|
171 |
-
return 'text/html';
|
172 |
-
}
|
173 |
-
|
174 |
-
|
175 |
-
/**
|
176 |
-
* Set email content type
|
177 |
-
* @param Bool $html
|
178 |
-
* @return Object $this
|
179 |
-
*/
|
180 |
-
public function sendAsHTML($html){
|
181 |
-
$this->sendAsHTML = $html;
|
182 |
-
return $this;
|
183 |
-
}
|
184 |
-
|
185 |
-
|
186 |
-
/**
|
187 |
-
* Attach a file or array of files.
|
188 |
-
* Filepaths must be absolute.
|
189 |
-
* @param String|Array $path
|
190 |
-
* @throws Exception
|
191 |
-
* @return Object $this
|
192 |
-
*/
|
193 |
-
public function attach($path){
|
194 |
-
if(is_array($path)){
|
195 |
-
$this->attachments = array();
|
196 |
-
foreach($path as $path_) {
|
197 |
-
if(!file_exists($path_)){
|
198 |
-
throw new Exception(__('Attachment not found at', 'shapepress-dsgvo') . " $path");
|
199 |
-
}else{
|
200 |
-
$this->attachments[] = $path_;
|
201 |
-
}
|
202 |
-
}
|
203 |
-
}else{
|
204 |
-
if(!file_exists($path)){
|
205 |
-
throw new Exception(__('Attachment not found at', 'shapepress-dsgvo') . " $path");
|
206 |
-
}
|
207 |
-
$this->attachments = array($path);
|
208 |
-
}
|
209 |
-
|
210 |
-
return $this;
|
211 |
-
}
|
212 |
-
|
213 |
-
|
214 |
-
/**
|
215 |
-
* Set the before-template file
|
216 |
-
* @param string $template Path to HTML template
|
217 |
-
* @param array $variables
|
218 |
-
* @throws Exception
|
219 |
-
* @return Object $this
|
220 |
-
*/
|
221 |
-
public function beforeTemplate($template, $variables = NULL){
|
222 |
-
if(!file_exists($template)){
|
223 |
-
throw new Exception(__('Template file not found', 'shapepress-dsgvo'));
|
224 |
-
}
|
225 |
-
|
226 |
-
if(is_array($variables)){
|
227 |
-
$this->beforeVariables = $variables;
|
228 |
-
}
|
229 |
-
|
230 |
-
$this->beforeTemplate = $template;
|
231 |
-
return $this;
|
232 |
-
}
|
233 |
-
|
234 |
-
|
235 |
-
/**
|
236 |
-
* Set the template file
|
237 |
-
* @param string $template Path to HTML template
|
238 |
-
* @param array $variables
|
239 |
-
* @throws Exception
|
240 |
-
* @return Object $this
|
241 |
-
*/
|
242 |
-
public function template($template, $variables = NULL){
|
243 |
-
if(!file_exists($template)){
|
244 |
-
throw new Exception('File not found');
|
245 |
-
}
|
246 |
-
|
247 |
-
if(is_array($variables)){
|
248 |
-
$this->variables = $variables;
|
249 |
-
}
|
250 |
-
|
251 |
-
$this->template = $template;
|
252 |
-
return $this;
|
253 |
-
}
|
254 |
-
|
255 |
-
|
256 |
-
/**
|
257 |
-
* Set the after-template file
|
258 |
-
* @param string $template Path to HTML template
|
259 |
-
* @param array $variables
|
260 |
-
* @throws Exception
|
261 |
-
* @return Object $this
|
262 |
-
*/
|
263 |
-
public function afterTemplate($template, $variables = NULL){
|
264 |
-
if(!file_exists($template)){
|
265 |
-
throw new Exception(__('Template file not found', 'shapepress-dsgvo'));
|
266 |
-
}
|
267 |
-
|
268 |
-
if(is_array($variables)){
|
269 |
-
$this->afterVariables = $variables;
|
270 |
-
}
|
271 |
-
|
272 |
-
$this->afterTemplate = $template;
|
273 |
-
return $this;
|
274 |
-
}
|
275 |
-
|
276 |
-
|
277 |
-
/**
|
278 |
-
* Renders the template
|
279 |
-
* @return string
|
280 |
-
*/
|
281 |
-
public function render(){
|
282 |
-
return $this->renderPart('before') .
|
283 |
-
$this->renderPart('main') .
|
284 |
-
$this->renderPart('after');
|
285 |
-
}
|
286 |
-
|
287 |
-
|
288 |
-
/**
|
289 |
-
* Render a specific part of the email
|
290 |
-
* @author Shapepress eU
|
291 |
-
* @param string $part before, after, main
|
292 |
-
* @return string
|
293 |
-
*/
|
294 |
-
public function renderPart($part = 'main'){
|
295 |
-
switch($part){
|
296 |
-
case 'before':
|
297 |
-
$templateFile = $this->beforeTemplate;
|
298 |
-
$variables = $this->beforeVariables;
|
299 |
-
break;
|
300 |
-
|
301 |
-
case 'after':
|
302 |
-
$templateFile = $this->afterTemplate;
|
303 |
-
$variables = $this->afterVariables;
|
304 |
-
break;
|
305 |
-
|
306 |
-
case 'main':
|
307 |
-
default:
|
308 |
-
$templateFile = $this->template;
|
309 |
-
$variables = $this->variables;
|
310 |
-
break;
|
311 |
-
}
|
312 |
-
|
313 |
-
if($templateFile === FALSE){
|
314 |
-
return '';
|
315 |
-
}
|
316 |
-
|
317 |
-
|
318 |
-
/* WP KRAKEN START */
|
319 |
-
|
320 |
-
//$template = file_get_contents($templateFile);
|
321 |
-
|
322 |
-
ob_start();
|
323 |
-
include $templateFile;
|
324 |
-
$template = ob_get_clean();
|
325 |
-
|
326 |
-
/* WP KRAKEN END */
|
327 |
-
|
328 |
-
if(!is_array($variables) || empty($variables)){
|
329 |
-
return $template;
|
330 |
-
}
|
331 |
-
|
332 |
-
preg_match_all('/\{\{\s*.+?\s*\}\}/', $template, $matches);
|
333 |
-
foreach($matches[0] as $match){
|
334 |
-
$var = str_replace('{', '', str_replace('}', '', preg_replace('/\s+/', '', $match)));
|
335 |
-
|
336 |
-
if(isset($variables[$var])){
|
337 |
-
$template = str_replace($match, $variables[$var], $template);
|
338 |
-
}
|
339 |
-
}
|
340 |
-
|
341 |
-
return $template;
|
342 |
-
}
|
343 |
-
|
344 |
-
|
345 |
-
/**
|
346 |
-
* Builds Email Headers
|
347 |
-
* @return string email headers
|
348 |
-
*/
|
349 |
-
private function buildHeaders(){
|
350 |
-
$headers = '';
|
351 |
-
|
352 |
-
$headers .= implode("\r\n", $this->headers) ."\r\n";
|
353 |
-
$headers .= 'MIME-Version: 1.0 \r\n';
|
354 |
-
$headers .= 'Content-Type: text/plain; charset=utf-8 \r\n';
|
355 |
-
|
356 |
-
foreach($this->bcc as $bcc){
|
357 |
-
$headers .= sprintf("Bcc: %s \r\n", $bcc);
|
358 |
-
}
|
359 |
-
|
360 |
-
foreach($this->cc as $cc){
|
361 |
-
$headers .= sprintf("Cc: %s \r\n", $cc);
|
362 |
-
}
|
363 |
-
|
364 |
-
if(!empty($this->from)){
|
365 |
-
$headers .= sprintf("From: %s \r\n", $this->from);
|
366 |
-
}
|
367 |
-
|
368 |
-
return $headers;
|
369 |
-
}
|
370 |
-
|
371 |
-
|
372 |
-
/**
|
373 |
-
* Set the wp_mail_content_type filter, if necessary
|
374 |
-
*/
|
375 |
-
private function beforeSend(){
|
376 |
-
if(count($this->to) === 0){
|
377 |
-
throw new Exception(__('You must set at least 1 recipient', 'shapepress-dsgvo'));
|
378 |
-
}
|
379 |
-
|
380 |
-
if(empty($this->template)){
|
381 |
-
throw new Exception(__('You must set a template', 'shapepress-dsgvo'));
|
382 |
-
}
|
383 |
-
|
384 |
-
if($this->sendAsHTML){
|
385 |
-
add_filter('wp_mail_content_type', array($this, 'HTMLFilter'));
|
386 |
-
}
|
387 |
-
}
|
388 |
-
|
389 |
-
|
390 |
-
/**
|
391 |
-
* Sends a rendered email using
|
392 |
-
* WordPress's wp_mail() function
|
393 |
-
* @return bool
|
394 |
-
*/
|
395 |
-
public function send(){
|
396 |
-
$this->beforeSend();
|
397 |
-
return wp_mail($this->to, $this->subject, $this->render(), $this->buildHeaders(), $this->attachments);
|
398 |
-
}
|
399 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* WP_Mail
|
5 |
+
*
|
6 |
+
* A simple class for creating and
|
7 |
+
* sending Emails using WordPress
|
8 |
+
*
|
9 |
+
* @author Shapepress.com
|
10 |
+
*/
|
11 |
+
Class SPDSGVOMail
|
12 |
+
{
|
13 |
+
|
14 |
+
private $to = array();
|
15 |
+
private $cc = array();
|
16 |
+
private $bcc = array();
|
17 |
+
private $subject = '';
|
18 |
+
private $from = '';
|
19 |
+
private $headers = array();
|
20 |
+
private $attachments = array();
|
21 |
+
private $sendAsHTML = TRUE;
|
22 |
+
|
23 |
+
private $beforeTemplate = FALSE;
|
24 |
+
private $beforeVariables = array();
|
25 |
+
private $template = FALSE;
|
26 |
+
private $variables = array();
|
27 |
+
private $afterTemplate = FALSE;
|
28 |
+
private $afterVariables = array();
|
29 |
+
|
30 |
+
|
31 |
+
public function __construct(){}
|
32 |
+
|
33 |
+
public static function init(){
|
34 |
+
return new self;
|
35 |
+
}
|
36 |
+
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Set recipients
|
40 |
+
* @param Array|String $to
|
41 |
+
* @return Object $this
|
42 |
+
*/
|
43 |
+
public function to($to){
|
44 |
+
if(is_array($to)){
|
45 |
+
$this->to = $to;
|
46 |
+
}else{
|
47 |
+
$this->to = array($to);
|
48 |
+
}
|
49 |
+
return $this;
|
50 |
+
}
|
51 |
+
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Get recipients
|
55 |
+
* @return Array $to
|
56 |
+
*/
|
57 |
+
public function getTo(){
|
58 |
+
return $this->to;
|
59 |
+
}
|
60 |
+
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Set Cc recipients
|
64 |
+
* @param String|Array $cc
|
65 |
+
* @return Object $this
|
66 |
+
*/
|
67 |
+
public function cc($cc){
|
68 |
+
if(is_array($cc)){
|
69 |
+
$this->cc = $cc;
|
70 |
+
}else{
|
71 |
+
$this->cc = array($cc);
|
72 |
+
}
|
73 |
+
return $this;
|
74 |
+
}
|
75 |
+
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Get Cc recipients
|
79 |
+
* @return Array $cc
|
80 |
+
*/
|
81 |
+
public function getCc(){
|
82 |
+
return $this->cc;
|
83 |
+
}
|
84 |
+
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Set Email Bcc recipients
|
88 |
+
* @param String|Array $bcc
|
89 |
+
* @return Object $this
|
90 |
+
*/
|
91 |
+
public function bcc($bcc){
|
92 |
+
if(is_array($bcc)){
|
93 |
+
$this->bcc = $bcc;
|
94 |
+
}else{
|
95 |
+
$this->bcc = array($bcc);
|
96 |
+
}
|
97 |
+
|
98 |
+
return $this;
|
99 |
+
}
|
100 |
+
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Set email Bcc recipients
|
104 |
+
* @return Array $bcc
|
105 |
+
*/
|
106 |
+
public function getBcc(){
|
107 |
+
return $this->bcc;
|
108 |
+
}
|
109 |
+
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Set email Subject
|
113 |
+
* @param Srting $subject
|
114 |
+
* @return Object $this
|
115 |
+
*/
|
116 |
+
public function subject($subject){
|
117 |
+
$this->subject = $subject;
|
118 |
+
return $this;
|
119 |
+
}
|
120 |
+
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Retruns email subject
|
124 |
+
* @return Array
|
125 |
+
*/
|
126 |
+
public function getSubject(){
|
127 |
+
return $this->subject;
|
128 |
+
}
|
129 |
+
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Set From header
|
133 |
+
* @param String
|
134 |
+
* @return Object $this
|
135 |
+
*/
|
136 |
+
public function from($from){
|
137 |
+
$this->from = $from;
|
138 |
+
return $this;
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Set the email's headers
|
143 |
+
* @param String|Array $headers [description]
|
144 |
+
* @return Object $this
|
145 |
+
*/
|
146 |
+
public function headers($headers){
|
147 |
+
if(is_array($headers)){
|
148 |
+
$this->headers = $headers;
|
149 |
+
}else{
|
150 |
+
$this->headers = array($headers);
|
151 |
+
}
|
152 |
+
|
153 |
+
return $this;
|
154 |
+
}
|
155 |
+
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Retruns headers
|
159 |
+
* @return Array
|
160 |
+
*/
|
161 |
+
public function getHeaders(){
|
162 |
+
return $this->headers;
|
163 |
+
}
|
164 |
+
|
165 |
+
|
166 |
+
/**
|
167 |
+
* Returns email content type
|
168 |
+
* @return String
|
169 |
+
*/
|
170 |
+
public function HTMLFilter(){
|
171 |
+
return 'text/html';
|
172 |
+
}
|
173 |
+
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Set email content type
|
177 |
+
* @param Bool $html
|
178 |
+
* @return Object $this
|
179 |
+
*/
|
180 |
+
public function sendAsHTML($html){
|
181 |
+
$this->sendAsHTML = $html;
|
182 |
+
return $this;
|
183 |
+
}
|
184 |
+
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Attach a file or array of files.
|
188 |
+
* Filepaths must be absolute.
|
189 |
+
* @param String|Array $path
|
190 |
+
* @throws Exception
|
191 |
+
* @return Object $this
|
192 |
+
*/
|
193 |
+
public function attach($path){
|
194 |
+
if(is_array($path)){
|
195 |
+
$this->attachments = array();
|
196 |
+
foreach($path as $path_) {
|
197 |
+
if(!file_exists($path_)){
|
198 |
+
throw new Exception(__('Attachment not found at', 'shapepress-dsgvo') . " $path");
|
199 |
+
}else{
|
200 |
+
$this->attachments[] = $path_;
|
201 |
+
}
|
202 |
+
}
|
203 |
+
}else{
|
204 |
+
if(!file_exists($path)){
|
205 |
+
throw new Exception(__('Attachment not found at', 'shapepress-dsgvo') . " $path");
|
206 |
+
}
|
207 |
+
$this->attachments = array($path);
|
208 |
+
}
|
209 |
+
|
210 |
+
return $this;
|
211 |
+
}
|
212 |
+
|
213 |
+
|
214 |
+
/**
|
215 |
+
* Set the before-template file
|
216 |
+
* @param string $template Path to HTML template
|
217 |
+
* @param array $variables
|
218 |
+
* @throws Exception
|
219 |
+
* @return Object $this
|
220 |
+
*/
|
221 |
+
public function beforeTemplate($template, $variables = NULL){
|
222 |
+
if(!file_exists($template)){
|
223 |
+
throw new Exception(__('Template file not found', 'shapepress-dsgvo'));
|
224 |
+
}
|
225 |
+
|
226 |
+
if(is_array($variables)){
|
227 |
+
$this->beforeVariables = $variables;
|
228 |
+
}
|
229 |
+
|
230 |
+
$this->beforeTemplate = $template;
|
231 |
+
return $this;
|
232 |
+
}
|
233 |
+
|
234 |
+
|
235 |
+
/**
|
236 |
+
* Set the template file
|
237 |
+
* @param string $template Path to HTML template
|
238 |
+
* @param array $variables
|
239 |
+
* @throws Exception
|
240 |
+
* @return Object $this
|
241 |
+
*/
|
242 |
+
public function template($template, $variables = NULL){
|
243 |
+
if(!file_exists($template)){
|
244 |
+
throw new Exception('File not found');
|
245 |
+
}
|
246 |
+
|
247 |
+
if(is_array($variables)){
|
248 |
+
$this->variables = $variables;
|
249 |
+
}
|
250 |
+
|
251 |
+
$this->template = $template;
|
252 |
+
return $this;
|
253 |
+
}
|
254 |
+
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Set the after-template file
|
258 |
+
* @param string $template Path to HTML template
|
259 |
+
* @param array $variables
|
260 |
+
* @throws Exception
|
261 |
+
* @return Object $this
|
262 |
+
*/
|
263 |
+
public function afterTemplate($template, $variables = NULL){
|
264 |
+
if(!file_exists($template)){
|
265 |
+
throw new Exception(__('Template file not found', 'shapepress-dsgvo'));
|
266 |
+
}
|
267 |
+
|
268 |
+
if(is_array($variables)){
|
269 |
+
$this->afterVariables = $variables;
|
270 |
+
}
|
271 |
+
|
272 |
+
$this->afterTemplate = $template;
|
273 |
+
return $this;
|
274 |
+
}
|
275 |
+
|
276 |
+
|
277 |
+
/**
|
278 |
+
* Renders the template
|
279 |
+
* @return string
|
280 |
+
*/
|
281 |
+
public function render(){
|
282 |
+
return $this->renderPart('before') .
|
283 |
+
$this->renderPart('main') .
|
284 |
+
$this->renderPart('after');
|
285 |
+
}
|
286 |
+
|
287 |
+
|
288 |
+
/**
|
289 |
+
* Render a specific part of the email
|
290 |
+
* @author Shapepress eU
|
291 |
+
* @param string $part before, after, main
|
292 |
+
* @return string
|
293 |
+
*/
|
294 |
+
public function renderPart($part = 'main'){
|
295 |
+
switch($part){
|
296 |
+
case 'before':
|
297 |
+
$templateFile = $this->beforeTemplate;
|
298 |
+
$variables = $this->beforeVariables;
|
299 |
+
break;
|
300 |
+
|
301 |
+
case 'after':
|
302 |
+
$templateFile = $this->afterTemplate;
|
303 |
+
$variables = $this->afterVariables;
|
304 |
+
break;
|
305 |
+
|
306 |
+
case 'main':
|
307 |
+
default:
|
308 |
+
$templateFile = $this->template;
|
309 |
+
$variables = $this->variables;
|
310 |
+
break;
|
311 |
+
}
|
312 |
+
|
313 |
+
if($templateFile === FALSE){
|
314 |
+
return '';
|
315 |
+
}
|
316 |
+
|
317 |
+
|
318 |
+
/* WP KRAKEN START */
|
319 |
+
|
320 |
+
//$template = file_get_contents($templateFile);
|
321 |
+
|
322 |
+
ob_start();
|
323 |
+
include $templateFile;
|
324 |
+
$template = ob_get_clean();
|
325 |
+
|
326 |
+
/* WP KRAKEN END */
|
327 |
+
|
328 |
+
if(!is_array($variables) || empty($variables)){
|
329 |
+
return $template;
|
330 |
+
}
|
331 |
+
|
332 |
+
preg_match_all('/\{\{\s*.+?\s*\}\}/', $template, $matches);
|
333 |
+
foreach($matches[0] as $match){
|
334 |
+
$var = str_replace('{', '', str_replace('}', '', preg_replace('/\s+/', '', $match)));
|
335 |
+
|
336 |
+
if(isset($variables[$var])){
|
337 |
+
$template = str_replace($match, $variables[$var], $template);
|
338 |
+
}
|
339 |
+
}
|
340 |
+
|
341 |
+
return $template;
|
342 |
+
}
|
343 |
+
|
344 |
+
|
345 |
+
/**
|
346 |
+
* Builds Email Headers
|
347 |
+
* @return string email headers
|
348 |
+
*/
|
349 |
+
private function buildHeaders(){
|
350 |
+
$headers = '';
|
351 |
+
|
352 |
+
$headers .= implode("\r\n", $this->headers) ."\r\n";
|
353 |
+
$headers .= 'MIME-Version: 1.0 \r\n';
|
354 |
+
$headers .= 'Content-Type: text/plain; charset=utf-8 \r\n';
|
355 |
+
|
356 |
+
foreach($this->bcc as $bcc){
|
357 |
+
$headers .= sprintf("Bcc: %s \r\n", $bcc);
|
358 |
+
}
|
359 |
+
|
360 |
+
foreach($this->cc as $cc){
|
361 |
+
$headers .= sprintf("Cc: %s \r\n", $cc);
|
362 |
+
}
|
363 |
+
|
364 |
+
if(!empty($this->from)){
|
365 |
+
$headers .= sprintf("From: %s \r\n", $this->from);
|
366 |
+
}
|
367 |
+
|
368 |
+
return $headers;
|
369 |
+
}
|
370 |
+
|
371 |
+
|
372 |
+
/**
|
373 |
+
* Set the wp_mail_content_type filter, if necessary
|
374 |
+
*/
|
375 |
+
private function beforeSend(){
|
376 |
+
if(count($this->to) === 0){
|
377 |
+
throw new Exception(__('You must set at least 1 recipient', 'shapepress-dsgvo'));
|
378 |
+
}
|
379 |
+
|
380 |
+
if(empty($this->template)){
|
381 |
+
throw new Exception(__('You must set a template', 'shapepress-dsgvo'));
|
382 |
+
}
|
383 |
+
|
384 |
+
if($this->sendAsHTML){
|
385 |
+
add_filter('wp_mail_content_type', array($this, 'HTMLFilter'));
|
386 |
+
}
|
387 |
+
}
|
388 |
+
|
389 |
+
|
390 |
+
/**
|
391 |
+
* Sends a rendered email using
|
392 |
+
* WordPress's wp_mail() function
|
393 |
+
* @return bool
|
394 |
+
*/
|
395 |
+
public function send(){
|
396 |
+
$this->beforeSend();
|
397 |
+
return wp_mail($this->to, $this->subject, $this->render(), $this->buildHeaders(), $this->attachments);
|
398 |
+
}
|
399 |
+
}
|
includes/class-sp-dsgvo-migrator.php
ADDED
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOMigrator
|
4 |
+
{
|
5 |
+
|
6 |
+
private static $instance;
|
7 |
+
|
8 |
+
private static $migrationJobs = array('3.0.0' => '300');
|
9 |
+
|
10 |
+
public function __construct()
|
11 |
+
{
|
12 |
+
}
|
13 |
+
|
14 |
+
|
15 |
+
public static function init()
|
16 |
+
{
|
17 |
+
return new self;
|
18 |
+
}
|
19 |
+
|
20 |
+
public static function getInstance()
|
21 |
+
{
|
22 |
+
if (null === self::$instance) {
|
23 |
+
self::$instance = new self;
|
24 |
+
}
|
25 |
+
|
26 |
+
return self::$instance;
|
27 |
+
}
|
28 |
+
|
29 |
+
public function checkForMigrations($upgrader, $updateData)
|
30 |
+
{
|
31 |
+
if ($updateData['action'] == 'update' && $updateData['type'] == 'plugin' && !empty($updateData['plugins'])) {
|
32 |
+
if (in_array(sp_dsgvo_PLUGIN_NAME, $updateData['plugins'])) {
|
33 |
+
$this->doMigrations();
|
34 |
+
}
|
35 |
+
}
|
36 |
+
}
|
37 |
+
|
38 |
+
public function doMigrations()
|
39 |
+
{
|
40 |
+
// check the last version
|
41 |
+
$currentVersion = SPDSGVOSettings::get('plugin_version');
|
42 |
+
$migrationHistory = SPDSGVOSettings::get('migration_history');
|
43 |
+
if (isset($migrationHistory) == false || is_array($migrationHistory) == false) {
|
44 |
+
$migrationHistory = [];
|
45 |
+
}
|
46 |
+
|
47 |
+
if (array_key_exists(sp_dsgvo_VERSION, self::$migrationJobs) == false) {
|
48 |
+
// only set version
|
49 |
+
SPDSGVOSettings::set(sp_dsgvo_VERSION);
|
50 |
+
return;
|
51 |
+
}
|
52 |
+
|
53 |
+
foreach (self::$migrationJobs as $key => $value) {
|
54 |
+
if (in_array($key, $migrationHistory) == false) {
|
55 |
+
$methodNameOfMigration = 'upgrade_' . str_replace('.', '', sp_dsgvo_VERSION);
|
56 |
+
if (method_exists(self::getInstance(), $methodNameOfMigration)) {
|
57 |
+
call_user_func(array(self::getInstance(), $methodNameOfMigration));
|
58 |
+
$migrationHistory[] = $key;
|
59 |
+
SPDSGVOSettings::set('migration_history', $migrationHistory); // always save after an successfull job
|
60 |
+
}
|
61 |
+
}
|
62 |
+
}
|
63 |
+
|
64 |
+
// inc version for next time update
|
65 |
+
SPDSGVOSettings::set('plugin_version', sp_dsgvo_VERSION);
|
66 |
+
SPDSGVOSettings::set('migration_history', $migrationHistory);
|
67 |
+
|
68 |
+
}
|
69 |
+
|
70 |
+
public function upgrade_300()
|
71 |
+
{
|
72 |
+
|
73 |
+
// set tracker settings to new objects
|
74 |
+
if (SPDSGVOSettings::get('ga_enable_analytics') == '1') {
|
75 |
+
|
76 |
+
$settings = SPDSGVOGoogleAnalyticsApi::getInstance()->getDefaultSettings();
|
77 |
+
$settings['enabled'] = '1';
|
78 |
+
$settings['propertyId'] = SPDSGVOSettings::get('ga_tag_number');
|
79 |
+
$settings['useOwnCode'] = SPDSGVOSettings::get('own_code') == '1' ? '1' : '0';
|
80 |
+
if ($settings['useOwnCode'] == '1') {
|
81 |
+
$settings['jsCode'] = SPDSGVOSettings::get('ga_code');
|
82 |
+
}
|
83 |
+
|
84 |
+
SPDSGVOGoogleAnalyticsApi::getInstance()->setSettings($settings);
|
85 |
+
}
|
86 |
+
|
87 |
+
if (SPDSGVOSettings::get('fb_enable_pixel') == '1') {
|
88 |
+
|
89 |
+
$settings = SPDSGVOFbPixelApi::getInstance()->getDefaultSettings();
|
90 |
+
$settings['enabled'] = '1';
|
91 |
+
$settings['propertyId'] = SPDSGVOSettings::get('fb_pixel_number');
|
92 |
+
$settings['useOwnCode'] = SPDSGVOSettings::get('own_code') == '1' ? '1' : '0';
|
93 |
+
if ($settings['useOwnCode'] == '1') {
|
94 |
+
$settings['jsCode'] = SPDSGVOSettings::get('fb_pixel_code');
|
95 |
+
}
|
96 |
+
SPDSGVOFbPixelApi::getInstance()->setSettings($settings);
|
97 |
+
}
|
98 |
+
}
|
99 |
+
}
|
includes/class-sp-dsgvo-pdf.php
CHANGED
@@ -1,71 +1,71 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Extension of TCPDF
|
5 |
-
*
|
6 |
-
* @link http://example.com
|
7 |
-
* @since 1.0.0
|
8 |
-
*
|
9 |
-
* @package WP DSGVO Tools
|
10 |
-
* @subpackage WP DSGVO Tools/includes
|
11 |
-
*/
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Extension of TCPDF
|
15 |
-
*
|
16 |
-
* @since 1.0.0
|
17 |
-
* @package WP DSGVO Tools
|
18 |
-
* @subpackage WP DSGVO Tools/includes
|
19 |
-
* @author Shapepress eU
|
20 |
-
*/
|
21 |
-
class SPDSGVOPDF extends DSGVOTCPDF
|
22 |
-
{
|
23 |
-
|
24 |
-
public function coloredTable($data)
|
25 |
-
{
|
26 |
-
$this->SetFillColor(56, 64, 94);
|
27 |
-
$this->SetTextColor(255);
|
28 |
-
$this->SetDrawColor(128, 0, 0);
|
29 |
-
$this->SetLineWidth(0.3);
|
30 |
-
$this->SetFont('', 'B');
|
31 |
-
|
32 |
-
$width = array(
|
33 |
-
60,
|
34 |
-
110
|
35 |
-
);
|
36 |
-
//$this->Cell($width[0], 7, 'Typ', 1, 0, 'C', 1);
|
37 |
-
//$this->Cell($width[1], 7, 'Daten', 1, 0, 'C', 1);
|
38 |
-
|
39 |
-
$this->Ln();
|
40 |
-
$this->SetFillColor(224, 235, 255);
|
41 |
-
$this->SetTextColor(0);
|
42 |
-
$this->SetFont('');
|
43 |
-
|
44 |
-
$fill = 0;
|
45 |
-
foreach ($data as $type => $d) {
|
46 |
-
$data = array();
|
47 |
-
error_log('type: '.$type);
|
48 |
-
$title = "<strong>" . $type . "</strong>";
|
49 |
-
|
50 |
-
$this->writeHTML($title, true, false, true, false, '');
|
51 |
-
|
52 |
-
if (is_array($d)) {
|
53 |
-
foreach ($d as $value) {
|
54 |
-
if (! empty($value)) {
|
55 |
-
array_push($data, $value->data);
|
56 |
-
|
57 |
-
$span = "<span>" . $value->data . "</span>";
|
58 |
-
$this->writeHTML($span, true, false, true, false, '');
|
59 |
-
}
|
60 |
-
}
|
61 |
-
}
|
62 |
-
|
63 |
-
//$this->MultiCell($width[0], 6, $type, 'LR', 'L', $fill, 0, '', '', true, 0, false, true, 0);
|
64 |
-
//$this->MultiCell($width[1], 6, implode(', ', $data), 'LR', 'L', $fill, 0, '', '', true, 0, false, true, 0);
|
65 |
-
$this->Ln();
|
66 |
-
$fill = ! $fill;
|
67 |
-
}
|
68 |
-
|
69 |
-
$this->Cell(array_sum($width), 0, '', 'T');
|
70 |
-
}
|
71 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Extension of TCPDF
|
5 |
+
*
|
6 |
+
* @link http://example.com
|
7 |
+
* @since 1.0.0
|
8 |
+
*
|
9 |
+
* @package WP DSGVO Tools
|
10 |
+
* @subpackage WP DSGVO Tools/includes
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Extension of TCPDF
|
15 |
+
*
|
16 |
+
* @since 1.0.0
|
17 |
+
* @package WP DSGVO Tools
|
18 |
+
* @subpackage WP DSGVO Tools/includes
|
19 |
+
* @author Shapepress eU
|
20 |
+
*/
|
21 |
+
class SPDSGVOPDF extends DSGVOTCPDF
|
22 |
+
{
|
23 |
+
|
24 |
+
public function coloredTable($data)
|
25 |
+
{
|
26 |
+
$this->SetFillColor(56, 64, 94);
|
27 |
+
$this->SetTextColor(255);
|
28 |
+
$this->SetDrawColor(128, 0, 0);
|
29 |
+
$this->SetLineWidth(0.3);
|
30 |
+
$this->SetFont('', 'B');
|
31 |
+
|
32 |
+
$width = array(
|
33 |
+
60,
|
34 |
+
110
|
35 |
+
);
|
36 |
+
//$this->Cell($width[0], 7, 'Typ', 1, 0, 'C', 1);
|
37 |
+
//$this->Cell($width[1], 7, 'Daten', 1, 0, 'C', 1);
|
38 |
+
|
39 |
+
$this->Ln();
|
40 |
+
$this->SetFillColor(224, 235, 255);
|
41 |
+
$this->SetTextColor(0);
|
42 |
+
$this->SetFont('');
|
43 |
+
|
44 |
+
$fill = 0;
|
45 |
+
foreach ($data as $type => $d) {
|
46 |
+
$data = array();
|
47 |
+
//error_log('type: '.$type);
|
48 |
+
$title = "<strong>" . $type . "</strong>";
|
49 |
+
|
50 |
+
$this->writeHTML($title, true, false, true, false, '');
|
51 |
+
|
52 |
+
if (is_array($d)) {
|
53 |
+
foreach ($d as $value) {
|
54 |
+
if (! empty($value)) {
|
55 |
+
array_push($data, $value->data);
|
56 |
+
|
57 |
+
$span = "<span>" . $value->data . "</span>";
|
58 |
+
$this->writeHTML($span, true, false, true, false, '');
|
59 |
+
}
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
//$this->MultiCell($width[0], 6, $type, 'LR', 'L', $fill, 0, '', '', true, 0, false, true, 0);
|
64 |
+
//$this->MultiCell($width[1], 6, implode(', ', $data), 'LR', 'L', $fill, 0, '', '', true, 0, false, true, 0);
|
65 |
+
$this->Ln();
|
66 |
+
$fill = ! $fill;
|
67 |
+
}
|
68 |
+
|
69 |
+
$this->Cell(array_sum($width), 0, '', 'T');
|
70 |
+
}
|
71 |
}
|
includes/class-sp-dsgvo-settings-polylang.php
CHANGED
@@ -1,68 +1,89 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Register settings strings for Polylang
|
5 |
-
*
|
6 |
-
* @link https://wp-dsgvo.eu
|
7 |
-
* @since 1.0.0
|
8 |
-
*
|
9 |
-
* @package WP DSGVO Tools
|
10 |
-
* @subpackage WP DSGVO Tools/includes
|
11 |
-
*/
|
12 |
-
|
13 |
-
/**
|
14 |
-
*
|
15 |
-
* @package WP DSGVO Tools
|
16 |
-
* @subpackage WP DSGVO Tools/includes
|
17 |
-
* @author Shapepress eU
|
18 |
-
*/
|
19 |
-
class SPDSGVOSettingsPolylang {
|
20 |
-
|
21 |
-
public $defaults = array();
|
22 |
-
|
23 |
-
public function __construct() {
|
24 |
-
if(function_exists('icl_register_string')) :
|
25 |
-
//ok
|
26 |
-
icl_register_string('shapepress-dsgvo', 'spdsgvo_comments_checkbox_info', SPDSGVOSettings::get('spdsgvo_comments_checkbox_info'));
|
27 |
-
//ok
|
28 |
-
icl_register_string('shapepress-dsgvo', 'spdsgvo_comments_checkbox_confirm', SPDSGVOSettings::get('spdsgvo_comments_checkbox_confirm'));
|
29 |
-
//ok
|
30 |
-
icl_register_string('shapepress-dsgvo', 'spdsgvo_comments_checkbox_text', SPDSGVOSettings::get('spdsgvo_comments_checkbox_text'));
|
31 |
-
//ok
|
32 |
-
icl_register_string('shapepress-dsgvo', 'sar_dsgvo_accepted_text', SPDSGVOSettings::get('sar_dsgvo_accepted_text'));
|
33 |
-
//ok
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Register settings strings for Polylang
|
5 |
+
*
|
6 |
+
* @link https://wp-dsgvo.eu
|
7 |
+
* @since 1.0.0
|
8 |
+
*
|
9 |
+
* @package WP DSGVO Tools
|
10 |
+
* @subpackage WP DSGVO Tools/includes
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
*
|
15 |
+
* @package WP DSGVO Tools
|
16 |
+
* @subpackage WP DSGVO Tools/includes
|
17 |
+
* @author Shapepress eU
|
18 |
+
*/
|
19 |
+
class SPDSGVOSettingsPolylang {
|
20 |
+
|
21 |
+
public $defaults = array();
|
22 |
+
|
23 |
+
public function __construct() {
|
24 |
+
if(function_exists('icl_register_string')) :
|
25 |
+
//ok
|
26 |
+
icl_register_string('shapepress-dsgvo', 'spdsgvo_comments_checkbox_info', SPDSGVOSettings::get('spdsgvo_comments_checkbox_info'));
|
27 |
+
//ok
|
28 |
+
icl_register_string('shapepress-dsgvo', 'spdsgvo_comments_checkbox_confirm', SPDSGVOSettings::get('spdsgvo_comments_checkbox_confirm'));
|
29 |
+
//ok
|
30 |
+
icl_register_string('shapepress-dsgvo', 'spdsgvo_comments_checkbox_text', SPDSGVOSettings::get('spdsgvo_comments_checkbox_text'));
|
31 |
+
//ok
|
32 |
+
icl_register_string('shapepress-dsgvo', 'sar_dsgvo_accepted_text', SPDSGVOSettings::get('sar_dsgvo_accepted_text'));
|
33 |
+
//ok
|
34 |
+
|
35 |
+
if(is_array(SPDSGVOSettings::get( 'services' ))) {
|
36 |
+
// Prevents illegal string offset warnings
|
37 |
+
|
38 |
+
if ( isset( SPDSGVOSettings::get( 'services' )['cookies'] )
|
39 |
+
&& isset( SPDSGVOSettings::get( 'services' )['cookies']['reason'] ) ) {
|
40 |
+
//ok
|
41 |
+
icl_register_string( 'shapepress-dsgvo', 'services_cookies_reason', SPDSGVOSettings::get( 'services' )['cookies']['reason'] );
|
42 |
+
}
|
43 |
+
|
44 |
+
if ( isset( SPDSGVOSettings::get( 'services' )['google-analytics'] )
|
45 |
+
&& isset( SPDSGVOSettings::get( 'services' )['cookies']['reason'] ) ) {
|
46 |
+
//ok
|
47 |
+
icl_register_string( 'shapepress-dsgvo', 'services_google-analytics_reason', SPDSGVOSettings::get( 'services' )['google-analytics']['reason'] );
|
48 |
+
}
|
49 |
+
|
50 |
+
if ( isset( SPDSGVOSettings::get( 'services' )['google-fonts'] )
|
51 |
+
&& isset( SPDSGVOSettings::get( 'services' )['cookies']['reason'] ) ) {
|
52 |
+
//ok
|
53 |
+
icl_register_string( 'shapepress-dsgvo', 'services_google-fonts_reason', SPDSGVOSettings::get( 'services' )['google-fonts']['reason'] );
|
54 |
+
}
|
55 |
+
|
56 |
+
if ( isset( SPDSGVOSettings::get( 'services' )['facebook-pixel'] )
|
57 |
+
&& isset( SPDSGVOSettings::get( 'services' )['cookies']['reason'] ) ) {
|
58 |
+
//pl
|
59 |
+
icl_register_string( 'shapepress-dsgvo', 'services_facebook-pixel_reason', SPDSGVOSettings::get( 'services' )['facebook-pixel']['reason'] );
|
60 |
+
}
|
61 |
+
}
|
62 |
+
//ok
|
63 |
+
icl_register_string('shapepress-dsgvo', 'su_dsgvo_accepted_text', SPDSGVOSettings::get('su_dsgvo_accepted_text'));
|
64 |
+
//ok
|
65 |
+
icl_register_string('shapepress-dsgvo', 'cookie_notice_text', SPDSGVOSettings::get('cookie_notice_custom_text'));
|
66 |
+
//ok
|
67 |
+
icl_register_string('shapepress-dsgvo', 'cn_button_text_ok', SPDSGVOSettings::get('cn_button_text_ok'));
|
68 |
+
//ok
|
69 |
+
icl_register_string('shapepress-dsgvo', 'cn_button_text_cancel', SPDSGVOSettings::get('cn_button_text_cancel'));
|
70 |
+
//ok
|
71 |
+
icl_register_string('shapepress-dsgvo', 'cn_button_text_more', SPDSGVOSettings::get('cn_button_text_more'));
|
72 |
+
|
73 |
+
icl_register_string('shapepress-dsgvo', 'terms_conditions', SPDSGVOSettings::get('terms_conditions'));
|
74 |
+
//ok
|
75 |
+
icl_register_string('shapepress-dsgvo', 'privacy_policy', SPDSGVOSettings::get('privacy_policy'));
|
76 |
+
//ok
|
77 |
+
icl_register_string('shapepress-dsgvo', 'imprint', SPDSGVOSettings::get('imprint'));
|
78 |
+
//ok
|
79 |
+
icl_register_string('shapepress-dsgvo', 'accept_button_text', SPDSGVOSettings::get('accept_button_text'));
|
80 |
+
|
81 |
+
icl_register_string('shapepress-dsgvo', 'more_options_button_text', SPDSGVOSettings::get('more_options_button_text'));
|
82 |
+
icl_register_string('shapepress-dsgvo', 'close_button_url', SPDSGVOSettings::get('close_button_url'));
|
83 |
+
icl_register_string('shapepress-dsgvo', 'accordion_top', SPDSGVOSettings::get('accordion_top'));
|
84 |
+
endif;
|
85 |
+
}
|
86 |
+
|
87 |
+
}
|
88 |
+
|
89 |
+
new SPDSGVOSettingsPolylang();
|
includes/class-sp-dsgvo-settings.php
CHANGED
@@ -1,319 +1,289 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Register all actions and filters for the plugin
|
5 |
-
*
|
6 |
-
* @link https://wp-dsgvo.eu
|
7 |
-
* @since 1.0.0
|
8 |
-
*
|
9 |
-
* @package WP DSGVO Tools
|
10 |
-
* @subpackage WP DSGVO Tools/includes
|
11 |
-
*/
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Register all actions and filters for the plugin.
|
15 |
-
*
|
16 |
-
* Maintain a list of all hooks that are registered throughout
|
17 |
-
* the plugin, and register them with the WordPress API. Call the
|
18 |
-
* run function to execute the list of actions and filters.
|
19 |
-
*
|
20 |
-
* @package WP DSGVO Tools
|
21 |
-
* @subpackage WP DSGVO Tools/includes
|
22 |
-
* @author Shapepress eU
|
23 |
-
*/
|
24 |
-
class SPDSGVOSettings{
|
25 |
-
|
26 |
-
public $defaults = array();
|
27 |
-
|
28 |
-
|
29 |
-
public function
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
'
|
48 |
-
|
49 |
-
'
|
50 |
-
'
|
51 |
-
|
52 |
-
'
|
53 |
-
'
|
54 |
-
'
|
55 |
-
|
56 |
-
|
57 |
-
'
|
58 |
-
'
|
59 |
-
'
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
'
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
'
|
132 |
-
'
|
133 |
-
'
|
134 |
-
'
|
135 |
-
'
|
136 |
-
'
|
137 |
-
'
|
138 |
-
'
|
139 |
-
'
|
140 |
-
'
|
141 |
-
|
142 |
-
'
|
143 |
-
'
|
144 |
-
'
|
145 |
-
'
|
146 |
-
'
|
147 |
-
'
|
148 |
-
'
|
149 |
-
'
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
'
|
169 |
-
'
|
170 |
-
|
171 |
-
|
172 |
-
'
|
173 |
-
|
174 |
-
'
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
'
|
185 |
-
'
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
}
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
$value = self::getDefault($property);
|
292 |
-
}
|
293 |
-
}
|
294 |
-
|
295 |
-
return $value;
|
296 |
-
}
|
297 |
-
|
298 |
-
public static function getDefault($property){
|
299 |
-
|
300 |
-
$sInstance = new self;
|
301 |
-
|
302 |
-
if (array_key_exists($property, $sInstance->defaults))
|
303 |
-
{
|
304 |
-
return $sInstance->defaults[$property];
|
305 |
-
} else
|
306 |
-
{
|
307 |
-
return '';
|
308 |
-
}
|
309 |
-
}
|
310 |
-
|
311 |
-
|
312 |
-
public function __get($property){
|
313 |
-
return self::get($property);
|
314 |
-
}
|
315 |
-
|
316 |
-
public function __set($property, $value){
|
317 |
-
return self::set($property, $value);
|
318 |
-
}
|
319 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Register all actions and filters for the plugin
|
5 |
+
*
|
6 |
+
* @link https://wp-dsgvo.eu
|
7 |
+
* @since 1.0.0
|
8 |
+
*
|
9 |
+
* @package WP DSGVO Tools
|
10 |
+
* @subpackage WP DSGVO Tools/includes
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Register all actions and filters for the plugin.
|
15 |
+
*
|
16 |
+
* Maintain a list of all hooks that are registered throughout
|
17 |
+
* the plugin, and register them with the WordPress API. Call the
|
18 |
+
* run function to execute the list of actions and filters.
|
19 |
+
*
|
20 |
+
* @package WP DSGVO Tools
|
21 |
+
* @subpackage WP DSGVO Tools/includes
|
22 |
+
* @author Shapepress eU
|
23 |
+
*/
|
24 |
+
class SPDSGVOSettings{
|
25 |
+
|
26 |
+
public $defaults = array();
|
27 |
+
|
28 |
+
private static $instance;
|
29 |
+
public static function getInstance()
|
30 |
+
{
|
31 |
+
if (null === self::$instance) {
|
32 |
+
self::$instance = new self;
|
33 |
+
}
|
34 |
+
|
35 |
+
return self::$instance;
|
36 |
+
}
|
37 |
+
|
38 |
+
public function __construct() {
|
39 |
+
|
40 |
+
// dummy translation here
|
41 |
+
__('WP DSGVO Tools (GDPR) help you to fulfill the GDPR (DGSVO) compliance guidance (<a target="_blank" href="https://ico.org.uk/for-organisations/data-protection-reform/overview-of-the-gdpr/">GDPR</a>)', 'shapepress-dsgvo');
|
42 |
+
|
43 |
+
$this->defaults = array(
|
44 |
+
/////////////////////////////////////
|
45 |
+
// common settings
|
46 |
+
////////////////////////////////////
|
47 |
+
'plugin_version' => '0',
|
48 |
+
'migration_history' => '',
|
49 |
+
'show_setup' => '0',
|
50 |
+
'license_key_error' => '1',
|
51 |
+
'license_activated' => '0',
|
52 |
+
'licence_activated_on' => '2018-05-01',
|
53 |
+
'licence_valid_to' => '',
|
54 |
+
'licence_details_fetched' => '0',
|
55 |
+
'licence_details_fetched_new' => '0',
|
56 |
+
'show_invalid_license_notice' => '0',
|
57 |
+
'show_revoke_license_notice' => '0',
|
58 |
+
'licence_number_use_remaining' => '0',
|
59 |
+
'licence_status' => '',
|
60 |
+
'api_key' => '',
|
61 |
+
'admin_email' => '',
|
62 |
+
'use_wpml_strings' => '0',
|
63 |
+
'dsgvo_auto_update' => '0',
|
64 |
+
'dsgvo_block_google_fonts' => '0',
|
65 |
+
'sp_dsgvo_comments_checkbox' => '0',
|
66 |
+
'spdsgvo_comments_checkbox_confirm' => __('I confirm','shapepress-dsgvo'),
|
67 |
+
'spdsgvo_comments_checkbox_info' => __('The confirmation to GDPR is mandatory.','shapepress-dsgvo'),
|
68 |
+
'spdsgvo_comments_checkbox_text' => __('This form stores your name, email address and content so that we can evaluate the comments on our site. For more information, visit our Privacy Policy page.','shapepress-dsgvo'),
|
69 |
+
|
70 |
+
'page_operator_type' => 'one-man',
|
71 |
+
'page_operator_company_name' => '',
|
72 |
+
'page_operator_company_law_person' => '',
|
73 |
+
'page_operator_operator_name' => '',
|
74 |
+
'spdsgvo_company_info_name' => '',
|
75 |
+
'spdsgvo_company_info_street' => '',
|
76 |
+
'spdsgvo_company_info_loc_zip' => '',
|
77 |
+
'spdsgvo_company_info_countrycode' => 'DE',
|
78 |
+
'spdsgvo_company_fn_nr' => '',
|
79 |
+
'spdsgvo_company_law_loc' => '',
|
80 |
+
'spdsgvo_company_uid_nr' => '',
|
81 |
+
'spdsgvo_company_law_person' => '',
|
82 |
+
'spdsgvo_company_chairmen' => '',
|
83 |
+
'spdsgvo_company_resp_content' => '',
|
84 |
+
'spdsgvo_company_info_phone' => '',
|
85 |
+
'spdsgvo_company_info_fax' => '',
|
86 |
+
'spdsgvo_company_info_email' => '',
|
87 |
+
'spdsgvo_newsletter_service' => '',
|
88 |
+
'spdsgvo_newsletter_service_privacy_policy_url' => '',
|
89 |
+
|
90 |
+
|
91 |
+
|
92 |
+
/////////////////////////////////////
|
93 |
+
// SAR
|
94 |
+
/////////////////////////////////////
|
95 |
+
'sar_cron' => '0',
|
96 |
+
'sar_page' => '0',
|
97 |
+
'sar_email_notification' => '0',
|
98 |
+
'sar_dsgvo_accepted_text' => __('I agree to the storage of the data for processing within the meaning of the GDPR.','shapepress-dsgvo'),
|
99 |
+
|
100 |
+
/////////////////////////////////////
|
101 |
+
// Third-party Services
|
102 |
+
/////////////////////////////////////
|
103 |
+
'user_permissions_page' => '0',
|
104 |
+
|
105 |
+
|
106 |
+
/////////////////////////////////////
|
107 |
+
// Unsubscribe Page
|
108 |
+
/////////////////////////////////////
|
109 |
+
'super_unsubscribe_page' => '0',
|
110 |
+
'unsubscribe_auto_delete' => '0',
|
111 |
+
'su_auto_del_time' => '0',
|
112 |
+
'su_woo_data_action' => 'ignore',
|
113 |
+
'su_bbpress_data_action' => 'ignore',
|
114 |
+
'su_buddypress_data_action' => 'ignore',
|
115 |
+
'su_email_notification' => '0',
|
116 |
+
'su_dsgvo_accepted_text' => __('I agree to the storage of the data for processing within the meaning of the GDPR.','shapepress-dsgvo'),
|
117 |
+
|
118 |
+
|
119 |
+
/////////////////////////////////////
|
120 |
+
// Cookie Notice
|
121 |
+
////////////////////////////////////
|
122 |
+
'cookie_version' => '0',
|
123 |
+
'display_cookie_notice' => '0',
|
124 |
+
'force_cookie_info' => '0',
|
125 |
+
'cookie_notice_custom_css' => "",
|
126 |
+
'cookie_notice_text' => __('In case you want to change your privacy settings (e.g. issue consent or revoke an already issued consent) please click on the button below.','shapepress-dsgvo'),
|
127 |
+
'cn_cookie_validity' => '86400',
|
128 |
+
'cn_button_text_ok' => __('OK','shapepress-dsgvo'),
|
129 |
+
'cn_reload_on_confirm' => '0',
|
130 |
+
'cn_reload_on_confirm_popup' => '0',
|
131 |
+
'cn_activate_cancel_btn' => '1',
|
132 |
+
'cn_button_text_cancel' => __('Deny','shapepress-dsgvo'),
|
133 |
+
'cn_decline_target_url' => '',
|
134 |
+
'cn_activate_more_btn' => '0',
|
135 |
+
'cn_button_text_more' => __('More information','shapepress-dsgvo'),
|
136 |
+
'cn_read_more_page' => '',
|
137 |
+
'cn_position' => 'bottom',
|
138 |
+
'cn_animation' => 'none',
|
139 |
+
'cn_background_color' => '#333333',
|
140 |
+
'cn_text_color' => '#ffffff',
|
141 |
+
'cn_background_color_button' => '#F3F3F3',
|
142 |
+
'cn_text_color_button' => '#333333',
|
143 |
+
'cn_custom_css_container' => '',
|
144 |
+
'cn_custom_css_text' => '',
|
145 |
+
'cn_custom_css_buttons' => '',
|
146 |
+
'cn_size_text' => '13px',
|
147 |
+
'cn_height_container' => 'auto',
|
148 |
+
'cn_show_dsgvo_icon' => '0',
|
149 |
+
'cn_use_overlay' => '0',
|
150 |
+
'cookie_notice_display' => 'none',
|
151 |
+
'show_notice_on_close' => '0',
|
152 |
+
'cookie_style' => '00',
|
153 |
+
'logo_image_id' => '0',
|
154 |
+
|
155 |
+
|
156 |
+
/////////////////////////////////////
|
157 |
+
// Privacy Policy
|
158 |
+
/////////////////////////////////////
|
159 |
+
'privacy_policy' => '',
|
160 |
+
'privacy_policy_page' => '0',
|
161 |
+
'privacy_policy_version' => '1',
|
162 |
+
'privacy_policy_hash' => '',
|
163 |
+
'woo_show_privacy_checkbox' => '0',
|
164 |
+
'woo_show_privacy_checkbox_register' => '0',
|
165 |
+
'woo_privacy_text' => '',
|
166 |
+
'wp_signup_checkbox_text' => '',
|
167 |
+
'wp_signup_checkbox_error' => '',
|
168 |
+
'wp_signup_show_privacy_checkbox' => '0',
|
169 |
+
'privacy_policy_title_html_htag' => 'h1',
|
170 |
+
'privacy_policy_subtitle_html_htag' => 'h2',
|
171 |
+
'privacy_policy_subsubtitle_html_htag' => 'h3',
|
172 |
+
'legal_web_texts_version' => '0',
|
173 |
+
'legal_web_texts_last_check' => '0',
|
174 |
+
'pp_texts_notification_mail' => '0',
|
175 |
+
|
176 |
+
/////////////////////////////////////
|
177 |
+
// imprint
|
178 |
+
/////////////////////////////////////
|
179 |
+
'imprint' => '',
|
180 |
+
'imprint_page' => '0',
|
181 |
+
'imprint_version' => '1',
|
182 |
+
'imprint_hash' => '',
|
183 |
+
|
184 |
+
'cb_spdsgvo_cl_vdv' => '0',
|
185 |
+
'cb_spdsgvo_cl_filled_out' => '0',
|
186 |
+
'cb_spdsgvo_cl_maintainance' => '0',
|
187 |
+
'cb_spdsgvo_cl_security' => '0',
|
188 |
+
'cb_spdsgvo_cl_hosting' => '0',
|
189 |
+
'cb_spdsgvo_cl_plugins' => '0',
|
190 |
+
'cb_spdsgvo_cl_experts' => '0',
|
191 |
+
|
192 |
+
'google_gdpr_refresh_notice' => '0',
|
193 |
+
'show_notice_update_check_settings' => '1'
|
194 |
+
|
195 |
+
);
|
196 |
+
|
197 |
+
|
198 |
+
}
|
199 |
+
|
200 |
+
public static function init(){
|
201 |
+
|
202 |
+
$sInstance = (new self);
|
203 |
+
$users = get_users(array('role' => 'administrator'));
|
204 |
+
$admin = (isset($users[0]))? $users[0] : FALSE;
|
205 |
+
if(!self::get('admin_email')){
|
206 |
+
if($admin){
|
207 |
+
self::set('admin_email', $admin->user_email);
|
208 |
+
}
|
209 |
+
}
|
210 |
+
|
211 |
+
foreach($sInstance->defaults as $setting => $value){
|
212 |
+
if(!self::get($setting)){
|
213 |
+
self::set($setting, $value);
|
214 |
+
}
|
215 |
+
}
|
216 |
+
}
|
217 |
+
|
218 |
+
public static function set($property, $value){
|
219 |
+
update_option(SPDSGVOConstants::OPTIONS_PREFIX.$property, $value);
|
220 |
+
}
|
221 |
+
|
222 |
+
public static function get($property){
|
223 |
+
$value = get_option(SPDSGVOConstants::OPTIONS_PREFIX .$property);
|
224 |
+
|
225 |
+
if($value !== '0'){
|
226 |
+
if(!$value || empty($value)){
|
227 |
+
|
228 |
+
$value = self::getDefault($property);
|
229 |
+
}
|
230 |
+
}
|
231 |
+
|
232 |
+
return $value;
|
233 |
+
}
|
234 |
+
|
235 |
+
public static function getDefault($property){
|
236 |
+
|
237 |
+
$sInstance = new self;
|
238 |
+
|
239 |
+
if (array_key_exists($property, $sInstance->defaults))
|
240 |
+
{
|
241 |
+
return $sInstance->defaults[$property];
|
242 |
+
} else
|
243 |
+
{
|
244 |
+
return '';
|
245 |
+
}
|
246 |
+
}
|
247 |
+
|
248 |
+
public static function getAll()
|
249 |
+
{
|
250 |
+
$all_options = wp_load_alloptions();
|
251 |
+
$my_options = array();
|
252 |
+
foreach( $all_options as $name => $value ) {
|
253 |
+
if(strpos($name,SPDSGVOConstants::OPTIONS_PREFIX) !== false) {
|
254 |
+
if($value !== '0'){
|
255 |
+
if(!$value || empty($value)){
|
256 |
+
|
257 |
+
$value = self::getDefault($name);
|
258 |
+
} else
|
259 |
+
{
|
260 |
+
// check if its an array
|
261 |
+
//if (strpos($value, 'a:') === 0)
|
262 |
+
if (is_serialized($value))
|
263 |
+
{
|
264 |
+
try {
|
265 |
+
$newArray = unserialize($value);
|
266 |
+
//if ($newArray == false) echo 'SERIALIZE: '.$name .': '.$value;
|
267 |
+
if ($newArray != false && is_array($newArray))
|
268 |
+
{
|
269 |
+
$value = $newArray;
|
270 |
+
}
|
271 |
+
} catch (Exception $ex) {}
|
272 |
+
}
|
273 |
+
|
274 |
+
}
|
275 |
+
}
|
276 |
+
$my_options[str_replace(SPDSGVOConstants::OPTIONS_PREFIX,'', $name)] = $value;
|
277 |
+
}
|
278 |
+
}
|
279 |
+
return array_merge(SPDSGVOSettings::getInstance()->defaults, $my_options);
|
280 |
+
}
|
281 |
+
|
282 |
+
public function __get($property){
|
283 |
+
return self::get($property);
|
284 |
+
}
|
285 |
+
|
286 |
+
public function __set($property, $value){
|
287 |
+
return self::set($property, $value);
|
288 |
+
}
|
289 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/class-sp-dsgvo-slim-model.php
CHANGED
@@ -1,655 +1,654 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* WP_Model
|
5 |
-
*
|
6 |
-
* A simple class for creating active
|
7 |
-
* record, eloquent-esque models of WordPress Posts.
|
8 |
-
*
|
9 |
-
* @author Shapepress.com
|
10 |
-
*/
|
11 |
-
Abstract Class SPDSGVOModel{
|
12 |
-
|
13 |
-
public $ID;
|
14 |
-
public $_post;
|
15 |
-
public $data = array();
|
16 |
-
public $attributes = array();
|
17 |
-
public $default = array();
|
18 |
-
public $virtual = array();
|
19 |
-
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Create a new instace with data
|
23 |
-
*
|
24 |
-
* @param array $insert
|
25 |
-
* @return void
|
26 |
-
*/
|
27 |
-
public function __construct(Array $insert = array()){
|
28 |
-
if(!empty($this->default)){
|
29 |
-
foreach($this->default as $attribute => $value){
|
30 |
-
$this->data[$attribute] = $value;
|
31 |
-
}
|
32 |
-
}
|
33 |
-
|
34 |
-
foreach($insert as $attribute => $value){
|
35 |
-
if(in_array($attribute, $this->attributes)){
|
36 |
-
$this->set($attribute, $value);
|
37 |
-
}
|
38 |
-
}
|
39 |
-
|
40 |
-
$this->set('title', isset($insert['title'])? $insert['title'] : '');
|
41 |
-
$this->set('content', isset($insert['content'])? $insert['content'] : '');
|
42 |
-
$this->boot();
|
43 |
-
}
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Initalize the model, load in any addional data
|
47 |
-
*
|
48 |
-
* @return void
|
49 |
-
*/
|
50 |
-
protected function boot(){
|
51 |
-
$this->triggerEvent('booting');
|
52 |
-
|
53 |
-
if(isset($this->ID)){
|
54 |
-
$this->_post = get_post($this->ID);
|
55 |
-
$this->set('title', $this->_post->post_title);
|
56 |
-
$this->set('content', $this->_post->post_content);
|
57 |
-
|
58 |
-
foreach($this->attributes as $attribute){
|
59 |
-
$meta = $this->getMeta($attribute);
|
60 |
-
if(empty($meta) && isset($this->default[$attribute])){
|
61 |
-
$this->set($attribute, $this->default[$attribute]);
|
62 |
-
}else{
|
63 |
-
$this->set($attribute, $meta);
|
64 |
-
}
|
65 |
-
}
|
66 |
-
}
|
67 |
-
|
68 |
-
$this->triggerEvent('booted');
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Register the post type using the propery $postType as the post type
|
73 |
-
*
|
74 |
-
* @param array $args see: register_post_type()
|
75 |
-
* @return void
|
76 |
-
*/
|
77 |
-
public static function register($args = array()){
|
78 |
-
$postType = self::getPostType();
|
79 |
-
|
80 |
-
register_post_type($postType, $args);
|
81 |
-
}
|
82 |
-
|
83 |
-
/**
|
84 |
-
* Create a new model with data, save and return the model
|
85 |
-
*
|
86 |
-
* @param array $insert
|
87 |
-
*/
|
88 |
-
public static function insert(Array $insert = array()){
|
89 |
-
return self::newInstance($insert)->save();
|
90 |
-
}
|
91 |
-
|
92 |
-
|
93 |
-
// -----------------------------------------------------
|
94 |
-
// EVENTS
|
95 |
-
// -----------------------------------------------------
|
96 |
-
/**
|
97 |
-
* Fire event if the event method exists
|
98 |
-
*
|
99 |
-
* @param string $event event name
|
100 |
-
* @return bool
|
101 |
-
*/
|
102 |
-
protected function triggerEvent($event){
|
103 |
-
if(method_exists($this, $event)){
|
104 |
-
$this->$event($this);
|
105 |
-
return TRUE;
|
106 |
-
}
|
107 |
-
|
108 |
-
return FALSE;
|
109 |
-
}
|
110 |
-
|
111 |
-
|
112 |
-
// -----------------------------------------------------
|
113 |
-
// UTILITY METHODS
|
114 |
-
// -----------------------------------------------------
|
115 |
-
/**
|
116 |
-
* Create a new model without calling the constructor.
|
117 |
-
*
|
118 |
-
* @return object
|
119 |
-
*/
|
120 |
-
protected static function newWithoutConstructor(){
|
121 |
-
$class = get_called_class();
|
122 |
-
$reflection = new ReflectionClass($class);
|
123 |
-
return $reflection->newInstanceWithoutConstructor();
|
124 |
-
}
|
125 |
-
|
126 |
-
public static function extract($array, $column){
|
127 |
-
$return = array();
|
128 |
-
|
129 |
-
if(is_array($array)){
|
130 |
-
foreach($array as $value){
|
131 |
-
if(is_object($value)){
|
132 |
-
$return[] = @$value->$column;
|
133 |
-
}elseif(is_array($value)){
|
134 |
-
$return[] = @$value[$column];
|
135 |
-
}
|
136 |
-
}
|
137 |
-
}
|
138 |
-
|
139 |
-
return $return;
|
140 |
-
}
|
141 |
-
|
142 |
-
private function getAttributes(){
|
143 |
-
return array_merge($this->attributes, array('title', 'content', 'the_content'));
|
144 |
-
}
|
145 |
-
|
146 |
-
/**
|
147 |
-
* Returns the post type
|
148 |
-
*
|
149 |
-
* @return string
|
150 |
-
*
|
151 |
-
* @throws \Exception
|
152 |
-
*/
|
153 |
-
public static function getPostType(){
|
154 |
-
$model = self::newWithoutConstructor();
|
155 |
-
|
156 |
-
if(isset($model->postType)){
|
157 |
-
return $model->postType;
|
158 |
-
}
|
159 |
-
|
160 |
-
throw new Exception('$postType not defined');
|
161 |
-
}
|
162 |
-
|
163 |
-
/**
|
164 |
-
* Returns a new model
|
165 |
-
*
|
166 |
-
* @return object
|
167 |
-
*/
|
168 |
-
public static function newInstance($insert = array()){
|
169 |
-
$class = get_called_class();
|
170 |
-
return new $class($insert);
|
171 |
-
}
|
172 |
-
|
173 |
-
/**
|
174 |
-
* Returns TRUE if $attribute is in the $virtual array
|
175 |
-
* and has a corresponding vitaul property method
|
176 |
-
*
|
177 |
-
* @param string $attribute
|
178 |
-
* @return bool
|
179 |
-
*/
|
180 |
-
public function isVirtualProperty($attribute){
|
181 |
-
return (isset($this->virtual) &&
|
182 |
-
in_array($attribute, $this->virtual) &&
|
183 |
-
method_exists($this, ('_get'. ucfirst($attribute))));
|
184 |
-
}
|
185 |
-
|
186 |
-
/**
|
187 |
-
* Calls virtual property method
|
188 |
-
*
|
189 |
-
* @param string $attribute
|
190 |
-
* @return mixed
|
191 |
-
*/
|
192 |
-
public function getVirtualProperty($attribute){
|
193 |
-
return call_user_func(array($this, ('_get'. ucfirst($attribute))));
|
194 |
-
}
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
// -----------------------------------------------------
|
199 |
-
// Meta
|
200 |
-
// -----------------------------------------------------
|
201 |
-
/**
|
202 |
-
* Returns meta value for a meta key
|
203 |
-
*
|
204 |
-
* @param string meta_key
|
205 |
-
* @return string
|
206 |
-
*/
|
207 |
-
public function getMeta($key){
|
208 |
-
return get_post_meta($this->ID, $key, TRUE);
|
209 |
-
}
|
210 |
-
|
211 |
-
/**
|
212 |
-
* Set meta value for a meta key
|
213 |
-
*
|
214 |
-
* @param string meta_key
|
215 |
-
* @param string meta_value
|
216 |
-
* @return void
|
217 |
-
*/
|
218 |
-
public function setMeta($key, $value){
|
219 |
-
update_post_meta($this->ID, $key, $value);
|
220 |
-
}
|
221 |
-
|
222 |
-
/**
|
223 |
-
* Delete meta's meta
|
224 |
-
*
|
225 |
-
* @param string meta_key
|
226 |
-
* @return void
|
227 |
-
*/
|
228 |
-
public function deleteMeta($key){
|
229 |
-
delete_post_meta($this->ID, $key);
|
230 |
-
}
|
231 |
-
|
232 |
-
|
233 |
-
// -----------------------------------------------------
|
234 |
-
// GETTERS & SETTERS
|
235 |
-
// -----------------------------------------------------
|
236 |
-
/**
|
237 |
-
* Get property of model or $default
|
238 |
-
*
|
239 |
-
* @param property $attribute
|
240 |
-
* @param property $default
|
241 |
-
* @return mixed
|
242 |
-
*
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
*
|
257 |
-
*
|
258 |
-
* @param string $
|
259 |
-
* @
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
//
|
269 |
-
//
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
//
|
297 |
-
//
|
298 |
-
|
299 |
-
|
300 |
-
*
|
301 |
-
*
|
302 |
-
* @param
|
303 |
-
* @
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
*
|
322 |
-
*
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
*
|
332 |
-
*
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
*
|
341 |
-
*
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
*
|
350 |
-
*
|
351 |
-
* @
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
$featuredImage
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
*
|
361 |
-
*
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
$model['
|
386 |
-
$model['
|
387 |
-
$model
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
*
|
397 |
-
*
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
*
|
406 |
-
*
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
//
|
415 |
-
//
|
416 |
-
|
417 |
-
|
418 |
-
*
|
419 |
-
*
|
420 |
-
* @
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
$class->
|
427 |
-
$class
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
*
|
436 |
-
* @
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
$class
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
*
|
459 |
-
*
|
460 |
-
* @
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
$
|
465 |
-
|
466 |
-
|
467 |
-
'
|
468 |
-
'
|
469 |
-
'
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
*
|
482 |
-
*
|
483 |
-
* @param
|
484 |
-
* @
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
$
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
$
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
*
|
511 |
-
*
|
512 |
-
* @param
|
513 |
-
* @
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
$
|
518 |
-
$
|
519 |
-
$
|
520 |
-
$
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
$args
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
$postFinderMethod
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
$
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
//
|
565 |
-
//
|
566 |
-
|
567 |
-
|
568 |
-
*
|
569 |
-
*
|
570 |
-
*
|
571 |
-
*
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
'
|
585 |
-
'
|
586 |
-
|
587 |
-
);
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
$
|
593 |
-
|
594 |
-
'
|
595 |
-
'
|
596 |
-
|
597 |
-
);
|
598 |
-
$this->
|
599 |
-
$this->
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
$this->
|
609 |
-
$this
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
//
|
614 |
-
//
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
$this->
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
'
|
633 |
-
'
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
$this->
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
$this->setMeta('
|
643 |
-
$this->
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* WP_Model
|
5 |
+
*
|
6 |
+
* A simple class for creating active
|
7 |
+
* record, eloquent-esque models of WordPress Posts.
|
8 |
+
*
|
9 |
+
* @author Shapepress.com
|
10 |
+
*/
|
11 |
+
Abstract Class SPDSGVOModel{
|
12 |
+
|
13 |
+
public $ID;
|
14 |
+
public $_post;
|
15 |
+
public $data = array();
|
16 |
+
public $attributes = array();
|
17 |
+
public $default = array();
|
18 |
+
public $virtual = array();
|
19 |
+
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Create a new instace with data
|
23 |
+
*
|
24 |
+
* @param array $insert
|
25 |
+
* @return void
|
26 |
+
*/
|
27 |
+
public function __construct(Array $insert = array()){
|
28 |
+
if(!empty($this->default)){
|
29 |
+
foreach($this->default as $attribute => $value){
|
30 |
+
$this->data[$attribute] = $value;
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
foreach($insert as $attribute => $value){
|
35 |
+
if(in_array($attribute, $this->attributes)){
|
36 |
+
$this->set($attribute, $value);
|
37 |
+
}
|
38 |
+
}
|
39 |
+
|
40 |
+
$this->set('title', isset($insert['title'])? $insert['title'] : '');
|
41 |
+
$this->set('content', isset($insert['content'])? $insert['content'] : '');
|
42 |
+
$this->boot();
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Initalize the model, load in any addional data
|
47 |
+
*
|
48 |
+
* @return void
|
49 |
+
*/
|
50 |
+
protected function boot(){
|
51 |
+
$this->triggerEvent('booting');
|
52 |
+
|
53 |
+
if(isset($this->ID)){
|
54 |
+
$this->_post = get_post($this->ID);
|
55 |
+
$this->set('title', $this->_post->post_title);
|
56 |
+
$this->set('content', $this->_post->post_content);
|
57 |
+
|
58 |
+
foreach($this->attributes as $attribute){
|
59 |
+
$meta = $this->getMeta($attribute);
|
60 |
+
if(empty($meta) && isset($this->default[$attribute])){
|
61 |
+
$this->set($attribute, $this->default[$attribute]);
|
62 |
+
}else{
|
63 |
+
$this->set($attribute, $meta);
|
64 |
+
}
|
65 |
+
}
|
66 |
+
}
|
67 |
+
|
68 |
+
$this->triggerEvent('booted');
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Register the post type using the propery $postType as the post type
|
73 |
+
*
|
74 |
+
* @param array $args see: register_post_type()
|
75 |
+
* @return void
|
76 |
+
*/
|
77 |
+
public static function register($args = array()){
|
78 |
+
$postType = self::getPostType();
|
79 |
+
|
80 |
+
register_post_type($postType, $args);
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Create a new model with data, save and return the model
|
85 |
+
*
|
86 |
+
* @param array $insert
|
87 |
+
*/
|
88 |
+
public static function insert(Array $insert = array()){
|
89 |
+
return self::newInstance($insert)->save();
|
90 |
+
}
|
91 |
+
|
92 |
+
|
93 |
+
// -----------------------------------------------------
|
94 |
+
// EVENTS
|
95 |
+
// -----------------------------------------------------
|
96 |
+
/**
|
97 |
+
* Fire event if the event method exists
|
98 |
+
*
|
99 |
+
* @param string $event event name
|
100 |
+
* @return bool
|
101 |
+
*/
|
102 |
+
protected function triggerEvent($event){
|
103 |
+
if(method_exists($this, $event)){
|
104 |
+
$this->$event($this);
|
105 |
+
return TRUE;
|
106 |
+
}
|
107 |
+
|
108 |
+
return FALSE;
|
109 |
+
}
|
110 |
+
|
111 |
+
|
112 |
+
// -----------------------------------------------------
|
113 |
+
// UTILITY METHODS
|
114 |
+
// -----------------------------------------------------
|
115 |
+
/**
|
116 |
+
* Create a new model without calling the constructor.
|
117 |
+
*
|
118 |
+
* @return object
|
119 |
+
*/
|
120 |
+
protected static function newWithoutConstructor(){
|
121 |
+
$class = get_called_class();
|
122 |
+
$reflection = new ReflectionClass($class);
|
123 |
+
return $reflection->newInstanceWithoutConstructor();
|
124 |
+
}
|
125 |
+
|
126 |
+
public static function extract($array, $column){
|
127 |
+
$return = array();
|
128 |
+
|
129 |
+
if(is_array($array)){
|
130 |
+
foreach($array as $value){
|
131 |
+
if(is_object($value)){
|
132 |
+
$return[] = @$value->$column;
|
133 |
+
}elseif(is_array($value)){
|
134 |
+
$return[] = @$value[$column];
|
135 |
+
}
|
136 |
+
}
|
137 |
+
}
|
138 |
+
|
139 |
+
return $return;
|
140 |
+
}
|
141 |
+
|
142 |
+
private function getAttributes(){
|
143 |
+
return array_merge($this->attributes, array('title', 'content', 'the_content'));
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Returns the post type
|
148 |
+
*
|
149 |
+
* @return string
|
150 |
+
*
|
151 |
+
* @throws \Exception
|
152 |
+
*/
|
153 |
+
public static function getPostType(){
|
154 |
+
$model = self::newWithoutConstructor();
|
155 |
+
|
156 |
+
if(isset($model->postType)){
|
157 |
+
return $model->postType;
|
158 |
+
}
|
159 |
+
|
160 |
+
throw new Exception('$postType not defined');
|
161 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Returns a new model
|
165 |
+
*
|
166 |
+
* @return object
|
167 |
+
*/
|
168 |
+
public static function newInstance($insert = array()){
|
169 |
+
$class = get_called_class();
|
170 |
+
return new $class($insert);
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Returns TRUE if $attribute is in the $virtual array
|
175 |
+
* and has a corresponding vitaul property method
|
176 |
+
*
|
177 |
+
* @param string $attribute
|
178 |
+
* @return bool
|
179 |
+
*/
|
180 |
+
public function isVirtualProperty($attribute){
|
181 |
+
return (isset($this->virtual) &&
|
182 |
+
in_array($attribute, $this->virtual) &&
|
183 |
+
method_exists($this, ('_get'. ucfirst($attribute))));
|
184 |
+
}
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Calls virtual property method
|
188 |
+
*
|
189 |
+
* @param string $attribute
|
190 |
+
* @return mixed
|
191 |
+
*/
|
192 |
+
public function getVirtualProperty($attribute){
|
193 |
+
return call_user_func(array($this, ('_get'. ucfirst($attribute))));
|
194 |
+
}
|
195 |
+
|
196 |
+
|
197 |
+
|
198 |
+
// -----------------------------------------------------
|
199 |
+
// Meta
|
200 |
+
// -----------------------------------------------------
|
201 |
+
/**
|
202 |
+
* Returns meta value for a meta key
|
203 |
+
*
|
204 |
+
* @param string meta_key
|
205 |
+
* @return string
|
206 |
+
*/
|
207 |
+
public function getMeta($key){
|
208 |
+
return get_post_meta($this->ID, $key, TRUE);
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
212 |
+
* Set meta value for a meta key
|
213 |
+
*
|
214 |
+
* @param string meta_key
|
215 |
+
* @param string meta_value
|
216 |
+
* @return void
|
217 |
+
*/
|
218 |
+
public function setMeta($key, $value){
|
219 |
+
update_post_meta($this->ID, $key, $value);
|
220 |
+
}
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Delete meta's meta
|
224 |
+
*
|
225 |
+
* @param string meta_key
|
226 |
+
* @return void
|
227 |
+
*/
|
228 |
+
public function deleteMeta($key){
|
229 |
+
delete_post_meta($this->ID, $key);
|
230 |
+
}
|
231 |
+
|
232 |
+
|
233 |
+
// -----------------------------------------------------
|
234 |
+
// GETTERS & SETTERS
|
235 |
+
// -----------------------------------------------------
|
236 |
+
/**
|
237 |
+
* Get property of model or $default
|
238 |
+
*
|
239 |
+
* @param property $attribute
|
240 |
+
* @param property $default
|
241 |
+
* @return mixed
|
242 |
+
*
|
243 |
+
*/
|
244 |
+
public function get($attribute, $default = NULL){
|
245 |
+
if($attribute === 'the_content'){
|
246 |
+
return apply_filters('the_content', $this->data['content']);
|
247 |
+
}elseif(isset($this->data[$attribute])){
|
248 |
+
return $this->data[$attribute];
|
249 |
+
}else{
|
250 |
+
return $default;
|
251 |
+
}
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Set propert of the model
|
256 |
+
*
|
257 |
+
* @param string $attribute
|
258 |
+
* @param string $value
|
259 |
+
* @return void
|
260 |
+
*/
|
261 |
+
public function set($attribute, $value){
|
262 |
+
if(in_array($attribute, $this->getAttributes())){
|
263 |
+
$this->data[$attribute] = $value;
|
264 |
+
}
|
265 |
+
}
|
266 |
+
|
267 |
+
// -----------------------------------------------------
|
268 |
+
// MAGIC METHODS
|
269 |
+
// -----------------------------------------------------
|
270 |
+
/**
|
271 |
+
* @return void
|
272 |
+
*/
|
273 |
+
public function __set($attribute, $value){
|
274 |
+
if(in_array($attribute, $this->getAttributes())){
|
275 |
+
$this->set($attribute, $value);
|
276 |
+
}
|
277 |
+
}
|
278 |
+
|
279 |
+
/**
|
280 |
+
* @return void
|
281 |
+
*/
|
282 |
+
public function __get($attribute){
|
283 |
+
if(in_array($attribute, $this->getAttributes())){
|
284 |
+
return $this->get($attribute);
|
285 |
+
}else if($this->isVirtualProperty($attribute)){
|
286 |
+
return $this->getVirtualProperty($attribute);
|
287 |
+
}else if($attribute === 'post_title'){
|
288 |
+
return $this->title;
|
289 |
+
}else if($attribute === 'post_content'){
|
290 |
+
return $this->content;
|
291 |
+
}
|
292 |
+
}
|
293 |
+
|
294 |
+
|
295 |
+
// -----------------------------------------------------
|
296 |
+
// HELPER METHODS
|
297 |
+
// -----------------------------------------------------
|
298 |
+
/**
|
299 |
+
* Check if the post exists by Post ID
|
300 |
+
*
|
301 |
+
* @param string|int $ID Post ID
|
302 |
+
* @param bool $postTypeSafe Require post to be the same post type as the model
|
303 |
+
* @return bool
|
304 |
+
*/
|
305 |
+
public static function exists($ID, $postTypeSafe = TRUE){
|
306 |
+
if($postTypeSafe){
|
307 |
+
if(
|
308 |
+
(get_post_status($ID) !== FALSE) &&
|
309 |
+
(get_post_type($ID) === self::getPostType())){
|
310 |
+
return TRUE;
|
311 |
+
}
|
312 |
+
}else{
|
313 |
+
return (get_post_status($ID) !== FALSE);
|
314 |
+
}
|
315 |
+
|
316 |
+
return FALSE;
|
317 |
+
}
|
318 |
+
|
319 |
+
/**
|
320 |
+
* Returns the total posts without using WP_Model::all()
|
321 |
+
*
|
322 |
+
* @return int
|
323 |
+
*/
|
324 |
+
public static function count($postStatus = 'publish'){
|
325 |
+
$count = wp_count_posts(self::getPostType());
|
326 |
+
return !is_null($count)? (isset($count->$postStatus)? intval($count->$postStatus) : 0) : 0;
|
327 |
+
}
|
328 |
+
|
329 |
+
/**
|
330 |
+
* Returns the original post object
|
331 |
+
*
|
332 |
+
* @return WP_Post
|
333 |
+
*/
|
334 |
+
public function post(){
|
335 |
+
return $this->_post;
|
336 |
+
}
|
337 |
+
|
338 |
+
/**
|
339 |
+
* Returns TRUE if the model's post has an associated featured image
|
340 |
+
*
|
341 |
+
* @return bool
|
342 |
+
*/
|
343 |
+
public function hasFeaturedImage(){
|
344 |
+
return (get_the_post_thumbnail_url($this->ID) !== FALSE)? TRUE : FALSE;
|
345 |
+
}
|
346 |
+
|
347 |
+
/**
|
348 |
+
* Get model's featured image or return $default if it does not exist
|
349 |
+
*
|
350 |
+
* @param string $default
|
351 |
+
* @return string
|
352 |
+
*/
|
353 |
+
public function featuredImage($default = ''){
|
354 |
+
$featuredImage = get_the_post_thumbnail_url($this->ID);
|
355 |
+
return ($featuredImage !== FALSE)? $featuredImage : $default;
|
356 |
+
}
|
357 |
+
|
358 |
+
/**
|
359 |
+
* Returns an asoc array representaion of the model
|
360 |
+
*
|
361 |
+
* @return array
|
362 |
+
*/
|
363 |
+
public function toArray(){
|
364 |
+
$model = array();
|
365 |
+
|
366 |
+
foreach($this->attributes as $key => $attribute){
|
367 |
+
if(!empty($this->protected) && !in_array($attribute, $this->protected)){
|
368 |
+
// Do not add to $model
|
369 |
+
}else{
|
370 |
+
$model[$attribute] = $this->$attribute;
|
371 |
+
}
|
372 |
+
}
|
373 |
+
|
374 |
+
if(!empty($this->serialize)){
|
375 |
+
foreach($this->serialize as $key => $attribute){
|
376 |
+
if(!empty($this->protected) && !in_array($attribute, $this->protected)){
|
377 |
+
// Do not add to $model
|
378 |
+
}else{
|
379 |
+
$model[$attribute] = $this->$attribute;
|
380 |
+
}
|
381 |
+
}
|
382 |
+
}
|
383 |
+
|
384 |
+
$model['ID'] = $this->ID;
|
385 |
+
$model['title'] = $this->title;
|
386 |
+
$model['content'] = $this->content;
|
387 |
+
return $model;
|
388 |
+
}
|
389 |
+
|
390 |
+
public function postDate($format = 'd-m-Y'){
|
391 |
+
return date($format, strtotime($this->_post->post_date));
|
392 |
+
}
|
393 |
+
|
394 |
+
/**
|
395 |
+
* Get the model for a single page or in the loop
|
396 |
+
*
|
397 |
+
* @return object|NULL
|
398 |
+
*/
|
399 |
+
public static function single(){
|
400 |
+
return self::find(get_the_ID());
|
401 |
+
}
|
402 |
+
|
403 |
+
/**
|
404 |
+
* returns the post's permalink
|
405 |
+
*
|
406 |
+
* @return string
|
407 |
+
*/
|
408 |
+
public function permalink(){
|
409 |
+
return get_permalink($this->ID);
|
410 |
+
}
|
411 |
+
|
412 |
+
|
413 |
+
// ----------------------------------------------------
|
414 |
+
// FINDERS
|
415 |
+
// ----------------------------------------------------
|
416 |
+
/**
|
417 |
+
* Find model by it's post ID
|
418 |
+
*
|
419 |
+
* @param int $ID
|
420 |
+
* @return Object|NULL
|
421 |
+
*/
|
422 |
+
public static function find($ID){
|
423 |
+
if(self::exists($ID)){
|
424 |
+
$class = self::newInstance();
|
425 |
+
$class->ID = $ID;
|
426 |
+
$class->boot();
|
427 |
+
return $class;
|
428 |
+
}
|
429 |
+
|
430 |
+
return NULL;
|
431 |
+
}
|
432 |
+
|
433 |
+
/**
|
434 |
+
* Find most recent models
|
435 |
+
* @param integer $limit
|
436 |
+
* @return Array
|
437 |
+
*/
|
438 |
+
public static function latest($limit = 1){
|
439 |
+
$class = get_called_class();
|
440 |
+
return $class::finder('Latest__', array('limit' => $limit));
|
441 |
+
}
|
442 |
+
|
443 |
+
public static function _finderLatest__($args){
|
444 |
+
return array(
|
445 |
+
'posts_per_page' => (isset($args['limit'])? $args['limit'] : 3),
|
446 |
+
);
|
447 |
+
}
|
448 |
+
|
449 |
+
public static function _postFinderLatest__($results, $args){
|
450 |
+
if($args['limit'] == '1'){
|
451 |
+
return @$results[0];
|
452 |
+
}
|
453 |
+
return $results;
|
454 |
+
}
|
455 |
+
|
456 |
+
/**
|
457 |
+
* Returns all models
|
458 |
+
*
|
459 |
+
* @param string $limit
|
460 |
+
* @return array
|
461 |
+
*/
|
462 |
+
public static function all($limit = '999999999'){
|
463 |
+
$return = array();
|
464 |
+
$args = array(
|
465 |
+
'post_type' => self::getPostType(),
|
466 |
+
'posts_per_page' => $limit,
|
467 |
+
'order' => 'DESC',
|
468 |
+
'orderby' => 'id',
|
469 |
+
'post_status' => array('publish'),
|
470 |
+
);
|
471 |
+
|
472 |
+
foreach((new WP_Query($args))->get_posts() as $post){
|
473 |
+
$return[] = self::find($post->ID);
|
474 |
+
}
|
475 |
+
|
476 |
+
return $return;
|
477 |
+
}
|
478 |
+
|
479 |
+
/**
|
480 |
+
* Retun an array of models as asoc array. Key by $value
|
481 |
+
*
|
482 |
+
* @param string $value
|
483 |
+
* @param array $models
|
484 |
+
* @return array
|
485 |
+
*/
|
486 |
+
public static function asList($value = NULL, $models = FALSE){
|
487 |
+
if(!is_array($models)){
|
488 |
+
$self = get_called_class();
|
489 |
+
$models = $self::all();
|
490 |
+
}
|
491 |
+
|
492 |
+
$return = array();
|
493 |
+
foreach($models as $model){
|
494 |
+
if(is_int($model) || $model instanceof WP_Post){
|
495 |
+
$model = self::find($model->ID);
|
496 |
+
}
|
497 |
+
|
498 |
+
if(is_null($value)){
|
499 |
+
$return[$model->ID] = $model;
|
500 |
+
}else{
|
501 |
+
$return[$model->ID] = $model->$value;
|
502 |
+
}
|
503 |
+
}
|
504 |
+
|
505 |
+
return $return;
|
506 |
+
}
|
507 |
+
|
508 |
+
/**
|
509 |
+
* Execute funder method
|
510 |
+
*
|
511 |
+
* @param string $finder
|
512 |
+
* @param array $arguments
|
513 |
+
* @return array
|
514 |
+
*/
|
515 |
+
public static function finder($finder, Array $arguments = array()){
|
516 |
+
$return = array();
|
517 |
+
$finderMethod = '_finder'.ucfirst($finder);
|
518 |
+
$class = get_called_class();
|
519 |
+
$model = $class::newWithoutConstructor();
|
520 |
+
if(!in_array($finderMethod, self::extract(( new ReflectionClass(get_called_class()) )->getMethods(), 'name'))){
|
521 |
+
throw new Exception("Finder method {$finderMethod} not found in {$class}");
|
522 |
+
}
|
523 |
+
|
524 |
+
$args = $model->$finderMethod($arguments);
|
525 |
+
if(!is_array($args)){
|
526 |
+
throw new Exception("Finder method must return an array");
|
527 |
+
}
|
528 |
+
|
529 |
+
$args['post_type'] = self::getPostType();
|
530 |
+
/* i592995 */
|
531 |
+
$args['posts_per_page'] = -1;
|
532 |
+
/* i592995 */
|
533 |
+
foreach((new WP_Query($args))->get_posts() as $key => $post){
|
534 |
+
$return[] = self::find($post->ID);
|
535 |
+
}
|
536 |
+
|
537 |
+
$postFinderMethod = '_postFinder'.ucfirst($finder);
|
538 |
+
if(in_array($postFinderMethod, self::extract(( new ReflectionClass(get_called_class()) )->getMethods(), 'name'))){
|
539 |
+
return $model->$postFinderMethod($return, $arguments);
|
540 |
+
}
|
541 |
+
|
542 |
+
return $return;
|
543 |
+
}
|
544 |
+
|
545 |
+
/**
|
546 |
+
* @return void
|
547 |
+
*/
|
548 |
+
public static function in(Array $ids = array()){
|
549 |
+
$results = array();
|
550 |
+
if(!is_array($ids)){
|
551 |
+
$ids = func_get_args();
|
552 |
+
}
|
553 |
+
|
554 |
+
foreach($ids as $key => $id){
|
555 |
+
if(self::exists($id)){
|
556 |
+
$results[] = self::find($id);
|
557 |
+
}
|
558 |
+
}
|
559 |
+
|
560 |
+
return $results;
|
561 |
+
}
|
562 |
+
|
563 |
+
// -----------------------------------------------------
|
564 |
+
// SAVE
|
565 |
+
// -----------------------------------------------------
|
566 |
+
/**
|
567 |
+
* Save the model and all of it's associated data
|
568 |
+
*
|
569 |
+
* @param Array $overrides List of parameters to override for wp_insert_post(), such as post_status
|
570 |
+
*
|
571 |
+
* @return Object $this
|
572 |
+
*/
|
573 |
+
public function save($overrides = array()){
|
574 |
+
$this->triggerEvent('saving');
|
575 |
+
|
576 |
+
$overwrite = array_merge($overrides, array(
|
577 |
+
'post_type' => self::getPostType()
|
578 |
+
));
|
579 |
+
|
580 |
+
if(!is_null($this->ID)){
|
581 |
+
|
582 |
+
$defaults = array(
|
583 |
+
'ID' => $this->ID,
|
584 |
+
'post_title' => $this->title,
|
585 |
+
'post_content' => ($this->content !== NULL)? $this->content : ' ',
|
586 |
+
);
|
587 |
+
wp_update_post(array_merge($defaults, $overwrite));
|
588 |
+
|
589 |
+
}else{
|
590 |
+
|
591 |
+
$this->triggerEvent('inserting');
|
592 |
+
$defaults = array(
|
593 |
+
'post_status' => 'publish',
|
594 |
+
'post_title' => $this->title,
|
595 |
+
'post_content' => ($this->content !== NULL)? $this->content : ' ',
|
596 |
+
);
|
597 |
+
$this->ID = wp_insert_post(array_merge($defaults, $overwrite));
|
598 |
+
$this->_post = get_post($this->ID);
|
599 |
+
$this->triggerEvent('inserted');
|
600 |
+
|
601 |
+
}
|
602 |
+
|
603 |
+
foreach($this->attributes as $attribute){
|
604 |
+
$this->setMeta($attribute, $this->get($attribute, ''));
|
605 |
+
}
|
606 |
+
|
607 |
+
$this->setMeta('_id', $this->ID);
|
608 |
+
$this->triggerEvent('saved');
|
609 |
+
return $this;
|
610 |
+
}
|
611 |
+
|
612 |
+
// -----------------------------------------------------
|
613 |
+
// DELETE
|
614 |
+
// -----------------------------------------------------
|
615 |
+
/**
|
616 |
+
* @return void
|
617 |
+
*/
|
618 |
+
public function delete(){
|
619 |
+
$this->triggerEvent('deleting');
|
620 |
+
wp_trash_post($this->ID);
|
621 |
+
$this->triggerEvent('deleted');
|
622 |
+
}
|
623 |
+
|
624 |
+
/**
|
625 |
+
* @return void
|
626 |
+
*/
|
627 |
+
public function hardDelete(){
|
628 |
+
$this->triggerEvent('hardDeleting');
|
629 |
+
|
630 |
+
wp_update_post(array(
|
631 |
+
'ID' => $this->ID,
|
632 |
+
'post_title' => '',
|
633 |
+
'post_content' => '',
|
634 |
+
));
|
635 |
+
|
636 |
+
foreach($this->attributes as $attribute){
|
637 |
+
$this->deleteMeta($attribute);
|
638 |
+
$this->set($attribute, NULL);
|
639 |
+
}
|
640 |
+
|
641 |
+
$this->setMeta('_id', $this->ID);
|
642 |
+
$this->setMeta('_hardDeleted', '1');
|
643 |
+
wp_delete_post($this->ID, TRUE);
|
644 |
+
$this->triggerEvent('hardDeleted');
|
645 |
+
}
|
646 |
+
|
647 |
+
/**
|
648 |
+
* @return void
|
649 |
+
*/
|
650 |
+
public static function restore($ID){
|
651 |
+
wp_untrash_post($ID);
|
652 |
+
return self::find($ID);
|
653 |
+
}
|
654 |
+
}
|
|
includes/class-sp-dsgvo-upgrade-notice-tools.php
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SPDSGVOUpgradeNoticeTools {
|
4 |
+
|
5 |
+
/**
|
6 |
+
* The upgrade notice shown inline.
|
7 |
+
*
|
8 |
+
* @var string
|
9 |
+
*/
|
10 |
+
protected $upgrade_notice = '';
|
11 |
+
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Show plugin changes on the plugins screen. Code adapted from W3 Total Cache.
|
15 |
+
*
|
16 |
+
* @param array $args Unused parameter.
|
17 |
+
* @param stdClass $response Plugin update response.
|
18 |
+
*/
|
19 |
+
public function in_plugin_update_message( $args, $response ) {
|
20 |
+
$this->new_version = $response->new_version;
|
21 |
+
$this->upgrade_notice = $this->get_upgrade_notice( $response->url, $response->new_version );
|
22 |
+
|
23 |
+
$current_version_parts = explode( '.', sp_dsgvo_VERSION );
|
24 |
+
$new_version_parts = explode( '.', $this->new_version );
|
25 |
+
|
26 |
+
// If user has already moved to the minor version, we don't need to flag up anything.
|
27 |
+
if ( version_compare( $current_version_parts[0] . '.' . $current_version_parts[1], $new_version_parts[0] . '.' . $new_version_parts[1], '=' ) ) {
|
28 |
+
return;
|
29 |
+
}
|
30 |
+
|
31 |
+
if (empty($this->upgrade_notice ) == false)
|
32 |
+
{
|
33 |
+
echo $this->upgrade_notice ;
|
34 |
+
}
|
35 |
+
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Get the upgrade notice from WordPress.org.
|
40 |
+
*
|
41 |
+
* @param string $version WooCommerce new version.
|
42 |
+
* @return string
|
43 |
+
*/
|
44 |
+
protected function get_upgrade_notice($repoUrl, $version ) {
|
45 |
+
$transient_name = 'shapepress-dsgvo_upgrade_notice_' . $version;
|
46 |
+
$upgrade_notice = get_transient( $transient_name );
|
47 |
+
$upgrade_notice = ''; // dont use for now
|
48 |
+
|
49 |
+
if (empty($upgrade_notice) ) {
|
50 |
+
$response = wp_safe_remote_get( 'https://plugins.svn.wordpress.org/shapepress-dsgvo/trunk/README.txt' );
|
51 |
+
|
52 |
+
if ( ! is_wp_error( $response ) && ! empty( $response['body'] ) ) {
|
53 |
+
$upgrade_notice = $this->parse_update_notice( $response['body'], $version );
|
54 |
+
set_transient( $transient_name, $upgrade_notice, DAY_IN_SECONDS );
|
55 |
+
}
|
56 |
+
}
|
57 |
+
return $upgrade_notice;
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Parse update notice from readme file.
|
62 |
+
*
|
63 |
+
* @param string $content WooCommerce readme file content.
|
64 |
+
* @param string $new_version WooCommerce new version.
|
65 |
+
* @return string
|
66 |
+
*/
|
67 |
+
private function parse_update_notice( $content, $new_version ) {
|
68 |
+
$version_parts = explode( '.', $new_version );
|
69 |
+
$check_for_notices = array(
|
70 |
+
$version_parts[0] . '.0', // Major.
|
71 |
+
$version_parts[0] . '.0.0', // Major.
|
72 |
+
$version_parts[0] . '.' . $version_parts[1], // Minor.
|
73 |
+
$version_parts[0] . '.' . $version_parts[1] . '.' . $version_parts[2], // Patch.
|
74 |
+
);
|
75 |
+
$notice_regexp = '~==\s*Upgrade Notice\s*==\s*=\s*(.*)\s*=(.*)(=\s*' . preg_quote( $new_version ) . '\s*=|$)~Uis';
|
76 |
+
$upgrade_notice = '';
|
77 |
+
|
78 |
+
foreach ( $check_for_notices as $check_version ) {
|
79 |
+
if ( version_compare( sp_dsgvo_VERSION, $check_version, '>' ) ) {
|
80 |
+
continue;
|
81 |
+
}
|
82 |
+
|
83 |
+
$matches = null;
|
84 |
+
if ( preg_match( $notice_regexp, $content, $matches ) ) {
|
85 |
+
$notices = (array) preg_split( '~[\r\n]+~', trim( $matches[2] ) );
|
86 |
+
|
87 |
+
if ( version_compare( trim( $matches[1] ), $check_version, '=' ) ) {
|
88 |
+
$upgrade_notice .= '<p class="sp-dsgvo_plugin_upgrade_notice">';
|
89 |
+
|
90 |
+
foreach ( $notices as $index => $line ) {
|
91 |
+
$upgrade_notice .= preg_replace( '~\[([^\]]*)\]\(([^\)]*)\)~', '<a href="${2}">${1}</a>', $line );
|
92 |
+
}
|
93 |
+
|
94 |
+
$upgrade_notice .= '</p>';
|
95 |
+
}
|
96 |
+
//break;
|
97 |
+
}
|
98 |
+
}
|
99 |
+
return $upgrade_notice;
|
100 |
+
}
|
101 |
+
}
|
includes/class-sp-dsgvo.php
CHANGED
@@ -1,399 +1,444 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* The file that defines the core plugin class
|
5 |
-
*
|
6 |
-
* A class definition that includes attributes and functions used across both the
|
7 |
-
* public-facing side of the site and the admin area.
|
8 |
-
*
|
9 |
-
* @link https://wp-dsgvo.eu
|
10 |
-
* @since 1.0.0
|
11 |
-
*
|
12 |
-
* @package WP DSGVO Tools
|
13 |
-
* @subpackage WP DSGVO Tools/includes
|
14 |
-
*/
|
15 |
-
|
16 |
-
/**
|
17 |
-
* The core plugin class.
|
18 |
-
*
|
19 |
-
* This is used to define internationalization, admin-specific hooks, and
|
20 |
-
* public-facing site hooks.
|
21 |
-
*
|
22 |
-
* Also maintains the unique identifier of this plugin as well as the current
|
23 |
-
* version of the plugin.
|
24 |
-
*
|
25 |
-
* @since 1.0.0
|
26 |
-
* @package WP DSGVO Tools
|
27 |
-
* @subpackage WP DSGVO Tools/includes
|
28 |
-
* @author Shapepress eU
|
29 |
-
*/
|
30 |
-
class SPDSGVO{
|
31 |
-
/**
|
32 |
-
* The loader that's responsible for maintaining and registering all hooks that power
|
33 |
-
* the plugin.
|
34 |
-
*
|
35 |
-
* @since 1.0.0
|
36 |
-
* @access protected
|
37 |
-
* @var sp_dsgvo_Loader $loader Maintains and registers all hooks for the plugin.
|
38 |
-
*/
|
39 |
-
protected $loader;
|
40 |
-
|
41 |
-
/**
|
42 |
-
* The current version of the plugin.
|
43 |
-
*
|
44 |
-
* @since 1.0.0
|
45 |
-
* @access protected
|
46 |
-
* @var string $version The current version of the plugin.
|
47 |
-
*/
|
48 |
-
protected $version;
|
49 |
-
|
50 |
-
/**
|
51 |
-
* Singleton
|
52 |
-
*
|
53 |
-
* @since 1.0.0
|
54 |
-
* @access protected
|
55 |
-
* @var object $instance The singleton instance
|
56 |
-
*/
|
57 |
-
protected static $instance = null;
|
58 |
-
|
59 |
-
protected function __construct(){
|
60 |
-
$this->version = sp_dsgvo_VERSION;
|
61 |
-
$this->loadDependencies();
|
62 |
-
$this->defineAdminHooks();
|
63 |
-
$this->definePublicHooks();
|
64 |
-
}
|
65 |
-
|
66 |
-
protected function __clone(){}
|
67 |
-
|
68 |
-
public static function instance(){
|
69 |
-
if(!isset(static::$instance)){
|
70 |
-
static::$instance = new static;
|
71 |
-
}
|
72 |
-
|
73 |
-
return static::$instance;
|
74 |
-
}
|
75 |
-
|
76 |
-
private function loadDependencies(){
|
77 |
-
require_once plugin_dir_path(dirname(__FILE__)) .'includes/class-sp-dsgvo-loader.php';
|
78 |
-
$this->loader = new SPDSGVOLoader();
|
79 |
-
|
80 |
-
if(file_exists(dirname(dirname(__FILE__)) .'/vendor/autoload.php')){
|
81 |
-
require_once dirname(dirname(__FILE__)) .'/vendor/autoload.php';
|
82 |
-
}
|
83 |
-
|
84 |
-
if(!class_exists('TCPDF')){
|
85 |
-
require_once SPDSGVO::pluginDir('includes/lib/tcpdf/dsgdf.php');
|
86 |
-
require_once SPDSGVO::pluginDir('includes/class-sp-dsgvo-pdf.php');
|
87 |
-
}
|
88 |
-
|
89 |
-
$load = array(
|
90 |
-
//======================================================================
|
91 |
-
// Libraries
|
92 |
-
//======================================================================
|
93 |
-
|
94 |
-
SPDSGVO::pluginDir('
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
SPDSGVO::pluginDir('
|
99 |
-
SPDSGVO::pluginDir('includes/class-sp-dsgvo-
|
100 |
-
|
101 |
-
SPDSGVO::pluginDir('includes/class-sp-dsgvo-
|
102 |
-
SPDSGVO::pluginDir('includes/class-sp-dsgvo-
|
103 |
-
SPDSGVO::pluginDir('includes/class-sp-dsgvo-
|
104 |
-
SPDSGVO::pluginDir('includes/class-sp-dsgvo-
|
105 |
-
SPDSGVO::pluginDir('includes/class-sp-dsgvo-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
//======================================================================
|
125 |
-
//
|
126 |
-
//======================================================================
|
127 |
-
SPDSGVO::pluginDir('
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
SPDSGVO::pluginDir('public/shortcodes/
|
151 |
-
SPDSGVO::pluginDir('public/shortcodes/
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
SPDSGVO::pluginDir('public/shortcodes/
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
//======================================================================
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
SPDSGVO::pluginDir('includes/integrations/
|
167 |
-
SPDSGVO::pluginDir('includes/integrations/
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
//
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
SPDSGVO::pluginDir('admin/tabs/
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
*
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
$
|
288 |
-
$this->loader->add_action('
|
289 |
-
$this->loader->add_action('
|
290 |
-
$this->loader->add_action('
|
291 |
-
|
292 |
-
$this->loader->add_action('
|
293 |
-
|
294 |
-
$this->loader->
|
295 |
-
$this->loader->add_filter('
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
$this->loader->add_action('
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
*
|
315 |
-
*
|
316 |
-
*
|
317 |
-
* @
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* The file that defines the core plugin class
|
5 |
+
*
|
6 |
+
* A class definition that includes attributes and functions used across both the
|
7 |
+
* public-facing side of the site and the admin area.
|
8 |
+
*
|
9 |
+
* @link https://wp-dsgvo.eu
|
10 |
+
* @since 1.0.0
|
11 |
+
*
|
12 |
+
* @package WP DSGVO Tools
|
13 |
+
* @subpackage WP DSGVO Tools/includes
|
14 |
+
*/
|
15 |
+
|
16 |
+
/**
|
17 |
+
* The core plugin class.
|
18 |
+
*
|
19 |
+
* This is used to define internationalization, admin-specific hooks, and
|
20 |
+
* public-facing site hooks.
|
21 |
+
*
|
22 |
+
* Also maintains the unique identifier of this plugin as well as the current
|
23 |
+
* version of the plugin.
|
24 |
+
*
|
25 |
+
* @since 1.0.0
|
26 |
+
* @package WP DSGVO Tools
|
27 |
+
* @subpackage WP DSGVO Tools/includes
|
28 |
+
* @author Shapepress eU
|
29 |
+
*/
|
30 |
+
class SPDSGVO{
|
31 |
+
/**
|
32 |
+
* The loader that's responsible for maintaining and registering all hooks that power
|
33 |
+
* the plugin.
|
34 |
+
*
|
35 |
+
* @since 1.0.0
|
36 |
+
* @access protected
|
37 |
+
* @var sp_dsgvo_Loader $loader Maintains and registers all hooks for the plugin.
|
38 |
+
*/
|
39 |
+
protected $loader;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* The current version of the plugin.
|
43 |
+
*
|
44 |
+
* @since 1.0.0
|
45 |
+
* @access protected
|
46 |
+
* @var string $version The current version of the plugin.
|
47 |
+
*/
|
48 |
+
protected $version;
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Singleton
|
52 |
+
*
|
53 |
+
* @since 1.0.0
|
54 |
+
* @access protected
|
55 |
+
* @var object $instance The singleton instance
|
56 |
+
*/
|
57 |
+
protected static $instance = null;
|
58 |
+
|
59 |
+
protected function __construct(){
|
60 |
+
$this->version = sp_dsgvo_VERSION;
|
61 |
+
$this->loadDependencies();
|
62 |
+
$this->defineAdminHooks();
|
63 |
+
$this->definePublicHooks();
|
64 |
+
}
|
65 |
+
|
66 |
+
protected function __clone(){}
|
67 |
+
|
68 |
+
public static function instance(){
|
69 |
+
if(!isset(static::$instance)){
|
70 |
+
static::$instance = new static;
|
71 |
+
}
|
72 |
+
|
73 |
+
return static::$instance;
|
74 |
+
}
|
75 |
+
|
76 |
+
private function loadDependencies(){
|
77 |
+
require_once plugin_dir_path(dirname(__FILE__)) .'includes/class-sp-dsgvo-loader.php';
|
78 |
+
$this->loader = new SPDSGVOLoader();
|
79 |
+
|
80 |
+
if(file_exists(dirname(dirname(__FILE__)) .'/vendor/autoload.php')){
|
81 |
+
require_once dirname(dirname(__FILE__)) .'/vendor/autoload.php';
|
82 |
+
}
|
83 |
+
|
84 |
+
if(!class_exists('TCPDF')){
|
85 |
+
require_once SPDSGVO::pluginDir('includes/lib/tcpdf/dsgdf.php');
|
86 |
+
require_once SPDSGVO::pluginDir('includes/class-sp-dsgvo-pdf.php');
|
87 |
+
}
|
88 |
+
|
89 |
+
$load = array(
|
90 |
+
//======================================================================
|
91 |
+
// Libraries
|
92 |
+
//======================================================================
|
93 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-constants.php'),
|
94 |
+
SPDSGVO::pluginDir('includes/helpers.php'),
|
95 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-cache-manager.php'),
|
96 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-migrator.php'),
|
97 |
+
SPDSGVO::pluginDir('admin/class-sp-dsgvo-admin.php'),
|
98 |
+
SPDSGVO::pluginDir('admin/class-sp-dsgvo-admin-tab.php'),
|
99 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-ajax-action.php'),
|
100 |
+
SPDSGVO::pluginDir('admin/class-sp-dsgvo-admin-action.php'),
|
101 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-settings.php'),
|
102 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-settings-polylang.php'),
|
103 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-mail.php'),
|
104 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-data-collecter.php'),
|
105 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-log.php'),
|
106 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-integration-api-base.php'),
|
107 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-integration.php'),
|
108 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-javascript.php'),
|
109 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-slim-model.php'),
|
110 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-cron.php'),
|
111 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-language-tools.php'),
|
112 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-cookie-category-api.php'),
|
113 |
+
SPDSGVO::pluginDir('includes/class-sp-dsgvo-upgrade-notice-tools.php'),
|
114 |
+
SPDSGVO::pluginDir('public/class-sp-dsgvo-public.php'),
|
115 |
+
|
116 |
+
|
117 |
+
//======================================================================
|
118 |
+
// Models
|
119 |
+
//======================================================================
|
120 |
+
SPDSGVO::pluginDir('includes/models/unsubscriber.php'),
|
121 |
+
SPDSGVO::pluginDir('includes/models/subject-access-request.php'),
|
122 |
+
|
123 |
+
|
124 |
+
//======================================================================
|
125 |
+
// Cron
|
126 |
+
//======================================================================
|
127 |
+
SPDSGVO::pluginDir('includes/cron/do-subject-access-request.php'),
|
128 |
+
SPDSGVO::pluginDir('includes/cron/do-delete-data-request.php'),
|
129 |
+
SPDSGVO::pluginDir('includes/cron/do-validate-license.php'),
|
130 |
+
SPDSGVO::pluginDir('includes/cron/do-check-privacy-policy-texts.php'),
|
131 |
+
|
132 |
+
//======================================================================
|
133 |
+
// Actions
|
134 |
+
//======================================================================
|
135 |
+
SPDSGVO::pluginDir('public/actions/unsubscribe.php'),
|
136 |
+
SPDSGVO::pluginDir('public/actions/user-permissions.php'),
|
137 |
+
/* i592995 */
|
138 |
+
SPDSGVO::pluginDir('public/actions/popup-accept.php'),
|
139 |
+
/* i592995 */
|
140 |
+
SPDSGVO::pluginDir('public/actions/notice-action.php'),
|
141 |
+
SPDSGVO::pluginDir('public/actions/legal-web-text-action.php'),
|
142 |
+
SPDSGVO::pluginDir('public/actions/update-privacy-policy-texts-action.php'),
|
143 |
+
|
144 |
+
|
145 |
+
//======================================================================
|
146 |
+
// Shortcodes
|
147 |
+
//======================================================================
|
148 |
+
// SAR
|
149 |
+
SPDSGVO::pluginDir('public/shortcodes/subject-access-request/download-subject-access-request.php'),
|
150 |
+
SPDSGVO::pluginDir('public/shortcodes/subject-access-request/subject-access-request-action.php'),
|
151 |
+
SPDSGVO::pluginDir('public/shortcodes/subject-access-request/subject-access-request.php'),
|
152 |
+
|
153 |
+
// Super Unsubscribe
|
154 |
+
SPDSGVO::pluginDir('public/shortcodes/super-unsubscribe/unsubscribe-form.php'),
|
155 |
+
SPDSGVO::pluginDir('public/shortcodes/super-unsubscribe/unsubscribe-form-action.php'),
|
156 |
+
SPDSGVO::pluginDir('public/shortcodes/super-unsubscribe/unsubscribe-confirm-action.php'),
|
157 |
+
|
158 |
+
|
159 |
+
SPDSGVO::pluginDir('public/shortcodes/privacy-policy.php'),
|
160 |
+
SPDSGVO::pluginDir('public/shortcodes/imprint.php'),
|
161 |
+
|
162 |
+
//======================================================================
|
163 |
+
// Default Integrations
|
164 |
+
//======================================================================
|
165 |
+
SPDSGVO::pluginDir('includes/integrations/mailchimp/MailchimpIntegration.php'),
|
166 |
+
SPDSGVO::pluginDir('includes/integrations/woocommerce/WoocommerceIntegration.php'),
|
167 |
+
SPDSGVO::pluginDir('includes/integrations/cf7/Cf7Integration.php'),
|
168 |
+
SPDSGVO::pluginDir('includes/integrations/bbpress/BbpressIntegration.php'),
|
169 |
+
SPDSGVO::pluginDir('includes/integrations/buddypress/BuddyPressIntegration.php'),
|
170 |
+
|
171 |
+
// statistics
|
172 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/googleanalytics/class-sp-dsgvo-google-analytics-api.php'),
|
173 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/googleanalytics/class-sp-dsgvo-google-analytics-integration.php'),
|
174 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/matomo/class-sp-dsgvo-matomo-api.php'),
|
175 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/matomo/class-sp-dsgvo-matomo-integration.php'),
|
176 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/wpstatistics/class-sp-dsgvo-wpstatistics-api.php'),
|
177 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/wpstatistics/class-sp-dsgvo-wpstatistics-integration.php'),
|
178 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/googletagmanager/class-sp-dsgvo-google-tagmanager-api.php'),
|
179 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/googletagmanager/class-sp-dsgvo-google-tagmanager-integration.php'),
|
180 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/clicky/class-sp-dsgvo-clicky-api.php'),
|
181 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/clicky/class-sp-dsgvo-clicky-integration.php'),
|
182 |
+
|
183 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/piwik/class-sp-dsgvo-piwik-api.php'),
|
184 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/piwik/class-sp-dsgvo-piwik-integration.php'),
|
185 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/etracker/class-sp-dsgvo-etracker-api.php'),
|
186 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/etracker/class-sp-dsgvo-etracker-integration.php'),
|
187 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/hotjar/class-sp-dsgvo-hotjar-api.php'),
|
188 |
+
SPDSGVO::pluginDir('includes/integrations/statistics/hotjar/class-sp-dsgvo-hotjar-integration.php'),
|
189 |
+
|
190 |
+
// targeting
|
191 |
+
SPDSGVO::pluginDir('includes/integrations/targeting/fbpixel/class-sp-dsgvo-fb-pixel-api.php'),
|
192 |
+
SPDSGVO::pluginDir('includes/integrations/targeting/fbpixel/class-sp-dsgvo-fb-pixel-integration.php'),
|
193 |
+
SPDSGVO::pluginDir('includes/integrations/targeting/criteo/class-sp-dsgvo-criteo-api.php'),
|
194 |
+
SPDSGVO::pluginDir('includes/integrations/targeting/criteo/class-sp-dsgvo-criteo-integration.php'),
|
195 |
+
SPDSGVO::pluginDir('includes/integrations/targeting/linkedinpixel/class-sp-dsgvo-linkedin-pixel-api.php'),
|
196 |
+
SPDSGVO::pluginDir('includes/integrations/targeting/linkedinpixel/class-sp-dsgvo-linkedin-pixel-integration.php'),
|
197 |
+
SPDSGVO::pluginDir('includes/integrations/targeting/bingadsuet/class-sp-dsgvo-bing-ads-uet-api.php'),
|
198 |
+
SPDSGVO::pluginDir('includes/integrations/targeting/bingadsuet/class-sp-dsgvo-bing-ads-uet-integration.php'),
|
199 |
+
//======================================================================
|
200 |
+
// Admin Pages
|
201 |
+
//======================================================================
|
202 |
+
|
203 |
+
SPDSGVO::pluginDir('admin/tabs/v3/info/class-sp-dsgvo-info-tab.php'),
|
204 |
+
|
205 |
+
SPDSGVO::pluginDir('admin/tabs/setup/class-sp-dsgvo-create-page-action.php'),
|
206 |
+
|
207 |
+
// Subject Access Request
|
208 |
+
SPDSGVO::pluginDir('admin/tabs/v3/subject-access-request/class-sp-dsgvo-subject-access-request-tab.php'),
|
209 |
+
SPDSGVO::pluginDir('admin/tabs/v3/subject-access-request/class-sp-dsgvo-subject-access-request-action.php'),
|
210 |
+
|
211 |
+
// Super Unsubscribe
|
212 |
+
SPDSGVO::pluginDir('admin/tabs/v3/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-tab.php'),
|
213 |
+
SPDSGVO::pluginDir('admin/tabs/v3/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-action.php'),
|
214 |
+
/* i592995 */
|
215 |
+
SPDSGVO::pluginDir('admin/tabs/v3/super-unsubscribe/class-sp-dsgvo-dismiss-unsubscribe-action.php'),
|
216 |
+
/* i592995 */
|
217 |
+
|
218 |
+
|
219 |
+
|
220 |
+
// Common Settings
|
221 |
+
SPDSGVO::pluginDir('admin/tabs/v3/common-settings/class-sp-dsgvo-common-settings-tab.php'),
|
222 |
+
SPDSGVO::pluginDir('admin/tabs/v3/common-settings/class-sp-dsgvo-common-settings-action.php'),
|
223 |
+
SPDSGVO::pluginDir('admin/tabs/v3/common-settings/class-sp-dsgvo-common-settings-activate-action.php'),
|
224 |
+
SPDSGVO::pluginDir('admin/tabs/v3/common-settings/class-sp-dsgvo-common-settings-validate-license-action.php'),
|
225 |
+
|
226 |
+
SPDSGVO::pluginDir('admin/tabs/v3/common-settings/class-sp-dsgvo-privacy-policy-action.php'),
|
227 |
+
|
228 |
+
|
229 |
+
// Cookie Notice
|
230 |
+
SPDSGVO::pluginDir('admin/tabs/v3/popup-notice/class-sp-dsgvo-cookie-notice-tab.php'),
|
231 |
+
SPDSGVO::pluginDir('admin/tabs/v3/popup-notice/class-sp-dsgvo-cookie-notice-action.php'),
|
232 |
+
|
233 |
+
// Operator
|
234 |
+
SPDSGVO::pluginDir('admin/tabs/v3/operator/class-sp-dsgvo-operator-tab.php'),
|
235 |
+
SPDSGVO::pluginDir('admin/tabs/v3/operator/class-sp-dsgvo-operator-action.php'),
|
236 |
+
SPDSGVO::pluginDir('admin/tabs/v3/operator/class-sp-dsgvo-imprint-action.php'),
|
237 |
+
|
238 |
+
// Page Basics
|
239 |
+
SPDSGVO::pluginDir('admin/tabs/v3/page-basics/class-sp-dsgvo-page-basics-tab.php'),
|
240 |
+
SPDSGVO::pluginDir('admin/tabs/v3/page-basics/class-sp-dsgvo-page-basics-action.php'),
|
241 |
+
|
242 |
+
// Statistic Integrations
|
243 |
+
SPDSGVO::pluginDir('admin/tabs/v3/stats/class-sp-dsgvo-stats-tab.php'),
|
244 |
+
SPDSGVO::pluginDir('admin/tabs/v3/stats/class-sp-dsgvo-stats-action.php'),
|
245 |
+
|
246 |
+
// Targeting Integrations
|
247 |
+
SPDSGVO::pluginDir('admin/tabs/v3/targeting/class-sp-dsgvo-targeting-tab.php'),
|
248 |
+
SPDSGVO::pluginDir('admin/tabs/v3/targeting/class-sp-dsgvo-targeting-action.php'),
|
249 |
+
|
250 |
+
// Integrations
|
251 |
+
SPDSGVO::pluginDir('admin/tabs/integrations/class-sp-dsgvo-integrations-tab.php'),
|
252 |
+
SPDSGVO::pluginDir('admin/tabs/integrations/class-sp-dsgvo-integrations-action.php'),
|
253 |
+
|
254 |
+
);
|
255 |
+
|
256 |
+
// Gravity Forms
|
257 |
+
if(class_exists( 'GFAPI' )){
|
258 |
+
$load[] = SPDSGVO::pluginDir('admin/tabs/gravity-forms/class-sp-dsgvo-gravity-forms-tab.php');
|
259 |
+
$load[] = SPDSGVO::pluginDir('admin/tabs/gravity-forms/class-sp-dsgvo-gravity-forms-action.php');
|
260 |
+
}
|
261 |
+
|
262 |
+
foreach($load as $path){
|
263 |
+
require_once $path;
|
264 |
+
}
|
265 |
+
|
266 |
+
do_action('sp_dsgvo_booted');
|
267 |
+
}
|
268 |
+
|
269 |
+
public static function version(){
|
270 |
+
return (new self)->version;
|
271 |
+
}
|
272 |
+
|
273 |
+
public static function isTesting(){
|
274 |
+
return (defined('sp_dsgvo_TESTING') && sp_dsgvo_TESTING === '1');
|
275 |
+
}
|
276 |
+
|
277 |
+
|
278 |
+
|
279 |
+
/**
|
280 |
+
* Register all of the hooks related to the admin area functionality
|
281 |
+
* of the plugin.
|
282 |
+
*
|
283 |
+
* @since 1.0.0
|
284 |
+
* @access private
|
285 |
+
*/
|
286 |
+
private function defineAdminHooks(){
|
287 |
+
$admin = new SPDSGVOAdmin();
|
288 |
+
$this->loader->add_action('init', $admin, 'adminInit');
|
289 |
+
$this->loader->add_action('admin_enqueue_scripts', $admin, 'enqueue_styles');
|
290 |
+
$this->loader->add_action('admin_enqueue_scripts', $admin, 'enqueue_scripts');
|
291 |
+
|
292 |
+
$this->loader->add_action('admin_menu', $admin, 'menuItem');
|
293 |
+
|
294 |
+
// $this->loader->add_filter('manage_users_columns', $admin, 'addExplicitPermissionColumn');
|
295 |
+
// $this->loader->add_filter('manage_users_custom_column', $admin, 'explicitPermissionColumnCallback', 1, 3);
|
296 |
+
|
297 |
+
//$this->loader->add_action('show_user_profile', $admin, 'showCustomProfileFields');
|
298 |
+
//$this->loader->add_action('edit_user_profile', $admin, 'showCustomProfileFields');
|
299 |
+
|
300 |
+
$this->loader->add_action('admin_enqueue_scripts', $admin, 'enqueueColorPicker');
|
301 |
+
$this->loader->add_action('display_post_states', $admin, 'addCustomPostStates', 1, 3);
|
302 |
+
|
303 |
+
// gravity forms action
|
304 |
+
$this->loader->add_action('gform_after_submission', $admin, 'gf_after_submisison_cleanse', 10, 2);
|
305 |
+
$this->loader->add_action('admin_notices', $admin, 'dsvgvo_admin_notices' );
|
306 |
+
|
307 |
+
// upgrade notice
|
308 |
+
$this->loader->add_action( 'in_plugin_update_message-shapepress-dsgvo/sp-dsgvo.php', $admin,'showUpgradeMessage', 10, 2 );
|
309 |
+
// do migration logic
|
310 |
+
$this->loader->add_action('upgrader_process_complete', SPDSGVOMigrator::getInstance(), 'checkForMigrations', 10, 2);
|
311 |
+
}
|
312 |
+
|
313 |
+
/**
|
314 |
+
* Register all of the hooks related to the public-facing functionality
|
315 |
+
* of the plugin.
|
316 |
+
*
|
317 |
+
* @since 1.0.0
|
318 |
+
* @access private
|
319 |
+
*/
|
320 |
+
private function definePublicHooks(){
|
321 |
+
$public = new SPDSGVOPublic();
|
322 |
+
$this->loader->add_action('wp_enqueue_scripts', $public, 'enqueue_styles');
|
323 |
+
$this->loader->add_action('wp_enqueue_scripts', $public, 'enqueue_scripts');
|
324 |
+
$this->loader->add_action('wp_enqueue_scripts', SPDSGVOJavascript::getInstance(), 'register');
|
325 |
+
$this->loader->add_action('upload_mimes', $public, 'allowJSON');
|
326 |
+
//$this->loader->add_action('user_register', $public, 'newUserRegistered', 10, 1);
|
327 |
+
//$this->loader->add_action('wp', $public, 'forcePermisson');
|
328 |
+
$this->loader->add_action('init', $public, 'publicInit');
|
329 |
+
$this->loader->add_action('sp_dsgvo_collect_user_data', $public, 'collectUserData');
|
330 |
+
$this->loader->add_action('wp_print_footer_scripts', $public, 'wp_print_footer_scripts');
|
331 |
+
$this->loader->add_action('wp_footer', $public, 'writeFooterScripts', 1000);
|
332 |
+
$this->loader->add_action('wp_head', $public, 'writeHeaderScripts');
|
333 |
+
$this->loader->add_action('wp_body_open', $public, 'writeBodyStartScripts');
|
334 |
+
|
335 |
+
/**
|
336 |
+
* If activated by user, block google-fonts if cookies are not accepted
|
337 |
+
*/
|
338 |
+
/*
|
339 |
+
if(hasUserGivenPermissionFor('google-fonts')) {
|
340 |
+
SPDSGVOPublic::blockGoogleFonts();
|
341 |
+
}
|
342 |
+
*/
|
343 |
+
|
344 |
+
$this->loader->add_action('woocommerce_review_order_before_submit', $public, 'wooAddCustomFields', 20 );
|
345 |
+
|
346 |
+
}
|
347 |
+
|
348 |
+
/**
|
349 |
+
* Run the loader to execute all of the hooks with WordPress.
|
350 |
+
*
|
351 |
+
* @since 1.0.0
|
352 |
+
*/
|
353 |
+
public function run(){
|
354 |
+
$this->loader->run();
|
355 |
+
}
|
356 |
+
|
357 |
+
/**
|
358 |
+
* The name of the plugin used to uniquely identify it within the context of
|
359 |
+
* WordPress and to define internationalization functionality.
|
360 |
+
*
|
361 |
+
* @since 1.0.0
|
362 |
+
* @return string The name of the plugin.
|
363 |
+
*/
|
364 |
+
public function get_sp_dsgvo() {
|
365 |
+
return sp_dsgvo_NAME;
|
366 |
+
}
|
367 |
+
|
368 |
+
/**
|
369 |
+
* The reference to the class that orchestrates the hooks with the plugin.
|
370 |
+
*
|
371 |
+
* @since 1.0.0
|
372 |
+
* @return sp_dsgvo_Loader Orchestrates the hooks of the plugin.
|
373 |
+
*/
|
374 |
+
public function get_loader() {
|
375 |
+
return $this->loader;
|
376 |
+
}
|
377 |
+
|
378 |
+
/**
|
379 |
+
* Retrieve the version number of the plugin.
|
380 |
+
*
|
381 |
+
* @since 1.0.0
|
382 |
+
* @return string The version number of the plugin.
|
383 |
+
*/
|
384 |
+
public function get_version() {
|
385 |
+
return $this->version;
|
386 |
+
}
|
387 |
+
|
388 |
+
public function testPermissions(){
|
389 |
+
return wp_upload_bits('sp-dsgvo-test-file.txt', NULL, time())['error'] === FALSE;
|
390 |
+
}
|
391 |
+
|
392 |
+
|
393 |
+
//======================================================================
|
394 |
+
// Helpers
|
395 |
+
//======================================================================
|
396 |
+
public static function adminURL($params = NULL){
|
397 |
+
if(is_null($params)){
|
398 |
+
$params = array();
|
399 |
+
}
|
400 |
+
|
401 |
+
$params = http_build_query(array_merge(array(
|
402 |
+
'page' => 'sp-dsgvo',
|
403 |
+
), $params));
|
404 |
+
|
405 |
+
return admin_url() .'?'. $params;
|
406 |
+
}
|
407 |
+
|
408 |
+
public static function pluginDir($append = ''){
|
409 |
+
return plugin_dir_path(dirname(__FILE__)) . $append;
|
410 |
+
}
|
411 |
+
|
412 |
+
public static function pluginURI($append = ''){
|
413 |
+
return plugin_dir_url(dirname(__FILE__)) . $append;
|
414 |
+
}
|
415 |
+
|
416 |
+
public static function isAjax(){
|
417 |
+
return (strpos($_SERVER['REQUEST_URI'], 'admin-ajax.php') !== FALSE);
|
418 |
+
}
|
419 |
+
|
420 |
+
public function slugify($text){
|
421 |
+
$text = preg_replace('~[^\pL\d]+~u', '-', $text);
|
422 |
+
|
423 |
+
// transliterate
|
424 |
+
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
|
425 |
+
|
426 |
+
// remove unwanted characters
|
427 |
+
$text = preg_replace('~[^-\w]+~', '', $text);
|
428 |
+
|
429 |
+
// trim
|
430 |
+
$text = trim($text, '-');
|
431 |
+
|
432 |
+
// remove duplicate -
|
433 |
+
$text = preg_replace('~-+~', '-', $text);
|
434 |
+
|
435 |
+
// lowercase
|
436 |
+
$text = strtolower($text);
|
437 |
+
|
438 |
+
if(empty($text)){
|
439 |
+
return 'n-a';
|
440 |
+
}
|
441 |
+
|
442 |
+
return $text;
|
443 |
+
}
|
444 |
+
}
|
includes/cron/do-check-privacy-policy-texts.php
ADDED
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class DoCheckPrivacyPolicyTexts extends SPDSGVOCron
|
4 |
+
{
|
5 |
+
|
6 |
+
public $interval = array(
|
7 |
+
'days' => 1,
|
8 |
+
);
|
9 |
+
|
10 |
+
public function handle()
|
11 |
+
{
|
12 |
+
$localTextsLanguage = SPDSGVOSettings::get('legal_web_texts_lang');
|
13 |
+
$localTextsVersion = SPDSGVOSettings::get('legal_web_texts_version');
|
14 |
+
$localTextsLastUpdate = SPDSGVOSettings::get('legal_web_texts_last_update');
|
15 |
+
|
16 |
+
|
17 |
+
$url = SPDSGVOConstants::LEGAL_WEB_TEXT_SERVICE_URL;
|
18 |
+
$url .= '?lang=' . $localTextsLanguage;
|
19 |
+
$url .= '&version=' . $localTextsVersion;
|
20 |
+
$url .= '&apiVersion=' . SPDSGVOConstants::LEGAL_WEB_TEXT_SERVICE_VERSION;
|
21 |
+
|
22 |
+
$request = wp_remote_get($url);
|
23 |
+
if (is_wp_error($request)) {
|
24 |
+
$error_string = $request->get_error_message();
|
25 |
+
error_log(__('error while updating language texts: ', 'shapepress-dsgvo') . $error_string); // Bail early
|
26 |
+
} else {
|
27 |
+
|
28 |
+
SPDSGVOSettings::set('legal_web_texts_last_check', time());
|
29 |
+
|
30 |
+
$result = wp_remote_retrieve_body($request);
|
31 |
+
if (strpos($result, "INFO") === 0) {
|
32 |
+
// file actual, just do nothing
|
33 |
+
} elseif (empty($result) == false && strpos($result, "ERROR") !== 0) {
|
34 |
+
// if premium then update texts, otherwise bring a notice
|
35 |
+
|
36 |
+
$resultCleaned = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $result);
|
37 |
+
|
38 |
+
// try to create json. if success then store
|
39 |
+
$xmlTextsJson = json_decode($resultCleaned, true);
|
40 |
+
|
41 |
+
if ($xmlTextsJson != null) {
|
42 |
+
|
43 |
+
// if premium then update texts, otherwise bring a notice
|
44 |
+
if (isValidPremiumEdition() == false) {
|
45 |
+
SPDSGVOSettings::set('show_notice_privacy_policy_texts_outdated', '1');
|
46 |
+
|
47 |
+
if (SPDSGVOSettings::get('pp_texts_notification_mail') == '1') {
|
48 |
+
wp_mail(SPDSGVOSettings::get('admin_email'),
|
49 |
+
__('WP DSGVO Tools (GPDR) Privacy policy texts outdated', 'shapepress-dsgvo') . ': ' . parse_url(home_url(), PHP_URL_HOST),
|
50 |
+
__('Attention. There are newer texts for the privacy policy. Please refresh them ensure compliance.', 'shapepress-dsgvo'));
|
51 |
+
}
|
52 |
+
return;
|
53 |
+
}
|
54 |
+
|
55 |
+
$xmlTextsBase64 = base64_encode($xmlTextsJson['Texts']);
|
56 |
+
$version = $xmlTextsJson['Version'];
|
57 |
+
if ($version == null || $version == '') $version = time();
|
58 |
+
|
59 |
+
SPDSGVOSettings::set('legal_web_texts', $xmlTextsBase64);
|
60 |
+
SPDSGVOSettings::set('legal_web_texts_version', $version);
|
61 |
+
SPDSGVOSettings::set('legal_web_texts_lang', $localTextsLanguage);
|
62 |
+
SPDSGVOSettings::set('legal_web_texts_last_update', time());
|
63 |
+
|
64 |
+
return $xmlTextsBase64;
|
65 |
+
} else {
|
66 |
+
$jsonError = json_last_error();
|
67 |
+
error_log('wrong texts received. json_error: ' . $jsonError); // Bail early
|
68 |
+
}
|
69 |
+
|
70 |
+
} else {
|
71 |
+
error_log('ERROR: shapepress-dsgvo: DoCheckPrivacyPolicyTexts: ' . $result);
|
72 |
+
}
|
73 |
+
}
|
74 |
+
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
DoCheckPrivacyPolicyTexts::register();
|
includes/cron/do-delete-data-request.php
CHANGED
@@ -1,34 +1,34 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class DoDSGVODeleteDataRequest extends SPDSGVOCron{
|
4 |
-
|
5 |
-
public $interval = array(
|
6 |
-
'days' => 1,
|
7 |
-
);
|
8 |
-
|
9 |
-
public function handle(){
|
10 |
-
$delCron = SPDSGVOSettings::get('su_auto_del_time');
|
11 |
-
if($delCron !== '0'){
|
12 |
-
|
13 |
-
$daysAgo = strtotime('-'.$delCron.' day');
|
14 |
-
|
15 |
-
error_log(__('DoDSGVODeleteDataRequest with days:', 'shapepress-dsgvo').' '.$delCron . ' ' . __('and intval:', 'shapepress-dsgvo') . ' '.$daysAgo);
|
16 |
-
|
17 |
-
foreach(SPDSGVOUnsubscriber::finder('pending') as $sar){
|
18 |
-
|
19 |
-
$post = $sar->_post;// get_post($sar->ID);
|
20 |
-
error_log(__('doing sar', 'shapepress-dsgvo') . ' '. $sar->ID . ' ' . __('with intval', 'shapepress-dsgvo') . ' '. intval(strtotime($post->post_date)));
|
21 |
-
|
22 |
-
if (intval(strtotime($post->post_date)) <= intval($daysAgo))
|
23 |
-
{
|
24 |
-
$sar->doSuperUnsubscribe();
|
25 |
-
} else
|
26 |
-
{
|
27 |
-
error_log(__('sar', 'shapepress-dsgvo') . ' '. $sar->ID . ' ' . __('has not the date to process', 'shapepress-dsgvo'));
|
28 |
-
}
|
29 |
-
}
|
30 |
-
}
|
31 |
-
}
|
32 |
-
}
|
33 |
-
|
34 |
-
DoDSGVODeleteDataRequest::register();
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class DoDSGVODeleteDataRequest extends SPDSGVOCron{
|
4 |
+
|
5 |
+
public $interval = array(
|
6 |
+
'days' => 1,
|
7 |
+
);
|
8 |
+
|
9 |
+
public function handle(){
|
10 |
+
$delCron = SPDSGVOSettings::get('su_auto_del_time');
|
11 |
+
if($delCron !== '0'){
|
12 |
+
|
13 |
+
$daysAgo = strtotime('-'.$delCron.' day');
|
14 |
+
|
15 |
+
error_log(__('DoDSGVODeleteDataRequest with days:', 'shapepress-dsgvo').' '.$delCron . ' ' . __('and intval:', 'shapepress-dsgvo') . ' '.$daysAgo);
|
16 |
+
|
17 |
+
foreach(SPDSGVOUnsubscriber::finder('pending') as $sar){
|
18 |
+
|
19 |
+
$post = $sar->_post;// get_post($sar->ID);
|
20 |
+
error_log(__('doing sar', 'shapepress-dsgvo') . ' '. $sar->ID . ' ' . __('with intval', 'shapepress-dsgvo') . ' '. intval(strtotime($post->post_date)));
|
21 |
+
|
22 |
+
if (intval(strtotime($post->post_date)) <= intval($daysAgo))
|
23 |
+
{
|
24 |
+
$sar->doSuperUnsubscribe();
|
25 |
+
} else
|
26 |
+
{
|
27 |
+
error_log(__('sar', 'shapepress-dsgvo') . ' '. $sar->ID . ' ' . __('has not the date to process', 'shapepress-dsgvo'));
|
28 |
+
}
|
29 |
+
}
|
30 |
+
}
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
DoDSGVODeleteDataRequest::register();
|
includes/cron/do-subject-access-request.php
CHANGED
@@ -1,34 +1,34 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class DoDSGVOSubjectAccessRequest extends SPDSGVOCron{
|
4 |
-
|
5 |
-
public $interval = array(
|
6 |
-
'days' => 1,
|
7 |
-
);
|
8 |
-
|
9 |
-
public function handle(){
|
10 |
-
$sarCron = SPDSGVOSettings::get('sar_cron');
|
11 |
-
if($sarCron !== '0'){
|
12 |
-
|
13 |
-
$daysAgo = strtotime('-'.$sarCron.' day');
|
14 |
-
|
15 |
-
//error_log('DoDSGVOSubjectAccessRequest with days: '.$sarCron . ' and intval: '.$daysAgo);
|
16 |
-
|
17 |
-
foreach(SPDSGVOSubjectAccessRequest::finder('pending') as $sar){
|
18 |
-
|
19 |
-
$post = $sar->_post;// get_post($sar->ID);
|
20 |
-
//error_log('doing sar '. $sar->ID . ' with intval '. intval(strtotime($post->post_date)));
|
21 |
-
|
22 |
-
if (intval(strtotime($post->post_date)) <= intval($daysAgo))
|
23 |
-
{
|
24 |
-
$sar->doSubjectAccessRequest();
|
25 |
-
} else
|
26 |
-
{
|
27 |
-
//error_log('sar '. $sar->ID . ' has not the date to process');
|
28 |
-
}
|
29 |
-
}
|
30 |
-
}
|
31 |
-
}
|
32 |
-
}
|
33 |
-
|
34 |
-
DoDSGVOSubjectAccessRequest::register();
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class DoDSGVOSubjectAccessRequest extends SPDSGVOCron{
|
4 |
+
|
5 |
+
public $interval = array(
|
6 |
+
'days' => 1,
|
7 |
+
);
|
8 |
+
|
9 |
+
public function handle(){
|
10 |
+
$sarCron = SPDSGVOSettings::get('sar_cron');
|
11 |
+
if($sarCron !== '0'){
|
12 |
+
|
13 |
+
$daysAgo = strtotime('-'.$sarCron.' day');
|
14 |
+
|
15 |
+
//error_log('DoDSGVOSubjectAccessRequest with days: '.$sarCron . ' and intval: '.$daysAgo);
|
16 |
+
|
17 |
+
foreach(SPDSGVOSubjectAccessRequest::finder('pending') as $sar){
|
18 |
+
|
19 |
+
$post = $sar->_post;// get_post($sar->ID);
|
20 |
+
//error_log('doing sar '. $sar->ID . ' with intval '. intval(strtotime($post->post_date)));
|
21 |
+
|
22 |
+
if (intval(strtotime($post->post_date)) <= intval($daysAgo))
|
23 |
+
{
|
24 |
+
$sar->doSubjectAccessRequest();
|
25 |
+
} else
|
26 |
+
{
|
27 |
+
//error_log('sar '. $sar->ID . ' has not the date to process');
|
28 |
+
}
|
29 |
+
}
|
30 |
+
}
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
DoDSGVOSubjectAccessRequest::register();
|
includes/cron/do-validate-license.php
CHANGED
@@ -1,77 +1,81 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
Class DoValidateLicense extends SPDSGVOCron{
|
4 |
-
|
5 |
-
public $interval = array(
|
6 |
-
'days' => 1,
|
7 |
-
);
|
8 |
-
|
9 |
-
public function handle(){
|
10 |
-
error_log("DoValidateLicense called");
|
11 |
-
$licActivated = SPDSGVOSettings::get('license_activated');
|
12 |
-
$licenceKey = SPDSGVOSettings::get('dsgvo_licence');
|
13 |
-
$oldLicenseStatus = SPDSGVOSettings::get('licence_status');
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
error_log(
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
$
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
error_log('
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
SPDSGVOSettings::set('
|
41 |
-
|
42 |
-
|
43 |
-
SPDSGVOSettings::set('
|
44 |
-
SPDSGVOSettings::set('
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
Class DoValidateLicense extends SPDSGVOCron{
|
4 |
+
|
5 |
+
public $interval = array(
|
6 |
+
'days' => 1,
|
7 |
+
);
|
8 |
+
|
9 |
+
public function handle(){
|
10 |
+
//error_log("DoValidateLicense called");
|
11 |
+
$licActivated = SPDSGVOSettings::get('license_activated');
|
12 |
+
$licenceKey = SPDSGVOSettings::get('dsgvo_licence');
|
13 |
+
$oldLicenseStatus = SPDSGVOSettings::get('licence_status');
|
14 |
+
$siteUrl = get_site_url();
|
15 |
+
$homeUrl = get_home_url();
|
16 |
+
|
17 |
+
if($licActivated === '1' && $licenceKey !== ''){
|
18 |
+
|
19 |
+
//error_log("DoValidateLicense starting");
|
20 |
+
|
21 |
+
//error_log('validating licence '.$licenceKey);
|
22 |
+
|
23 |
+
$url = 'https://legalweb.io/spdsgvo-bin/licensedetails.php';
|
24 |
+
$url .= '?license_key=' .$licenceKey;
|
25 |
+
$url .= '&site_url=' .$siteUrl;
|
26 |
+
$url .= '&home_url=' .$homeUrl;
|
27 |
+
|
28 |
+
$request = wp_remote_get($url);
|
29 |
+
|
30 |
+
if( is_wp_error( $request ) ) {
|
31 |
+
|
32 |
+
error_log(__('error during license validation: ', 'shapepress-dsgvo').$request->get_error_message()); // Bail early
|
33 |
+
} else {
|
34 |
+
|
35 |
+
$body = wp_remote_retrieve_body( $request );
|
36 |
+
//error_log('body: '.$body);
|
37 |
+
|
38 |
+
if ($body !== false)
|
39 |
+
{
|
40 |
+
SPDSGVOSettings::set('licence_details_fetched', '1');
|
41 |
+
SPDSGVOSettings::set('licence_details_fetched_new', '1');
|
42 |
+
SPDSGVOSettings::set('licence_details_fetched_on', date("D M d, Y G:i"));
|
43 |
+
SPDSGVOSettings::set('show_invalid_license_notice', '0');
|
44 |
+
SPDSGVOSettings::set('show_revoke_license_notice', '0');
|
45 |
+
|
46 |
+
$data = json_decode( $body );
|
47 |
+
SPDSGVOSettings::set('licence_activated_on', $data->activation_date);
|
48 |
+
SPDSGVOSettings::set('licence_valid_to', $data->expiration_date);
|
49 |
+
SPDSGVOSettings::set('licence_number_use_remaining', $data->number_use_remaining);
|
50 |
+
SPDSGVOSettings::set('licence_status', $data->license_status);
|
51 |
+
|
52 |
+
if (isPremiumEdition() && isLicenceValid() === false)
|
53 |
+
{
|
54 |
+
error_log("WP DSGVO Tools (GDPR) license is invalid.");
|
55 |
+
SPDSGVOSettings::set('show_invalid_license_notice', '1');
|
56 |
+
}
|
57 |
+
|
58 |
+
if (licenseIsGoingToRunningOut())
|
59 |
+
{
|
60 |
+
error_log("WP DSGVO Tools (GDPR) license is going to running out in a few days");
|
61 |
+
SPDSGVOSettings::set('show_revoke_license_notice', '1');
|
62 |
+
}
|
63 |
+
|
64 |
+
if (hasValidLicenseStatus($oldLicenseStatus, $licActivated)=== true
|
65 |
+
&& hasValidLicenseStatus($data->license_status, $licActivated) === false)
|
66 |
+
{
|
67 |
+
error_log("WP DSGVO Tools (GDPR) license got invalid now. sending email to ".SPDSGVOSettings::get('admin_email'));
|
68 |
+
wp_mail(SPDSGVOSettings::get('admin_email'),
|
69 |
+
__('WP DSGVO Tools (GPDR) License Error','shapepress-dsgvo').': '. parse_url(home_url(), PHP_URL_HOST),
|
70 |
+
__('Your license has expired. Please renew it according to the hint at the plugin settings page.','shapepress-dsgvo'));
|
71 |
+
}
|
72 |
+
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
//error_log("DoValidateLicense finished");
|
77 |
+
}
|
78 |
+
}
|
79 |
+
}
|
80 |
+
|
81 |
+
DoValidateLicense::register();
|
includes/emails/feedback.html
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
-
<h1>WP DSGVO Tools Feedback</h1>
|
2 |
-
|
3 |
-
<p>
|
4 |
-
<strong>From:</strong><br>
|
5 |
-
{{home_url}} <br>
|
6 |
-
{{user}}
|
7 |
-
</p>
|
8 |
-
|
9 |
-
<p>
|
10 |
-
<strong>Reason:</strong><br>
|
11 |
-
{{reason}}
|
12 |
-
</p>
|
13 |
-
|
14 |
-
<p>
|
15 |
-
<strong>Message:</strong><br>
|
16 |
-
{{message}}
|
17 |
</p>
|
1 |
+
<h1>WP DSGVO Tools Feedback</h1>
|
2 |
+
|
3 |
+
<p>
|
4 |
+
<strong>From:</strong><br>
|
5 |
+
{{home_url}} <br>
|
6 |
+
{{user}}
|
7 |
+
</p>
|
8 |
+
|
9 |
+
<p>
|
10 |
+
<strong>Reason:</strong><br>
|
11 |
+
{{reason}}
|
12 |
+
</p>
|
13 |
+
|
14 |
+
<p>
|
15 |
+
<strong>Message:</strong><br>
|
16 |
+
{{message}}
|
17 |
</p>
|
includes/emails/footer.html
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
</table>
|
2 |
-
</td>
|
3 |
-
</tr>
|
4 |
-
</tbody>
|
5 |
-
</table>
|
6 |
-
</td>
|
7 |
-
</tr>
|
8 |
-
</tbody>
|
9 |
-
</table>
|
10 |
-
</body>
|
11 |
</html>
|
1 |
+
</table>
|
2 |
+
</td>
|
3 |
+
</tr>
|
4 |
+
</tbody>
|
5 |
+
</table>
|
6 |
+
</td>
|
7 |
+
</tr>
|
8 |
+
</tbody>
|
9 |
+
</table>
|
10 |
+
</body>
|
11 |
</html>
|
includes/emails/header.html
CHANGED
@@ -1,220 +1,220 @@
|
|
1 |
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
-
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
-
<head>
|
4 |
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
5 |
-
<title>WP DSGVO Tools</title>
|
6 |
-
<style type="text/css">
|
7 |
-
body {
|
8 |
-
padding-top: 0 !important;
|
9 |
-
padding-bottom: 0 !important;
|
10 |
-
padding-top: 0 !important;
|
11 |
-
padding-bottom: 0 !important;
|
12 |
-
margin:0 !important;
|
13 |
-
width: 100% !important;
|
14 |
-
-webkit-text-size-adjust: 100% !important;
|
15 |
-
-ms-text-size-adjust: 100% !important;
|
16 |
-
-webkit-font-smoothing: antialiased !important;
|
17 |
-
}
|
18 |
-
.tableContent img {
|
19 |
-
border: 0 !important;
|
20 |
-
display: block !important;
|
21 |
-
outline: none !important;
|
22 |
-
}
|
23 |
-
a{
|
24 |
-
color:#382F2E;
|
25 |
-
}
|
26 |
-
p, h1,h2,ul,ol,li,div{
|
27 |
-
margin:0;
|
28 |
-
padding:0;
|
29 |
-
}
|
30 |
-
h1,h2{
|
31 |
-
font-weight: normal;
|
32 |
-
background:transparent !important;
|
33 |
-
border:none !important;
|
34 |
-
}
|
35 |
-
@media only screen and (max-width:480px)
|
36 |
-
{
|
37 |
-
table[class="MainContainer"], td[class="cell"]
|
38 |
-
{
|
39 |
-
width: 100% !important;
|
40 |
-
height:auto !important;
|
41 |
-
}
|
42 |
-
td[class="specbundle"]
|
43 |
-
{
|
44 |
-
width: 100% !important;
|
45 |
-
float:left !important;
|
46 |
-
font-size:13px !important;
|
47 |
-
line-height:17px !important;
|
48 |
-
display:block !important;
|
49 |
-
padding-bottom:15px !important;
|
50 |
-
}
|
51 |
-
td[class="specbundle2"]
|
52 |
-
{
|
53 |
-
width:80% !important;
|
54 |
-
float:left !important;
|
55 |
-
font-size:13px !important;
|
56 |
-
line-height:17px !important;
|
57 |
-
display:block !important;
|
58 |
-
padding-bottom:10px !important;
|
59 |
-
padding-left:10% !important;
|
60 |
-
padding-right:10% !important;
|
61 |
-
}
|
62 |
-
td[class="spechide"]
|
63 |
-
{
|
64 |
-
display:none !important;
|
65 |
-
}
|
66 |
-
img[class="banner"]
|
67 |
-
{
|
68 |
-
width: 100% !important;
|
69 |
-
height: auto !important;
|
70 |
-
}
|
71 |
-
td[class="left_pad"]
|
72 |
-
{
|
73 |
-
padding-left:15px !important;
|
74 |
-
padding-right:15px !important;
|
75 |
-
}
|
76 |
-
}
|
77 |
-
@media only screen and (max-width:540px)
|
78 |
-
{
|
79 |
-
table[class="MainContainer"], td[class="cell"]
|
80 |
-
{
|
81 |
-
width: 100% !important;
|
82 |
-
height:auto !important;
|
83 |
-
}
|
84 |
-
td[class="specbundle"]
|
85 |
-
{
|
86 |
-
width: 100% !important;
|
87 |
-
float:left !important;
|
88 |
-
font-size:13px !important;
|
89 |
-
line-height:17px !important;
|
90 |
-
display:block !important;
|
91 |
-
padding-bottom:15px !important;
|
92 |
-
}
|
93 |
-
td[class="specbundle2"]
|
94 |
-
{
|
95 |
-
width:80% !important;
|
96 |
-
float:left !important;
|
97 |
-
font-size:13px !important;
|
98 |
-
line-height:17px !important;
|
99 |
-
display:block !important;
|
100 |
-
padding-bottom:10px !important;
|
101 |
-
padding-left:10% !important;
|
102 |
-
padding-right:10% !important;
|
103 |
-
}
|
104 |
-
td[class="spechide"]
|
105 |
-
{
|
106 |
-
display:none !important;
|
107 |
-
}
|
108 |
-
img[class="banner"]
|
109 |
-
{
|
110 |
-
width: 100% !important;
|
111 |
-
height: auto !important;
|
112 |
-
}
|
113 |
-
td[class="left_pad"]
|
114 |
-
{
|
115 |
-
padding-left:15px !important;
|
116 |
-
padding-right:15px !important;
|
117 |
-
}
|
118 |
-
}
|
119 |
-
.contentEditable h2.big,.contentEditable h1.big{
|
120 |
-
font-size: 26px !important;
|
121 |
-
}
|
122 |
-
.contentEditable h2.bigger,.contentEditable h1.bigger{
|
123 |
-
font-size: 37px !important;
|
124 |
-
}
|
125 |
-
td,table{
|
126 |
-
vertical-align: top;
|
127 |
-
}
|
128 |
-
td.middle{
|
129 |
-
vertical-align: middle;
|
130 |
-
}
|
131 |
-
a.link1{
|
132 |
-
font-size:13px;
|
133 |
-
color:#27A1E5;
|
134 |
-
line-height: 24px;
|
135 |
-
text-decoration:none;
|
136 |
-
}
|
137 |
-
a{
|
138 |
-
text-decoration: none;
|
139 |
-
}
|
140 |
-
.link2{
|
141 |
-
color:#ffffff;
|
142 |
-
border-top:10px solid #27A1E5;
|
143 |
-
border-bottom:10px solid #27A1E5;
|
144 |
-
border-left:18px solid #27A1E5;
|
145 |
-
border-right:18px solid #27A1E5;
|
146 |
-
border-radius:3px;
|
147 |
-
-moz-border-radius:3px;
|
148 |
-
-webkit-border-radius:3px;
|
149 |
-
background:#27A1E5;
|
150 |
-
}
|
151 |
-
.link3{
|
152 |
-
color:#555555;
|
153 |
-
border:1px solid #cccccc;
|
154 |
-
padding:10px 18px;
|
155 |
-
border-radius:3px;
|
156 |
-
-moz-border-radius:3px;
|
157 |
-
-webkit-border-radius:3px;
|
158 |
-
background:#ffffff;
|
159 |
-
}
|
160 |
-
.link4{
|
161 |
-
color:#27A1E5;
|
162 |
-
line-height: 24px;
|
163 |
-
}
|
164 |
-
h2,h1{
|
165 |
-
line-height: 20px;
|
166 |
-
}
|
167 |
-
p{
|
168 |
-
font-size: 14px;
|
169 |
-
line-height: 21px;
|
170 |
-
color:#AAAAAA;
|
171 |
-
}
|
172 |
-
.contentEditable li{
|
173 |
-
}
|
174 |
-
.appart p{
|
175 |
-
}
|
176 |
-
.bgItem{
|
177 |
-
background: #ffffff;
|
178 |
-
}
|
179 |
-
.bgBody{
|
180 |
-
background: #ffffff;
|
181 |
-
}
|
182 |
-
img {
|
183 |
-
outline:none;
|
184 |
-
text-decoration:none;
|
185 |
-
-ms-interpolation-mode: bicubic;
|
186 |
-
width: auto;
|
187 |
-
max-width: 100%;
|
188 |
-
clear: both;
|
189 |
-
display: block;
|
190 |
-
float: none;
|
191 |
-
}
|
192 |
-
|
193 |
-
ul ul{
|
194 |
-
margin-left: 15px;
|
195 |
-
}
|
196 |
-
ul li{
|
197 |
-
color:#444444;
|
198 |
-
}
|
199 |
-
</style>
|
200 |
-
<script type="colorScheme" class="swatch active">
|
201 |
-
{
|
202 |
-
"name":"Default",
|
203 |
-
"bgBody":"ffffff",
|
204 |
-
"link":"27A1E5",
|
205 |
-
"color":"AAAAAA",
|
206 |
-
"bgItem":"ffffff",
|
207 |
-
"title":"444444"
|
208 |
-
}
|
209 |
-
</script>
|
210 |
-
</head>
|
211 |
-
<body paddingwidth="0" paddingheight="0" bgcolor="#d1d3d4" style="padding-top: 0; padding-bottom: 0; padding-top: 0; padding-bottom: 0; background-repeat: repeat; width: 100% !important; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -webkit-font-smoothing: antialiased;" offset="0" toppadding="0" leftpadding="0">
|
212 |
-
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
213 |
-
<tbody>
|
214 |
-
|
215 |
-
<td>
|
216 |
-
<table width="600" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#ffffff" style="font-family:helvetica, sans-serif;" class="MainContainer">
|
217 |
-
<tbody>
|
218 |
-
<tr>
|
219 |
-
<td>
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
5 |
+
<title>WP DSGVO Tools</title>
|
6 |
+
<style type="text/css">
|
7 |
+
body {
|
8 |
+
padding-top: 0 !important;
|
9 |
+
padding-bottom: 0 !important;
|
10 |
+
padding-top: 0 !important;
|
11 |
+
padding-bottom: 0 !important;
|
12 |
+
margin:0 !important;
|
13 |
+
width: 100% !important;
|
14 |
+
-webkit-text-size-adjust: 100% !important;
|
15 |
+
-ms-text-size-adjust: 100% !important;
|
16 |
+
-webkit-font-smoothing: antialiased !important;
|
17 |
+
}
|
18 |
+
.tableContent img {
|
19 |
+
border: 0 !important;
|
20 |
+
display: block !important;
|
21 |
+
outline: none !important;
|
22 |
+
}
|
23 |
+
a{
|
24 |
+
color:#382F2E;
|
25 |
+
}
|
26 |
+
p, h1,h2,ul,ol,li,div{
|
27 |
+
margin:0;
|
28 |
+
padding:0;
|
29 |
+
}
|
30 |
+
h1,h2{
|
31 |
+
font-weight: normal;
|
32 |
+
background:transparent !important;
|
33 |
+
border:none !important;
|
34 |
+
}
|
35 |
+
@media only screen and (max-width:480px)
|
36 |
+
{
|
37 |
+
table[class="MainContainer"], td[class="cell"]
|
38 |
+
{
|
39 |
+
width: 100% !important;
|
40 |
+
height:auto !important;
|
41 |
+
}
|
42 |
+
td[class="specbundle"]
|
43 |
+
{
|
44 |
+
width: 100% !important;
|
45 |
+
float:left !important;
|
46 |
+
font-size:13px !important;
|
47 |
+
line-height:17px !important;
|
48 |
+
display:block !important;
|
49 |
+
padding-bottom:15px !important;
|
50 |
+
}
|
51 |
+
td[class="specbundle2"]
|
52 |
+
{
|
53 |
+
width:80% !important;
|
54 |
+
float:left !important;
|
55 |
+
font-size:13px !important;
|
56 |
+
line-height:17px !important;
|
57 |
+
display:block !important;
|
58 |
+
padding-bottom:10px !important;
|
59 |
+
padding-left:10% !important;
|
60 |
+
padding-right:10% !important;
|
61 |
+
}
|
62 |
+
td[class="spechide"]
|
63 |
+
{
|
64 |
+
display:none !important;
|
65 |
+
}
|
66 |
+
img[class="banner"]
|
67 |
+
{
|
68 |
+
width: 100% !important;
|
69 |
+
height: auto !important;
|
70 |
+
}
|
71 |
+
td[class="left_pad"]
|
72 |
+
{
|
73 |
+
padding-left:15px !important;
|
74 |
+
padding-right:15px !important;
|
75 |
+
}
|
76 |
+
}
|
77 |
+
@media only screen and (max-width:540px)
|
78 |
+
{
|
79 |
+
table[class="MainContainer"], td[class="cell"]
|
80 |
+
{
|
81 |
+
width: 100% !important;
|
82 |
+
height:auto !important;
|
83 |
+
}
|
84 |
+
td[class="specbundle"]
|
85 |
+
{
|
86 |
+
width: 100% !important;
|
87 |
+
float:left !important;
|
88 |
+
font-size:13px !important;
|
89 |
+
line-height:17px !important;
|
90 |
+
display:block !important;
|
91 |
+
padding-bottom:15px !important;
|
92 |
+
}
|
93 |
+
td[class="specbundle2"]
|
94 |
+
{
|
95 |
+
width:80% !important;
|
96 |
+
float:left !important;
|
97 |
+
font-size:13px !important;
|
98 |
+
line-height:17px !important;
|
99 |
+
display:block !important;
|
100 |
+
padding-bottom:10px !important;
|
101 |
+
padding-left:10% !important;
|
102 |
+
padding-right:10% !important;
|
103 |
+
}
|
104 |
+
td[class="spechide"]
|
105 |
+
{
|
106 |
+
display:none !important;
|
107 |
+
}
|
108 |
+
img[class="banner"]
|
109 |
+
{
|
110 |
+
width: 100% !important;
|
111 |
+
height: auto !important;
|
112 |
+
}
|
113 |
+
td[class="left_pad"]
|
114 |
+
{
|
115 |
+
padding-left:15px !important;
|
116 |
+
padding-right:15px !important;
|
117 |
+
}
|
118 |
+
}
|
119 |
+
.contentEditable h2.big,.contentEditable h1.big{
|
120 |
+
font-size: 26px !important;
|
121 |
+
}
|
122 |
+
.contentEditable h2.bigger,.contentEditable h1.bigger{
|
123 |
+
font-size: 37px !important;
|
124 |
+
}
|
125 |
+
td,table{
|
126 |
+
vertical-align: top;
|
127 |
+
}
|
128 |
+
td.middle{
|
129 |
+
vertical-align: middle;
|
130 |
+
}
|
131 |
+
a.link1{
|
132 |
+
font-size:13px;
|
133 |
+
color:#27A1E5;
|
134 |
+
line-height: 24px;
|
135 |
+
text-decoration:none;
|
136 |
+
}
|
137 |
+
a{
|
138 |
+
text-decoration: none;
|
139 |
+
}
|
140 |
+
.link2{
|
141 |
+
color:#ffffff;
|
142 |
+
border-top:10px solid #27A1E5;
|
143 |
+
border-bottom:10px solid #27A1E5;
|
144 |
+
border-left:18px solid #27A1E5;
|
145 |
+
border-right:18px solid #27A1E5;
|
146 |
+
border-radius:3px;
|
147 |
+
-moz-border-radius:3px;
|
148 |
+
-webkit-border-radius:3px;
|
149 |
+
background:#27A1E5;
|
150 |
+
}
|
151 |
+
.link3{
|
152 |
+
color:#555555;
|
153 |
+
border:1px solid #cccccc;
|
154 |
+
padding:10px 18px;
|
155 |
+
border-radius:3px;
|
156 |
+
-moz-border-radius:3px;
|
157 |
+
-webkit-border-radius:3px;
|
158 |
+
background:#ffffff;
|
159 |
+
}
|
160 |
+
.link4{
|
161 |
+
color:#27A1E5;
|
162 |
+
line-height: 24px;
|
163 |
+
}
|
164 |
+
h2,h1{
|
165 |
+
line-height: 20px;
|
166 |
+
}
|
167 |
+
p{
|
168 |
+
font-size: 14px;
|
169 |
+
line-height: 21px;
|
170 |
+
color:#AAAAAA;
|
171 |
+
}
|
172 |
+
.contentEditable li{
|
173 |
+
}
|
174 |
+
.appart p{
|
175 |
+
}
|
176 |
+
.bgItem{
|
177 |
+
background: #ffffff;
|
178 |
+
}
|
179 |
+
.bgBody{
|
180 |
+
background: #ffffff;
|
181 |
+
}
|
182 |
+
img {
|
183 |
+
outline:none;
|
184 |
+
text-decoration:none;
|
185 |
+
-ms-interpolation-mode: bicubic;
|
186 |
+
width: auto;
|
187 |
+
max-width: 100%;
|
188 |
+
clear: both;
|
189 |
+
display: block;
|
190 |
+
float: none;
|
191 |
+
}
|
192 |
+
|
193 |
+
ul ul{
|
194 |
+
margin-left: 15px;
|
195 |
+
}
|
196 |
+
ul li{
|
197 |
+
color:#444444;
|
198 |
+
}
|
199 |
+
</style>
|
200 |
+
<script type="colorScheme" class="swatch active">
|
201 |
+
{
|
202 |
+
"name":"Default",
|
203 |
+
"bgBody":"ffffff",
|
204 |
+
"link":"27A1E5",
|
205 |
+
"color":"AAAAAA",
|
206 |
+
"bgItem":"ffffff",
|
207 |
+
"title":"444444"
|
208 |
+
}
|
209 |
+
</script>
|
210 |
+
</head>
|
211 |
+
<body paddingwidth="0" paddingheight="0" bgcolor="#d1d3d4" style="padding-top: 0; padding-bottom: 0; padding-top: 0; padding-bottom: 0; background-repeat: repeat; width: 100% !important; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -webkit-font-smoothing: antialiased;" offset="0" toppadding="0" leftpadding="0">
|
212 |
+
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
213 |
+
<tbody>
|
214 |
+
|
|
|
|
|
|
|
|
|
|