Compare commits
18 Commits
e204c8a53e
...
epic-teili
Author | SHA1 | Date | |
---|---|---|---|
a66f2d2422 | |||
e9740e86b5 | |||
5e766bc2e5 | |||
abc3a2a0a0 | |||
c85d93e06f | |||
3fcd0f2c2b | |||
caa2bc6493 | |||
49f1ebc5ba | |||
d2c74a158a | |||
bee1f6c96c | |||
96e084e353 | |||
c7ba74d7e3 | |||
76ecb7d978 | |||
5492bda6d2 | |||
dd6af287f3 | |||
9835f32dfa | |||
b3b58ce103 | |||
4d479cedaf |
27
.deployment/create_info_json.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
if (!isset($argv[1])) {
|
||||
die('No version set, please use ' . PHP_EOL .'make setup version=' . PHP_EOL);
|
||||
}
|
||||
$file = file_get_contents(dirname(__FILE__) . '/info.json.tpl');
|
||||
$file = str_replace('%version%', $argv[1], $file);
|
||||
$file = str_replace('%date%', date('d.m.Y H:i:00'), $file);
|
||||
$file = str_replace('%changelog%', parseChangeLog(), $file);
|
||||
|
||||
$ptr = fopen('info.json', 'w');
|
||||
fwrite($ptr, $file);
|
||||
fclose($ptr);
|
||||
|
||||
|
||||
system('lftp -e "put -O / info.json; bye" -u "lv-sachsen-main_ftp3,sE&xDXc8za#S" bdp.mein-verein.online');
|
||||
function parseChangeLog()
|
||||
{
|
||||
$return = '';
|
||||
foreach (file(dirname(__FILE__) . '/../changelog') as $line) {
|
||||
$line = trim($line);
|
||||
if ($line !== '') {
|
||||
$return .= $line;
|
||||
}
|
||||
};
|
||||
|
||||
return $return;
|
||||
}
|
17
.deployment/info.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "BdP Kompass",
|
||||
"slug": "bdp-kompass",
|
||||
"author": "Thomas Günther",
|
||||
"author_profile": "https://sachsen.pfadfinden.de",
|
||||
"version": "4.3.2",
|
||||
"download_url": "http://lv-sachsen-main.bdp.mein-verein.online/wordpress/bdp-kompass-4.3.2.zip",
|
||||
"requires": "6.0",
|
||||
"tested": "6.5",
|
||||
"requires_php": "8.2",
|
||||
"last_updated": "02.03.2024 16:24:00",
|
||||
"sections": {
|
||||
"description": "Wordpress-Plugin zur Unterstützung von Stämmen im Bund der Pfadfinderinnen und Pfadfinder e.V. zur optimalen Verwaltung eurer Webseite",
|
||||
"installation": "Bitte wendet euch an den LB IT, falls ihr zur Installation oder zu Updates Fragen habt.",
|
||||
"changelog": "<h4>Version 4.3.1</h4><ul><li>Mehrsprachrigkeit unterstütz</li><li>Unterstützung für Smartphones</li></ul><h4>Version 4.2.1</h4><ul><li>Erweiterte Sicherheitsfunktionen implemntiert</li><li>Passwort-Policies implementiert</li><li>Integration von Limit Login Attempts (classic)</li><li>Integration von WPS Hide Login</li></ul><h4>Version 4.1.1</h4><ul><li>Erster release des Plugins</li></ul>"
|
||||
}
|
||||
}
|
17
.deployment/info.json.tpl
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "BdP Kompass",
|
||||
"slug": "bdp-kompass",
|
||||
"author": "Thomas Günther",
|
||||
"author_profile": "https://sachsen.pfadfinden.de",
|
||||
"version": "%version%",
|
||||
"download_url": "http://lv-sachsen-main.bdp.mein-verein.online/wordpress/bdp-kompass-%version%.zip",
|
||||
"requires": "6.0",
|
||||
"tested": "6.5",
|
||||
"requires_php": "8.2",
|
||||
"last_updated": "%date%",
|
||||
"sections": {
|
||||
"description": "Wordpress-Plugin zur Unterstützung von Stämmen im Bund der Pfadfinderinnen und Pfadfinder e.V. zur optimalen Verwaltung eurer Webseite",
|
||||
"installation": "Bitte wendet euch an den LB IT, falls ihr zur Installation oder zu Updates Fragen habt.",
|
||||
"changelog": "%changelog%"
|
||||
}
|
||||
}
|
17
Makefile
Normal file
@ -0,0 +1,17 @@
|
||||
translate: bdp-kompass.php
|
||||
msgfmt lang/bdp-kompass_de_DE.po -olang/bdp-kompass-de_DE.mo
|
||||
|
||||
deploy: bdp-kompass.php
|
||||
make translate
|
||||
@php ./.deployment/create_info_json.php $(version)
|
||||
mkdir -p ./.deployment/bdp-kompass/bdp-kompass
|
||||
cp -r * ./.deployment/bdp-kompass/bdp-kompass
|
||||
rm ./.deployment/bdp-kompass/bdp-kompass/changelog
|
||||
rm ./.deployment/bdp-kompass/bdp-kompass/Makefile
|
||||
rm -rf ./.deployment/bdp-kompass/bdp-kompass/.deployment
|
||||
rm -rf ./.deployment/bdp-kompass/bdp-kompass/.git
|
||||
cd ./.deployment/bdp-kompass/ && zip -qr ./bdp-kompass-$(version).zip ./bdp-kompass/
|
||||
lftp -e "put -O / ./.deployment/bdp-kompass/bdp-kompass-$(version).zip; bye" -u "lv-sachsen-main_ftp3,sE&xDXc8za#S" bdp.mein-verein.online
|
||||
rm -rf ./.deployment/bdp-kompass/
|
||||
rm -rf ./.deployment/info.json/
|
||||
rm -rf ./info.json
|
21
assets/searchtable.js
Normal file
@ -0,0 +1,21 @@
|
||||
function searchTable(tableId, searchField) {
|
||||
var input, filter, table, tr, td, i, j, txtValue;
|
||||
input = searchField;
|
||||
filter = input.value.toUpperCase();
|
||||
table = document.getElementById(tableId);
|
||||
tr = table.getElementsByTagName("tr");
|
||||
for (i = 0; i < tr.length; i++) {
|
||||
td = tr[i].getElementsByTagName("td");
|
||||
for (j = 0; j < td.length; j++) {
|
||||
if (td[j]) {
|
||||
txtValue = td[j].textContent || td[j].innerText;
|
||||
if (txtValue.toUpperCase().indexOf(filter) > -1) {
|
||||
tr[i].style.display = "";
|
||||
break;
|
||||
} else {
|
||||
tr[i].style.display = "none";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -52,7 +52,7 @@
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.protect-login-no-blocked-ips
|
||||
.bdp-kompass-no-blocked-ips
|
||||
{
|
||||
padding: 5px 10px;
|
||||
width: 90%;
|
||||
|
@ -1,85 +1,90 @@
|
||||
#adminmenuback, #adminmenuwrap, #adminmenu, #adminmenu .wp-has-current-submenu > .wp-submenu {
|
||||
width: 250px;
|
||||
}
|
||||
|
||||
|
||||
#wpcontent, #wpfooter {
|
||||
margin-left: 230px;
|
||||
background-color: #ffffff !important;
|
||||
padding-left: 40px;
|
||||
}
|
||||
|
||||
#adminmenu .wp-submenu {
|
||||
left: 210px;
|
||||
}
|
||||
|
||||
#adminmenu .wp-not-current-submenu .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .ame-has-deep-submenu:not(.ame-has-highlighted-item) > .wp-submenu {
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #fff;
|
||||
--ame-ms-menu-width: 250px;
|
||||
}
|
||||
|
||||
/* Admin Menu */
|
||||
#adminmenuback,
|
||||
#adminmenuwrap,
|
||||
#adminmenu {
|
||||
margin-top: 12px;
|
||||
background: #f0f0f0;
|
||||
width: 300px;
|
||||
@media screen and (min-width: 783px) {
|
||||
body:not(.folded) #widgets-editor .interface-interface-skeleton {
|
||||
left: 250px;
|
||||
}
|
||||
|
||||
|
||||
#adminmenu .wp-not-current-submenu .wp-submenu {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#adminmenu {
|
||||
@media screen and (max-width: 960px) and (min-width: 783px) {
|
||||
body.auto-fold #widgets-editor .interface-interface-skeleton {
|
||||
left: var(--ame-ms-collapsed-menu-width, 36px);
|
||||
}
|
||||
|
||||
}
|
||||
#wpwrap {
|
||||
background-color: #ffffff;
|
||||
border-radius: 10px;
|
||||
|
||||
}
|
||||
#adminmenuback {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
#adminmenu a {
|
||||
#adminmenu .wp-submenu a {
|
||||
font-weight: 200;
|
||||
}
|
||||
#adminmenu > li {
|
||||
padding: 10px 5px;
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
#adminmenu > li a {
|
||||
color: #020918;
|
||||
}
|
||||
|
||||
#adminmenu > li div.wp-menu-image:before {
|
||||
color: #020918;
|
||||
}
|
||||
|
||||
#adminmenu > li a:hover, #adminmenu > li.menu-top:hover, #adminmenu > li.opensub > a.menu-top, #adminmenu > li > a.menu-top:focus {
|
||||
color: #020918;
|
||||
}
|
||||
|
||||
#adminmenu > li.menu-top:hover, #adminmenu > li.opensub > a.menu-top, #adminmenu > li > a.menu-top:focus {
|
||||
background-color: rgb(240, 244, 247);
|
||||
color: #1d4899 !important;
|
||||
font-weight: bold !important;
|
||||
margin-left: 30px !important;
|
||||
border-color: #f0f0f0;
|
||||
}
|
||||
|
||||
|
||||
#wpbody {
|
||||
background-color: #f0f0f0;
|
||||
position: relative;
|
||||
padding-left: 150px;
|
||||
|
||||
padding-top: 25px;
|
||||
}
|
||||
|
||||
#wpfooter, #wpwrap
|
||||
{
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
#wpfooter {
|
||||
padding-left: 150px;
|
||||
}
|
||||
#wpbody-content {
|
||||
background-color: #ffffff;
|
||||
width: 95%;
|
||||
padding-left: 50px;
|
||||
box-shadow: 10px 10px 10px #c0c0c0;
|
||||
border-radius: 10px;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: #c0c0c0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#adminmenu div.wp-menu-image:before {
|
||||
color: rgba(29, 72, 153, 0.75);
|
||||
}
|
||||
|
||||
#adminmenu a:hover,
|
||||
#adminmenu li.menu-top:hover,
|
||||
#adminmenu li.opensub > a.menu-top,
|
||||
#adminmenu li > a.menu-top:focus {
|
||||
#adminmenu > li.menu-top:hover div.wp-menu-image:before, #adminmenu > li.menu-top > a:focus div.wp-menu-image:before, #adminmenu > li.opensub > a.menu-top div.wp-menu-image:before {
|
||||
color: #1d4899;
|
||||
border-color: #f0f0f0;
|
||||
|
||||
font-weight: bold;
|
||||
background: linear-gradient(to right, #efefef, rgba(255, 203, 4, 0.45));
|
||||
border-radius: 10px;
|
||||
border-width: 0 !important;
|
||||
}
|
||||
|
||||
#adminmenu li.menu-top:hover div.wp-menu-image:before,
|
||||
#adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
|
||||
color: #1d4899;
|
||||
font-weight: bold;
|
||||
background: linear-gradient(to right, #efefef, rgba(255, 203, 4, 0.45));
|
||||
border-radius: 10px;
|
||||
border-width: 0;
|
||||
border-color: #f0f0f0;
|
||||
#adminmenu > li .wp-submenu, #adminmenu > li.wp-has-current-submenu .wp-submenu, #adminmenu > li.wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu > li.wp-has-current-submenu .wp-submenu a.wp-has-current-submenu:focus + .wp-submenu {
|
||||
background: #ffcb04;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.nav-tab {
|
||||
border-color: rgb(128, 159, 245);
|
||||
background-color: rgba(185, 203, 255, 0.84);
|
||||
border-radius: 5px 5px 0 0;
|
||||
}
|
||||
|
||||
/* Active tabs use a bottom border color that matches the page background color. */
|
||||
@ -87,249 +92,43 @@ body {
|
||||
.nav-tab-active,
|
||||
.nav-tab-active:hover {
|
||||
border-style: none;
|
||||
background-color: #fff;
|
||||
background-color: #F0F4F7;
|
||||
border-bottom-color: #fff;
|
||||
box-shadow: 2px 2px 5px #c0c0c0;
|
||||
}
|
||||
|
||||
/* Admin Menu: submenu */
|
||||
#adminmenu .wp-submenu,
|
||||
#adminmenu .wp-has-current-submenu .wp-submenu,
|
||||
#adminmenu .wp-has-current-submenu.opensub .wp-submenu,
|
||||
.folded #adminmenu .wp-has-current-submenu .wp-submenu,
|
||||
#adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
|
||||
background: #ffffff;
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#adminmenu .wp-submenu .wp-submenu-head {
|
||||
color: #ccdbe0;
|
||||
}
|
||||
|
||||
#adminmenu .wp-submenu a,
|
||||
#adminmenu .wp-has-current-submenu .wp-submenu a,
|
||||
.folded #adminmenu .wp-has-current-submenu .wp-submenu a,
|
||||
#adminmenu a.wp-has-current-submenu:focus + .wp-submenu a,
|
||||
#adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
|
||||
color: #ccdbe0;
|
||||
}
|
||||
|
||||
#adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover,
|
||||
#adminmenu .wp-has-current-submenu .wp-submenu a:focus,
|
||||
#adminmenu .wp-has-current-submenu .wp-submenu a:hover,
|
||||
.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,
|
||||
.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,
|
||||
#adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus,
|
||||
#adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover,
|
||||
#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,
|
||||
#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
|
||||
color: #f0f0f0;
|
||||
}
|
||||
|
||||
/* Admin Menu: current */
|
||||
#adminmenu .wp-submenu li.current a,
|
||||
#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a,
|
||||
#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
|
||||
color: #f2fcff;
|
||||
}
|
||||
|
||||
#adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus,
|
||||
#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover,
|
||||
#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus,
|
||||
#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,
|
||||
#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
|
||||
color: #e0e0e0;
|
||||
.button-primary {
|
||||
border-style: none;
|
||||
background-color: #F0F4F7 !important;
|
||||
color: #404040 !important;
|
||||
box-shadow: 2px 2px 5px #c0c0c0;
|
||||
}
|
||||
|
||||
ul#adminmenu a.wp-has-current-submenu:after,
|
||||
ul#adminmenu > li.current > a.current:after {
|
||||
border-right-color: #fff;
|
||||
display: none;
|
||||
#adminmenu > li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
|
||||
border-right-color: #ffcb04;
|
||||
}
|
||||
|
||||
#adminmenu li.current a.menu-top,
|
||||
#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,
|
||||
#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,
|
||||
.folded #adminmenu li.current.menu-top {
|
||||
color: #000000;
|
||||
background: linear-gradient(to right, #efefef, rgba(255, 203, 4, 0.45));
|
||||
border-radius: 10px;
|
||||
#adminmenu > li .wp-submenu .wp-submenu-head {
|
||||
color: #1d4899;
|
||||
}
|
||||
|
||||
#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,
|
||||
#adminmenu a.current:hover div.wp-menu-image:before,
|
||||
#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,
|
||||
#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,
|
||||
#adminmenu li:hover div.wp-menu-image:before,
|
||||
#adminmenu li a:focus div.wp-menu-image:before,
|
||||
#adminmenu li.opensub div.wp-menu-image:before,
|
||||
.ie8 #adminmenu li.opensub div.wp-menu-image:before {
|
||||
color: #f2fcff;
|
||||
.wp-has-current-submenu:hover {
|
||||
background-color: #fafafa !important;
|
||||
}
|
||||
|
||||
.wp-menu-open .wp-submenu {
|
||||
display: block;
|
||||
}
|
||||
.wp-menu-open .wp-submenu li {
|
||||
padding-left: 30px !important;
|
||||
color: #1d4899 !important;
|
||||
font-weight: bold;
|
||||
border-color: #f0f0f0;
|
||||
|
||||
.wp-submenu li a {
|
||||
padding: 10px 0px 10px 10px;
|
||||
padding-top: 10px !important;
|
||||
padding-bottom: 10px !important;
|
||||
}
|
||||
|
||||
.wp-submenu {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Admin Menu: bubble */
|
||||
#adminmenu .awaiting-mod,
|
||||
#adminmenu .update-plugins {
|
||||
color: #f2fcff;
|
||||
background: #aa9d88;
|
||||
}
|
||||
|
||||
#adminmenu li.current a .awaiting-mod,
|
||||
#adminmenu li a.wp-has-current-submenu .update-plugins,
|
||||
#adminmenu li:hover a .awaiting-mod,
|
||||
#adminmenu li.menu-top:hover > a .update-plugins {
|
||||
#color: #f2fcff;
|
||||
}
|
||||
|
||||
/* Admin Menu: collapse button */
|
||||
#collapse-button {
|
||||
display: none;
|
||||
color: #1d4899;
|
||||
font-weight: bold;
|
||||
border-radius: 10px;
|
||||
border-width: 0;
|
||||
border-color: #f0f0f0;
|
||||
|
||||
}
|
||||
|
||||
#collapse-button:hover,
|
||||
#collapse-button:focus {
|
||||
color: rgba(255, 203, 4, 0.45);
|
||||
}
|
||||
|
||||
/* Admin Bar */
|
||||
#wpadminbar {
|
||||
color: #f2fcff;
|
||||
background: rgba(29, 72, 153, 0.7);
|
||||
}
|
||||
|
||||
#wpadminbar .ab-item,
|
||||
#wpadminbar a.ab-item,
|
||||
#wpadminbar > #wp-toolbar span.ab-label,
|
||||
#wpadminbar > #wp-toolbar span.noticon {
|
||||
color: #f2fcff;
|
||||
}
|
||||
|
||||
#wpadminbar .ab-icon,
|
||||
#wpadminbar .ab-icon:before,
|
||||
#wpadminbar .ab-item:before,
|
||||
#wpadminbar .ab-item:after {
|
||||
color: #f1f3f3;
|
||||
}
|
||||
|
||||
#wpadminbar:not(.mobile) .ab-top-menu > li:hover > .ab-item,
|
||||
#wpadminbar:not(.mobile) .ab-top-menu > li > .ab-item:focus,
|
||||
#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus,
|
||||
#wpadminbar.nojs .ab-top-menu > li.menupop:hover > .ab-item,
|
||||
#wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
|
||||
color: #f2fcff;
|
||||
background: rgba(29, 72, 153, 0.7);
|
||||
}
|
||||
|
||||
#wpadminbar:not(.mobile) > #wp-toolbar li:hover span.ab-label,
|
||||
#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label,
|
||||
#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
#wpadminbar:not(.mobile) li:hover .ab-icon:before,
|
||||
#wpadminbar:not(.mobile) li:hover .ab-item:before,
|
||||
#wpadminbar:not(.mobile) li:hover .ab-item:after,
|
||||
#wpadminbar:not(.mobile) li:hover #adminbarsearch:before {
|
||||
color: #f2fcff;
|
||||
}
|
||||
|
||||
/* Admin Bar: submenu */
|
||||
#wpadminbar .menupop .ab-sub-wrapper {
|
||||
background: rgba(29, 72, 153, 0.78);
|
||||
}
|
||||
|
||||
#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,
|
||||
#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
|
||||
background: #8f9a9e;
|
||||
}
|
||||
|
||||
#wpadminbar .ab-submenu .ab-item,
|
||||
#wpadminbar .quicklinks .menupop ul li a,
|
||||
#wpadminbar .quicklinks .menupop.hover ul li a,
|
||||
#wpadminbar.nojs .quicklinks .menupop:hover ul li a {
|
||||
color: #ccdbe0;
|
||||
}
|
||||
|
||||
#wpadminbar .quicklinks li .blavatar,
|
||||
#wpadminbar .menupop .menupop > .ab-item:before {
|
||||
color: #f1f3f3;
|
||||
}
|
||||
|
||||
#wpadminbar .quicklinks .menupop ul li a:hover,
|
||||
#wpadminbar .quicklinks .menupop ul li a:focus,
|
||||
#wpadminbar .quicklinks .menupop ul li a:hover strong,
|
||||
#wpadminbar .quicklinks .menupop ul li a:focus strong,
|
||||
#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a,
|
||||
#wpadminbar .quicklinks .menupop.hover ul li a:hover,
|
||||
#wpadminbar .quicklinks .menupop.hover ul li a:focus,
|
||||
#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,
|
||||
#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,
|
||||
#wpadminbar li:hover .ab-icon:before,
|
||||
#wpadminbar li:hover .ab-item:before,
|
||||
#wpadminbar li a:focus .ab-icon:before,
|
||||
#wpadminbar li .ab-item:focus:before,
|
||||
#wpadminbar li .ab-item:focus .ab-icon:before,
|
||||
#wpadminbar li.hover .ab-icon:before,
|
||||
#wpadminbar li.hover .ab-item:before,
|
||||
#wpadminbar li:hover #adminbarsearch:before,
|
||||
#wpadminbar li #adminbarsearch.adminbar-focused:before {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
#wpadminbar .quicklinks li a:hover .blavatar,
|
||||
#wpadminbar .quicklinks li a:focus .blavatar,
|
||||
#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar,
|
||||
#wpadminbar .menupop .menupop > .ab-item:hover:before,
|
||||
#wpadminbar.mobile .quicklinks .ab-icon:before,
|
||||
#wpadminbar.mobile .quicklinks .ab-item:before {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
#wpadminbar.mobile .quicklinks .hover .ab-icon:before,
|
||||
#wpadminbar.mobile .quicklinks .hover .ab-item:before {
|
||||
color: #f1f3f3;
|
||||
}
|
||||
|
||||
/* Admin Bar: search */
|
||||
#wpadminbar #adminbarsearch:before {
|
||||
color: #f1f3f3;
|
||||
}
|
||||
|
||||
.button {
|
||||
background: rgba(29, 72, 153, 0.62) !important;
|
||||
color: #ffffff !important;
|
||||
border-color: #071e4d;
|
||||
box-shadow: 5px 5px 10px #d0d0d0;
|
||||
}
|
||||
|
||||
|
||||
.bdp_setting_box {
|
||||
width: 100%;
|
||||
margin-right: 10px;
|
||||
background-color: #ffffff;
|
||||
padding: 15px;
|
||||
border-style: solid;
|
||||
@ -350,4 +149,241 @@ ul#adminmenu > li.current > a.current:after {
|
||||
cursor: pointer;
|
||||
width: 10pt;
|
||||
color: #a0a0a0;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 783px) {
|
||||
.wp-has-current-submenu li a {
|
||||
width: 210px !important;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.wp-submenu li a:hover {
|
||||
background-color: rgb(240, 244, 247) !important;
|
||||
color: #1d4899 !important;
|
||||
}
|
||||
|
||||
.current .menu-top .wp-menu-name,
|
||||
.wp-has-current-submenu .wp-menu-name {
|
||||
background-color: #ffcb04 !important;
|
||||
border-style: none !important;
|
||||
width: 202px;
|
||||
}
|
||||
|
||||
.wp-has-submenu:after {
|
||||
border-right-color: #ffcb04 !important;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 783px) {
|
||||
.wp-submenu, .wp-submenu-wrap {
|
||||
background-color: #fafafa !important;
|
||||
width: 220px !important;
|
||||
}
|
||||
|
||||
#adminmenu .current .menu-top .wp-menu-name {
|
||||
padding: 10px;
|
||||
width: 225px !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ul#adminmenu a.wp-has-current-submenu::after, ul#adminmenu > li.current > a.current::after,
|
||||
.auto-fold ul#adminmenu a.wp-has-current-submenu::after, .auto-fold ul#adminmenu > li.current > a.current::after {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head, #adminmenu .wp-menu-arrow, #adminmenu .wp-menu-arrow div, #adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu
|
||||
{
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 782px) {
|
||||
|
||||
#adminmenu > li.menu-top:hover, #adminmenu > li.opensub > a.menu-top, #adminmenu > li > a.menu-top:focus {
|
||||
background-color: #fafafa;
|
||||
color: #1d4899 !important;
|
||||
width: 285px !important;
|
||||
}
|
||||
|
||||
#adminmenu .current .menu-top{
|
||||
width: 280px;
|
||||
}
|
||||
|
||||
#adminmenu .current .menu-top .wp-menu-name {
|
||||
width: 245px !important;
|
||||
}
|
||||
|
||||
#adminmenu > li .wp-submenu, #adminmenu > li.wp-has-current-submenu .wp-submenu, #adminmenu > li.wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu > li.wp-has-current-submenu .wp-submenu a.wp-has-current-submenu:focus + .wp-submenu {
|
||||
width: 285px !important;
|
||||
}
|
||||
|
||||
|
||||
.wp-submenu:hover,
|
||||
.wp-submenu .wp-submenu-wrap:hover,
|
||||
.nav-tab-active:hover {
|
||||
border-style: none;
|
||||
background-color: #fafafa !important;
|
||||
}
|
||||
|
||||
|
||||
#adminmenuback, #adminmenuwrap, #adminmenu, #adminmenu .wp-has-current-submenu > .wp-submenu {
|
||||
width: 300px !important;
|
||||
}
|
||||
.wp-submenu,
|
||||
.wp-submenu .wp-submenu-wrap li,
|
||||
.auto-fold #adminmenu li.menu-top .wp-submenu > li > a {
|
||||
background-color: #fafafa !important;
|
||||
width: 285px !important;
|
||||
}
|
||||
|
||||
#wp-admin-bar-comments {
|
||||
display: none !important;
|
||||
}
|
||||
#wp-admin-bar-kompass_gruppen {
|
||||
display: block !important;
|
||||
}
|
||||
}
|
||||
|
||||
#adminmenu div.wp-menu-name {
|
||||
|
||||
}
|
||||
|
||||
#adminmenu > li .wp-submenu a, #adminmenu > li.wp-has-current-submenu .wp-submenu a, #adminmenu > li a.wp-has-current-submenu:focus + .wp-submenu a, .folded #adminmenu > li.wp-has-current-submenu .wp-submenu a, #adminmenu > li.wp-has-current-submenu.opensub .wp-submenu a {
|
||||
color: #020918;
|
||||
padding-left: 25px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
#adminmenu > li .wp-submenu a:focus, #adminmenu > li .wp-submenu a:hover, #adminmenu > li.wp-has-current-submenu .wp-submenu a:focus, #adminmenu > li.wp-has-current-submenu .wp-submenu a:hover, #adminmenu > li a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu > li a.wp-has-current-submenu:focus + .wp-submenu a:hover, .folded #adminmenu > li.wp-has-current-submenu .wp-submenu a, #adminmenu > li.wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu > li.wp-has-current-submenu.opensub .wp-submenu a:hover {
|
||||
color: #ffcb04;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
#adminmenu > li .wp-submenu li.current a, #adminmenu > li a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu > li.wp-has-current-submenu.opensub .wp-submenu li.current a {
|
||||
color: #010a1a;
|
||||
}
|
||||
|
||||
#adminmenu > li .wp-submenu li.current a:hover, #adminmenu > li .wp-submenu li.current a:focus, #adminmenu > li a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu > li a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu > li.wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu > li.wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
|
||||
color: #ffcb04;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
#adminmenu > li.current a.menu-top, #adminmenu > li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu > li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu > li.current.menu-top {
|
||||
color: #1d4899;
|
||||
}
|
||||
|
||||
#adminmenu > li.wp-has-current-submenu div.wp-menu-image:before, #adminmenu a.current:hover div.wp-menu-image:before, #adminmenu > li.current div.wp-menu-image::before, #adminmenu > li.wp-has-current-submenu a:focus div.wp-menu-image:before, #adminmenu > li.wp-has-current-submenu.opensub div.wp-menu-image:before, #adminmenu > li:hover div.wp-menu-image:before, #adminmenu > li a:focus div.wp-menu-image:before, #adminmenu > li.opensub div.wp-menu-image:before, .ie8 #adminmenu > li.opensub div.wp-menu-image:before, #adminmenu a.current:hover div.wp-menu-image:before {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
#adminmenu > li .awaiting-mod, #adminmenu > li .update-plugins {
|
||||
background: #ffcb04 !important;
|
||||
color: #1d4899;
|
||||
}
|
||||
|
||||
#adminmenu > li .current a .awaiting-mod, #adminmenu > li a.wp-has-current-submenu .update-plugins, #adminmenu > li:hover a .awaiting-mod, #adminmenu > li.menu-top:hover > a .update-plugins {
|
||||
color: #1d4899;
|
||||
background: #ffcb04;
|
||||
}
|
||||
|
||||
#adminmenuback, #adminmenuwrap, #adminmenu {
|
||||
background-color: #fafafa;
|
||||
|
||||
}
|
||||
|
||||
#adminmenuback {
|
||||
box-shadow: 10px 10px 5px rgb(240, 244, 247);
|
||||
}
|
||||
|
||||
@media screen and (min-width: 783px) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
#wpadminbar {
|
||||
background-color: rgb(240, 244, 247);
|
||||
color: #1d4899;
|
||||
|
||||
|
||||
}
|
||||
|
||||
#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
|
||||
color: #1d4899;
|
||||
}
|
||||
|
||||
#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
|
||||
color: #1d4899;
|
||||
}
|
||||
|
||||
#wpadminbar:not(.mobile) .ab-top-menu > li:hover > .ab-item, #wpadminbar:not(.mobile) .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
|
||||
background-color: #ffffff;
|
||||
color: #ffcb04;
|
||||
}
|
||||
|
||||
#wpadminbar:not(.mobile) > #wp-toolbar li:hover span.ab-label, #wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label, #wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label, #wpadminbar:not(.mobile) li:hover .ab-icon:before, #wpadminbar:not(.mobile) li:hover .ab-item:before, #wpadminbar:not(.mobile) li:hover .ab-item:after, #wpadminbar:not(.mobile) li:hover #adminbarsearch:before {
|
||||
color: #ffcb04;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
#wpadminbar .menupop .ab-sub-wrapper {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar.nojs .quicklinks .menupop:hover ul li a {
|
||||
color: #1d4899;
|
||||
}
|
||||
|
||||
#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
|
||||
color: #f3f3f1;
|
||||
}
|
||||
|
||||
#wpadminbar .quicklinks .menupop ul li a {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li .ab-item:focus .ab-icon:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover #adminbarsearch:before, #wpadminbar li #adminbarsearch.adminbar-focused:before, #wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .quicklinks li a:focus .blavatar, #wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before, #wpadminbar.mobile .quicklinks .ab-icon:before, #wpadminbar.mobile .quicklinks .ab-item:before {
|
||||
color: #1d4899;
|
||||
background-color: rgb(240, 244, 247);
|
||||
}
|
||||
|
||||
#wpadminbar #wp-admin-bar-user-info .display-name {
|
||||
color: #1d4899;
|
||||
}
|
||||
|
||||
#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
|
||||
color: #ffcb04;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
#wpadminbar #wp-admin-bar-user-info .username {
|
||||
color: #1d4899;
|
||||
}
|
||||
|
||||
#wpadminbar.mobile .quicklinks .hover .ab-icon:before, #wpadminbar.mobile .quicklinks .hover .ab-item:before, #wpadminbar #adminbarsearch:before {
|
||||
color: #f3f3f1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
li.wp-has-submenu.wp-not-current-submenu.opensub:after,
|
||||
li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after,
|
||||
|
||||
.wp-menu-name:after {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#adminmenu .wp-menu-arrow div {
|
||||
display: none !important;
|
||||
background-color: #FFFFFF !important;
|
||||
}
|
||||
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/**
|
||||
* Plugin Name: BdP Kompass
|
||||
* Description: Wordpress-Plugin zur Unterstützung von Stämmen im Bund der Pfadfinderinnen und Pfadfinder e.V. zur optimalen Verwaltung eurer Webseite
|
||||
* Version: 4.2.1
|
||||
* Version: 4.3.9
|
||||
* Tags: bdp, utility, helper
|
||||
* Requires at least: 6.0
|
||||
* Requires PHP: 8.2
|
||||
@ -12,7 +12,10 @@
|
||||
* Text Domain: bdp-kompass
|
||||
*/
|
||||
|
||||
use Bdp\Modules\Gruppen\Controllers\MainController as GruppenMain;
|
||||
use Bdp\Modules\KompassSettings\Controllers\SettingsPage as KomnpassSettings;
|
||||
use Bdp\Modules\LimitLoginAttempts\Controllers\OptionsPage as OptionsPageAlias;
|
||||
use Bdp\Modules\Mail\Controllers\MailController;
|
||||
use Bdp\Modules\Security\Security;
|
||||
use Bdp\Modules\Seo\Seo;
|
||||
|
||||
@ -24,8 +27,10 @@ function bdp_plugin_install() {
|
||||
|
||||
|
||||
function bdp_plugin_init() {
|
||||
bdp_kompass_load_plugin_textdomain();
|
||||
Security::ProhibitBots();
|
||||
Security::SetPageFilters();
|
||||
GruppenMain::setup();
|
||||
|
||||
if (null == get_option('kompass_already_installed', null)) {
|
||||
Seo::setup();
|
||||
@ -34,11 +39,16 @@ function bdp_plugin_init() {
|
||||
update_option('kompass_already_installed', true);
|
||||
wp_redirect( 'site-health.php?tab=bdp_enhanced_security');
|
||||
}
|
||||
Seo::importVerificationKeys();
|
||||
|
||||
}
|
||||
|
||||
add_action('admin_menu', function () {
|
||||
bdp_kompass_load_plugin_textdomain();
|
||||
new OptionsPageAlias();
|
||||
new KomnpassSettings();
|
||||
new GruppenMain();
|
||||
new MailController();
|
||||
});
|
||||
|
||||
|
||||
@ -52,6 +62,7 @@ function register_custom_theme_directory() {
|
||||
}
|
||||
|
||||
function enqueue_custom_password_js() {
|
||||
wp_enqueue_script( 'searchable-table', BDP_LV_PLUGIN_URL . '/assets/searchtable.js');
|
||||
wp_enqueue_script( 'custom-password-js', BDP_LV_PLUGIN_URL . 'assets/password.js');
|
||||
wp_localize_script( 'custom-password-js', 'php_vars', [
|
||||
'allowed_strengths' => kompass_get_minimal_password_strength(),
|
||||
@ -59,4 +70,4 @@ function enqueue_custom_password_js() {
|
||||
]);
|
||||
}
|
||||
|
||||
#add_action( 'after_setup_theme', 'register_custom_theme_directory' );
|
||||
add_action( 'after_setup_theme', 'kompass_after_setup_theme' );
|
||||
|
61
changelog
Normal file
@ -0,0 +1,61 @@
|
||||
<h4>Version 4.3.9</h4>
|
||||
<ul>
|
||||
<li>Fehlerbehebung</li>
|
||||
</ul>
|
||||
|
||||
<h4>Version 4.3.8</h4>
|
||||
<ul>
|
||||
<li>Google- und Bing-Verifizierung nun auch im Plugin möglich</li>
|
||||
<li>Neue Nutzerrollen</li>
|
||||
<li>Update in Menüstruktur</li>
|
||||
</ul>
|
||||
|
||||
<h4>Version 4.3.7</h4>
|
||||
<ul>
|
||||
<li>Design - Optimierungen</li>
|
||||
</ul>
|
||||
|
||||
<h4>Version 4.3.6</h4>
|
||||
<ul>
|
||||
<li>Sicherheitspatch</li>
|
||||
</ul>
|
||||
|
||||
<h4>Version 4.3.5</h4>
|
||||
<ul>
|
||||
<li>Translation fixes</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h4>Version 4.3.4</h4>
|
||||
<ul>
|
||||
<li>Optimized menu tree</li>
|
||||
</ul>
|
||||
|
||||
<h4>Version 4.3.3</h4>
|
||||
<ul>
|
||||
<li>Bugfix für osobletete Plugins</li>
|
||||
</ul>
|
||||
|
||||
<h4>Version 4.3.2</h4>
|
||||
<ul>
|
||||
<li>Bugfix: Zeitzone in Kalender korrigiert</li>
|
||||
</ul>
|
||||
|
||||
<h4>Version 4.3.1</h4>
|
||||
<ul>
|
||||
<li>Mehrsprachigkeit unterstützt</li>
|
||||
<li>Unterstützung für Smartphones</li>
|
||||
</ul>
|
||||
|
||||
<h4>Version 4.2.1</h4>
|
||||
<ul>
|
||||
<li>Erweiterte Sicherheitsfunktionen implemntiert</li>
|
||||
<li>Passwort-Policies implementiert</li>
|
||||
<li>Integration von Limit Login Attempts (classic)</li>
|
||||
<li>Integration von WPS Hide Login</li>
|
||||
</ul>
|
||||
|
||||
<h4>Version 4.1.1</h4>
|
||||
<ul>
|
||||
<li>Erster release des Plugins</li>
|
||||
</ul>
|
@ -1,12 +1,11 @@
|
||||
<?php
|
||||
function kompass_print_checkbox($settingName) {
|
||||
function kompass_print_checkbox(string $settingName) {
|
||||
$currentSetting = get_option($settingName, []);
|
||||
if (!is_array($currentSetting)) {
|
||||
$currentSetting = [$currentSetting];
|
||||
}
|
||||
|
||||
if (!is_array($currentSetting)) {
|
||||
$currentSetting = [$currentSetting];
|
||||
}
|
||||
$options = ['kompass_limit_login_lockout_notify' => [
|
||||
'email' => 'E-Mail an Administrator'
|
||||
'email' => __('E-Mail to site admin', BDP_LV_PLUGIN_SLUG)
|
||||
],
|
||||
];
|
||||
|
||||
@ -16,7 +15,7 @@ function kompass_print_checkbox($settingName) {
|
||||
|
||||
$setting = $options[$settingName];
|
||||
foreach ($setting as $radioOption => $optionText) {
|
||||
$isChecked = in_array($radioOption, $currentSetting) ? 'checked ' : '' ;
|
||||
$isChecked = in_array($radioOption, $currentSetting) ? 'checked ' : '' ;
|
||||
|
||||
echo '<input ' .
|
||||
$isChecked .
|
24
components/partials/date-element.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
function _kompass_print_datebox($settingName, $settingValue, $style = '') {
|
||||
echo '<input style="' . $style . '" type="date" name="' . $settingName . '" value="' . $settingValue. '" />';
|
||||
if (defined('WP_DEBUG') && WP_DEBUG == true) {
|
||||
echo '<br />' . $settingName;
|
||||
}
|
||||
}
|
||||
|
||||
function kompass_print_datebox(array $args) {
|
||||
if (!isset($args['setting'])) {
|
||||
wp_die('Missing argument setting at text-element ' . print_r($args, true));
|
||||
}
|
||||
$setting = get_option($args['setting'], null);
|
||||
$setting = $setting ?? ( $args['value'] ?? '' );
|
||||
|
||||
$style = isset($args['style']) ? $args['style'] : '';
|
||||
|
||||
$value = esc_attr($setting);
|
||||
|
||||
if ($value === null && isset($args['value'])) {
|
||||
$value = $args['value'];
|
||||
}
|
||||
_kompass_print_datebox($args['setting'], $value, $style);
|
||||
}
|
18
components/partials/form-start.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
function kompass_prepare_form($params = [])
|
||||
{
|
||||
if (isset($params['page'])) {
|
||||
echo ' <form method="post" action="admin.php?page=' .$params['page'] . '">';
|
||||
}
|
||||
|
||||
echo '<input type="hidden" name="update_options" value="true" />';
|
||||
foreach ($params as $key => $value) {
|
||||
echo '<input type="hidden" name="' . $key . '" value="' . $value . '">';
|
||||
}
|
||||
}
|
||||
|
||||
function kompass_close_form(string $buttonText)
|
||||
{
|
||||
submit_button($buttonText,'button');
|
||||
echo '</form>';
|
||||
}
|
8
components/partials/message-box.php
Normal file
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
function kompass_print_message_box(string $message, string $type = 'success')
|
||||
{
|
||||
echo '<div class="notice notice-' . $type .'" style="padding: 5px 10px;">';
|
||||
echo $message;
|
||||
echo '</div>';
|
||||
|
||||
}
|
@ -1,19 +1,19 @@
|
||||
<?php
|
||||
function kompass_print_radio($settingName) {
|
||||
$currentSetting = get_option($settingName);
|
||||
function kompass_print_radio(string $settingName) {
|
||||
$currentSetting = get_option($settingName, '');
|
||||
$options = [
|
||||
'kompass_limit_login_client_type' => [
|
||||
'REMOTE_ADDR' => 'Direkte Verbrindung',
|
||||
'HTTP_X_FORWARDED_FOR' => 'Hinter einem Proxy'
|
||||
'REMOTE_ADDR' => __('Direct connection', BDP_LV_PLUGIN_SLUG),
|
||||
'HTTP_X_FORWARDED_FOR' => __('Behind a proxy', BDP_LV_PLUGIN_SLUG)
|
||||
],
|
||||
'kompass_limit_login_cookies' => [
|
||||
true => 'Ja',
|
||||
false => 'Nein'
|
||||
true => __('Yes', BDP_LV_PLUGIN_SLUG),
|
||||
false => __('No', BDP_LV_PLUGIN_SLUG)
|
||||
],
|
||||
'kompass_password_minimal_strength' => [
|
||||
'1' => 'Alle Passwörter erlauben',
|
||||
'2' => 'Mittelstarke Passwörter',
|
||||
'3' => 'Nur Starke Passwörter'
|
||||
'1' => __('Allow all password strengths', BDP_LV_PLUGIN_SLUG),
|
||||
'2' => __('At least passwords with medium strength', BDP_LV_PLUGIN_SLUG),
|
||||
'3' => __('Only allow strong passwords', BDP_LV_PLUGIN_SLUG)
|
||||
]
|
||||
];
|
||||
|
||||
@ -30,6 +30,6 @@ function kompass_print_radio($settingName) {
|
||||
name="' . $settingName . '"
|
||||
value="' . $radioOption . '"
|
||||
id="setting_' . $settingName . '_' . $radioOption . '" />' .
|
||||
'<label for="setting_' . $settingName . '_' . $radioOption . '">' . $optionText . '</label> ';
|
||||
'<label for="setting_' . $settingName . '_' . $radioOption . '">' . $optionText . '</label><br />';
|
||||
}
|
||||
}
|
9
components/partials/telephon-link.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
function kompass_print_telephone_link(string $telephonnumber)
|
||||
{
|
||||
$numberInternational = $telephonnumber;
|
||||
if (str_starts_with($numberInternational, '0')) {
|
||||
$numberInternational = '+49' . substr($numberInternational,1);
|
||||
}
|
||||
echo '<a href="tel:' . $numberInternational . '">' . $telephonnumber . '</a>';
|
||||
}
|
27
components/partials/text-element.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
function _kompass_print_textbox($settingName, $settingValue, $style = '') {
|
||||
echo '<input style="' . $style . '" type="text" name="' . $settingName . '" value="' . $settingValue. '" />';
|
||||
if (defined('WP_DEBUG') && WP_DEBUG == true) {
|
||||
echo '<br />' . $settingName;
|
||||
}
|
||||
}
|
||||
|
||||
function kompass_print_textbox(array $args) {
|
||||
if (!isset($args['setting'])) {
|
||||
wp_die('Missing argument setting at text-element ' . print_r($args, true));
|
||||
}
|
||||
$setting = get_option($args['setting'], null);
|
||||
$setting = $setting ?? ( $args['value'] ?? '' );
|
||||
|
||||
$style = isset($args['style']) ? $args['style'] : '';
|
||||
|
||||
$value = esc_attr($setting);
|
||||
if (isset($args['unit_division'])) {
|
||||
$value = (int)$value / (int)$args['unit_division'];
|
||||
}
|
||||
|
||||
if ($value === null && isset($args['value'])) {
|
||||
$value = $args['value'];
|
||||
}
|
||||
_kompass_print_textbox($args['setting'], $value, $style);
|
||||
}
|
61
includes/DatabaseHandler.php
Normal file
@ -0,0 +1,61 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Bdp\Libs;
|
||||
|
||||
class DatabaseHandler {
|
||||
public function readFromDb(string $table, array $conditions = []) : array {
|
||||
global $wpdb;
|
||||
$sql = 'SELECT * FROM ' . $wpdb->prefix . $table . $this->parseConditions($conditions);
|
||||
return $this->getResults( $sql );
|
||||
}
|
||||
|
||||
public function readSqlFromDb(string $tableName, string $preparedSql) : array
|
||||
{
|
||||
global $wpdb;
|
||||
$sql = str_replace('%tablename%', $wpdb->prefix . $tableName, $preparedSql );
|
||||
return $this->getResults($sql);
|
||||
}
|
||||
|
||||
public function insertRows(string $tableName, array $newData) : int
|
||||
{
|
||||
global $wpdb;
|
||||
$tableName = $wpdb->prefix . $tableName;
|
||||
$wpdb->insert( $tableName, $newData );
|
||||
return $wpdb->insert_id;
|
||||
}
|
||||
|
||||
public function updateRows(string $tableName, array $newData, $conditions = [])
|
||||
{
|
||||
global $wpdb;
|
||||
$tableName = $wpdb->prefix . $tableName;
|
||||
$wpdb->update( $tableName, $newData, $conditions );
|
||||
}
|
||||
|
||||
public function countSqlRows(string $tableName, array $conditions = []) : int
|
||||
{
|
||||
global $wpdb;
|
||||
$sql = 'SELECT COUNT(*) as count_data FROM ' . $wpdb->prefix . $tableName . $this->parseConditions($conditions);
|
||||
$res = $this->getResults( $sql );
|
||||
$res = $res[0];
|
||||
return (int)$res->count_data;
|
||||
}
|
||||
|
||||
private function getResults(string $sql) : array
|
||||
{
|
||||
global $wpdb;
|
||||
return $wpdb->get_results($sql, OBJECT );
|
||||
}
|
||||
|
||||
private function parseConditions(array $conditionArray) : string
|
||||
{
|
||||
global $wpdb;
|
||||
$_tmpArr = [];
|
||||
foreach ($conditionArray as $key => $value) {
|
||||
$_tmpArr[] = '`' . $key .'` = "' . $wpdb->_real_escape($value) . '"';
|
||||
}
|
||||
|
||||
$returnString = implode(' AND ', $_tmpArr);
|
||||
return $returnString !== '' ? (' WHERE ' . $returnString) : '';
|
||||
}
|
||||
}
|
@ -25,7 +25,14 @@ class WpConfigEditor extends \WP_Filesystem_Direct
|
||||
|
||||
public function writeConfig($value): bool
|
||||
{
|
||||
$this->put_contents(ABSPATH . self::WP_CONFIG_FILE, $value);
|
||||
$value = str_replace('<?php', '', $value);
|
||||
$value = str_replace('<?', '', $value);
|
||||
$value = str_replace('?>', '', $value);
|
||||
|
||||
$value = str_replace(PHP_EOL . PHP_EOL, PHP_EOL, $value);
|
||||
|
||||
$value = '<?php' . PHP_EOL . $value;
|
||||
$this->put_contents(ABSPATH . self::WP_CONFIG_FILE, $value);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -35,7 +42,7 @@ class WpConfigEditor extends \WP_Filesystem_Direct
|
||||
$configContent = $wfs->readConfig();
|
||||
|
||||
if (null === self::getConfigValue($key)) {
|
||||
$configContent .= "define( '$key', $value );";
|
||||
$configContent .= "define( '$key', $value );" . PHP_EOL;
|
||||
}
|
||||
|
||||
preg_match("/define\([ ]?'($key)'\,[ ]?(.*)[ ]?\);/",$configContent, $matches);
|
||||
|
@ -8,7 +8,7 @@ add_action('wp_login_failed', [$loginHandler, 'onFailedLogin']);
|
||||
add_filter('wp_authenticate_user', [$loginHandler, 'onSuccessFullLogin'], 99999, 2);
|
||||
add_filter( 'admin_enqueue_scripts', 'enqueue_custom_password_js',10 );
|
||||
|
||||
add_action('admin_init', 'admin_init');
|
||||
add_action('admin_init', 'kompass_admin_init');
|
||||
|
||||
if (get_option('kompass_cookies', false)) {
|
||||
$loginHandler->handleCookies();
|
||||
@ -20,4 +20,26 @@ if (isset($_POST['save_kompass_balist_list_type'])) {
|
||||
updateBlockOrAllowList($_POST);
|
||||
}
|
||||
|
||||
function add_custom_admin_bar_item() {
|
||||
global $wp_admin_bar;
|
||||
|
||||
// Überprüfen, ob der Benutzer die erforderliche Berechtigung hat
|
||||
if ( current_user_can( 'show_groups' ) ) {
|
||||
// Das Array mit den Eigenschaften des benutzerdefinierten Elements
|
||||
$args = [
|
||||
'id' => 'kompass_gruppen',
|
||||
'title' => '<span class="ab-icon dashicons-groups"></span>' .
|
||||
'<span class="ab-label">' .__('Groups', BDP_LV_PLUGIN_SLUG) . '</span>',
|
||||
'href' => get_admin_url() . 'admin.php?page=kompass-groups',
|
||||
|
||||
];
|
||||
|
||||
// Das benutzerdefinierte Element zur Admin-Leiste hinzufügen
|
||||
$wp_admin_bar->add_node( $args );
|
||||
}
|
||||
}
|
||||
|
||||
// Die Funktion aufrufen, um das benutzerdefinierte Element zur Admin-Leiste hinzuzufügen
|
||||
add_action( 'admin_bar_menu', 'add_custom_admin_bar_item', 50 );
|
||||
|
||||
add_action('wp_head', 'kompass_seo_add_verifications' );
|
@ -16,47 +16,40 @@ function bdp_update_dashboard_style() {
|
||||
|
||||
|
||||
function bdp_add_menu_security() {
|
||||
|
||||
$moduleLoad = get_admin_url() . 'admin.php?page=' . BDP_LV_PLUGIN_SLUG . '/modules/index.php&loadmodule=';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
function bdp_add_menu_contents() {
|
||||
add_menu_page(
|
||||
'Beiträge',
|
||||
'Inhalte',
|
||||
'edit_posts',
|
||||
'edit.php',
|
||||
'',
|
||||
'dashicons-format-aside',
|
||||
4
|
||||
);
|
||||
add_menu_page('Seiten',
|
||||
'Inhalte',
|
||||
'edit_posts',
|
||||
'edit.php?post_type=page',
|
||||
'',
|
||||
'dashicons-format-aside',
|
||||
4
|
||||
);
|
||||
|
||||
add_submenu_page('edit.php',
|
||||
add_submenu_page('edit.php?post_type=page',
|
||||
'media',
|
||||
'Medienverwaltung',
|
||||
'edit_posts',
|
||||
'upload.php'
|
||||
);
|
||||
|
||||
add_submenu_page('edit.php',
|
||||
'media',
|
||||
'Statische Seiten',
|
||||
'edit_posts',
|
||||
'edit.php?post_type=page'
|
||||
);
|
||||
|
||||
add_submenu_page('edit.php',
|
||||
add_submenu_page('edit.php?post_type=page',
|
||||
'comments',
|
||||
'Kommentare',
|
||||
'edit_posts',
|
||||
'edit-comments.php'
|
||||
);
|
||||
|
||||
add_submenu_page('edit.php?post_type=page',
|
||||
'Beiträge',
|
||||
'Beiträge',
|
||||
'edit_posts',
|
||||
'edit.php'
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function bdp_add_menu_mein_lv() {
|
||||
@ -67,7 +60,7 @@ function bdp_add_menu_mein_lv() {
|
||||
add_menu_page(
|
||||
'Mein BdP',
|
||||
'BdP',
|
||||
'manage_options',
|
||||
'show_bdp',
|
||||
$mainSlug,
|
||||
'',
|
||||
BDP_LV_PLUGIN_URL . '/icon.png',
|
||||
@ -75,46 +68,43 @@ function bdp_add_menu_mein_lv() {
|
||||
);
|
||||
|
||||
add_submenu_page($mainSlug,
|
||||
'calendar_settings',
|
||||
'Kalender-Einstellungen',
|
||||
'manage_options',
|
||||
$moduleLoad . 'calendar'
|
||||
);
|
||||
|
||||
add_submenu_page($mainSlug,
|
||||
'calendar_settings',
|
||||
'Über',
|
||||
'manage_options',
|
||||
'Über',
|
||||
'show_bdp',
|
||||
$moduleLoad . 'about'
|
||||
);
|
||||
}
|
||||
|
||||
function bdp_add_menu_setup() {
|
||||
add_menu_page(
|
||||
'Benutzer',
|
||||
'Benutzer-Verwaltung',
|
||||
'manage_options',
|
||||
'users.php',
|
||||
'',
|
||||
'dashicons-admin-users',
|
||||
6
|
||||
);
|
||||
|
||||
|
||||
add_menu_page(
|
||||
'Allgemeine Einstellungen',
|
||||
'Webseiten-Setup',
|
||||
'manage_options',
|
||||
'users.php',
|
||||
'options-general.php',
|
||||
'',
|
||||
'dashicons-admin-generic',
|
||||
6
|
||||
);
|
||||
|
||||
add_submenu_page('users.php',
|
||||
'Allgemeine Einstellungen',
|
||||
'Allgemeine Einstellungen',
|
||||
'manage_options',
|
||||
'options-general.php'
|
||||
);
|
||||
|
||||
add_submenu_page('users.php',
|
||||
add_submenu_page('options-general.php',
|
||||
'Design-Einstellungen',
|
||||
'Template bearbeiten',
|
||||
'manage_options',
|
||||
'customize.php?return=/wp-admin/'
|
||||
);
|
||||
|
||||
add_submenu_page('users.php',
|
||||
add_submenu_page('options-general.php',
|
||||
'plugins',
|
||||
'Erweiterungen',
|
||||
'manage_options',
|
||||
@ -122,28 +112,21 @@ function bdp_add_menu_setup() {
|
||||
);
|
||||
|
||||
|
||||
add_submenu_page('users.php',
|
||||
add_submenu_page('options-general.php',
|
||||
'themes',
|
||||
'Designs',
|
||||
'manage_options',
|
||||
'themes.php'
|
||||
);
|
||||
|
||||
add_submenu_page('users.php',
|
||||
|
||||
add_submenu_page('options-general.php',
|
||||
'Sicherheit',
|
||||
'Webseiten-Sicherheit',
|
||||
'manage_options',
|
||||
'site-health.php'
|
||||
);
|
||||
|
||||
$loginOption = new \Bdp\Modules\LimitLoginAttempts\Controllers\OptionsPage();
|
||||
add_submenu_page('users.php',
|
||||
'Login-Sicherheit',
|
||||
'Login-Sicherheit',
|
||||
'manage_options',
|
||||
BDP_LV_PLUGIN_SLUG . '-limit-login-attempts',
|
||||
[$loginOption, 'limit_login_option_page']
|
||||
);
|
||||
}
|
||||
|
||||
function bdp_cleanup_menu()
|
||||
@ -165,15 +148,13 @@ function bdp_cleanup_menu()
|
||||
bdp_add_menu_security();
|
||||
|
||||
|
||||
|
||||
remove_submenu_page('edit.php?post_type=page','post-new.php?post_type=page');
|
||||
remove_submenu_page('users.php','user-new.php');
|
||||
remove_submenu_page('users.php','profile.php');
|
||||
|
||||
remove_submenu_page('edit.php','post-new.php');
|
||||
remove_submenu_page('edit.php','edit-tags.php?taxonomy=category');
|
||||
remove_submenu_page('edit.php','edit-tags.php?taxonomy=post_tag');
|
||||
|
||||
|
||||
}
|
||||
|
||||
function bdp_create_menu_structure()
|
||||
|
@ -3,4 +3,7 @@ require_once (ABSPATH . '/wp-admin/includes/plugin.php');
|
||||
require_once (ABSPATH . '/wp-admin/includes/class-wp-filesystem-base.php');
|
||||
require_once (ABSPATH . '/wp-admin/includes/class-wp-filesystem-direct.php');
|
||||
require_once (ABSPATH . '/wp-includes/pluggable.php');
|
||||
require_once (ABSPATH . '/wp-admin/includes/template.php');
|
||||
require_once (ABSPATH . '/wp-includes/capabilities.php');
|
||||
require_once (ABSPATH . '/wp-admin/includes/template.php');
|
||||
require_once (ABSPATH . '/wp-admin/includes/file.php');
|
||||
require_once( ABSPATH . '/wp-admin/includes/upgrade.php' );
|
105
includes/roles.php
Normal file
@ -0,0 +1,105 @@
|
||||
<?php
|
||||
function setup_site_roles()
|
||||
{
|
||||
remove_role( 'subscriber' ); // Hier 'custom_role_slug' durch den tatsächlichen Slug der zu löschenden Rolle ersetzen
|
||||
remove_role( 'contributor' ); // Hier 'custom_role_slug' durch den tatsächlichen Slug der zu löschenden Rolle ersetzen
|
||||
remove_role( 'author' ); // Hier 'custom_role_slug' durch den tatsächlichen Slug der zu löschenden Rolle ersetzen
|
||||
remove_role( 'editor' ); // Hier 'custom_role_slug' durch den tatsächlichen Slug der zu löschenden Rolle ersetzen
|
||||
$capabilities = array(
|
||||
'read' => true, // Die Rolle kann Beiträge lesen
|
||||
'edit_posts' => true, // Die Rolle kann Beiträge bearbeiten
|
||||
'delete_posts' => true, // Die Rolle kann Beiträge löschen
|
||||
'publish_posts' => true, // Die Rolle kann Beiträge veröffentlichen
|
||||
// Weitere Berechtigungen können nach Bedarf hinzugefügt werden
|
||||
);
|
||||
|
||||
// Rolle hinzufügen
|
||||
add_role( 'stafue', 'Stammesführung', kompass_get_capa_stafue() );
|
||||
add_role( 'grufue', 'Gruppenführung', kompass_get_capa_grufue() );
|
||||
add_role( 'aktionsleitung', 'Aktionsleitung', kompass_get_capa_aktionsleitung() );
|
||||
add_role( 'author', 'Redakteur', kompass_get_capa_editor() );
|
||||
|
||||
$role = get_role( 'administrator' );
|
||||
foreach (kompass_get_capa_stafue() as $capability => $value) {
|
||||
$role->add_cap( $capability );
|
||||
}
|
||||
}
|
||||
|
||||
function kompass_get_capa_stafue() : array
|
||||
{
|
||||
return array_merge(
|
||||
[
|
||||
'create_groups' => true,
|
||||
'delete_groups' => true,
|
||||
'edit_groups' => true,
|
||||
'delete_teilis' => true,
|
||||
'move_teilis' => true,
|
||||
'create_events' => true,
|
||||
], kompass_get_capa_aktionsleitung(), kompass_get_capa_grufue(), kompass_get_capa_editor());
|
||||
}
|
||||
|
||||
|
||||
|
||||
function kompass_get_capa_aktionsleitung() : array
|
||||
{
|
||||
return [
|
||||
'show_bdp' => true,
|
||||
'create_event_teilis' => true,
|
||||
'edit_event_teilis' => true,
|
||||
'delete_event_teilis' => true,
|
||||
'send_event_mails' => true,
|
||||
];
|
||||
}
|
||||
|
||||
function kompass_get_capa_grufue() : array
|
||||
{
|
||||
return [
|
||||
'show_bdp' => true,
|
||||
'show_groups' => true,
|
||||
'create_teilis' => true,
|
||||
'edit_teilis' => true,
|
||||
'send_mails' => true
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
function kompass_get_capa_editor() : array
|
||||
{
|
||||
return [
|
||||
'moderate_comments' => true,
|
||||
'manage_categories' => true,
|
||||
'manage_links' => true,
|
||||
'upload_files' => true,
|
||||
'unfiltered_html' => true,
|
||||
'edit_posts' => true,
|
||||
'edit_others_posts' => true,
|
||||
'edit_published_posts' => true,
|
||||
'publish_posts' => true,
|
||||
'edit_pages' => true,
|
||||
'read' => true,
|
||||
'level_7' => true,
|
||||
'level_6' => true,
|
||||
'level_5' => true,
|
||||
'level_4' => true,
|
||||
'level_3' => true,
|
||||
'level_2' => true,
|
||||
'level_1' => true,
|
||||
'level_0' => true,
|
||||
'edit_others_pages' => true,
|
||||
'edit_published_pages' => true,
|
||||
'publish_pages' => true,
|
||||
'delete_pages' => true,
|
||||
'delete_others_pages' => true,
|
||||
'delete_published_pages' => true,
|
||||
'delete_posts' => true,
|
||||
'delete_others_posts' => true,
|
||||
'delete_published_posts' => true,
|
||||
'delete_private_posts' => true,
|
||||
'edit_private_posts' => true,
|
||||
'read_private_posts' => true,
|
||||
'delete_private_pages' => true,
|
||||
'edit_private_pages' => true,
|
||||
'read_private_pages' => true,
|
||||
|
||||
];
|
||||
}
|
@ -1,9 +1,7 @@
|
||||
<?php
|
||||
if ( ! defined( 'WP_PLUGIN_DIR' ) ) { // Abspath to wp-content/plugins
|
||||
define( 'WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins' ); // Full path, no trailing slash.
|
||||
}
|
||||
|
||||
use Bdp\Modules\LimitLoginAttempts\Controllers\LoginHandler;
|
||||
use Bdp\Libs\DatabaseHandler;
|
||||
|
||||
|
||||
|
||||
require_once dirname(__FILE__) . '/pre_requires.php';
|
||||
@ -13,17 +11,24 @@ require_once dirname(__FILE__) . '/update.class.php';
|
||||
|
||||
require_once BDP_LV_PLUGIN_DIR . 'includes/FileAccess.class.php';
|
||||
require_once BDP_LV_PLUGIN_DIR . 'includes/WpConfigEditor.class.php';
|
||||
require_once BDP_LV_PLUGIN_DIR . 'includes/DatabaseHandler.php';
|
||||
require_once (BDP_LV_PLUGIN_DIR . '/includes/roles.php');
|
||||
|
||||
require_once (BDP_LV_PLUGIN_DIR . '/includes/filters.php');
|
||||
|
||||
require_once (BDP_LV_PLUGIN_DIR . '/lib/ics-parser/Event.php');
|
||||
require_once (BDP_LV_PLUGIN_DIR . '/lib/ics-parser/ICal.php');
|
||||
|
||||
require_once (BDP_LV_PLUGIN_DIR . '/modules/seo/seo.php');
|
||||
require_once (BDP_LV_PLUGIN_DIR . '/modules/calendar/calendar.php');
|
||||
require_once (BDP_LV_PLUGIN_DIR . '/includes/frontend-functions.php');
|
||||
|
||||
require_once (BDP_LV_PLUGIN_DIR . '/modules/calendar/Views/settings-form.php');
|
||||
require_once (BDP_LV_PLUGIN_DIR . '/modules/security/security.php');
|
||||
|
||||
function admin_init()
|
||||
|
||||
$dbHandler = new DatabaseHandler();
|
||||
function kompass_admin_init()
|
||||
{
|
||||
kompass_settings_validators();
|
||||
}
|
||||
@ -32,10 +37,16 @@ bdp_create_menu_structure();
|
||||
|
||||
|
||||
function bdp_kompass_load_plugin_textdomain() {
|
||||
load_textdomain( BDP_LV_PLUGIN_SLUG, BDP_LV_PLUGIN_DIR . '/lang/' . BDP_LV_PLUGIN_SLUG . '_' . get_locale() . '.mo' );
|
||||
load_textdomain( BDP_LV_PLUGIN_SLUG, BDP_LV_PLUGIN_DIR . '/lang/' . BDP_LV_PLUGIN_SLUG . '-' . get_locale() . '.mo' );
|
||||
}
|
||||
|
||||
|
||||
function kompass_after_setup_theme()
|
||||
{
|
||||
setup_site_roles();
|
||||
#register_custom_theme_directory();
|
||||
|
||||
}
|
||||
|
||||
|
||||
$loginHandler = new LoginHandler();
|
||||
|
@ -19,14 +19,26 @@ spl_autoload_register(function ($className) {
|
||||
require_once $fileName;
|
||||
});
|
||||
|
||||
$modules = ['LimitLoginAttempts', 'PasswordStrength'];
|
||||
$subdirs = ['includes', 'Controllers', 'Views'];
|
||||
|
||||
foreach ($modules as $curModule) {
|
||||
foreach ($subdirs as $dir) {
|
||||
$directoryPath = BDP_LV_PLUGIN_DIR . 'modules/' . $curModule . '/' . $dir . '/';
|
||||
foreach (glob($directoryPath . '*.php') as $file) {
|
||||
require_once $file;
|
||||
}
|
||||
}
|
||||
$directoryPath = BDP_LV_PLUGIN_DIR . 'components/partials/';
|
||||
foreach (glob($directoryPath . '*.php') as $file) {
|
||||
require_once $file;
|
||||
}
|
||||
|
||||
$subdirs = ['includes', 'Controllers', 'Views', 'Requests', 'Actions'];
|
||||
|
||||
foreach (scandir(BDP_LV_PLUGIN_DIR . 'modules/') as $curModule) {
|
||||
if ($curModule != '.' && $curModule != '..' && is_dir(BDP_LV_PLUGIN_DIR . 'modules/' . $curModule))
|
||||
{
|
||||
if ($curModule == 'calendar') {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($subdirs as $dir) {
|
||||
$directoryPath = BDP_LV_PLUGIN_DIR . 'modules/' . $curModule . '/' . $dir . '/';
|
||||
foreach (glob($directoryPath . '*.php') as $file) {
|
||||
require_once $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -12,7 +12,7 @@ class BdpVersionChecker
|
||||
{
|
||||
$plugin_data = get_plugin_data( BDP_LV_STARTUP_FILE );
|
||||
$this->plugin_slug = BDP_LV_PLUGIN_SLUG;
|
||||
$this->updateUrl = $plugin_data['UpdateURI'] . '/info_development.json';
|
||||
$this->updateUrl = $plugin_data['UpdateURI'] . '/info.json';
|
||||
$this->version = $plugin_data['Version'];
|
||||
$this->cache_key = 'bdp-kompass-upd';
|
||||
$this->cache_allowed = false;
|
||||
|
BIN
lang/bdp-kompass-de_DE.mo
Normal file
@ -1,3 +1,24 @@
|
||||
msgid "kompass"
|
||||
msgstr "kompass"
|
||||
|
||||
msgid "Calendar settings"
|
||||
msgstr "Kalender-Einstellungen"
|
||||
|
||||
msgid "Calendar URL"
|
||||
msgstr "Kalender-Adresse"
|
||||
|
||||
msgid "SEO-Options"
|
||||
msgstr "Suchmaschinen-Einstellungen"
|
||||
|
||||
msgid "Google Site verification"
|
||||
msgstr "Google Seiten-Verifikation"
|
||||
|
||||
msgid "Bing Site verification"
|
||||
msgstr "Bing Seiten-Verifikation"
|
||||
|
||||
msgid "Calendar Settings"
|
||||
msgstr "Kalender-Einstellungen"
|
||||
|
||||
msgid "Extended Security"
|
||||
msgstr "Erweiterte Sicherheit"
|
||||
|
||||
@ -108,4 +129,151 @@ msgid "Change Login URL"
|
||||
msgstr "Login-URL ändern"
|
||||
|
||||
msgid "Changing the default login URL of WordPress is advisable to enhance the security of your website. By default, WordPress login URLs is /wp-admin or /wp-login.php, which are easily guessed by hackers and facilitate attacks such as brute-force attacks. Changing the login URL to something unique and difficult to guess increases security since potential attackers will struggle to find the correct URL. This can help protect your website from unauthorized access and other malicious activities."
|
||||
msgstr "Es ist ratsam, die Standard-Login-URL von WordPress zu ändern, um die Sicherheit deiner Website zu erhöhen. Standardmäßig lautet die Login-URL von WordPress /wp-admin oder /wp-login.php, was für Hacker leicht zu erraten ist und Angriffe wie Brute-Force-Attacken erleichtern kann. Durch Ändern der Login-URL auf etwas Einzigartiges und schwer zu erraten, erhöhst du die Sicherheit, da potenzielle Angreifer Schwierigkeiten haben werden, die richtige URL zu finden. Dies kann helfen, deine Website vor unautorisiertem Zugriff und anderen böswilligen Aktivitäten zu schützen."
|
||||
msgstr "Es ist ratsam, die Standard-Login-URL von WordPress zu ändern, um die Sicherheit deiner Website zu erhöhen. Standardmäßig lautet die Login-URL von WordPress /wp-admin oder /wp-login.php, was für Hacker leicht zu erraten ist und Angriffe wie Brute-Force-Attacken erleichtern kann. Durch Ändern der Login-URL auf etwas Einzigartiges und schwer zu erraten, erhöhst du die Sicherheit, da potenzielle Angreifer Schwierigkeiten haben werden, die richtige URL zu finden. Dies kann helfen, deine Website vor unautorisiertem Zugriff und anderen böswilligen Aktivitäten zu schützen."
|
||||
|
||||
msgid "Login-Protection"
|
||||
msgstr "Login-Sicherheit"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
msgid "There are no ip addresses blocked."
|
||||
msgstr "Derzeit sind keine Adressen gesperrt."
|
||||
|
||||
msgid "IP address"
|
||||
msgstr "IP-Adresse"
|
||||
|
||||
msgid "Blocked until"
|
||||
msgstr "Gesperrt bis"
|
||||
|
||||
msgid "Actions"
|
||||
msgstr "Aktionen"
|
||||
|
||||
msgid "The settings were saved."
|
||||
msgstr "Die Einstellungen wurden gespeichert."
|
||||
|
||||
msgid "The ip address was released."
|
||||
msgstr "Die IP-Adresse wurde freigegeben."
|
||||
|
||||
msgid "The list was saved."
|
||||
msgstr "Die Liste wurde gespeichert."
|
||||
|
||||
msgid "An error occured."
|
||||
msgstr "Es ist ein Fehler aufgetreten"
|
||||
|
||||
msgid "Options"
|
||||
msgstr "Optionen"
|
||||
|
||||
msgid "Blocklist"
|
||||
msgstr "Blocklist"
|
||||
|
||||
msgid "Allowlist"
|
||||
msgstr "Allowlist"
|
||||
|
||||
msgid "Blocked IP addresses"
|
||||
msgstr "Gesperrte IP-Adressen"
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgstr "Zu vile fehlerhafte Login-Versuche."
|
||||
|
||||
msgid "Please try again later."
|
||||
msgstr "Bitte versuche es später erneut."
|
||||
|
||||
msgid "%d hour"
|
||||
msgid_plural "%d hours"
|
||||
msgstr[0] "%d Stunde"
|
||||
msgstr[1] "%d Stunden"
|
||||
|
||||
|
||||
msgid "Please try again in %d hour."
|
||||
msgid_plural "Please try again in %d hours."
|
||||
msgstr[0] "Bitte versuche es in %d Stunde noch einmal."
|
||||
msgstr[1] "Bitte versuche es in %d Stunden noch einmal."
|
||||
|
||||
msgid "Please try again in %d minute."
|
||||
msgid_plural "Please try again in %d minutes."
|
||||
msgstr[0] "Bitte versuche es in %d Minute noch einmal."
|
||||
msgstr[1] "Bitte versuche es in %d Minuten noch einmal."
|
||||
|
||||
msgid "%d minute"
|
||||
msgid_plural "%d minutes"
|
||||
msgstr[0] "%d Minute"
|
||||
msgstr[1] "%d Minuten"
|
||||
|
||||
msgid "Leave blank for delete"
|
||||
msgstr "Zum Löschen frei lassen"
|
||||
|
||||
msgid "Add ip address"
|
||||
msgstr "IP-Adresse hinzufügen"
|
||||
|
||||
msgid "Please use line breaks to enter multiple ip addresses"
|
||||
msgstr "Bitte Zeilenumbruch verwenden, um mehrere IP-Adressen einzutragen"
|
||||
|
||||
msgid "Maximum reps until lockout"
|
||||
msgstr "Maximale Wiederholungen bis zur Sperrung"
|
||||
|
||||
msgid "Duration of lockout (in minutes)"
|
||||
msgstr "Dauer der Sperre (in Minuten)"
|
||||
|
||||
msgid "Maximum number of lockouts"
|
||||
msgstr "Maximale Anzahl an Sperrungen"
|
||||
|
||||
msgid "Long-term duration (in hours)"
|
||||
msgstr "Langzeitsperre (in Stunden)"
|
||||
|
||||
msgid "Minimum password strength"
|
||||
msgstr "Minimale Passwort-Stärke"
|
||||
|
||||
msgid "Page accessible via"
|
||||
msgstr "Seite erreichbar über"
|
||||
|
||||
msgid "Handle cookies"
|
||||
msgstr "Cookies verarbeiten"
|
||||
|
||||
msgid "Notify if blocked"
|
||||
msgstr "Bei Sperrung benachrichtigen"
|
||||
|
||||
msgid "Failed attempts until notification"
|
||||
msgstr "Fehlversuche bis zur Benachrichtigung"
|
||||
|
||||
msgid "E-Mail to site admin"
|
||||
msgstr "E-Mail an den Webseiten-Administrator"
|
||||
|
||||
msgid "Direct connection"
|
||||
msgstr "Direkte Verbindung"
|
||||
|
||||
msgid "Behind a proxy"
|
||||
msgstr "Hinter einem Proxy"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
msgid "No"
|
||||
msgstr "Nein"
|
||||
|
||||
msgid "Allow all password strengths"
|
||||
msgstr "Alle Passwort-Stärken erlauben"
|
||||
|
||||
msgid "At least passwords with medium strength"
|
||||
msgstr "Mindestens Passwortstärke normal"
|
||||
|
||||
msgid "Only allow strong passwords"
|
||||
msgstr "Nur starke Passwörter erlauben"
|
||||
|
||||
msgid "The password does not correspond to the requirements."
|
||||
msgstr "Dass Passwort entspricht nicht den Anforderungen."
|
||||
|
||||
msgid "Release ip address"
|
||||
msgstr "IP-Adresse freigeben"
|
||||
|
||||
msgid "Add ip address to blocklist"
|
||||
msgstr "IP-Adresse auf Blocklist setzen"
|
||||
|
||||
msgid "Add ip address to allowlist and release"
|
||||
msgstr "IP-Adresse auf Allowlist setzen und freigeben"
|
||||
|
||||
msgid "Search for ip address"
|
||||
msgstr "Nach IP-Adresse suchen"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
21
lib/database/kompass_stammesgruppen_gruppen.sql
Normal file
@ -0,0 +1,21 @@
|
||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||
START TRANSACTION;
|
||||
|
||||
CREATE TABLE `%tablename%` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`gruppen_name` varchar(256) COLLATE utf8mb4_unicode_520_ci NOT NULL,
|
||||
`gruppe_grufue` bigint UNSIGNED DEFAULT NULL,
|
||||
PRIMARY KEY (id)
|
||||
|
||||
) %charset%;
|
||||
|
||||
|
||||
ALTER TABLE `%tablename%`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
|
||||
ALTER TABLE `%tablename%`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT;
|
||||
|
||||
ALTER TABLE `%tablename%` ADD CONSTRAINT `gruppe_grufue` FOREIGN KEY (`gruppe_grufue`) REFERENCES `%prefix%users`(`ID`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
COMMIT;
|
49
lib/database/kompass_stammesgruppen_teilis.sql
Normal file
@ -0,0 +1,49 @@
|
||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||
START TRANSACTION;
|
||||
SET time_zone = "+00:00";
|
||||
|
||||
CREATE TABLE `%tablename%` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`gruppe_id` int NOT NULL,
|
||||
`vorname` varchar(128) NOT NULL,
|
||||
`nachname` varchar(128) NOT NULL,
|
||||
`geburtsdatum` date DEFAULT NULL,
|
||||
`ansprechpartner` varchar(256) DEFAULT NULL,
|
||||
`strasse` varchar(128) DEFAULT NULL,
|
||||
`hausnummer` varchar(8) DEFAULT NULL,
|
||||
`plz` varchar(5) DEFAULT NULL,
|
||||
`ort` varchar(128) DEFAULT NULL,
|
||||
`email_1` varchar(512) NOT NULL,
|
||||
`email_2` varchar(512) DEFAULT NULL,
|
||||
`telefon_1` varchar(16) NOT NULL,
|
||||
`telefon_2` varchar(16) DEFAULT NULL,
|
||||
`badeerlaubnis` enum('complete','partial','none','') NOT NULL DEFAULT 'none',
|
||||
`allergien` varchar(2048) NOT NULL,
|
||||
`abholung` enum('alone','parents','other','') NOT NULL DEFAULT 'parents',
|
||||
`abholung_text` varchar(1024) NOT NULL DEFAULT '0',
|
||||
`foto_socialmedia` tinyint NOT NULL DEFAULT '0',
|
||||
`foto_print` tinyint NOT NULL DEFAULT '0',
|
||||
`foto_webseite` tinyint NOT NULL DEFAULT '0',
|
||||
`foto_partner` tinyint NOT NULL DEFAULT '0',
|
||||
`halstuch` enum('none','woe','pfadi','rr') NOT NULL DEFAULT 'none',
|
||||
`anmerkungen` varchar(2048) NOT NULL,
|
||||
`aufnahmeantrag_da` tinyint NOT NULL DEFAULT '0',
|
||||
`fotoerlaubnis_da` tinyint NOT NULL DEFAULT '0',
|
||||
`elterninfo_da` tinyint NOT NULL DEFAULT '0',
|
||||
`badeerlaubnis_da` tinyint NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (id)
|
||||
) %charset%;
|
||||
|
||||
|
||||
ALTER TABLE `%tablename%`
|
||||
ADD PRIMARY KEY (`id`),
|
||||
ADD KEY `teili_gruppe` (`gruppe_id`);
|
||||
|
||||
|
||||
ALTER TABLE `%tablename%`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT;
|
||||
|
||||
|
||||
ALTER TABLE `%tablename%`
|
||||
ADD CONSTRAINT `teili_gruppe` FOREIGN KEY (`gruppe_id`) REFERENCES `%prefix%kompass_stammesgruppen_gruppen` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
COMMIT;
|
@ -154,21 +154,20 @@ class Event
|
||||
{
|
||||
foreach ($data as $key => $value) {
|
||||
if ($key == 'DTSTART_array' || $key == 'DTEND_array') {
|
||||
$timeZone = 'Europe/Berlin';
|
||||
if (isset($value[0]['TZID'])) {
|
||||
$timeZone = $value[0]['TZID'];
|
||||
}
|
||||
|
||||
$dateString = $value[1];
|
||||
$dateTime = \DateTime::createFromFormat('Ymd\THis', $dateString);
|
||||
|
||||
$dateTime = \DateTime::createFromFormat('Ymd\THis', $dateString, new \DateTimeZone($timeZone));
|
||||
if (false === $dateTime) {
|
||||
$this->wholeDay = true;
|
||||
$dateTime = \DateTime::createFromFormat('Ymd', $dateString);
|
||||
$dateTime = \DateTime::createFromFormat('Ymd', $dateString, new \DateTimeZone($timeZone));
|
||||
}
|
||||
|
||||
$timeZone = 'Europe/Berlin';
|
||||
if (isset($value[0]['TZID'])) {
|
||||
$timeZone = $value[0]['TZID'];
|
||||
}
|
||||
|
||||
$dateTime->setTimezone(new \DateTimeZone($timeZone));
|
||||
|
||||
$dateTime->setTimezone(new \DateTimeZone('UTC'));
|
||||
if ($key == 'DTSTART_array') {
|
||||
$this->start = $dateTime->format('d.m.Y H:i:s');
|
||||
$this->startInt = $dateTime->getTimestamp();
|
||||
@ -176,9 +175,7 @@ class Event
|
||||
$this->end = $dateTime->format('d.m.Y H:i:s');
|
||||
$this->endInt = $dateTime->getTimestamp();
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
$variable = self::snakeCase($key);
|
||||
if (property_exists($this, $variable)) {
|
||||
$this->{$variable} = $this->prepareData($value);
|
||||
|
@ -2223,7 +2223,6 @@ class ICal
|
||||
if ($ignoreUtc && strtoupper($timeZone) === self::TIME_ZONE_UTC) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $timeZone;
|
||||
}
|
||||
|
||||
|
18
modules/Gruppen/Actions/CreateGroupAction.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
use Bdp\Modules\Gruppen\Controllers\MainController;
|
||||
|
||||
class CreateGroupAction
|
||||
{
|
||||
public static function execute(array $newData)
|
||||
{
|
||||
global $dbHandler;
|
||||
if (!current_user_can('create_groups')) {
|
||||
kompass_print_message_box(__('You are not allowed to create a group', BDP_LV_PLUGIN_SLUG), 'error');
|
||||
}
|
||||
|
||||
global $dbHandler;
|
||||
$dbHandler->insertRows(MainController::KOMPASS_STAMMESGRUPPEN_GRUPPEN, $newData);
|
||||
kompass_print_message_box(__('The group was created.', BDP_LV_PLUGIN_SLUG));
|
||||
}
|
||||
}
|
21
modules/Gruppen/Actions/CreateGroupMemberAction.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
use Bdp\Modules\Gruppen\Controllers\MainController;
|
||||
|
||||
class CreateGroupMemberAction
|
||||
{
|
||||
public static function execute(array $userData) : int
|
||||
{
|
||||
global $dbHandler;
|
||||
if (!current_user_can('create_teilis')) {
|
||||
kompass_print_message_box(__('You are not allowed to add a member', BDP_LV_PLUGIN_SLUG), 'error');
|
||||
}
|
||||
|
||||
global $dbHandler;
|
||||
|
||||
$userData['gruppe_id'] = 1;
|
||||
|
||||
kompass_print_message_box(__('The member was added.', BDP_LV_PLUGIN_SLUG));
|
||||
return $dbHandler->insertRows(MainController::KOMPASS_STAMMESGRUPPEN_TEILIS, $userData);
|
||||
}
|
||||
}
|
37
modules/Gruppen/Actions/CreateGroupMemberDataAction.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
use Bdp\Modules\Gruppen\Controllers\MainController;
|
||||
|
||||
class CreateGroupMemberDataAction
|
||||
{
|
||||
public static function execute(array $userData) : array
|
||||
{
|
||||
$dataKeys = [
|
||||
'vorname' => 'kompass_group_member_firstname',
|
||||
'nachname' => 'kompass_group_member_lastname',
|
||||
'geburtsdatum' => 'kompass_group_member_birthday',
|
||||
'ansprechpartner' => 'kompass_group_member_parents',
|
||||
'email_1' => 'kompass_group_member_email_1',
|
||||
'email_2' => 'kompass_group_member_email_2',
|
||||
'telefon_1' => 'kompass_group_member_phone_1',
|
||||
'telefon_2' => 'kompass_group_member_phone_2',
|
||||
];
|
||||
|
||||
$return = ['data' => [], 'rawData' => [], 'errors' => []];
|
||||
foreach ($dataKeys as $dbKey => $formKey) {
|
||||
$value = trim($userData[$formKey]);
|
||||
$return['rawData'][$formKey] = $value;
|
||||
if ($dbKey === 'email_2' || $dbKey === 'telefon_2') {
|
||||
$return['data'][$dbKey] = $value;
|
||||
} else {
|
||||
if ( $value === '' ) {
|
||||
$return['errors'][] = sprintf(__( 'The field "%s" is required.', BDP_LV_PLUGIN_SLUG ), $dbKey);
|
||||
} else {
|
||||
$return['data'][ $dbKey ] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
}
|
19
modules/Gruppen/Actions/UpdateGroupAction.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
use Bdp\Modules\Gruppen\Controllers\MainController;
|
||||
|
||||
class UpdateGroupAction
|
||||
{
|
||||
public static function execute(array $newData, int $groupId)
|
||||
{
|
||||
global $dbHandler;
|
||||
if (!current_user_can('edit_groups')) {
|
||||
kompass_print_message_box(__('You are not allowed to update a group', BDP_LV_PLUGIN_SLUG), 'error');
|
||||
}
|
||||
|
||||
global $dbHandler;
|
||||
$dbHandler->updateRows(MainController::KOMPASS_STAMMESGRUPPEN_GRUPPEN, $newData, ['id' => $groupId]);
|
||||
|
||||
kompass_print_message_box(__('The group was updated.', BDP_LV_PLUGIN_SLUG));
|
||||
}
|
||||
}
|
17
modules/Gruppen/Controllers/CreateGroupController.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace Bdp\Modules\Gruppen\Controllers;
|
||||
|
||||
use Bdp\Libs\FileAccess;
|
||||
|
||||
class CreateGroupController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
if (current_user_can('create_groups')) {
|
||||
kompass_create_group_form();
|
||||
} else {
|
||||
kompass_print_gruppen_overview();
|
||||
}
|
||||
}
|
||||
}
|
17
modules/Gruppen/Controllers/CreateMemberController.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace Bdp\Modules\Gruppen\Controllers;
|
||||
|
||||
use Bdp\Libs\FileAccess;
|
||||
|
||||
class CreateMemberController
|
||||
{
|
||||
public function __construct(array $prefilledData = [])
|
||||
{
|
||||
if (current_user_can('create_teilis')) {
|
||||
kompass_create_group_member_form($prefilledData);
|
||||
} else {
|
||||
kompass_print_gruppen_overview();
|
||||
}
|
||||
}
|
||||
}
|
139
modules/Gruppen/Controllers/MainController.php
Normal file
@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
namespace Bdp\Modules\Gruppen\Controllers;
|
||||
|
||||
use Bdp\Libs\FileAccess;
|
||||
use SearchMemberRequest;
|
||||
|
||||
class MainController
|
||||
{
|
||||
public const KOMPASS_STAMMESGRUPPEN_GRUPPEN = 'kompass_stammesgruppen_gruppen';
|
||||
public const KOMPASS_STAMMESGRUPPEN_TEILIS = 'kompass_stammesgruppen_teilis';
|
||||
|
||||
public static function setup()
|
||||
{
|
||||
global $wpdb;
|
||||
|
||||
$charset = $wpdb->get_charset_collate();
|
||||
$fileReader = new FileAccess();
|
||||
foreach ([self::KOMPASS_STAMMESGRUPPEN_GRUPPEN, self::KOMPASS_STAMMESGRUPPEN_TEILIS] as $table) {
|
||||
$sqlTable = $wpdb->prefix . $table;
|
||||
$sql = "SHOW TABLES LIKE '$sqlTable'";
|
||||
|
||||
$result = $wpdb->get_var( $sql );
|
||||
if ( $result == $sqlTable ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$sqlSetup = str_replace(
|
||||
'%tablename%',
|
||||
$sqlTable,
|
||||
$fileReader->get_contents( WP_PLUGIN_DIR . '/' . BDP_LV_PLUGIN_SLUG . '/lib/database/' . $table . '.sql' ) );
|
||||
|
||||
$sqlSetup = str_replace('%charset%', $charset, $sqlSetup);
|
||||
$sqlSetup = str_replace('%prefix%', $wpdb->prefix, $sqlSetup);
|
||||
|
||||
|
||||
|
||||
dbDelta( $sqlSetup );
|
||||
}
|
||||
|
||||
}
|
||||
public function __construct()
|
||||
{
|
||||
add_submenu_page(
|
||||
BDP_LV_PLUGIN_DIR . '/modules/index.php',
|
||||
__('Groups', BDP_LV_PLUGIN_SLUG),
|
||||
__('Groups', BDP_LV_PLUGIN_SLUG),
|
||||
'show_groups',
|
||||
'kompass-groups',
|
||||
[$this, 'router'],
|
||||
1);
|
||||
}
|
||||
|
||||
|
||||
public function router()
|
||||
{
|
||||
if (isset($_REQUEST['action'])) {
|
||||
switch ($_REQUEST['action']) {
|
||||
case 'searchmember':
|
||||
$memberList = SearchMemberRequest::listByName($_POST['member_name']);
|
||||
new PrintMemberListController($memberList);
|
||||
break;
|
||||
|
||||
case 'create_group_form':
|
||||
new CreateGroupController();
|
||||
break;
|
||||
|
||||
case 'update-group':
|
||||
\UpdateGroupAction::execute(['gruppen_name' => $_REQUEST['kompass_groups_group_name']],
|
||||
(int)$_REQUEST['group_id']);
|
||||
|
||||
new PrintGroupsController();
|
||||
break;
|
||||
|
||||
case 'create-group':
|
||||
$data = ['gruppen_name' => $_REQUEST['kompass_groups_group_name']];
|
||||
\CreateGroupAction::execute($data);
|
||||
new PrintGroupsController();
|
||||
break;
|
||||
|
||||
case 'new-member':
|
||||
new CreateMemberController();
|
||||
break;
|
||||
|
||||
case 'create-member':
|
||||
$userData = \CreateGroupMemberDataAction::execute($_REQUEST);
|
||||
if (count($userData['errors']) === 0) {
|
||||
$memberId = \CreateGroupMemberAction::execute( $userData['data'] );
|
||||
new PrintMemberController($memberId);
|
||||
} else {
|
||||
kompass_print_message_box(implode('<br />', $userData['errors']), 'error');
|
||||
new CreateMemberController($userData['rawData']);
|
||||
exit;
|
||||
}
|
||||
new PrintGroupsController();
|
||||
break;
|
||||
|
||||
case 'show-members':
|
||||
$memberList = \ListMemberRequest::listForGroup((int)$_REQUEST['group-id']);
|
||||
new PrintMemberListController($memberList);
|
||||
break;
|
||||
|
||||
case 'show-member':
|
||||
new PrintMemberController((int)$_REQUEST['member-id']);
|
||||
break;
|
||||
|
||||
case 'compose-mail':
|
||||
current_user_can('send_mails');
|
||||
break;
|
||||
|
||||
case 'delete-group':
|
||||
if (current_user_can('delete_groups')) {
|
||||
}
|
||||
break;
|
||||
case 'edit-group':
|
||||
if (current_user_can('edit_groups')) {
|
||||
kompass_edit_group_form($_REQUEST['group-id']);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
new PrintGroupsController();
|
||||
}
|
||||
} else {
|
||||
new PrintGroupsController();
|
||||
}
|
||||
}
|
||||
|
||||
private function listMembers()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private function printMembers(array $memberList)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
13
modules/Gruppen/Controllers/PrintGroupsController.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Bdp\Modules\Gruppen\Controllers;
|
||||
|
||||
use Bdp\Libs\FileAccess;
|
||||
|
||||
class PrintGroupsController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
kompass_print_gruppen_overview();
|
||||
}
|
||||
}
|
15
modules/Gruppen/Controllers/PrintMemberController.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace Bdp\Modules\Gruppen\Controllers;
|
||||
|
||||
use Bdp\Libs\FileAccess;
|
||||
|
||||
class PrintMemberController
|
||||
{
|
||||
public function __construct(int $memberId)
|
||||
{
|
||||
global $dbHandler;
|
||||
$member = $dbHandler->readFromDb(MainController::KOMPASS_STAMMESGRUPPEN_TEILIS, ['id' => $memberId]);
|
||||
echo '<pre>';print_r($member);die();
|
||||
}
|
||||
}
|
16
modules/Gruppen/Controllers/PrintMemberListController.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace Bdp\Modules\Gruppen\Controllers;
|
||||
|
||||
use Bdp\Libs\FileAccess;
|
||||
|
||||
class PrintMemberListController
|
||||
{
|
||||
public function __construct(array $memberList)
|
||||
{
|
||||
if (count($memberList) === 0) {
|
||||
exit;
|
||||
}
|
||||
kompass_print_gruppen_members($memberList);
|
||||
}
|
||||
}
|
12
modules/Gruppen/Requests/ListMemberRequest.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
use Bdp\Modules\Gruppen\Controllers\MainController;
|
||||
|
||||
class ListMemberRequest
|
||||
{
|
||||
public static function listForGroup(int $groupId) : array
|
||||
{
|
||||
global $dbHandler;
|
||||
return $dbHandler->readFromDb(MainController::KOMPASS_STAMMESGRUPPEN_TEILIS, ['gruppe_id' => $groupId]);
|
||||
}
|
||||
}
|
15
modules/Gruppen/Requests/SearchMemberRequest.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
use Bdp\Modules\Gruppen\Controllers\MainController;
|
||||
|
||||
class SearchMemberRequest
|
||||
{
|
||||
public static function listByName(string $name) : array
|
||||
{
|
||||
global $dbHandler;
|
||||
return $dbHandler->readSqlFromDb( MainController::KOMPASS_STAMMESGRUPPEN_TEILIS,
|
||||
'SELECT * FROM %tablename% WHERE CONCAT(`vorname`, " " , `nachname`) LIKE "%' . $name . '%"');
|
||||
|
||||
|
||||
}
|
||||
}
|
64
modules/Gruppen/Views/CreateGroupForm.php
Normal file
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
use Bdp\Modules\Gruppen\Controllers\MainController as GruppenController;
|
||||
|
||||
function kompass_edit_group_form(int $groupId)
|
||||
{
|
||||
global $dbHandler;
|
||||
$page = BDP_LV_PLUGIN_SLUG . '-create-group';
|
||||
$group = $dbHandler->readFromDb(GruppenController::KOMPASS_STAMMESGRUPPEN_GRUPPEN, ['id' => $groupId]);
|
||||
|
||||
add_settings_section(
|
||||
'custom_settings_section',
|
||||
__('Edit Group', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_prepare_form',
|
||||
$page,
|
||||
[
|
||||
'action' => 'update-group',
|
||||
'page' => 'kompass-groups',
|
||||
'group_id' => $groupId
|
||||
]
|
||||
);
|
||||
|
||||
_kompass_group_display_elements($page, $group[0]);
|
||||
do_settings_sections(BDP_LV_PLUGIN_SLUG . '-create-group');
|
||||
kompass_close_form(__('Update', BDP_LV_PLUGIN_SLUG));
|
||||
}
|
||||
|
||||
function kompass_create_group_form()
|
||||
{
|
||||
global $dbHandler;
|
||||
$page = BDP_LV_PLUGIN_SLUG . '-create-group';
|
||||
|
||||
add_settings_section(
|
||||
'custom_settings_section',
|
||||
__('Create Group', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_prepare_form',
|
||||
$page,
|
||||
[
|
||||
'action' => 'create-group',
|
||||
'page' => 'kompass-groups'
|
||||
]
|
||||
);
|
||||
_kompass_group_display_elements($page);
|
||||
|
||||
do_settings_sections(BDP_LV_PLUGIN_SLUG . '-create-group');
|
||||
kompass_close_form(__('Create', BDP_LV_PLUGIN_SLUG));
|
||||
}
|
||||
|
||||
function _kompass_group_display_elements(string $page, stdClass $currentGroup = null)
|
||||
{
|
||||
$value = '';
|
||||
if (null !== $currentGroup) {
|
||||
$value = $currentGroup->gruppen_name;
|
||||
}
|
||||
|
||||
add_settings_field(
|
||||
'kompass_group_field_1',
|
||||
__('Group Name', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_groups_group_name',
|
||||
'value' => $value, 'style' => 'width: 512px']);
|
||||
}
|
131
modules/Gruppen/Views/CreateMemberForm.php
Normal file
@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
use Bdp\Modules\Gruppen\Controllers\MainController as GruppenController;
|
||||
|
||||
function kompass_edit_group_member_form(int $groupId)
|
||||
{
|
||||
global $dbHandler;
|
||||
$page = BDP_LV_PLUGIN_SLUG . '-create-group';
|
||||
$group = $dbHandler->readFromDb(GruppenController::KOMPASS_STAMMESGRUPPEN_GRUPPEN, ['id' => $groupId]);
|
||||
|
||||
add_settings_section(
|
||||
'custom_settings_section',
|
||||
__('Edit Group', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_prepare_form',
|
||||
$page,
|
||||
[
|
||||
'action' => 'update-group',
|
||||
'page' => 'kompass-groups',
|
||||
'group_id' => $groupId
|
||||
]
|
||||
);
|
||||
|
||||
_kompass_group_display_elements($page, $group[0]);
|
||||
do_settings_sections(BDP_LV_PLUGIN_SLUG . '-create-group');
|
||||
kompass_close_form(__('Update', BDP_LV_PLUGIN_SLUG));
|
||||
}
|
||||
|
||||
function kompass_create_group_member_form(array $prefilledData = [])
|
||||
{
|
||||
global $dbHandler;
|
||||
$page = BDP_LV_PLUGIN_SLUG . '-create-member';
|
||||
|
||||
add_settings_section(
|
||||
'custom_settings_section',
|
||||
__('Add Member', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_prepare_form',
|
||||
$page,
|
||||
[
|
||||
'action' => 'create-member',
|
||||
'page' => 'kompass-groups'
|
||||
]
|
||||
);
|
||||
_kompass_group_member_display_elements($page, $prefilledData);
|
||||
|
||||
do_settings_sections($page);
|
||||
kompass_close_form(__('Add member', BDP_LV_PLUGIN_SLUG));
|
||||
}
|
||||
|
||||
function _kompass_group_member_display_elements(string $page, array $prefilledElements = [])
|
||||
{
|
||||
|
||||
$value = $prefilledElements['kompass_group_member_firstname'] ?? '';
|
||||
add_settings_field(
|
||||
'kompass_group_member_field_1',
|
||||
__('First Name', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_group_member_firstname',
|
||||
'value' => $value, 'style' => 'width: 512px']);
|
||||
|
||||
$value = $prefilledElements['kompass_group_member_lastname'] ?? '';
|
||||
add_settings_field(
|
||||
'kompass_group_member_field_2',
|
||||
__('Last Name', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_group_member_lastname',
|
||||
'value' => $value, 'style' => 'width: 512px']);
|
||||
|
||||
$value = $prefilledElements['kompass_group_member_birthday'] ?? '';
|
||||
add_settings_field(
|
||||
'kompass_group_member_field_3',
|
||||
__('Birthday', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_datebox',
|
||||
$page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_group_member_birthday',
|
||||
'value' => $value, 'style' => 'width: 512px']);
|
||||
|
||||
$value = $prefilledElements['kompass_group_member_parents'] ?? '';
|
||||
add_settings_field(
|
||||
'kompass_group_member_field_4',
|
||||
__('Contact person', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_group_member_parents',
|
||||
'value' => $value, 'style' => 'width: 512px']);
|
||||
|
||||
$value = $prefilledElements['kompass_group_member_email_1'] ?? '';
|
||||
add_settings_field(
|
||||
'kompass_group_member_field_5',
|
||||
__('E-Mail', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_group_member_email_1',
|
||||
'value' => $value, 'style' => 'width: 512px']);
|
||||
|
||||
$value = $prefilledElements['kompass_group_member_email_2'] ?? '';
|
||||
add_settings_field(
|
||||
'kompass_group_member_field_6',
|
||||
__('Alternative E-Mail', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_group_member_email_2',
|
||||
'value' => $value, 'style' => 'width: 512px']);
|
||||
|
||||
$value = $prefilledElements['kompass_group_member_phone_1'] ?? '';
|
||||
add_settings_field(
|
||||
'kompass_group_member_field_7',
|
||||
__('Telephone', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_group_member_phone_1',
|
||||
'value' => $value, 'style' => 'width: 512px']);
|
||||
|
||||
$value = $prefilledElements['kompass_group_member_phone_2'] ?? '';
|
||||
add_settings_field(
|
||||
'kompass_group_member_field_8',
|
||||
__('Alternative Telephone', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_group_member_phone_2',
|
||||
'value' => $value, 'style' => 'width: 512px']);
|
||||
}
|
95
modules/Gruppen/Views/GruppenOverview.php
Normal file
@ -0,0 +1,95 @@
|
||||
<?php
|
||||
|
||||
use Bdp\Modules\Gruppen\Controllers\MainController as GruppenController;
|
||||
|
||||
function kompass_print_gruppen_overview()
|
||||
{
|
||||
global $dbHandler;
|
||||
?>
|
||||
|
||||
<form method="post" action="admin.php?page=kompass-groups">
|
||||
<p style="width: 100%; text-align: right">
|
||||
<input type="hidden" name="action" value="searchmember">
|
||||
<input type="text" name="member_name" style="width: 500px;"
|
||||
placeholder="<?=__('Search member', BDP_LV_PLUGIN_SLUG); ?>" />
|
||||
<input type="submit" class="button" value="<?= __('Search', BDP_LV_PLUGIN_SLUG); ?>" />
|
||||
</p>
|
||||
</form>
|
||||
|
||||
|
||||
<table class="wp-list-table widefat fixed striped table-view-list" id="myTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="manage-column column-name"><?= __('Group Name', BDP_LV_PLUGIN_SLUG); ?></th>
|
||||
<th scope="col" class="manage-column column-name"><?= __('Number Members', BDP_LV_PLUGIN_SLUG); ?></th>
|
||||
<th style="width: 100px;" class="manage-column column-name"><?= __('Actions', BDP_LV_PLUGIN_SLUG); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
|
||||
foreach ($dbHandler->readFromDb( GruppenController::KOMPASS_STAMMESGRUPPEN_GRUPPEN) as $currentGruppe) {
|
||||
$participantCount = $dbHandler->countSqlRows(GruppenController::KOMPASS_STAMMESGRUPPEN_TEILIS, ['gruppe_id' => $currentGruppe->id]);
|
||||
echo '<tr>';
|
||||
echo '<td>' . $currentGruppe->gruppen_name .'</td>';
|
||||
echo '<td>' . $participantCount . '</td>';
|
||||
echo '<td> ' . kompass_get_group_actions($currentGruppe->id, $participantCount ) .'</td>';
|
||||
echo '</tr>';
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php
|
||||
echo '<p>';
|
||||
if ( current_user_can( 'send_mails' ) ) {
|
||||
echo '<a class="button" href="' . admin_url('admin.php?page=kompass-groups') . '&action=compose-mail&group-id=0">' .
|
||||
__( 'Mail to multiple groups', BDP_LV_PLUGIN_SLUG ) . '</a> ';
|
||||
}
|
||||
|
||||
if (current_user_can('create_teilis')) {
|
||||
echo '<a class="button" href="' . admin_url('admin.php?page=kompass-groups') . '&action=new-member">' .
|
||||
__( 'New Member', BDP_LV_PLUGIN_SLUG ) . '</a> ';
|
||||
}
|
||||
|
||||
if ( current_user_can( 'delete_teilis' ) ) {
|
||||
?>
|
||||
<a class="button" href="admin.php?page=kompass-groups&action=create_group_form">
|
||||
<?= __('Create Group', BDP_LV_PLUGIN_SLUG); ?></a>
|
||||
<?php
|
||||
}
|
||||
echo '</p>';
|
||||
|
||||
// Gutenberg-Editor einbinden
|
||||
wp_editor( '', 'gutenberg_content', array(
|
||||
'textarea_name' => 'gutenberg_content',
|
||||
// 'media_buttons' => false, // Deaktivieren der Medien-Upload-Schaltfläche
|
||||
) );
|
||||
|
||||
}
|
||||
|
||||
function kompass_get_group_actions(int $groupId, int $participantCount) : string
|
||||
{
|
||||
$elements = [];
|
||||
if ($participantCount > 0) {
|
||||
$elements[] = '<a href="' . admin_url('admin.php?page=kompass-groups') . '&action=show-members&group-id=' .$groupId .'">' .
|
||||
__('Show Members', BDP_LV_PLUGIN_SLUG) . '</a>';
|
||||
if (current_user_can('send_mails')) {
|
||||
$elements[] = '<a href="' . admin_url('admin.php?page=kompass-groups') . '&action=compose-mail&group-id=' .$groupId .'">' .
|
||||
__( 'Mail to group', BDP_LV_PLUGIN_SLUG ) . '</a>';
|
||||
}
|
||||
} else {
|
||||
if (current_user_can('delete_groups')) {
|
||||
$elements[] = '<a href="' . admin_url('admin.php?page=kompass-groups') . '&action=delete-group&group-id=' .$groupId .'">' .
|
||||
__('Delete', BDP_LV_PLUGIN_SLUG) . '</a>';
|
||||
}
|
||||
}
|
||||
|
||||
if (current_user_can('edit_groups')) {
|
||||
$elements[] = '<a href="' . admin_url('admin.php?page=kompass-groups') . '&action=edit-group&group-id=' .$groupId .'">' .
|
||||
__('Edit', BDP_LV_PLUGIN_SLUG) . '</a>';
|
||||
}
|
||||
|
||||
return implode('<br />' , $elements);
|
||||
|
||||
}
|
65
modules/Gruppen/Views/PrintMembers.php
Normal file
@ -0,0 +1,65 @@
|
||||
<?php
|
||||
function kompass_print_gruppen_members(array $memberList)
|
||||
{
|
||||
?>
|
||||
<p style="width: 100%; text-align: right">
|
||||
<input type="text" id="searchInput"
|
||||
onkeyup="searchTable('myTable', this)"
|
||||
placeholder="<?=__('Filter member', BDP_LV_PLUGIN_SLUG); ?>">
|
||||
</p>
|
||||
<table class="wp-list-table widefat fixed striped table-view-list" id="myTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="manage-column column-name"><?= __('Name', BDP_LV_PLUGIN_SLUG); ?></th>
|
||||
<th style="width: 100px;" class="manage-column column-name"><?= __('Actions', BDP_LV_PLUGIN_SLUG); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<?php
|
||||
foreach ($memberList as $curMember) {
|
||||
?>
|
||||
<tr>
|
||||
<td> <?= $curMember->vorname . ' ' . $curMember->nachname ?>
|
||||
<br />
|
||||
<?php kompass_gruppen_printTelephonNumbers($curMember); ?>
|
||||
<br />
|
||||
<?= __('Allergies:', BDP_LV_PLUGIN_SLUG) . ' ' .
|
||||
($curMember->allergien != '' ? $curMember->allergien : '---'); ?>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
<a href= <?= admin_url('admin.php?page=kompass-groups') . '&action=show-member&member-id=' .$curMember->id; ?>">
|
||||
<?= __('Show details', BDP_LV_PLUGIN_SLUG); ?></a>
|
||||
<br />
|
||||
|
||||
<a href="admin.php?page=bdp-kompass-limit-login-attempts&action=removeFromList">
|
||||
<?= __('Send E-Mail', BDP_LV_PLUGIN_SLUG); ?></a>
|
||||
<br />
|
||||
|
||||
<?php
|
||||
if ( current_user_can( 'delete_teilis' ) ) {
|
||||
?>
|
||||
<a href="admin.php?page=bdp-kompass-limit-login-attempts&action=removeFromList">
|
||||
<?= __('Delete', BDP_LV_PLUGIN_SLUG); ?></a>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
function kompass_gruppen_printTelephonNumbers(stdClass $curMember)
|
||||
{
|
||||
kompass_print_telephone_link($curMember->telefon_1);
|
||||
if ($curMember->telefon_2 != '') {
|
||||
echo ' // ';
|
||||
kompass_print_telephone_link( $curMember->telefon_2 );
|
||||
}
|
||||
}
|
79
modules/KompassSettings/Controllers/SettingsPage.php
Normal file
@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
namespace Bdp\Modules\KompassSettings\Controllers;
|
||||
|
||||
|
||||
class SettingsPage
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_options_page(
|
||||
__('kompass', BDP_LV_PLUGIN_SLUG) . ' - ' . __('Settings', BDP_LV_PLUGIN_SLUG),
|
||||
__('kompass', BDP_LV_PLUGIN_SLUG) . ' - ' . __('Settings', BDP_LV_PLUGIN_SLUG),
|
||||
'manage_options',
|
||||
BDP_LV_PLUGIN_SLUG . '-Kompass-settings',
|
||||
[$this, 'option_page'],2048);
|
||||
}
|
||||
|
||||
|
||||
public function option_page() {
|
||||
bdp_kompass_load_plugin_textdomain();
|
||||
$showMessage = null;
|
||||
$tab = isset($_REQUEST['tab']) ? $_REQUEST['tab'] : 'tab1';
|
||||
if (isset($_REQUEST['update_options']) && $_REQUEST['update_options'] == true) {
|
||||
switch ($tab) {
|
||||
case 'tab1':
|
||||
update_option('bdp_calendar_categories', json_encode($_POST['category']));
|
||||
update_option('bdp_calendar_source_url', $_POST['bdp_calendar_source_url']);
|
||||
$showMessage = __('The settings were saved.', BDP_LV_PLUGIN_SLUG);
|
||||
break;
|
||||
|
||||
case 'tab2':
|
||||
update_option('kompass_seo_google_verification', $_POST['kompass_seo_google_verification']);
|
||||
update_option('kompass_seo_bing_verification', $_POST['kompass_seo_bing_verification']);
|
||||
$showMessage = __('The settings were saved.', BDP_LV_PLUGIN_SLUG);
|
||||
break;
|
||||
}
|
||||
|
||||
if (null !== $showMessage) {
|
||||
echo '<div class="notice notice-success" style="padding: 5px 10px;">';
|
||||
echo $showMessage;
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
bdp_kompass_load_plugin_textdomain();
|
||||
|
||||
?>
|
||||
|
||||
<div class="wrap">
|
||||
<h1 class="wp-heading-inline">
|
||||
<?= __('kompass', BDP_LV_PLUGIN_SLUG); ?> - <?= __('Settings', BDP_LV_PLUGIN_SLUG); ?></h1>
|
||||
<hr class="wp-header-end">
|
||||
<?= kompass_settings_print_tab_header($tab); ?>
|
||||
|
||||
<div class="tab-content">
|
||||
<?php
|
||||
switch ($tab) {
|
||||
case 'tab1':
|
||||
echo '<form action="admin.php?page=bdp-kompass-Kompass-settings&tab=tab1" method="post">';
|
||||
do_settings_sections(BDP_LV_PLUGIN_SLUG . '-calendar-settings');
|
||||
require_once BDP_LV_PLUGIN_DIR . '/modules/calendar/Views/categories-partial.php';
|
||||
echo '<input type="hidden" name="tab" value="tab1" />';
|
||||
submit_button();
|
||||
echo '</form>';
|
||||
break;
|
||||
case 'tab2':
|
||||
echo '<form action="admin.php?page=bdp-kompass-Kompass-settings" method="post">';
|
||||
do_settings_sections(BDP_LV_PLUGIN_SLUG . '-seo-settings');
|
||||
submit_button();
|
||||
echo '<input type="hidden" name="tab" value="tab2" />';
|
||||
echo '</form>';
|
||||
break;
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
13
modules/KompassSettings/Views/tab-control.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
function kompass_settings_print_tab_header(string $activeTab = 'tab1')
|
||||
{
|
||||
$baseUrl = 'admin.php?page=bdp-kompass-Kompass-settings&tab=';
|
||||
return '<h2 class="nav-tab-wrapper">'.
|
||||
'<a href="' . $baseUrl . 'tab1" class="nav-tab ' . ($activeTab == 'tab1' ? 'nav-tab-active' : '') . '">' .
|
||||
__('Calendar Settings', BDP_LV_PLUGIN_SLUG) .
|
||||
'</a>'.
|
||||
'<a href="' . $baseUrl . 'tab2" class="nav-tab ' . ($activeTab == 'tab2' ? 'nav-tab-active' : '') .'">' .
|
||||
__('SEO', BDP_LV_PLUGIN_SLUG) .
|
||||
'</a>'.
|
||||
'</h2>';
|
||||
}
|
@ -5,278 +5,277 @@ namespace Bdp\Modules\LimitLoginAttempts\Controllers;
|
||||
use ProtectLogin\Modules\LimitLoginAttempts\Requests\IpAddress;
|
||||
|
||||
class LoginHandler {
|
||||
public const DIRECT_ADDR = 'REMOTE_ADDR';
|
||||
public const PROXY_ADDR = 'HTTP_X_FORWARDED_FOR';
|
||||
public const DIRECT_ADDR = 'REMOTE_ADDR';
|
||||
public const PROXY_ADDR = 'HTTP_X_FORWARDED_FOR';
|
||||
|
||||
public function onSuccessFullLogin($user, $password) {
|
||||
if (!is_wp_error($user) && $this->isLoginAllowedFromIp() ) {
|
||||
return $user;
|
||||
}
|
||||
public function onSuccessFullLogin($user, $password) {
|
||||
if (!is_wp_error($user) && $this->isLoginAllowedFromIp() ) {
|
||||
return $user;
|
||||
}
|
||||
|
||||
global $limit_login_my_error_shown;
|
||||
$limit_login_my_error_shown = true;
|
||||
global $limit_login_my_error_shown;
|
||||
$limit_login_my_error_shown = true;
|
||||
|
||||
$error = new \WP_Error();
|
||||
// This error should be the same as in "shake it" filter below
|
||||
$error->add('too_many_retries', $this->composeErrorMessage());
|
||||
return $error;
|
||||
}
|
||||
$error = new \WP_Error();
|
||||
// This error should be the same as in "shake it" filter below
|
||||
$error->add('too_many_retries', $this->composeErrorMessage());
|
||||
return $error;
|
||||
}
|
||||
|
||||
public function onFailedLogin(string $username) {
|
||||
$ip = $this->getAddress();
|
||||
public function onFailedLogin(string $username) {
|
||||
$ip = $this->getAddress();
|
||||
|
||||
/* if currently locked-out, do not add to retries */
|
||||
$lockouts = get_option('protect_login_limit_login_lockouts', []);
|
||||
/* if currently locked-out, do not add to retries */
|
||||
$lockouts = get_option('protect_login_limit_login_lockouts', []);
|
||||
|
||||
if(isset($lockouts[$ip]) && time() < $lockouts[$ip]) {
|
||||
return;
|
||||
}
|
||||
if(isset($lockouts[$ip]) && time() < $lockouts[$ip]) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Get the arrays with retries and retries-valid information */
|
||||
$retries = get_option('kompass_limit_login_retries', []);
|
||||
$valid = get_option('kompass_limit_login_retries_valid', []);
|
||||
/* Get the arrays with retries and retries-valid information */
|
||||
$retries = get_option('kompass_limit_login_retries', []);
|
||||
$valid = get_option('kompass_limit_login_retries_valid', []);
|
||||
|
||||
/* Check validity and add one to retries */
|
||||
if (isset($retries[$ip])) { //} && isset($valid[$ip]) && time() < $valid[$ip]) {
|
||||
$retries[$ip] ++;
|
||||
} else {
|
||||
$retries[$ip] = 1;
|
||||
}
|
||||
/* Check validity and add one to retries */
|
||||
if (isset($retries[$ip])) { //} && isset($valid[$ip]) && time() < $valid[$ip]) {
|
||||
$retries[$ip] ++;
|
||||
} else {
|
||||
$retries[$ip] = 1;
|
||||
}
|
||||
|
||||
update_option('kompass_limit_login_retries', $retries);
|
||||
update_option('kompass_limit_login_retries', $retries);
|
||||
|
||||
/* lockout? */
|
||||
if($retries[$ip] % get_option('kompass_limit_login_allowed_retries', 0) != 0) {
|
||||
return;
|
||||
}
|
||||
/* lockout? */
|
||||
if($retries[$ip] % get_option('kompass_limit_login_allowed_retries', 0) != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$retries_long = get_option('kompass_limit_login_allowed_retries', 1)
|
||||
* get_option('kompass_limit_login_allowed_lockouts', 1);
|
||||
$retries_long = get_option('kompass_limit_login_allowed_retries', 1)
|
||||
* get_option('kompass_limit_login_allowed_lockouts', 1);
|
||||
|
||||
if ($retries[$ip] >= $retries_long) {
|
||||
$lockouts[$ip] = time() + get_option('kompass_limit_login_long_duration', 86400);
|
||||
if ($retries[$ip] >= $retries_long) {
|
||||
$lockouts[$ip] = time() + get_option('kompass_limit_login_long_duration', 86400);
|
||||
|
||||
} else {
|
||||
$lockouts[$ip] = time() + get_option('kompass_limit_login_lockout_duration', 900);
|
||||
}
|
||||
} else {
|
||||
$lockouts[$ip] = time() + get_option('kompass_limit_login_lockout_duration', 900);
|
||||
}
|
||||
|
||||
update_option('kompass_limit_login_lockouts', $lockouts);
|
||||
update_option('kompass_limit_login_lockouts', $lockouts);
|
||||
|
||||
|
||||
/* do any notification */
|
||||
$this->notify($username);
|
||||
/* do any notification */
|
||||
$this->notify($username);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private function notifyByEmail($user)
|
||||
{
|
||||
$ip = $this->getAddress();
|
||||
private function notifyByEmail($user)
|
||||
{
|
||||
$ip = $this->getAddress();
|
||||
|
||||
$lockouts = get_option('kompass_limit_login_lockouts', []);
|
||||
if (!isset($lockouts[$ip])) {
|
||||
return;
|
||||
}
|
||||
$lockouts = get_option('kompass_limit_login_lockouts', []);
|
||||
if (!isset($lockouts[$ip])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$blocked_until = $lockouts[$ip];
|
||||
$blocked_until = $lockouts[$ip];
|
||||
|
||||
$retries = get_option('kompass_limit_login_retries', []);
|
||||
$currentRetries = $retries[$ip];
|
||||
$retries = get_option('kompass_limit_login_retries', []);
|
||||
$currentRetries = $retries[$ip];
|
||||
|
||||
$notify_after = get_option('kompass_limit_login_notify_email_after', 1);
|
||||
if ($currentRetries % $notify_after !== 0) {
|
||||
return;
|
||||
}
|
||||
$notify_after = get_option('kompass_limit_login_notify_email_after', 1);
|
||||
if ($currentRetries % $notify_after !== 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$blogname = get_option('blogname', 'none');
|
||||
$blogname = get_option('blogname', 'none');
|
||||
|
||||
$subject = sprintf(__("[%s] Too many failed login attempts"
|
||||
, 'limit-login-attempts')
|
||||
, $blogname);
|
||||
$subject = sprintf(__("[%s] Too many failed login attempts"
|
||||
, 'limit-login-attempts')
|
||||
, $blogname);
|
||||
|
||||
$message = 'Neue Sperrung auf deiner Webseite: ' . PHP_EOL .
|
||||
'IP-Adresse: ' . $ip . PHP_EOL .
|
||||
'Gesperrt bis: ' . date('d.m.Y H:i', $blocked_until);
|
||||
$message = 'Neue Sperrung auf deiner Webseite: ' . PHP_EOL .
|
||||
'IP-Adresse: ' . $ip . PHP_EOL .
|
||||
'Gesperrt bis: ' . date('d.m.Y H:i', $blocked_until);
|
||||
|
||||
$admin_email = get_option('admin_email');
|
||||
wp_mail($admin_email, $subject, $message);
|
||||
}
|
||||
$admin_email = get_option('admin_email');
|
||||
wp_mail($admin_email, $subject, $message);
|
||||
}
|
||||
|
||||
|
||||
/* Handle notification in event of lockout */
|
||||
private function notify($user) {
|
||||
$args = get_option('kompass_limit_login_lockout_notify', []);
|
||||
/* Handle notification in event of lockout */
|
||||
private function notify($user) {
|
||||
$args = get_option('kompass_limit_login_lockout_notify', []);
|
||||
if (!is_array($args)) {
|
||||
$args = [$args];
|
||||
}
|
||||
foreach ($args as $mode) {
|
||||
switch (trim($mode)) {
|
||||
case 'email':
|
||||
$this->notifyByEmail($user);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($args as $mode) {
|
||||
switch (trim($mode)) {
|
||||
case 'email':
|
||||
$this->notifyByEmail($user);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
private function composeErrorMessage() {
|
||||
$ip = $this->getAddress();
|
||||
$lockouts = get_option('kompass_limit_login_lockouts');
|
||||
$lockouts = get_option('protect_login_limit_login_lockouts');
|
||||
|
||||
$msg = __('<strong>ERROR</strong>: Too many failed login attempts.', 'limit-login-attempts') . ' ';
|
||||
$msg = __('Too many failed login attempts.', BDP_LV_PLUGIN_SLUG) . ' ';
|
||||
|
||||
if (!is_array($lockouts) || !isset($lockouts[$ip]) || time() >= $lockouts[$ip]) {
|
||||
/* Huh? No timeout active? */
|
||||
$msg .= __('Please try again later.', 'limit-login-attempts');
|
||||
$msg .= __('Please try again later.', BDP_LV_PLUGIN_SLUG);
|
||||
return $msg;
|
||||
}
|
||||
|
||||
$when = ceil(($lockouts[$ip] - time()) / 60);
|
||||
if ($when > 60) {
|
||||
$when = ceil($when / 60);
|
||||
$msg .= sprintf(_n('Please try again in %d hour.', 'Please try again in %d hours.', $when, 'limit-login-attempts'), $when);
|
||||
$msg .= sprintf(_n('Please try again in %d hour.', 'Please try again in %d hours.', $when, BDP_LV_PLUGIN_SLUG), $when);
|
||||
} else {
|
||||
$msg .= sprintf(_n('Please try again in %d minute.', 'Please try again in %d minutes.', $when, 'limit-login-attempts'), $when);
|
||||
$msg .= sprintf(_n('Please try again in %d minute.', 'Please try again in %d minutes.', $when, BDP_LV_PLUGIN_SLUG), $when);
|
||||
}
|
||||
|
||||
return $msg;
|
||||
}
|
||||
|
||||
private static function getAddress($typeName = '') {
|
||||
global $limitLoginAttemptsSettings;
|
||||
private static function getAddress($typeName = '') {
|
||||
global $limitLoginAttemptsSettings;
|
||||
|
||||
$typeOriginal = $typeName;
|
||||
if (empty($typeName)) {
|
||||
$typeName = get_option('kompass_limit_loginclient_type', self::DIRECT_ADDR);
|
||||
}
|
||||
$typeOriginal = $typeName;
|
||||
if (empty($typeName)) {
|
||||
$typeName = get_option('kompass_limit_loginclient_type', self::DIRECT_ADDR);
|
||||
}
|
||||
|
||||
if (isset($_SERVER[$typeName]) && filter_var($_SERVER[$typeName], FILTER_VALIDATE_IP)) {
|
||||
return $_SERVER[$typeName];
|
||||
}
|
||||
if (isset($_SERVER[$typeName]) && filter_var($_SERVER[$typeName], FILTER_VALIDATE_IP)) {
|
||||
return $_SERVER[$typeName];
|
||||
}
|
||||
|
||||
/*
|
||||
* Not found. Did we get proxy type from option?
|
||||
* If so, try to fall back to direct address.
|
||||
*/
|
||||
if ( empty($typeName) && $typeOriginal == self::PROXY_ADDR
|
||||
&& isset($_SERVER[self::DIRECT_ADDR])
|
||||
&& filter_var($_SERVER[self::DIRECT_ADDR], FILTER_VALIDATE_IP)) {
|
||||
/*
|
||||
* Not found. Did we get proxy type from option?
|
||||
* If so, try to fall back to direct address.
|
||||
*/
|
||||
if ( empty($typeName) && $typeOriginal == self::PROXY_ADDR
|
||||
&& isset($_SERVER[self::DIRECT_ADDR])
|
||||
&& filter_var($_SERVER[self::DIRECT_ADDR], FILTER_VALIDATE_IP)) {
|
||||
|
||||
/*
|
||||
* NOTE: Even though we fall back to direct address -- meaning you
|
||||
* can get a mostly working plugin when set to PROXY mode while in
|
||||
* fact directly connected to Internet it is not safe!
|
||||
*
|
||||
* Client can itself send HTTP_X_FORWARDED_FOR header fooling us
|
||||
* regarding which IP should be banned.
|
||||
*/
|
||||
/*
|
||||
* NOTE: Even though we fall back to direct address -- meaning you
|
||||
* can get a mostly working plugin when set to PROXY mode while in
|
||||
* fact directly connected to Internet it is not safe!
|
||||
*
|
||||
* Client can itself send HTTP_X_FORWARDED_FOR header fooling us
|
||||
* regarding which IP should be banned.
|
||||
*/
|
||||
|
||||
return $_SERVER[self::DIRECT_ADDR];
|
||||
}
|
||||
return $_SERVER[self::DIRECT_ADDR];
|
||||
}
|
||||
|
||||
return '';
|
||||
return '';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function isLoginAllowedFromIp() {
|
||||
$ip = $this->getAddress();
|
||||
public function isLoginAllowedFromIp() {
|
||||
$ip = $this->getAddress();
|
||||
|
||||
if (in_array($ip, get_option('kompass_limit_login_blocklist', []))) {
|
||||
return false;
|
||||
}
|
||||
if (in_array($ip, get_option('kompass_limit_login_blocklist', []))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (in_array($ip, get_option('kompass_limit_login_allowlist', []))) {
|
||||
return true;
|
||||
}
|
||||
if (in_array($ip, get_option('kompass_limit_login_allowlist', []))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/* lockout active? */
|
||||
$lockouts = get_option('kompass_limit_login_lockouts', []);
|
||||
return (!is_array($lockouts) || !isset($lockouts[$ip]) || time() >= $lockouts[$ip]);
|
||||
}
|
||||
/* lockout active? */
|
||||
$lockouts = get_option('kompass_limit_login_lockouts', []);
|
||||
return (!is_array($lockouts) || !isset($lockouts[$ip]) || time() >= $lockouts[$ip]);
|
||||
}
|
||||
|
||||
public function checkFailedCookies($cookie_elements) {
|
||||
$this->clearAuthCookie();
|
||||
public function checkFailedCookies($cookie_elements) {
|
||||
$this->clearAuthCookie();
|
||||
|
||||
/*
|
||||
* Invalid username gets counted every time.
|
||||
*/
|
||||
/*
|
||||
* Invalid username gets counted every time.
|
||||
*/
|
||||
|
||||
$this->onFailedLogin($cookie_elements['username']);
|
||||
}
|
||||
$this->onFailedLogin($cookie_elements['username']);
|
||||
}
|
||||
|
||||
private function clearAuthCookie() {
|
||||
wp_clear_auth_cookie();
|
||||
private function clearAuthCookie() {
|
||||
wp_clear_auth_cookie();
|
||||
|
||||
if (!empty($_COOKIE[AUTH_COOKIE])) {
|
||||
$_COOKIE[AUTH_COOKIE] = '';
|
||||
}
|
||||
if (!empty($_COOKIE[SECURE_AUTH_COOKIE])) {
|
||||
$_COOKIE[SECURE_AUTH_COOKIE] = '';
|
||||
}
|
||||
if (!empty($_COOKIE[LOGGED_IN_COOKIE])) {
|
||||
$_COOKIE[LOGGED_IN_COOKIE] = '';
|
||||
}
|
||||
}
|
||||
if (!empty($_COOKIE[AUTH_COOKIE])) {
|
||||
$_COOKIE[AUTH_COOKIE] = '';
|
||||
}
|
||||
if (!empty($_COOKIE[SECURE_AUTH_COOKIE])) {
|
||||
$_COOKIE[SECURE_AUTH_COOKIE] = '';
|
||||
}
|
||||
if (!empty($_COOKIE[LOGGED_IN_COOKIE])) {
|
||||
$_COOKIE[LOGGED_IN_COOKIE] = '';
|
||||
}
|
||||
}
|
||||
|
||||
public function onValidCookie($cookie_elements, $user) {
|
||||
/*
|
||||
* As all meta values get cached on user load this should not require
|
||||
* any extra work for the common case of no stored value.
|
||||
*/
|
||||
public function onValidCookie($cookie_elements, $user) {
|
||||
/*
|
||||
* As all meta values get cached on user load this should not require
|
||||
* any extra work for the common case of no stored value.
|
||||
*/
|
||||
|
||||
if (get_user_meta($user->ID, 'kompass_limit_login_previous_cookie')) {
|
||||
delete_user_meta($user->ID, 'kompass_limit_login_previous_cookie');
|
||||
}
|
||||
}
|
||||
if (get_user_meta($user->ID, 'kompass_limit_login_previous_cookie')) {
|
||||
delete_user_meta($user->ID, 'kompass_limit_login_previous_cookie');
|
||||
}
|
||||
}
|
||||
|
||||
function clearLoginCookie($cookie_elements) {
|
||||
$this->clearAuthCookie();
|
||||
function clearLoginCookie($cookie_elements) {
|
||||
$this->clearAuthCookie();
|
||||
|
||||
/*
|
||||
* Under some conditions an invalid auth cookie will be used multiple
|
||||
* times, which results in multiple failed attempts from that one
|
||||
* cookie.
|
||||
*
|
||||
* Unfortunately I've not been able to replicate this consistently and
|
||||
* thus have not been able to make sure what the exact cause is.
|
||||
*
|
||||
* Probably it is because a reload of for example the admin dashboard
|
||||
* might result in multiple requests from the browser before the invalid
|
||||
* cookie can be cleard.
|
||||
*
|
||||
* Handle this by only counting the first attempt when the exact same
|
||||
* cookie is attempted for a user.
|
||||
*/
|
||||
/*
|
||||
* Under some conditions an invalid auth cookie will be used multiple
|
||||
* times, which results in multiple failed attempts from that one
|
||||
* cookie.
|
||||
*
|
||||
* Unfortunately I've not been able to replicate this consistently and
|
||||
* thus have not been able to make sure what the exact cause is.
|
||||
*
|
||||
* Probably it is because a reload of for example the admin dashboard
|
||||
* might result in multiple requests from the browser before the invalid
|
||||
* cookie can be cleard.
|
||||
*
|
||||
* Handle this by only counting the first attempt when the exact same
|
||||
* cookie is attempted for a user.
|
||||
*/
|
||||
|
||||
extract($cookie_elements, EXTR_OVERWRITE);
|
||||
extract($cookie_elements, EXTR_OVERWRITE);
|
||||
|
||||
// Check if cookie is for a valid user
|
||||
$user = get_user_by('login', $username);
|
||||
if (!$user) {
|
||||
// "shouldn't happen" for this action
|
||||
$this->onFailedLogin($username);
|
||||
return;
|
||||
}
|
||||
// Check if cookie is for a valid user
|
||||
$user = get_user_by('login', $username);
|
||||
if (!$user) {
|
||||
// "shouldn't happen" for this action
|
||||
$this->onFailedLogin($username);
|
||||
return;
|
||||
}
|
||||
|
||||
$previous_cookie = get_user_meta($user->ID, 'kompass_limit_login_previous_cookie', true);
|
||||
if ($previous_cookie && $previous_cookie == $cookie_elements) {
|
||||
// Identical cookies, ignore this attempt
|
||||
return;
|
||||
}
|
||||
$previous_cookie = get_user_meta($user->ID, 'kompass_limit_login_previous_cookie', true);
|
||||
if ($previous_cookie && $previous_cookie == $cookie_elements) {
|
||||
// Identical cookies, ignore this attempt
|
||||
return;
|
||||
}
|
||||
|
||||
// Store cookie
|
||||
if ($previous_cookie)
|
||||
update_user_meta($user->ID, 'kompass_limit_login_previous_cookie', $cookie_elements);
|
||||
else
|
||||
add_user_meta($user->ID, 'kompass_limit_login_previous_cookie', $cookie_elements, true);
|
||||
// Store cookie
|
||||
if ($previous_cookie)
|
||||
update_user_meta($user->ID, 'kompass_limit_login_previous_cookie', $cookie_elements);
|
||||
else
|
||||
add_user_meta($user->ID, 'kompass_limit_login_previous_cookie', $cookie_elements, true);
|
||||
|
||||
$this->onFailedLogin($username);
|
||||
}
|
||||
$this->onFailedLogin($username);
|
||||
}
|
||||
|
||||
public function handleCookies() {
|
||||
if ($this->isLoginAllowedFromIp()) {
|
||||
return;
|
||||
}
|
||||
public function handleCookies() {
|
||||
if ($this->isLoginAllowedFromIp()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->clearAuthCookie();
|
||||
}
|
||||
$this->clearAuthCookie();
|
||||
}
|
||||
}
|
@ -2,14 +2,14 @@
|
||||
|
||||
namespace Bdp\Modules\LimitLoginAttempts\Controllers;
|
||||
|
||||
|
||||
class OptionsPage
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_options_page(BDP_LV_PLUGIN_SLUG . '-limit-login-attempts',
|
||||
'Protect Login',
|
||||
'site-health.php',
|
||||
add_options_page(
|
||||
__('Login-Protection', BDP_LV_PLUGIN_SLUG),
|
||||
__('Login-Protection', BDP_LV_PLUGIN_SLUG),
|
||||
'manage_options',
|
||||
BDP_LV_PLUGIN_SLUG . '-limit-login-attempts',
|
||||
[$this, 'limit_login_option_page'],2048);
|
||||
}
|
||||
@ -21,37 +21,71 @@ class OptionsPage
|
||||
update_option('kompass_limit_login_lockouts', $allIps);
|
||||
}
|
||||
|
||||
public static function addToBlocklist(string $ip)
|
||||
{
|
||||
$blockedIps = get_option('kompass_limit_login_blocklist', []);
|
||||
$blockedIps[] = $ip;
|
||||
update_option('kompass_limit_login_blocklist', $blockedIps);
|
||||
}
|
||||
|
||||
public static function addToAllowlist(string $ip)
|
||||
{
|
||||
$allowedIps = get_option('kompass_limit_login_allowlist', []);
|
||||
$allowedIps[] = $ip;
|
||||
update_option('kompass_limit_login_allowlist', $allowedIps);
|
||||
self::releaseIp($ip);
|
||||
}
|
||||
|
||||
public function removeFromList(string $listType, string $ip){
|
||||
update_option(
|
||||
'kompass_limit_login_' . $listType,
|
||||
array_diff(get_option('kompass_limit_login_' . $listType, []), [$ip])
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function getBlockedIps()
|
||||
{
|
||||
bdp_kompass_load_plugin_textdomain();
|
||||
$ips = '';
|
||||
foreach (get_option('kompass_limit_login_lockouts', []) as $ip => $blockedUntil) {
|
||||
$ips .= '<tr>' .
|
||||
'<td style="padding-right: 10px;">' . $ip . '</td>' .
|
||||
'<td style="padding-right: 10px;">' . date('d.m.Y H:i', $blockedUntil) . ' Uhr</td>' .
|
||||
'<td>
|
||||
<a href="admin.php?page=bdp-kompass-limit-login-attempts&tab=tab4&action=release&ip=' .
|
||||
base64_encode($ip) . '">Freigeben</a></td>' .
|
||||
'</tr>';
|
||||
};
|
||||
|
||||
$ips .= '<tr style="vertical-align: top;">' .
|
||||
'<td style="padding-right: 50px;">' . $ip . '</td>';
|
||||
if (in_array($ip, get_option('protect_login_limit_login_blocklist', []))) {
|
||||
$ips .= '<td style="padding-right: 50px;">Dauerhaft blockiert</td>' .
|
||||
'<td>' .
|
||||
'Keine Aktion möglich' .
|
||||
'</td></tr>';
|
||||
} else {
|
||||
$ips .= '<td style="padding-right: 50px;">' . date('d.m.Y', $blockedUntil) . '<br />' . date('H:i', $blockedUntil) . ' Uhr</td>' .
|
||||
'<td>
|
||||
<a href="admin.php?page=bdp-kompass-limit-login-attempts&tab=tab4&action=release&ip=' .
|
||||
base64_encode($ip) . '">' . __('Release ip address', BDP_LV_PLUGIN_SLUG) . '</a><br />
|
||||
<a href="admin.php?page=bdp-kompass-limit-login-attempts&tab=tab4&action=toBlock&ip=' .
|
||||
base64_encode($ip) . '">' . __('Add ip address to blocklist', BDP_LV_PLUGIN_SLUG) . '</a><br />
|
||||
<a href="admin.php?page=bdp-kompass-limit-login-attempts&tab=tab4&action=toAllow&ip=' .
|
||||
base64_encode($ip) . '">' . __('Add ip address to allowlist and release', BDP_LV_PLUGIN_SLUG) . '</a><br /> ' .
|
||||
'</td></tr>';
|
||||
};
|
||||
}
|
||||
return $ips;
|
||||
}
|
||||
|
||||
public function limit_login_option_page() {
|
||||
global $errors;
|
||||
|
||||
bdp_kompass_load_plugin_textdomain();
|
||||
$showMessage = null;
|
||||
|
||||
if (isset($_POST['update_options'])) {
|
||||
update_settings($_POST);
|
||||
$showMessage = 'Die Einstellungen wurden gespeichert';
|
||||
$showMessage = __('The settings were saved.', BDP_LV_PLUGIN_SLUG);
|
||||
}
|
||||
if (isset($_GET['action']) && $_GET['action'] == 'release') {
|
||||
$showMessage = 'Die IP-Adresse wurde freigegeben.';
|
||||
$showMessage = __('The ip address was released.', BDP_LV_PLUGIN_SLUG);
|
||||
}
|
||||
|
||||
if(isset($_POST['save_kompass_balist_list_type'])) {
|
||||
$showMessage = 'Die Liste wurde gespeichert.';
|
||||
$showMessage = __('The list was saved.', BDP_LV_PLUGIN_SLUG);
|
||||
}
|
||||
|
||||
if (null !== $showMessage && $errors === false) {
|
||||
@ -62,15 +96,27 @@ class OptionsPage
|
||||
|
||||
if ($errors) {
|
||||
echo '<div class="notice notice-error" style="padding: 5px 10px;">';
|
||||
echo 'Beim Durchführen der Aktion ist ein Fehler aufgetreten.';
|
||||
echo __('An error occured.', BDP_LV_PLUGIN_SLUG);
|
||||
echo '</div>';
|
||||
}
|
||||
|
||||
$tab = isset($_GET['tab']) ? $_GET['tab'] : 'tab1';
|
||||
|
||||
if (isset($_GET['action']) && $_GET['action'] == 'removeFromList') {
|
||||
$this->removeFromList($_GET['list'], base64_decode($_GET['ip']));
|
||||
if ($_GET['list'] == 'blocklist') {
|
||||
$tab = 'tab2';
|
||||
} else {
|
||||
$tab = 'tab3';
|
||||
}
|
||||
}
|
||||
bdp_kompass_load_plugin_textdomain();
|
||||
|
||||
?>
|
||||
|
||||
<div class="wrap">
|
||||
<h1 class="wp-heading-inline">Protect Login - Einstellungen</h1>
|
||||
<h1 class="wp-heading-inline">
|
||||
<?= __('Login-Protection', BDP_LV_PLUGIN_SLUG); ?> - <?= __('Settings', BDP_LV_PLUGIN_SLUG); ?></h1>
|
||||
<hr class="wp-header-end">
|
||||
<?= kompass_print_tab_header($tab); ?>
|
||||
|
||||
@ -101,22 +147,39 @@ class OptionsPage
|
||||
if (isset($_GET['action']) && $_GET['action'] == 'release') {
|
||||
$this->releaseIp(base64_decode($_GET['ip']));
|
||||
}
|
||||
|
||||
if (isset($_GET['action']) && $_GET['action'] == 'toBlock') {
|
||||
$this->addToBlocklist(base64_decode($_GET['ip']));
|
||||
}
|
||||
|
||||
if (isset($_GET['action']) && $_GET['action'] == 'toAllow') {
|
||||
$this->addToAllowlist(base64_decode($_GET['ip']));
|
||||
}
|
||||
$blockedIps = $this->getBlockedIps();
|
||||
?>
|
||||
<h3>Gesperrte IPs</h3>
|
||||
<?php
|
||||
echo '<h2>'. __('Blocked IP addresses', BDP_LV_PLUGIN_SLUG) .'</h2>';
|
||||
|
||||
if (strlen($blockedIps) == 0) {
|
||||
echo '<div class="protect-login-no-blocked-ips">';
|
||||
echo 'Derzeit sind keine Adressen gesperrt.';
|
||||
echo '<div class="bdp-kompass-no-blocked-ips">';
|
||||
echo __('There are no ip addresses blocked.', BDP_LV_PLUGIN_SLUG);
|
||||
echo '</div>';
|
||||
} else { ?>
|
||||
<table>
|
||||
<tr>
|
||||
<th>IP</th>
|
||||
<th>Gesperrt bis</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
<?= $blockedIps ?>
|
||||
<p style="width: 100%; text-align: right">
|
||||
<input type="text" id="searchInput"
|
||||
onkeyup="searchTable('myTable', this)"
|
||||
placeholder="<?=__('Search for ip address', BDP_LV_PLUGIN_SLUG); ?>">
|
||||
</p>
|
||||
|
||||
<table class="wp-list-table widefat fixed striped table-view-list" id="myTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="manage-column column-name"><?= __('IP address', BDP_LV_PLUGIN_SLUG); ?></th>
|
||||
<th class="manage-column column-name"><?= __('Blocked until', BDP_LV_PLUGIN_SLUG); ?></th>
|
||||
<th class="manage-column column-name"><?= __('Actions', BDP_LV_PLUGIN_SLUG); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?= $blockedIps ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
@ -1,18 +1,18 @@
|
||||
<?php
|
||||
function kompass_print_tab_header($activeTab = 'tab1')
|
||||
function kompass_print_tab_header(string $activeTab = 'tab1')
|
||||
{
|
||||
$baseUrl = 'admin.php?page=bdp-kompass-limit-login-attempts&tab=';
|
||||
return '<h2 class="nav-tab-wrapper">'.
|
||||
'<a href="' . $baseUrl . 'tab1" class="nav-tab ' . ($activeTab == 'tab1' ? 'nav-tab-active' : '') . '">
|
||||
Optionen
|
||||
</a>'.
|
||||
'<a href="' . $baseUrl . 'tab2" class="nav-tab ' . ($activeTab == 'tab2' ? 'nav-tab-active' : '') .'">
|
||||
Blocklist
|
||||
</a>'.
|
||||
'<a href="' . $baseUrl . 'tab3" class="nav-tab ' . ($activeTab == 'tab3' ? 'nav-tab-active' : '') .'">
|
||||
Allowlist
|
||||
</a>'.
|
||||
'<a href="' . $baseUrl . 'tab4" class="nav-tab ' . ($activeTab == 'tab4' ? 'nav-tab-active' : '') .'">
|
||||
Gesperrte IPs
|
||||
</a></h2>';
|
||||
'<a href="' . $baseUrl . 'tab1" class="nav-tab ' . ($activeTab == 'tab1' ? 'nav-tab-active' : '') . '">' .
|
||||
__('Options', BDP_LV_PLUGIN_SLUG) .
|
||||
'</a>'.
|
||||
'<a href="' . $baseUrl . 'tab2" class="nav-tab ' . ($activeTab == 'tab2' ? 'nav-tab-active' : '') .'">' .
|
||||
__('Blocklist', BDP_LV_PLUGIN_SLUG) .
|
||||
'</a>'.
|
||||
'<a href="' . $baseUrl . 'tab3" class="nav-tab ' . ($activeTab == 'tab3' ? 'nav-tab-active' : '') .'">' .
|
||||
__('Allowlist', BDP_LV_PLUGIN_SLUG) .
|
||||
'</a>'.
|
||||
'<a href="' . $baseUrl . 'tab4" class="nav-tab ' . ($activeTab == 'tab4' ? 'nav-tab-active' : '') .'">' .
|
||||
__('Blocked IP addresses', BDP_LV_PLUGIN_SLUG) .
|
||||
'</a></h2>';
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
function kompass_print_textbox($settingName, $settingValue) {
|
||||
echo '<input type="text" name="' . $settingName . '" value="' . $settingValue. '" />';
|
||||
if (defined('WP_DEBUG') && WP_DEBUG == true) {
|
||||
echo '<br />' . $settingName;
|
||||
}
|
||||
}
|
@ -1,47 +1,56 @@
|
||||
<?php
|
||||
function updateBlockOrAllowList($postVars)
|
||||
|
||||
use Bdp\Modules\LimitLoginAttempts\Controllers\OptionsPage as LimitLoginAttemptsOptions;
|
||||
|
||||
function updateBlockOrAllowList(array $postVars)
|
||||
{
|
||||
$listType = $postVars['save_kompass_balist_list_type'];
|
||||
|
||||
$saveIPList = [];
|
||||
if (isset($postVars['listElements'])) {
|
||||
foreach ($postVars['listElements'] as $curIp) {
|
||||
$curIp = trim($curIp);
|
||||
if ($curIp !== '') {
|
||||
$saveIPList[] = $curIp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (count($postVars['new_ips']) == 1) {
|
||||
if (count($postVars['new_ips']) == 1) {
|
||||
foreach (explode(PHP_EOL, $postVars['new_ips'][0]) as $newIp) {
|
||||
$newIp = trim($newIp);
|
||||
if ('' !== $newIp) {
|
||||
$saveIPList[] = $newIp;
|
||||
if ($listType == 'blocklist') {
|
||||
LimitLoginAttemptsOptions::addToBlocklist($newIp);
|
||||
} else {
|
||||
LimitLoginAttemptsOptions::addToAllowlist($newIp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
update_option('kompass_limit_login_' . $listType, $saveIPList);
|
||||
}
|
||||
|
||||
function kompass_print_block_allow_form($listType) {
|
||||
function kompass_print_block_allow_form(string $listType) {
|
||||
$elements = get_option('kompass_limit_login_' . $listType, []);
|
||||
|
||||
?>
|
||||
|
||||
<input type="hidden" name="save_kompass_balist_list_type" value="<?= $listType; ?>" />
|
||||
|
||||
<?php
|
||||
foreach ($elements as $currentIp) {
|
||||
?>
|
||||
<p>
|
||||
<input type="text" name="listElements[]" value="<?= $currentIp ?>" style="width: 350px;" /><br />
|
||||
<label style="cursor: default; color: #a0a0a0; fot-size: 9pt; font-style: italic"><?= __('Zum Löschen frei lassen', BDP_LV_PLUGIN_SLUG); ?></label>
|
||||
</p>
|
||||
<p style="width: 100%; text-align: right">
|
||||
<input type="text" id="searchInput"
|
||||
onkeyup="searchTable('myTable', this)"
|
||||
placeholder="<?=__('Search for ip address', BDP_LV_PLUGIN_SLUG); ?>">
|
||||
</p>
|
||||
<table class="wp-list-table widefat fixed striped table-view-list" id="myTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="manage-column column-name"><?= __('IP address', BDP_LV_PLUGIN_SLUG); ?></th>
|
||||
<th style="width: 100px;" class="manage-column column-name"><?= __('Actions', BDP_LV_PLUGIN_SLUG); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
foreach ($elements as $currentIp) {
|
||||
echo '<tr>';
|
||||
echo '<td>' . $currentIp .'</td>';
|
||||
echo '<td><a href="admin.php?page=bdp-kompass-limit-login-attempts&action=removeFromList' .
|
||||
'&list=' . $listType . '&ip=' . base64_encode($currentIp) . '">'
|
||||
. __('Delete', BDP_LV_PLUGIN_SLUG) . '</a></td>';
|
||||
echo '</tr>';
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="kompass_setting_box">
|
||||
<h3><?= __('IP-Adresse hinzufügen', BDP_LV_PLUGIN_SLUG); ?></h3>
|
||||
|
@ -1,116 +1,102 @@
|
||||
<?php
|
||||
|
||||
// Callback-Funktion für die Einstellungsseite
|
||||
function custom_settings_section_callback() {
|
||||
echo '<input type="hidden" name="update_options" value="true" />';
|
||||
}
|
||||
|
||||
function _kompass_limit_logins_settings_callback($args) {
|
||||
$setting = get_option($args['setting'], null);
|
||||
if (null === $setting) {
|
||||
$setting = '';
|
||||
}
|
||||
|
||||
$value = esc_attr($setting);
|
||||
if (isset($args['unit_division'])) {
|
||||
$value = (int)$value / (int)$args['unit_division'];
|
||||
}
|
||||
|
||||
kompass_print_textbox($args['setting'], $value);
|
||||
}
|
||||
|
||||
function _kompass_limit_logins_settings_radio_callback($args)
|
||||
function _kompass_limit_logins_settings_radio_callback(array $args)
|
||||
{
|
||||
kompass_print_radio($args['setting']);
|
||||
}
|
||||
function _kompass_limit_logins_settings_checkbox_callback($args) {
|
||||
function _kompass_limit_logins_settings_checkbox_callback(array $args) {
|
||||
kompass_print_checkbox($args['setting']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bdp_kompass_load_plugin_textdomain();
|
||||
add_settings_section(
|
||||
'custom_settings_section',
|
||||
'Optionen',
|
||||
'custom_settings_section_callback',
|
||||
__('Options', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_prepare_form',
|
||||
BDP_LV_PLUGIN_SLUG . '-limit-login-attempts'
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$settings_page = BDP_LV_PLUGIN_SLUG . '-limit-login-attempts';
|
||||
|
||||
|
||||
|
||||
add_settings_field(
|
||||
'kompass_lla_1',
|
||||
'Maximale Wiederholungen',
|
||||
'_kompass_limit_logins_settings_callback',
|
||||
'kompass_lla_1',
|
||||
__('Maximum reps until lockout', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$settings_page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_limit_login_allowed_retries']);
|
||||
|
||||
add_settings_field(
|
||||
'kompass_lla_2',
|
||||
'Dauer der Sperre (in Minuten)',
|
||||
'_kompass_limit_logins_settings_callback',
|
||||
'kompass_lla_2',
|
||||
__('Duration of lockout (in minutes)', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$settings_page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_limit_login_lockout_duration', 'unit_division' => 60 ]);
|
||||
|
||||
add_settings_field(
|
||||
'kompass_lla_3',
|
||||
'Maximale Anzahl an Sperrungen',
|
||||
'_kompass_limit_logins_settings_callback',
|
||||
'kompass_lla_3',
|
||||
__('Maximum number of lockouts', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$settings_page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_limit_login_allowed_lockouts']);
|
||||
|
||||
add_settings_field(
|
||||
'kompass_lla_4',
|
||||
'Langzeitsperre in Stunden',
|
||||
'_kompass_limit_logins_settings_callback',
|
||||
'kompass_lla_4',
|
||||
__('Long-term duration (in hours)', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$settings_page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_limit_login_long_duration', 'unit_division' => 3600]);
|
||||
|
||||
add_settings_field(
|
||||
'kompass_lla_5',
|
||||
'Mininmale Passwort-Stärke:',
|
||||
'_kompass_limit_logins_settings_radio_callback',
|
||||
'kompass_lla_5',
|
||||
__('Minimum password strength', BDP_LV_PLUGIN_SLUG),
|
||||
'_kompass_limit_logins_settings_radio_callback',
|
||||
$settings_page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_password_minimal_strength']);
|
||||
|
||||
add_settings_field(
|
||||
'kompass_lla_6',
|
||||
'Seite erreichbar über:',
|
||||
'_kompass_limit_logins_settings_radio_callback',
|
||||
'kompass_lla_6',
|
||||
__('Page accessible via', BDP_LV_PLUGIN_SLUG),
|
||||
'_kompass_limit_logins_settings_radio_callback',
|
||||
$settings_page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_limit_login_client_type']);
|
||||
|
||||
add_settings_field(
|
||||
'kompass_lla_7',
|
||||
'Cookies verarbeiten',
|
||||
'_kompass_limit_logins_settings_radio_callback',
|
||||
'kompass_lla_7',
|
||||
__('Handle cookies', BDP_LV_PLUGIN_SLUG),
|
||||
'_kompass_limit_logins_settings_radio_callback',
|
||||
$settings_page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_limit_login_cookies']);
|
||||
|
||||
add_settings_field(
|
||||
'kompass_lla_8',
|
||||
'Bei Sperrung benachrichtigen',
|
||||
'_kompass_limit_logins_settings_checkbox_callback',
|
||||
'kompass_lla_8',
|
||||
__('Notify if blocked', BDP_LV_PLUGIN_SLUG),
|
||||
'_kompass_limit_logins_settings_checkbox_callback',
|
||||
$settings_page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_limit_login_lockout_notify']);
|
||||
|
||||
add_settings_field(
|
||||
'kompass_lla_9',
|
||||
'Fehlversuche bis zur Benachrichtigung',
|
||||
'_kompass_limit_logins_settings_callback',
|
||||
'kompass_lla_9',
|
||||
__('Failed attempts until notification', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$settings_page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_limit_login_notify_email_after']);
|
||||
|
||||
|
@ -1,20 +1,16 @@
|
||||
<?php
|
||||
function check_for_integer($input) {
|
||||
if (!is_numeric($input)) {
|
||||
wp_die('Bitte nur Zahlen, Danke!');
|
||||
}
|
||||
function check_for_integer(int $input) {
|
||||
return $input;
|
||||
}
|
||||
|
||||
|
||||
function hours_to_seconds_converter($input) {
|
||||
function hours_to_seconds_converter(int $input) {
|
||||
// Hier kannst du die Eingabe validieren, z.B. sicherstellen, dass es sich um eine gültige E-Mail-Adresse handelt.
|
||||
return minutes_to_seconds_converter($input) * 60;
|
||||
}
|
||||
|
||||
function minutes_to_seconds_converter($input) {
|
||||
function minutes_to_seconds_converter(int $input) {
|
||||
|
||||
// Hier kannst du die Eingabe validieren, z.B. sicherstellen, dass es sich um eine gültige E-Mail-Adresse handelt.
|
||||
return check_for_integer($input) * 60;
|
||||
}
|
||||
|
||||
@ -43,7 +39,7 @@ function kompass_settings_validators()
|
||||
'check_for_integer');
|
||||
}
|
||||
|
||||
function update_settings($postParams) {
|
||||
function update_settings(array $postParams) {
|
||||
$settings = ['kompass_limit_login_lockout_duration',
|
||||
'kompass_limit_login_allowed_retries',
|
||||
'kompass_limit_login_allowed_lockouts',
|
||||
@ -55,10 +51,10 @@ function update_settings($postParams) {
|
||||
'kompass_limit_login_cookies'];
|
||||
|
||||
foreach ($settings as $curSetting) {
|
||||
if (isset($postParams[$curSetting])) {
|
||||
update_option( $curSetting, $postParams[ $curSetting ] );
|
||||
} else {
|
||||
update_option( $curSetting, '');
|
||||
}
|
||||
if (isset($postParams[$curSetting])) {
|
||||
update_option($curSetting, $postParams[$curSetting]);
|
||||
} else {
|
||||
update_option($curSetting, '');
|
||||
}
|
||||
}
|
||||
}
|
10
modules/Mail/Controllers/MailCompose.php
Normal file
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
namespace Bdp\Modules\Mail\Controllers;
|
||||
|
||||
class MailCompose
|
||||
{
|
||||
function __construct()
|
||||
{
|
||||
kompass_print_mail_compose();
|
||||
}
|
||||
}
|
153
modules/Mail/Controllers/MailController.php
Normal file
@ -0,0 +1,153 @@
|
||||
<?php
|
||||
namespace Bdp\Modules\Mail\Controllers;
|
||||
|
||||
|
||||
use Bdp\Libs\FileAccess;
|
||||
use SearchMemberRequest;
|
||||
|
||||
class MailController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_menu_page(
|
||||
__('E-Mail', BDP_LV_PLUGIN_SLUG),
|
||||
__('E-Mail', BDP_LV_PLUGIN_SLUG),
|
||||
'send_mails',
|
||||
'kompass-mail',
|
||||
[$this, 'router'],
|
||||
'dashicons-email',
|
||||
4
|
||||
);
|
||||
|
||||
/*$mailCompose = new MailCompose();
|
||||
add_submenu_page(
|
||||
'kompass-mail',
|
||||
__('Templates', BDP_LV_PLUGIN_SLUG),
|
||||
__('Templates', BDP_LV_PLUGIN_SLUG),
|
||||
'send_mails',
|
||||
'kompass-mail-compose',
|
||||
[$mailCompose, '__construct'],
|
||||
1);*/
|
||||
}
|
||||
|
||||
public function router()
|
||||
{
|
||||
if (isset($_REQUEST['action'])) {
|
||||
switch ($_REQUEST['action']) {
|
||||
case 'send-email':
|
||||
// SMTP-Konfiguration
|
||||
$smtp_host = 'bdp.mein-verein.online'; // SMTP-Host
|
||||
$smtp_port = 25; // SMTP-Port
|
||||
$smtp_username = 'noreply@mareike.sachsen.pfadfinden.de'; // SMTP-Benutzername
|
||||
$smtp_password = 'fwJ_wxbW9G45'; // SMTP-Passwort
|
||||
$smtp_secure = 'tls'; // Verschlüsselung (tls oder ssl)
|
||||
|
||||
// Einstellungen für wp_mail ändern
|
||||
add_action( 'phpmailer_init', function( $phpmailer ) use ( $smtp_host, $smtp_port, $smtp_username, $smtp_password, $smtp_secure ) {
|
||||
$phpmailer->isSMTP();
|
||||
$phpmailer->Host = $smtp_host;
|
||||
$phpmailer->Port = $smtp_port;
|
||||
$phpmailer->SMTPAuth = true;
|
||||
$phpmailer->Username = $smtp_username;
|
||||
$phpmailer->Password = $smtp_password;
|
||||
$phpmailer->setFrom('info@pfadfinden-halle.de', 'Pfadfinden - Halle');
|
||||
#$phpmailer->SMTPSecure = $smtp_secure;
|
||||
} );
|
||||
|
||||
// Senden Sie die E-Mail
|
||||
$sent = wp_mail($_REQUEST['mail-to'],$_REQUEST['mail-subject'],$_REQUEST['mail-text'],
|
||||
['Reply-To: ' . $_REQUEST['mail-from'], 'Content-Type: text/html; charset=UTF-8']);
|
||||
|
||||
// Überprüfen, ob die E-Mail erfolgreich gesendet wurde
|
||||
if ( $sent ) {
|
||||
echo '<p>E-Mail wurde erfolgreich gesendet!</p>';
|
||||
} else {
|
||||
echo '<p>Fehler beim Senden der E-Mail!</p>';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
echo $_REQUEST['mail-to'] . '<br />';
|
||||
echo $_REQUEST['mail-text'];
|
||||
|
||||
echo 'mail gesendet';
|
||||
|
||||
break;
|
||||
|
||||
case 'create_group_form':
|
||||
new \Bdp\Modules\Gruppen\Controllers\CreateGroupController();
|
||||
break;
|
||||
|
||||
case 'update-group':
|
||||
\UpdateGroupAction::execute(['gruppen_name' => $_REQUEST['kompass_groups_group_name']],
|
||||
(int)$_REQUEST['group_id']);
|
||||
|
||||
new \Bdp\Modules\Gruppen\Controllers\PrintGroupsController();
|
||||
break;
|
||||
|
||||
case 'create-group':
|
||||
$data = ['gruppen_name' => $_REQUEST['kompass_groups_group_name']];
|
||||
\CreateGroupAction::execute($data);
|
||||
new \Bdp\Modules\Gruppen\Controllers\PrintGroupsController();
|
||||
break;
|
||||
|
||||
case 'new-member':
|
||||
new \Bdp\Modules\Gruppen\Controllers\CreateMemberController();
|
||||
break;
|
||||
|
||||
case 'create-member':
|
||||
$userData = \CreateGroupMemberDataAction::execute($_REQUEST);
|
||||
if (count($userData['errors']) === 0) {
|
||||
$memberId = \CreateGroupMemberAction::execute( $userData['data'] );
|
||||
new \Bdp\Modules\Gruppen\Controllers\PrintMemberController($memberId);
|
||||
} else {
|
||||
kompass_print_message_box(implode('<br />', $userData['errors']), 'error');
|
||||
new \Bdp\Modules\Gruppen\Controllers\CreateMemberController($userData['rawData']);
|
||||
exit;
|
||||
}
|
||||
new \Bdp\Modules\Gruppen\Controllers\PrintGroupsController();
|
||||
break;
|
||||
|
||||
case 'show-members':
|
||||
$memberList = \ListMemberRequest::listForGroup((int)$_REQUEST['group-id']);
|
||||
new \Bdp\Modules\Gruppen\Controllers\PrintMemberListController($memberList);
|
||||
break;
|
||||
|
||||
case 'show-member':
|
||||
new \Bdp\Modules\Gruppen\Controllers\PrintMemberController((int)$_REQUEST['member-id']);
|
||||
break;
|
||||
|
||||
case 'compose-mail':
|
||||
current_user_can('send_mails');
|
||||
break;
|
||||
|
||||
case 'delete-group':
|
||||
if (current_user_can('delete_groups')) {
|
||||
}
|
||||
break;
|
||||
case 'edit-group':
|
||||
if (current_user_can('edit_groups')) {
|
||||
kompass_edit_group_form($_REQUEST['group-id']);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
}
|
||||
} else {
|
||||
new MailCompose();
|
||||
}
|
||||
}
|
||||
|
||||
private function listMembers()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private function printMembers(array $memberList)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
34
modules/Mail/Views/MailCompose.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
function kompass_print_mail_compose()
|
||||
{
|
||||
global $dbHandler;
|
||||
?>
|
||||
|
||||
<form method="post" action="admin.php?page=kompass-mail" style="width: 80%; margin: auto">
|
||||
|
||||
<table style="width: 100%">
|
||||
<input type="hidden" name="action" value="send-email" />
|
||||
<tr>
|
||||
<td><?= __('From: ', BDP_LV_PLUGIN_SLUG); ?></td>
|
||||
<td><input type="text" name="mail-from" style="width: 100%"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?= __('To: ', BDP_LV_PLUGIN_SLUG); ?></td>
|
||||
<td><input type="text" name="mail-to" style="width: 100%"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?= __('Subject: ', BDP_LV_PLUGIN_SLUG); ?></td>
|
||||
<td><input type="text" name="mail-subject" style="width: 100%"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
wp_editor( '', 'gutenberg_content', array(
|
||||
'textarea_name' => 'mail-text',
|
||||
// 'media_buttons' => false, // Deaktivieren der Medien-Upload-Schaltfläche
|
||||
) );
|
||||
submit_button(__('Send email', BDP_LV_PLUGIN_SLUG));
|
||||
?>
|
||||
</form>
|
||||
<?php
|
||||
}
|
66
modules/calendar/Views/categories-partial.php
Normal file
@ -0,0 +1,66 @@
|
||||
<?php
|
||||
$categories = get_option('bdp_calendar_categories', null);
|
||||
if (null !== $categories) {
|
||||
$categories = json_decode($categories, true);
|
||||
} else {
|
||||
$categories = [
|
||||
'yellow' => 'Meute',
|
||||
'blue' => 'Sippe',
|
||||
'red' => 'Runde',
|
||||
'green' => 'Stammesführung',
|
||||
'fuchsia' => '',
|
||||
'orange' => ''
|
||||
];
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
<table class="form-table">
|
||||
<tr>
|
||||
<th style="width: 200px" scope="row"></th>
|
||||
<th></th>
|
||||
<td style="width: 50px;"></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th style="width: 210px;" scope="row">Gelb:</th>
|
||||
<th><input type="text" name="category[yellow]" value="<?php echo $categories['yellow']; ?>" /></th>
|
||||
<td style="width: 50px;" class="bdp_cal_event_yellow"></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th style="width: 210px;" scope="row">Blau:</th>
|
||||
<th><input type="text" name="category[blue]" value="<?php echo $categories['blue']; ?>" /></th>
|
||||
<td class="bdp_cal_event_blue"></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th style="width: 210px;" scope="row">Rot:</th>
|
||||
<th><input type="text" name="category[red]" value="<?php echo $categories['red']; ?>" /></th>
|
||||
<td class="bdp_cal_event_red"></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th style="width: 210px;" scope="row">Grün:</th>
|
||||
<th><input type="text" name="category[green]" value="<?php echo $categories['green']; ?>" /></th>
|
||||
<td class="bdp_cal_event_green"></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th style="width: 210px;" scope="row">Fuchsia:</th>
|
||||
<th><input type="text" name="category[fuchsia]" value="<?php echo $categories['fuchsia']; ?>" /></th>
|
||||
<td class="bdp_cal_event_fuchsia"></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th style="width: 210px;" scope="row">Orange:</th>
|
||||
<th><input type="text" name="category[orange]" value="<?php echo $categories['orange']; ?>" /></th>
|
||||
<td class="bdp_cal_event_orange"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th style="width: 210px;" scope="row">Grau:</th>
|
||||
<th>Standard</th>
|
||||
<td class="bdp_cal_event_grey"></td>
|
||||
</tr>
|
||||
</table>
|
18
modules/calendar/Views/settings-form.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
add_settings_section(
|
||||
'custom_settings_section',
|
||||
__('Calendar settings', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_prepare_form',
|
||||
BDP_LV_PLUGIN_SLUG . '-calendar-settings'
|
||||
);
|
||||
|
||||
$seo_settings_page = BDP_LV_PLUGIN_SLUG . '-calendar-settings';
|
||||
|
||||
add_settings_field(
|
||||
'kompass_cal_1',
|
||||
__('Calendar URL', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$seo_settings_page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'bdp_calendar_source_url', 'style' => 'width: 1024px']);
|
@ -1,86 +0,0 @@
|
||||
<?php
|
||||
echo '<h1>Kalender-Einstellungen</h1>';
|
||||
if (isset($_POST['submit'])) {
|
||||
echo '<div id="bdp_success">Die Einstellungen wurden gespeichert.</div>';
|
||||
update_option('bdp_calendar_categories', json_encode($_POST['category']));
|
||||
update_option('bdp_calendar_source_url', $_POST['ical_url']);
|
||||
}
|
||||
|
||||
$categories = get_option('bdp_calendar_categories', null);
|
||||
if (null !== $categories) {
|
||||
$categories = json_decode($categories, true);
|
||||
} else {
|
||||
$categories = [
|
||||
'yellow' => 'Meute',
|
||||
'blue' => 'Sippe',
|
||||
'red' => 'Runde',
|
||||
'green' => 'Stammesführung',
|
||||
'fuchsia' => '',
|
||||
'orange' => ''
|
||||
];
|
||||
}
|
||||
?>
|
||||
<form method="post" action="admin.php?page=bdp-kompass%2Fmodules%2Findex.php&loadmodule=calendar">
|
||||
<fieldset class="bdp_cal_inner">
|
||||
<legend>Datenabfrage</legend>
|
||||
|
||||
<table>
|
||||
<tr style="vertical-align: top;">
|
||||
<td>Kalender-URL:</td>
|
||||
<td><input class="long_text" type="text" name="ical_url" id="ical_url" required
|
||||
value = "<?php echo get_option('bdp_calendar_source_url', ''); ?>"
|
||||
><br />
|
||||
<label style="font-weight: normal; color: #a0a0a0; font-style: italic">
|
||||
Bitte gib hier die URL zur .ics - Datei eures Kalenbders im Wiki ein.
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="bdp_cal_inner">
|
||||
<legend>Labels</legend>
|
||||
<table>
|
||||
<tr>
|
||||
<td>Gelb:</td>
|
||||
<td><input type="text" name="category[yellow]" value="<?php echo $categories['yellow']; ?>" /></td>
|
||||
<td class="bdp_cal_event_yellow"></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Blau:</td>
|
||||
<td><input type="text" name="category[blue]" value="<?php echo $categories['blue']; ?>" /></td>
|
||||
<td class="bdp_cal_event_blue"></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Rot:</td>
|
||||
<td><input type="text" name="category[red]" value="<?php echo $categories['red']; ?>" /></td>
|
||||
<td class="bdp_cal_event_red"></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Grün:</td>
|
||||
<td><input type="text" name="category[green]" value="<?php echo $categories['green']; ?>" /></td>
|
||||
<td class="bdp_cal_event_green"></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Fuchsia:</td>
|
||||
<td><input type="text" name="category[fuchsia]" value="<?php echo $categories['fuchsia']; ?>" /></td>
|
||||
<td class="bdp_cal_event_fuchsia"></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Orange:</td>
|
||||
<td><input type="text" name="category[orange]" value="<?php echo $categories['orange']; ?>" /></td>
|
||||
<td class="bdp_cal_event_orange"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Grau:</td>
|
||||
<td>Standard</td>
|
||||
<td class="bdp_cal_event_grey"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<input class="button" type="submit" name="submit" value="Einstellungen speichern">
|
||||
</form>
|
@ -104,7 +104,10 @@ class Security
|
||||
}
|
||||
|
||||
if ( str_contains( $_SERVER['REQUEST_URI'], $hideLogin ) !== false ) {
|
||||
$user_login = '';
|
||||
$user_login = '';
|
||||
if (!isset($error)) {
|
||||
$error = '';
|
||||
}
|
||||
$_REQUEST['redirect_to'] = 'interner-bereich';
|
||||
require_once 'wp-login.php';
|
||||
die();
|
||||
|
28
modules/seo/Views/seo-form.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
|
||||
add_settings_section(
|
||||
'custom_settings_section',
|
||||
__('SEO-Options', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_prepare_form',
|
||||
BDP_LV_PLUGIN_SLUG . '-seo-settings'
|
||||
);
|
||||
|
||||
$seo_settings_page = BDP_LV_PLUGIN_SLUG . '-seo-settings';
|
||||
|
||||
add_settings_field(
|
||||
'kompass_seo_1',
|
||||
__('Google Site verification', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$seo_settings_page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_seo_google_verification', 'style' => 'width: 500px']);
|
||||
|
||||
|
||||
add_settings_field(
|
||||
'kompass_seo_2',
|
||||
__('Bing Site verification', BDP_LV_PLUGIN_SLUG),
|
||||
'kompass_print_textbox',
|
||||
$seo_settings_page,
|
||||
'custom_settings_section',
|
||||
['setting' => 'kompass_seo_bing_verification', 'style' => 'width: 500px']);
|
@ -3,8 +3,34 @@
|
||||
namespace Bdp\Modules\Seo;
|
||||
class Seo
|
||||
{
|
||||
public static function importVerificationKeys() {
|
||||
$aioseoSetting = get_option('aioseo_options', null);
|
||||
if (null === $aioseoSetting) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ('' !== $aioseoSetting && !is_object($aioseoSetting) && !is_array($aioseoSetting)){
|
||||
$aioseoSetting = json_decode( $aioseoSetting );
|
||||
}
|
||||
|
||||
if (!is_object($aioseoSetting) ||!isset($aioseoSetting->webmasterTools) ||!is_object($aioseoSetting->webmasterTools)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$webmasterTools = $aioseoSetting->webmasterTools;
|
||||
if ('' !== get_option('kompass_seo_google_verification', '')) {
|
||||
update_option('kompass_seo_google_verification', $webmasterTools->google);
|
||||
}
|
||||
|
||||
if ('' !== get_option('kompass_seo_bing_verification', '')) {
|
||||
update_option('kompass_seo_bing_verification', $webmasterTools->bing);
|
||||
}
|
||||
}
|
||||
|
||||
public static function setup()
|
||||
{
|
||||
|
||||
if (get_option('permalink_structure') === '') {
|
||||
update_option('permalink_structure', '/%postname%/');
|
||||
flush_rewrite_rules();
|
||||
|
12
modules/seo/includes/meta.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
function kompass_seo_add_verifications() {
|
||||
$googleVerification = get_option('kompass_seo_google_verification', '');
|
||||
if ('' !== $googleVerification) {
|
||||
echo '<meta name="google-site-verification" content="' . $googleVerification . '" />' . "\n";
|
||||
}
|
||||
|
||||
$bingVerification = get_option('kompass_seo_bing_verification', '');
|
||||
if ('' !== $bingVerification) {
|
||||
echo '<meta name="msvalidate.01="' . $bingVerification . '" />' . "\n";
|
||||
}
|
||||
}
|
@ -1,104 +0,0 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
@import url("font/ihs.css");
|
||||
|
||||
html, body { border: 0 none; padding: 0; margin: 0; min-height: 100%; position: static; }
|
||||
html { font-family: Sans-Serif; background: url("img/holz.jpg") #dbb97b; position: relative; }
|
||||
body { margin: 1em; padding: 1em; max-width: 710px; background: #fff; font-size: 81.3% !important; }
|
||||
body.post-type-gallery { background: transparent; }
|
||||
header, hgroup, nav, footer, article { display: block; }
|
||||
.h, h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 { margin: 0; font-family: IHS, Serif; font-size: 1em; font-weight: normal; font-style: normal; }
|
||||
button, input, select, optgroup, option { margin: 0; font: inherit; color: inherit; }
|
||||
button, input[type="button"], input[type="submit"], input[type="reset"] { cursor: pointer; }
|
||||
p, ul, ol, dt { line-height: 1.5; }
|
||||
abbr { border-bottom: 1px dotted; }
|
||||
a { color: #1d4899; }
|
||||
figure, .wp-caption { margin: 0; max-width: 100%; }
|
||||
figcaption, .wp-caption-text { font-style: italic; padding: 0.5em 0; }
|
||||
.screen-reader-text { display: none; }
|
||||
.aligncenter { margin: 0 auto; }
|
||||
.alignleft { float: left; margin: 0 1em 0 0; }
|
||||
.alignright { float: right; margin: 0 0 0 1em; }
|
||||
|
||||
::-moz-selection { background: #1d4899; color: #ffcb04; text-shadow: none; outline: 2px solid #1d4899; }
|
||||
::selection { background: #1d4899; color: #ffcb04; text-shadow: none; outline: 2px solid #1d4899; }
|
||||
|
||||
/* Media object */
|
||||
.media { margin: 1em 0; }
|
||||
.media, .bd { overflow: hidden; _overflow: visible; }
|
||||
/*.media img { display: block; }*/
|
||||
/* Clearfix */
|
||||
.clearfix::after,
|
||||
.clearfix::before,
|
||||
.media::after,
|
||||
.media::before { content: " "; display: table; }
|
||||
.clearfix::after,
|
||||
.media::after { clear: both; }
|
||||
|
||||
/* Überschriften mit Bild darunter */
|
||||
.h-box { position: relative; display: block; margin-bottom: 1em; text-decoration: none; }
|
||||
.h-box > img { position: absolute; top: 0; left: 0; height: 100%; width: 100%; }
|
||||
.h-box > .wrap { position: absolute; max-width: 100%; left: 0; }
|
||||
.h-box > .wrap > * { display: inline; -o-box-decoration-break: clone; -webkit-box-decoration-break: clone; box-decoration-break: clone; }
|
||||
|
||||
.h-box-teaser { box-shadow: 0 5px 5px rgba(0, 0, 0, 0.3); margin-left: -240px; line-height: 1; display: inline-block; width: 1300px; max-width: 100%; }
|
||||
.h-box-teaser > img { position: static; }
|
||||
.h-box-teaser > .wrap { bottom: 1em; padding-left: 240px; }
|
||||
.h-box-teaser > .wrap > * { background: rgba(56, 46, 35, 0.7); color: #ffcb04; padding: 2px 13px 4px; font-size: 52px; line-height: 78px; }
|
||||
@media (max-width: 720px) {
|
||||
.h-box-teaser { margin-top: 1em; margin-left: 0; }
|
||||
.h-box-teaser > .wrap { padding-left: 1em; }
|
||||
.h-box-teaser > .wrap > * { font-size: 2em; line-height: 39px; }
|
||||
}
|
||||
|
||||
.h-box-blaugelb { padding-top: 47.1428571%; }
|
||||
.h-box-blaugelb > .wrap { bottom: 0; font-size: 18px; }
|
||||
.h-box-blaugelb > .wrap > * { color: #1d4899; background: #ffcb04; padding: 3px 5px; line-height: 26px; }
|
||||
|
||||
.h-box-blaugelb-bildlos { padding: 0; }
|
||||
.h-box-blaugelb-bildlos > .wrap { position: static; }
|
||||
/**/
|
||||
|
||||
.container { max-width: 1020px; }
|
||||
.page .container,
|
||||
.single-post:not(.single-format-gallery) .container { max-width: 710px; }
|
||||
|
||||
.content-singular .format-gallery { background: transparent; padding: 0; margin: 0; position: relative; }
|
||||
.content-singular .format-gallery .gallery { display: flex; flex-wrap: wrap; align-content: space-between; align-items: flex-start; }
|
||||
.content-singular .format-gallery .gallery-item { background: #fff; padding: 1em; margin: 0 1em 1em 0; }
|
||||
.gallery-columns-1 .gallery-item { flex: 1 0 50%; }
|
||||
.gallery-columns-2 .gallery-item { flex: 1 0 34%; }
|
||||
.gallery-columns-3 .gallery-item { flex: 1 0 25%; }
|
||||
.gallery-columns-4 .gallery-item { flex: 1 0 20%; }
|
||||
|
||||
.content-gallery { display: flex; position: relative; z-index: 10; flex-wrap: wrap; overflow: hidden; }
|
||||
.content-gallery > article { flex: 1 1 25%; }
|
||||
body > :first-child { margin-top: 0; }
|
||||
body > :last-child { margin-bottom: 0; }
|
||||
.content-singular > article:not(.format-gallery),
|
||||
.content-gallery > article,
|
||||
.commentlist article,
|
||||
.comment-form { min-width: 20em; background: #fff; box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); }
|
||||
.content-gallery > article { max-width: calc(33.333% - 1em); }
|
||||
@media (max-width: 800px) { .content-gallery > article { max-width: 100%; } }
|
||||
|
||||
/* WordPress-Wünsche */
|
||||
.sticky {}
|
||||
|
||||
img { max-width: 100%; height: auto; border: 0 none; vertical-align: middle; }
|
||||
ul, ol { padding-left: 2em; }
|
||||
dl, ul, ol, h1, h2, h3, h4, h5, h6, blockquote, p, table { margin: 0.5em 0; }
|
||||
dd, li > ol, li > ul { margin: 0; }
|
||||
dt { font-weight: bold; }
|
||||
blockquote, dd { padding-left: 2em; }
|
||||
body > p:empty:last-child { margin: -0.5em 0 0.5em; }
|
||||
h3, .h3, h4, .h4, h5, .h5, h6, .h6 { display: inline-block; background: #ffcb04; color: #1d4899; margin-bottom: 0; padding: 2px 4px; }
|
||||
h3, .h3 { font-size: 18px; padding: 3px 5px; }
|
||||
h4, .h4 { font-size: 16px; }
|
||||
h5, .h5 { font-size: 14px; }
|
||||
.gallery-caption {}
|
||||
.bypostauthor {}
|
||||
.twitter-tweet {}
|
||||
|
||||
h1, .h1, h2, .h2 { font-size: 20px; }
|
||||
h1::after, h2::after { color: red; background: black; display: block; padding: 5px; content: "Bitte Überschriften ab 3. Ordnung benutzen."; }
|
@ -1,11 +0,0 @@
|
||||
@font-face {
|
||||
font-family: IHS;
|
||||
src: url('ihs.eot');
|
||||
src: url('ihs.eot?#iefix') format('embedded-opentype'),
|
||||
url('ihs.woff2') format('woff2'),
|
||||
url('ihs.woff') format('woff'),
|
||||
url('ihs.ttf') format('truetype'),
|
||||
url('ihs.svg#immenhausenregular') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
Before Width: | Height: | Size: 135 KiB |
Before Width: | Height: | Size: 783 B |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 332 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 148 B |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 599 B |
Before Width: | Height: | Size: 639 B |
Before Width: | Height: | Size: 561 B |
Before Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 119 KiB |
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 8.3 KiB |