diff --git a/app/controllers/siteinfo.php b/app/controllers/siteinfo.php index 82aa8b5550ce22ad619c28384661b4c6c0b4fd91..86ab7e7f340f4354ae1883ecb01013e08a0fb63c 100644 --- a/app/controllers/siteinfo.php +++ b/app/controllers/siteinfo.php @@ -71,8 +71,16 @@ class SiteinfoController extends StudipController if ($detail[2] == '') { $detail[2] = _('unbenannt'); } - Navigation::addItem('/footer/siteinfo/'.$detail[1].'/'.$detail[0], - new Navigation($detail[2], $this->url_for('siteinfo/show/'.$detail[1].'/'.$detail[0]))); + + // check draft status and possibly hide site in navigation + if ($detail[3] == 1 && $GLOBALS['perm']->have_perm('root')) { + + Navigation::addItem('/footer/siteinfo/'.$detail[1].'/'.$detail[0], + new Navigation($detail[2], $this->url_for('siteinfo/show/'.$detail[1].'/'.$detail[0]))); + } else if ($detail[3] != 1) { + Navigation::addItem('/footer/siteinfo/'.$detail[1].'/'.$detail[0], + new Navigation($detail[2], $this->url_for('siteinfo/show/'.$detail[1].'/'.$detail[0]))); + } } if ($action != 'new') { @@ -127,6 +135,10 @@ class SiteinfoController extends StudipController */ public function show_action() { + $draft_status = $this->si->get_detail_draft_status($this->currentdetail); + if ($draft_status == 1 && !$GLOBALS['perm']->have_perm('root')) { + throw new AccessDeniedException(); + } $this->output = $this->si->get_detail_content_processed($this->currentdetail); } @@ -148,10 +160,11 @@ class SiteinfoController extends StudipController public function edit_action($givenrubric = null, $givendetail = null) { if (is_numeric($givendetail)) { - $this->rubrics = $this->si->get_all_rubrics(); - $this->rubric_id = $this->si->rubric_for_detail($this->currentdetail); - $this->detail_name = $this->si->get_detail_name($this->currentdetail); - $this->content = $this->si->get_detail_content($this->currentdetail); + $this->rubrics = $this->si->get_all_rubrics(); + $this->rubric_id = $this->si->rubric_for_detail($this->currentdetail); + $this->detail_name = $this->si->get_detail_name($this->currentdetail); + $this->content = $this->si->get_detail_content($this->currentdetail); + $this->draft_status = $this->si->get_detail_draft_status($this->currentdetail); } else { $this->edit_rubric = true; $this->rubric_id = $this->currentrubric; @@ -161,17 +174,19 @@ class SiteinfoController extends StudipController public function save_action() { - $detail_name = Request::get('detail_name'); - $rubric_name = Request::get('rubric_name'); - $content = Request::get('content'); - $rubric_id = Request::int('rubric_id'); - $detail_id = Request::int('detail_id'); + $detail_name = Request::get('detail_name'); + $rubric_name = Request::get('rubric_name'); + $content = Request::get('content'); + $rubric_id = Request::int('rubric_id'); + $detail_id = Request::int('detail_id'); + $draft_status = Request::get('draft_status'); + if ($rubric_id) { if ($detail_id) { - list($rubric, $detail) = $this->si->save('update_detail', compact('rubric_id', 'detail_name', 'content', 'detail_id')); + list($rubric, $detail) = $this->si->save('update_detail', compact('rubric_id', 'detail_name', 'content', 'detail_id', 'draft_status')); } else { if ($content) { - list($rubric, $detail) = $this->si->save('insert_detail', compact('rubric_id', 'detail_name','content')); + list($rubric, $detail) = $this->si->save('insert_detail', compact('rubric_id', 'detail_name','content', 'draft_status')); } else { list($rubric, $detail) = $this->si->save('update_rubric', compact('rubric_id', 'rubric_name')); } diff --git a/app/views/siteinfo/edit.php b/app/views/siteinfo/edit.php index 54bd8d2b76a4b475899ef05a69188d8f403fd231..00d4d6e4690a90f5f0b45f0bca9f4d29ac43447a 100644 --- a/app/views/siteinfo/edit.php +++ b/app/views/siteinfo/edit.php @@ -24,7 +24,6 @@ use Studip\Button, Studip\LinkButton; <label> <?= _('Rubrik-Zuordnung')?> <select name="rubric_id"> - <? foreach ($rubrics as $option): ?> <option value="<?= htmlReady($option['rubric_id']) ?>" <? if ($currentrubric == $option['rubric_id']) echo 'selected'; ?>> <?= htmlReady(language_filter($option['name'])) ?> @@ -38,6 +37,11 @@ use Studip\Button, Studip\LinkButton; <input type="text" name="detail_name" id="detail_name" value="<?= htmlReady($detail_name) ?>"> </label> + <label> + <input type="checkbox" name="draft_status" id="draft_status" value="1" <?= $draft_status ? 'checked' : ''?>> + <?= _('Entwurfsmodus (nur sichtbar für root)') ?> + </label> + <label> <?= _('Seiteninhalt')?> <textarea style="height: 15em;" name="content" id="content" class="add_toolbar size-l wysiwyg"><?= wysiwygReady($content) ?></textarea> diff --git a/app/views/siteinfo/new.php b/app/views/siteinfo/new.php index fc5943798851ae8b68c59c4b8d4b5e7fc6edb462..a2389f8dd272e5fc2f638a28d94dcd5b8a70ef15 100644 --- a/app/views/siteinfo/new.php +++ b/app/views/siteinfo/new.php @@ -38,6 +38,11 @@ use Studip\Button, Studip\LinkButton; <input style="width: 90%;" type="text" name="detail_name" id="detail_name"> </label> + <label> + <input type="checkbox" name="draft_status" id="draft_status" value="1" <?= $draft_status ? 'checked' : ''?>> + <?= _('Entwurfsmodus (nur sichtbar für root)') ?> + </label> + <label> <?= _('Seiteninhalt') ?> <textarea style="width: 90%;height: 15em;" name="content" id="content"></textarea><br> diff --git a/db/migrations/5.5.2_add_siteinfo_draft_field.php b/db/migrations/5.5.2_add_siteinfo_draft_field.php new file mode 100644 index 0000000000000000000000000000000000000000..6437c00a05b6b8b6b8a7f4d1212e908e402742aa --- /dev/null +++ b/db/migrations/5.5.2_add_siteinfo_draft_field.php @@ -0,0 +1,22 @@ +<?php + +class AddSiteinfoDraftField extends Migration { + + public function description() + { + return 'Creates configuration for sites to be in draft mode'; + } + + public function up() + { + DBManager::get()->exec("ALTER TABLE `siteinfo_details` ADD `draft_status` TINYINT(1) AFTER `position`"); + } + + public function down() + { + DBManager::get()->exec("ALTER TABLE `siteinfo_details` DROP COLUMN `draft_status`"); + } + + + +} diff --git a/db/migrations/5.5.3_create_page_easy_read.php b/db/migrations/5.5.3_create_page_easy_read.php new file mode 100644 index 0000000000000000000000000000000000000000..031853371800cd9f02884ec7fcc9754662b87d09 --- /dev/null +++ b/db/migrations/5.5.3_create_page_easy_read.php @@ -0,0 +1,134 @@ + +<?php + +class CreatePageEasyRead extends Migration { + + public function description() + { + return 'Creates a page for information in Easy Read (Leichte Sprache).'; + + } + public function up() + { + DBManager::Get()->exec("INSERT INTO `config` (`field`, `value`, `type`, `range`, `section`, `mkdate`, `chdate`, `description`) + VALUES ('EASY_READ_URL', '', 'string', 'global', 'accessibility', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), 'URL zur Seite \"Leichte Sprache\"')"); + + DBManager::Get()->exec("INSERT INTO `siteinfo_details` (`detail_id`, `rubric_id`, `position`, `draft_status`, `name`, `content`) + VALUES (NULL, '1', NULL, '1', 'Leichte Sprache', + '++**Leichte Sprache** + +1) Beschreibung des Anbieters und des Zwecks der Seite +Dies sind die Internet-Seiten für Inhalte zum Lernen und Lehren von **[Einrichtung einsetzen]** . +Eine [anpassen: Universität/Hochschule/Volks-Hochschule/ oder anderes] ist ein Ort an dem man nach der normalen Schule weiter lernen kann. +Wenn man hier lernt [ggf. anpassen/arbeitet/eine Ausbildung macht] oder als Lehrer arbeitet, bekommt man Anmelde-Daten. +Wenn man angemeldet ist, findet man Material zum Unterricht. +Außerdem kann man seinen Kalender und Stundenplan sehen. +Man kann mit anderen Nachrichten schreiben. + +2) Hinweise zur Navigation +Um sich anzumelden, braucht man einen Benutzer-Namen und ein Passwort. +Benutzer-Name und Passwort bekommt man von **[Name bzw. Einrichtung angeben].** +Man meldet sich in dem Kasten an, wo Login steht. +Hilfe bei der Anmeldung findet man [Link von Einrichtung einzusetzen oder Text von Einrichtung zu ergänzen]. +[Falls auf der Startseite vorhanden: +Hilfe gibt es oben rechts [ggf. anpassen] bei dem Fragezeichen. +Ganz unten bei Impressum findet man Angaben dazu, wer die Seite gemacht hat. +Ganz unten bei Datenschutz steht, welche Daten von Besuchern der Seite verwendet werden. +Ganz unten kann man unter Barriere melden sich beschweren, wenn man die Seite nicht bedienen kann. + +3) Erläuterung der wesentlichen Inhalte der Erklärung zur Barrierefreiheit +[Je nach Standort sind ggf. die Gesetzesstellen und Behörden anzupassen.] + +Erklärung zur Barriere-Freiheit in leichter Sprache +Die [Betreibername einsetzen] ist für Barriere-Freiheit im Internet. +Das bedeutet: Alle Menschen bekommen alle wichtigen Infos. +Zum Beispiel können blinde Menschen Vorlese-Programme nutzen. + +Die [Betreibername einsetzen] beachtet die Vorschriften. +Dazu ist man gesetzlich verpflichtet. + +Das sind: +- das Behinderten-Gleichstellungs-Gesetz (BGG) +- Verordnung zur Schaffung barrierefreier Informations-Technik nach dem Behinderten-Gleichstellungs-Gesetz (BITV) +- das Behinderten-Gleichstellungs-Gesetz des [Bundesland oder Bund einfügen] + +[Da es Pflicht ist, auf bekannte Barrieren hinzuweisen, sind diese hier vom jeweiligen Betreiber zusammenzufassen und in leichter Sprache zu erläutern. +In etwa: +- Auf manchen Seiten sind die Überschriften ein bisschen durcheinander. Zum Beispiel: Da steht was unten mit kleinen Buchstaben. Das müsste aber oben mit größeren Buchstaben stehen. +- Manche Sachen werden so vorgelesen, dass blinde Menschen sie schlecht verstehen. Sie sehen das ja nicht. +…] + +Sind Sie nicht zufrieden? +Haben Sie eine Barriere gefunden? +Sie können uns schreiben. +**Hier ist ein Formular:** +[jeweiliges Barriere-melden-Formular am Standort verlinken] + +**Hier ist unsere Adresse:** +[Adresse einfügen] + +**Sie können uns anrufen:** +[Telefonnummer einfügen] + +Es gibt die **Schlichtungs-Stelle.** + +**Schlichtung** bedeutet: +- Sich einigen. +- Sich vertragen. +Die Schlichtungs-Stelle **hilft bei einem Streit.** + +Zum Beispiel: +1. Es gibt eine Barriere bei der [Einrichtung einfügen] auf den Internet-Seiten. +2. Sie haben sich darüber beschwert. +3. Die Barriere bleibt aber. + +Jetzt kann die **Schlichtungs-Stelle helfen.** +Der Streit muss dann nicht vor ein Gericht. +Beide Seiten sollen sich vertragen. +Sie können eine **Schlichtung beantragen.** + +Zum Beispiel: +Sie sind mit einer Antwort von [Einrichtung einfügen] zur Barriere-Freiheit nicht zufrieden. + +Eine **Schlichtung** kostet nichts. +Sie brauchen **keinen Anwalt.** +Sie können den **Antrag in Leichter Sprache oder in Deutscher Gebärden-Sprache** stellen. + +**Hier gibt es weitere Informationen:** +[Idealerweise Link auf jeweilige Schlichtungsstelle und deren Informationen in leichter Sprache einfügen] + +**Hier ist die Adresse der Schlichtungs-Stelle:** +[jeweils zuständige Stelle einfügen] + +**Hier ist die Telefonnummer:** +[Telefonnummer einfügen] + +4) Hinweise auf weitere in diesem Auftritt vorhandene Informationen in Deutscher Gebärdensprache und in Leichter Sprache + +[So weitere Hinweise in Leichter Sprache oder Gebärdensprache vorhanden sind, muss auf die entsprechenden Orte verwiesen werden.] +Hier finden Sie weitere Hinweise in Leichter Sprache: [Link einfügen] +Oder: +Es sind keine weiteren Informationen auf diesen Seiten in leichter oder Gebärden-Sprache enthalten.++ +')"); + + + $query = "SELECT `rubric_id`, `detail_id` + FROM `siteinfo_details` + WHERE `name` = 'Leichte Sprache' + ORDER BY `detail_id` DESC"; + $result = DBManager::get()->fetchOne($query); + $easy_read_url = "dispatch.php/siteinfo/show/{$result['rubric_id']}/{$result['detail_id']}"; + DBManager::Get()->execute("INSERT INTO `config_values` (`field`, `range_id`, `value`, `mkdate`, `chdate`, `comment`) VALUES ('EASY_READ_URL', 'studip', ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), ' zur Seite \"Leichte Sprache\"')", [$easy_read_url]); + + } + + public function down() + { + $db = DBManager::get(); + $db->exec("DELETE FROM `config` WHERE `field` = 'EASY_READ_URL'"); + $db->exec("DELETE FROM `config_values` WHERE `field` = 'EASY_READ_URL'"); + $db->exec("DELETE FROM `siteinfo_details` WHERE name = 'Leichte Sprache'"); + } + + +} diff --git a/lib/classes/Siteinfo.php b/lib/classes/Siteinfo.php index 0afa575464df83d5e62774df32818c5c8ce8385f..73e811f8c14ae28b822f3e7908b77db5853588a5 100644 --- a/lib/classes/Siteinfo.php +++ b/lib/classes/Siteinfo.php @@ -49,6 +49,16 @@ class Siteinfo { } } + public function get_detail_draft_status($id) { + $sql = "SELECT draft_status + FROM siteinfo_details + WHERE detail_id = :id"; + $statement = DBManager::get()->prepare($sql); + $statement->bindValue(':id', $id, PDO::PARAM_INT); + $statement->execute(); + return $statement->fetchColumn(); + } + function get_detail_name($id) { $sql = "SELECT name FROM siteinfo_details @@ -66,7 +76,7 @@ class Siteinfo { } function get_all_details() { - $sql = "SELECT detail_id, rubric_id, name + $sql = "SELECT detail_id, rubric_id, name, draft_status FROM siteinfo_details ORDER BY position, detail_id ASC"; $result = $this->db->query($sql); @@ -137,25 +147,27 @@ class Siteinfo { switch ($type) { case 'update_detail': $query = "UPDATE siteinfo_details - SET rubric_id = :rubric_id, name = :name, content = :content + SET rubric_id = :rubric_id, name = :name, content = :content, draft_status = :draft_status WHERE detail_id = :detail_id"; $statement = DBManager::get()->prepare($query); $statement->bindValue(':rubric_id', $input['rubric_id'], PDO::PARAM_INT); $statement->bindValue(':name', $input['detail_name']); $statement->bindValue(':content', $input['content']); $statement->bindValue(':detail_id', $input['detail_id'], PDO::PARAM_INT); + $statement->bindValue(':draft_status', $input['draft_status']); $statement->execute(); $rubric = $input['rubric_id']; $detail = $input['detail_id']; break; case 'insert_detail': - $query = "INSERT INTO siteinfo_details (rubric_id, name, content) - VALUES (:rubric_id, :name, :content)"; + $query = "INSERT INTO siteinfo_details (rubric_id, name, content, draft_status) + VALUES (:rubric_id, :name, :content, :draft_status)"; $statement = DBManager::get()->prepare($query); $statement->bindValue(':rubric_id', $input['rubric_id'], PDO::PARAM_INT); $statement->bindValue(':name', $input['detail_name']); $statement->bindValue(':content', $input['content']); + $statement->bindValue(':draft_status', $input['draft_status']); $statement->execute(); $rubric = $input['rubric_id']; diff --git a/lib/navigation/FooterNavigation.php b/lib/navigation/FooterNavigation.php index 800da377d59b6361badd52c38fa40325fe5190f6..b264c77eee5a243677086c71b90984bba8f40ac8 100644 --- a/lib/navigation/FooterNavigation.php +++ b/lib/navigation/FooterNavigation.php @@ -40,17 +40,19 @@ class FooterNavigation extends Navigation // Datenschutzerklärung - //Check if the privacy url is one of the Stud.IP pages: $privacy_url = Config::get()->PRIVACY_URL; - if (is_internal_url($privacy_url)) { - //It is a Stud.IP page. Add the cancel_login URL parameter. - $privacy_url = URLHelper::getURL($privacy_url, ['cancel_login' => '1']); + if ($this->checkSiteinfoURL($privacy_url)) { + $this->addSubNavigation( + 'privacy', + new Navigation( + _('Datenschutz'), + URLHelper::getURL($privacy_url, ['cancel_login' => 1], true) + ) + ); } - $this->addSubNavigation('privacy', new Navigation(_('Datenschutz'), $privacy_url)); - $a11yurl = Config::get()->ACCESSIBILITY_DISCLAIMER_URL; - if ($a11yurl) { + if ($this->checkSiteinfoURL($a11yurl)) { $this->addSubNavigation( 'a11ydisclaimer', new Navigation( @@ -70,5 +72,30 @@ class FooterNavigation extends Navigation ) ) ); + + $easy_read_url = Config::get()->EASY_READ_URL; + if ($this->checkSiteinfoURL($easy_read_url)) { + $this->addSubNavigation( + 'easy_read', + new Navigation( + _('Leichte Sprache'), + URLHelper::getURL($easy_read_url, ['cancel_login' => 1], true) + ) + ); + } + } + + private function checkSiteinfoURL($url) + { + if (str_starts_with($url, 'dispatch.php/siteinfo')) { + $url_parts = explode('/', $url); + $detail_id = $url_parts[4]; + $si = new Siteinfo(); + $isdraft = $si->get_detail_draft_status($detail_id); + if ($isdraft) { + return ''; + } + } + return $url; } } diff --git a/public/assets/images/icons/blue/contrast.svg b/public/assets/images/icons/blue/contrast.svg new file mode 100644 index 0000000000000000000000000000000000000000..e800b307cffb1a0222862b6db5f8f7c0b89f8586 --- /dev/null +++ b/public/assets/images/icons/blue/contrast.svg @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="Ebene_2" data-name="Ebene 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"> + <defs> + <style> + .cls-1 { + fill: none; + } + + .cls-1, .cls-2 { + stroke-width: 0px; + } + + .cls-2 { + fill: #28497c; + } + </style> + </defs> + <g id="Viewbox_64x64" data-name="Viewbox 64x64"> + <rect class="cls-1" width="64" height="64"/> + </g> + <g id="accessability"> + <g id="contrast"> + <g> + <path class="cls-2" d="m32.49,14.02c-.16,0-.32-.02-.48-.02h0s0,0-.01,0c-9.94,0-18,8.06-18,18s8.06,18,18,18,18-8.06,18-18-7.8-17.71-17.51-17.98Zm-.49,29.98c-6.62,0-12-5.38-12-12s5.38-12,12-12c0,0,0,0,.01,0v24s-.01,0-.01,0Z"/> + <circle class="cls-2" cx="32" cy="7" r="3"/> + <circle class="cls-2" cx="32" cy="57" r="3"/> + <circle class="cls-2" cx="7" cy="32" r="3"/> + <circle class="cls-2" cx="57" cy="32" r="3"/> + <circle class="cls-2" cx="14.32" cy="14.32" r="3"/> + <circle class="cls-2" cx="49.68" cy="49.68" r="3"/> + <circle class="cls-2" cx="14.32" cy="49.68" r="3"/> + <circle class="cls-2" cx="49.68" cy="14.32" r="3"/> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/public/assets/images/icons/blue/easy-read.svg b/public/assets/images/icons/blue/easy-read.svg new file mode 100644 index 0000000000000000000000000000000000000000..5aa18625a333b3994d88f7d6db782c4732f581de --- /dev/null +++ b/public/assets/images/icons/blue/easy-read.svg @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="Ebene_2" data-name="Ebene 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"> + <defs> + <style> + .cls-1 { + fill: none; + } + + .cls-1, .cls-2 { + stroke-width: 0px; + } + + .cls-2 { + fill: #28497c; + } + </style> + </defs> + <g id="Viewbox_64x64" data-name="Viewbox 64x64"> + <rect class="cls-1" width="64" height="64"/> + </g> + <g id="accessability"> + <g id="easy-read"> + <g> + <polygon class="cls-2" points="29.66 44.87 24.51 39.71 20.48 43.77 29.66 53 43.52 39.07 39.48 35 29.66 44.87"/> + <path class="cls-2" d="m32.06,28c6.65,0,12-5.36,12-12s-5.36-12-12-12-12,5.37-12,12,5.38,12,12,12Zm0-18c3.31,0,6,2.69,6,6s-2.69,6-6,6-6-2.69-6-6,2.69-6,6-6Z"/> + <path class="cls-2" d="m58,43c0-2.46-1.23-4.57-3-5.5v-11.5l-23,4.01-23-4.01v11.5c-1.77.93-3,3.04-3,5.5s1.23,4.57,3,5.5v7.49l23,4.01,23-4v-7.5c1.77-.93,3-3.04,3-5.5Zm-26,12.94l-19-3.31v-4.13c1.77-.93,3-3.04,3-5.5s-1.23-4.57-3-5.5v-6.75l18.31,3.19.69.12.69-.12,18.31-3.19v6.75c-1.77.93-3,3.04-3,5.5s1.23,4.57,3,5.5v4.14l-19,3.3Z"/> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/public/assets/images/icons/blue/easy-read2.svg b/public/assets/images/icons/blue/easy-read2.svg new file mode 100644 index 0000000000000000000000000000000000000000..50dc1c37f511094743efd3866b12e664bd89a1e7 --- /dev/null +++ b/public/assets/images/icons/blue/easy-read2.svg @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="Ebene_2" data-name="Ebene 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"> + <defs> + <style> + .cls-1 { + fill: none; + } + + .cls-1, .cls-2 { + stroke-width: 0px; + } + + .cls-2 { + fill: #28497c; + } + </style> + </defs> + <g id="Viewbox_64x64" data-name="Viewbox 64x64"> + <rect class="cls-1" width="64" height="64"/> + </g> + <g id="accessability"> + <g id="easy-read2"> + <g> + <path class="cls-2" d="m32.06,28c6.65,0,12-5.36,12-12s-5.36-12-12-12-12,5.37-12,12,5.38,12,12,12Z"/> + <path class="cls-2" d="m55,37.5v-11.5l-23,4.01-23-4.01v11.5c-1.77.93-3,3.04-3,5.5s1.23,4.57,3,5.5v7.49l23,4.01,23-4v-7.5c1.77-.93,3-3.04,3-5.5s-1.23-4.57-3-5.5Zm-25.34,15.5l-9.18-9.23,4.03-4.06,5.14,5.16,9.82-9.87,4.04,4.07-13.86,13.93Z"/> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/resources/assets/stylesheets/scss/index.scss b/resources/assets/stylesheets/scss/index.scss index 996697be9684ac3d8df5883607a1393124f7dbd4..a5cdef7c17a68779860d2c50d4eef0446d124917 100644 --- a/resources/assets/stylesheets/scss/index.scss +++ b/resources/assets/stylesheets/scss/index.scss @@ -79,7 +79,8 @@ $gap-between-boxes: calc($login-page-margin / 2); footer { overflow: auto; - #languages, #contrast { + #languages, + #contrast { display: flex; align-items: center; gap: 5px; diff --git a/templates/index_nobody.php b/templates/index_nobody.php index 519f2e18695e4aa45224ab3b05d37baa102036f8..f687775d527308adbd8c1bec1f09cb34dc569e79 100644 --- a/templates/index_nobody.php +++ b/templates/index_nobody.php @@ -83,6 +83,7 @@ if ($bg_mobile) { <?= tooltipIcon(_('Aktiviert einen hohen Kontrast gemäß WCAG 2.1. Diese Einstellung wird nach dem Login übernommen. Sie können sie in Ihren persönlichen Einstellungen ändern.')); ?> <? endif ?> + </div> <div class="login_info"> @@ -118,3 +119,4 @@ if ($bg_mobile) { </div> <? endif; ?> </main> +