From d2e68c552c4a7ee2127cf8a4906481991c69ec2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michaela=20Br=C3=BCckner?= Date: Tue, 17 Oct 2023 08:33:27 +0000 Subject: Informationsseite Leichte Sprache bereitstellen, resolve Tic #3132 Merge request studip/studip!2125 --- app/controllers/siteinfo.php | 41 ++++--- app/views/siteinfo/edit.php | 6 +- app/views/siteinfo/new.php | 5 + db/migrations/5.5.2_add_siteinfo_draft_field.php | 22 ++++ db/migrations/5.5.3_create_page_easy_read.php | 134 +++++++++++++++++++++++ lib/classes/Siteinfo.php | 20 +++- lib/navigation/FooterNavigation.php | 41 +++++-- public/assets/images/icons/blue/contrast.svg | 36 ++++++ public/assets/images/icons/blue/easy-read.svg | 30 +++++ public/assets/images/icons/blue/easy-read2.svg | 29 +++++ resources/assets/stylesheets/scss/index.scss | 3 +- templates/index_nobody.php | 2 + 12 files changed, 343 insertions(+), 26 deletions(-) create mode 100644 db/migrations/5.5.2_add_siteinfo_draft_field.php create mode 100644 db/migrations/5.5.3_create_page_easy_read.php create mode 100644 public/assets/images/icons/blue/contrast.svg create mode 100644 public/assets/images/icons/blue/easy-read.svg create mode 100644 public/assets/images/icons/blue/easy-read2.svg diff --git a/app/controllers/siteinfo.php b/app/controllers/siteinfo.php index 82aa8b5..86ab7e7 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 54bd8d2..00d4d6e 100644 --- a/app/views/siteinfo/edit.php +++ b/app/views/siteinfo/edit.php @@ -24,7 +24,6 @@ use Studip\Button, Studip\LinkButton; + + diff --git a/app/views/siteinfo/new.php b/app/views/siteinfo/new.php index fc59437..a2389f8 100644 --- a/app/views/siteinfo/new.php +++ b/app/views/siteinfo/new.php @@ -39,6 +39,11 @@ use Studip\Button, Studip\LinkButton; + + 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 0000000..6437c00 --- /dev/null +++ b/db/migrations/5.5.2_add_siteinfo_draft_field.php @@ -0,0 +1,22 @@ +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 0000000..0318533 --- /dev/null +++ b/db/migrations/5.5.3_create_page_easy_read.php @@ -0,0 +1,134 @@ + +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 0afa575..73e811f 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 800da37..b264c77 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 0000000..e800b30 --- /dev/null +++ b/public/assets/images/icons/blue/contrast.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ 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 0000000..5aa1862 --- /dev/null +++ b/public/assets/images/icons/blue/easy-read.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + \ 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 0000000..50dc1c3 --- /dev/null +++ b/public/assets/images/icons/blue/easy-read2.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/assets/stylesheets/scss/index.scss b/resources/assets/stylesheets/scss/index.scss index 996697b..a5cdef7 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 519f2e1..f687775 100644 --- a/templates/index_nobody.php +++ b/templates/index_nobody.php @@ -83,6 +83,7 @@ if ($bg_mobile) { +
@@ -118,3 +119,4 @@ if ($bg_mobile) {
+ -- cgit v1.0