From c3e75577d3aa36640416507523c8b1b25c778026 Mon Sep 17 00:00:00 2001 From: Murtaza Sultani <sultani@data-quest.de> Date: Fri, 20 Dec 2024 08:44:09 +0000 Subject: [PATCH] Resolve "Editierbare Nutzungsbedingungen" Closes #4433 Merge request studip/studip!3222 --- RELEASE-NOTES.md | 1 + app/controllers/terms.php | 33 ++++++++++++++++++ app/views/terms/index.php | 4 ++- db/migrations/6.0.36_tic_4433.php | 43 ++++++++++++++++++++++++ lib/navigation/FooterNavigation.php | 13 +++++++- locale/de/LC_HELP/pages/nutzung.html | 43 ------------------------ locale/en/LC_HELP/pages/nutzung.html | 50 ---------------------------- locale/en/LC_MESSAGES/studip.po | 1 + templates/terms.php | 22 ++++++++++-- 9 files changed, 112 insertions(+), 98 deletions(-) create mode 100644 db/migrations/6.0.36_tic_4433.php delete mode 100644 locale/de/LC_HELP/pages/nutzung.html delete mode 100644 locale/en/LC_HELP/pages/nutzung.html diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 5756c7d26b2..937ff8f73e3 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -7,6 +7,7 @@ - Der Stud.IP-Cache ist nun kompatibel zu PSR-6. ([TIC #3701](https://gitlab.studip.de/studip/studip/-/issues/3701)) - Das `User`-Model hat die Methode `hasPermissionLevel()` erhalten, um einfach abfragen zu können, ob eine Person einen bestimmten Berechtigungsstatus hat. ([Issue #3453](https://gitlab.studip.de/studip/studip/-/issues/3453)) - In der Standort-Verwaltung können nun nicht nur Ferien sondern auch Feiertage konfiguriert werden. Dies erlaubt das Markieren von Feiertagen als gesetzliche Feiertage, da diese je nach Bundesland variieren können. ([Issue #2795](https://gitlab.studip.de/studip/studip/-/issues/2795)) +- Die Nutzungsbedingungen sind nun nicht mehr als statische HTML-Dateien hinterlegt, sondern können analog zu Impressum, Datenschutz- und Barrierefreiheitserklärung direkt über die Oberfläche bearbeitet werden. Initial ist diese Seite aber im Entwurfsmodus und daher für Nicht-Roots unsichtbar. Damit andere Personen beim ersten Login diese Nutzungsbedingungen sehen und ihnen zustimmen können, muss der Entwurfsmodus für diese Seite abgeschaltet werden. ([TIC #4433](https://gitlab.studip.de/studip/studip/-/issues/4433)) ## Breaking changes diff --git a/app/controllers/terms.php b/app/controllers/terms.php index d3a829ef1f6..528859af7a3 100644 --- a/app/controllers/terms.php +++ b/app/controllers/terms.php @@ -26,6 +26,9 @@ class TermsController extends AuthenticatedController $this->compulsory = Config::get()->TERMS_CONFIG['compulsory']; $this->denial_message = ''; + + $this->terms_of_use = $this->getTermsOfUse(); + if (Request::isPost()) { CSRFProtection::verifyUnsafeRequest(); if (Request::submitted('accept')) { @@ -59,4 +62,34 @@ class TermsController extends AuthenticatedController } $this->redirect(URLHelper::getURL($target)); } + + + /** + * @return array|null + */ + private function getTermsOfUse() + { + $url = Config::get()->TERMS_OF_USE_URL; + + if (is_internal_url($url)) { + $url_parts = explode('/', $url); + $detail_id = $url_parts[4]; + $si = new Siteinfo(); + $detail = $si->get_detail($detail_id); + if (empty($detail) || !empty($detail['draft_status']) || !empty($detail['page_disabled_nobody'])) { + return null; + } + + return [ + 'type' => 'internal_url', + 'content' => $si->get_detail_content_processed($detail_id) + ]; + + } + + return [ + 'type' => 'external_url', + 'url' => $url + ]; + } } diff --git a/app/views/terms/index.php b/app/views/terms/index.php index 0dc5710e493..09a17601295 100644 --- a/app/views/terms/index.php +++ b/app/views/terms/index.php @@ -19,7 +19,9 @@ </section> </section> <? else: ?> - <?= $GLOBALS['template_factory']->render('terms.php') ?> + <?= $GLOBALS['template_factory']->render('terms.php', [ + 'terms_of_use' => $terms_of_use, + ]) ?> <? endif; ?> <footer style="text-align: center"> <? if ($denial_message): ?> diff --git a/db/migrations/6.0.36_tic_4433.php b/db/migrations/6.0.36_tic_4433.php new file mode 100644 index 00000000000..8a19fb9702a --- /dev/null +++ b/db/migrations/6.0.36_tic_4433.php @@ -0,0 +1,43 @@ +<?php +class Tic4433 extends Migration +{ + public function description() + { + return 'Insert default content for Nutzungsbedingungen'; + } + + protected function up() + { + $content = '<!--HTML--><p>[lang=de]</p><ol><li>Bei Stud.IP besteht Klarnamenpflicht. Der Benutzer oder die Benutzerin verpflichtet sich, seinen/ihren korrekten Vornamen und Nachnamen anzugeben. Der zum Login benötigte Anmeldename ist innerhalb der programmtechnisch festgelegten Grenzen frei wählbar.</li><li>Der Benutzer oder die Benutzerin hat sicherzustellen, dass seine/ihre angegebene E-Mailadresse gültig und funktionsfähig ist.</li><li>Alle anderen Angaben zu Ihrer Person erfolgen freiwillig. Wenn Sie weitere Daten von sich angeben, sind diese nur für andere, registrierte Nutzer des Systems zugänglich. Eine Ausnahme hiervon sind automatisch aus dem System generierte Personalverzeichnisse der beteiligten Institute.</li><li>Der Benutzer oder die Benutzerin stellt sicher, dass er/sie bei der Nutzung des Kommunikationssystems Stud.IP nicht gegen eine geltende Rechtsvorschrift verstößt. Insbesondere verpflichtet sich der Benutzer oder die Benutzerin:<ol style="list-style-type:lower-latin;"><li>Stud.IP weder zum Abruf noch zur Verbreitung von sitten- oder rechtswidrigen Inhalten zu benutzen.</li><li>Die geltenden Jugendschutzvorschriften zu beachten.</li><li>Die Privatsphäre anderer zu respektieren und daher in keinem Fall belästigende, verleumderische oder bedrohende Inhalte einzustellen oder zu verschicken.</li><li>Keine Anwendungen auszuführen, die zu einer Veränderung der physikalischen oder logischen Struktur der genutzten Netze führen können.</li></ol></li><li>Die Nutzung von Stud.IP für jede andere Form von Werbe- oder Marketingbotschaften ist nicht gestattet und verpflichtet den Benutzern oder die Benutzerin zum Ersatz des Stud.IP entstandenen Schadens.</li><li>Der Benutzer oder die Benutzerin verpflichtet sich, seinen/ihren Zugang gegen die unbefugte Benutzung durch Dritte zu schützen. Stud.IP weist an dieser Stelle darauf hin, dass das Passwort nicht weitergegeben werden darf. Der Benutzer oder die Benutzerin haftet für jede durch sein/ihr Verhalten ermöglichte unbefugte Benutzung seines/ihres Accounts, soweit ihn/sie ein Verschulden trifft.</li><li>Bei einem Verstoß des Benutzers oder der Benutzerin gegen die oben aufgeführten Obliegenheiten erfolgt eine unverzügliche Sperrung des Zugangs.</li></ol><p>[/lang] [lang=en]</p><ol><li>Stud.IP bears a RealName obligation. The user is obliged to give his or her correct forename and surname. The registration name, necessary to login, is arbitary within the technical limitations of the program.</li><li>The user must ensure that his or her entered E-mail address is valid and functional.</li><li>All other information about the user is not compulsory. If you enter further information, it will only be accessed by other, registered users in the system. The only exception is system automatically generated personel indexes of the participating institutes.</li><li>The user must make sure that he or she does not violate any applicable laws or regulations by using Stud.IP communication system. In particular, the user is obliged:<ol><li>not to use Stud.IP to either call up or distribute immoral or illegal material.</li><li>to heed the applicable child protection regulations.</li><li>to respect the privacy of others and under no circumstances to call up or send harrassing, libellous or threatening material.</li><li>not to execute any applications that may lead to a change in the physical or logical structure of the shared net.</li></ol></li><li>The usage of Stud.IP for all other forms of advertising or marketing is not permitted, in which case the user is obliged to compensate Stud.IP for any damage caused.</li><li>The user is obliged to protect his or her access to Stud.IP against the unauthorised use by a third party. To this affect, Stud.IP advises that the password should not be passed on. The user is liable for every unauthorised usage of his or her account, as long as it is his or her fault.</li><li>Following a breachment of the above conditions by the user, the access will be immediately blocked.</li></ol><p>[/lang]</p>'; + + $query = "INSERT INTO `siteinfo_details` + (`rubric_id`, `draft_status`, `page_disabled_nobody`, `name`, `content`) + VALUES (1, 1, 0, 'Nutzungsbedingungen', ?)"; + DBManager::get()->execute($query, [$content]); + + DBManager::get()->execute( + "INSERT IGNORE INTO `config` VALUES (:field, :value, :type, :range, :section, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), :description)", + [ + 'field' => 'TERMS_OF_USE_URL', + 'value' => 'dispatch.php/siteinfo/show/1/10', + 'type' => 'string', + 'range' => 'global', + 'section' => 'privacy', + 'description' => 'URL zu den Nutzungsbedingungen' + ] + ); + } + + public function down() + { + DBManager::get()->exec("DELETE FROM `siteinfo_details` WHERE `name` = 'Nutzungsbedingungen'"); + + DBManager::get()->execute( + "DELETE `config`, `config_values` + FROM `config` + LEFT JOIN `config_values` USING (`field`) + WHERE `field` = :field", + ['field' => 'TERMS_OF_USE_URL'] + ); + } +} diff --git a/lib/navigation/FooterNavigation.php b/lib/navigation/FooterNavigation.php index 4319c971ae0..9a7b9aed2b3 100644 --- a/lib/navigation/FooterNavigation.php +++ b/lib/navigation/FooterNavigation.php @@ -38,8 +38,19 @@ class FooterNavigation extends Navigation //studip $this->addSubNavigation('studip', new Navigation(_('Stud.IP'), 'http://www.studip.de/')); - // Datenschutzerklärung + // Nutzungsbedingungen + $terms_of_use_url = Config::get()->TERMS_OF_USE_URL; + if ($this->checkSiteinfoURL($terms_of_use_url)) { + $this->addSubNavigation( + 'terms_of_use', + new Navigation( + _('Nutzungsbedingungen'), + URLHelper::getURL($terms_of_use_url, ['cancel_login' => 1], true) + ) + ); + } + // Datenschutzerklärung $privacy_url = Config::get()->PRIVACY_URL; if ($this->checkSiteinfoURL($privacy_url)) { $this->addSubNavigation( diff --git a/locale/de/LC_HELP/pages/nutzung.html b/locale/de/LC_HELP/pages/nutzung.html deleted file mode 100644 index e96f4463000..00000000000 --- a/locale/de/LC_HELP/pages/nutzung.html +++ /dev/null @@ -1,43 +0,0 @@ -<section class="contentbox"> - <header> - <h1>Nutzungsbedingungen</h1> - </header> - <section> - <div class="formatted-content"> - <ol start="1"> - <li>Bei Stud.IP besteht Klarnamenpflicht. Der Benutzer oder die Benutzerin - verpflichtet sich, seinen/ihren korrekten Vornamen und Nachnamen anzugeben. - Der zum Login benötigte Anmeldename ist innerhalb der programmtechnisch - festgelegten Grenzen frei wählbar.</li> - <li>Der Benutzer oder die Benutzerin hat sicherzustellen, dass seine/ihre - angegebene E-Mailadresse gültig und funktionsfähig ist.</li> - <li>Alle anderen Angaben zu Ihrer Person erfolgen freiwillig. - Wenn Sie weitere Daten von sich angeben, sind diese nur für andere, registrierte Nutzer des Systems zugänglich. - Eine Ausnahme hiervon sind automatisch aus dem System generierte Personalverzeichnisse der beteiligten Institute.</li> - <li>Der Benutzer oder die Benutzerin stellt sicher, dass er/sie bei der Nutzung des - Kommunikationssystems Stud.IP nicht gegen eine geltende Rechtsvorschrift - verstößt. Insbesondere verpflichtet sich der Benutzer oder die Benutzerin: - <ol type="a"> - <li>Stud.IP weder zum Abruf noch zur Verbreitung von sitten- oder rechtswidrigen Inhalten zu benutzen.</li> - <li>Die geltenden Jugendschutzvorschriften zu beachten.</li> - <li>Die Privatsphäre anderer zu respektieren und daher in keinem Fall belästigende, verleumderische oder bedrohende Inhalte - einzustellen oder zu verschicken.</li> - <li>Keine Anwendungen auszuführen, die zu einer Veränderung der physikalischen oder logischen Struktur der genutzten Netze - führen können.</li> - </ol> - </li> - <li>Die Nutzung von Stud.IP für jede andere Form von Werbe- oder - Marketingbotschaften ist nicht gestattet und verpflichtet den Benutzern oder - die Benutzerin zum Ersatz des Stud.IP entstandenen Schadens.</li> - <li>Der Benutzer oder die Benutzerin verpflichtet sich, seinen/ihren Zugang - gegen die unbefugte Benutzung durch Dritte zu schützen. Stud.IP weist an dieser - Stelle darauf hin, dass das Passwort nicht weitergegeben werden darf. Der - Benutzer oder die Benutzerin haftet für jede durch sein/ihr Verhalten - ermöglichte unbefugte Benutzung seines/ihres Accounts, soweit ihn/sie ein Verschulden - trifft.</li> - <li>Bei einem Verstoß des Benutzers oder der Benutzerin gegen die oben - aufgeführten Obliegenheiten erfolgt eine unverzügliche Sperrung des Zugangs.</li> - </ol> - </div> - </section> -</section> diff --git a/locale/en/LC_HELP/pages/nutzung.html b/locale/en/LC_HELP/pages/nutzung.html deleted file mode 100644 index 42cf4867fb5..00000000000 --- a/locale/en/LC_HELP/pages/nutzung.html +++ /dev/null @@ -1,50 +0,0 @@ -<section class="contentbox"> - <header> - <h1> - Terms of use - </h1> - </header> - <section> - <div class="formatted-content"> - <ol start="1"> - <li>Stud.IP bears a RealName obligation. The user is obliged to - give his or her correct forename and surname. The registration name, necessary - to login, is arbitary within the technical limitations of the program. - </li> - <li>The user must ensure that his or her entered E-mail address is valid - and functional. - </li> - <li>All other information about the user is not compulsory. If you enter - further information, it will only be accessed by other, registered users in - the system. The only exception is system automatically generated personel - indexes of the participating institutes. - </li> - <li>The user must make sure that he or she does not violate any applicable - laws or regulations by using Stud.IP communication system. In particular, - the user is obliged: - <ol type="a"> - <li>not to use Stud.IP to either call up or distribute immoral or illegal - material.</li> - <li>to heed the applicable child protection regulations.</li> - <li>to respect the privacy of others and under no circumstances to call - up or send harrassing, libellous or threatening material.</li> - <li>not to execute any applications that may lead to a change in the physical - or logical structure of the shared net.</li> - </ol> - </li> - <li>The usage of Stud.IP for all other forms of advertising or marketing - is not permitted, in which case the user is obliged to compensate Stud.IP - for any damage caused.</li> - <li>The user is obliged to protect his or her access to Stud.IP against - the unauthorised use by a third party. To this affect, Stud.IP advises that - the password should not be passed on. The user is liable for every unauthorised - usage of his or her account, as long as it is his or her fault.</li> - <li>Following a breachment of the above conditions by the user, the access - will be immediately blocked.<br> - </li> - </ol> - </div> - </section> -</section> -</body> -</html> diff --git a/locale/en/LC_MESSAGES/studip.po b/locale/en/LC_MESSAGES/studip.po index e134674fbbd..cd13be632e0 100644 --- a/locale/en/LC_MESSAGES/studip.po +++ b/locale/en/LC_MESSAGES/studip.po @@ -16808,6 +16808,7 @@ msgstr "The end time may not be earlier than the start time!" #: app/controllers/terms.php:22 #: app/views/course/studygroup/globalmodules.php:70 #: app/views/course/wizard/steps/basicdata/index_studygroup.php:60 +#: templates/terms.php:33 msgid "Nutzungsbedingungen" msgstr "Terms of use" diff --git a/templates/terms.php b/templates/terms.php index cc147241d23..28a10d7341a 100644 --- a/templates/terms.php +++ b/templates/terms.php @@ -27,6 +27,22 @@ </section> </section> -<?php - $lang = $GLOBALS['_language_path'] ?: 'de'; - include("locale/{$lang}/LC_HELP/pages/nutzung.html"); +<? if ($terms_of_use) : ?> +<section class="contentbox"> + <header> + <h1><?= _('Nutzungsbedingungen') ?></h1> + </header> + <section> + <? if ($terms_of_use['type'] === 'internal_url') : ?> + <?= $terms_of_use['content'] ?> + <? else : ?> + <strong> + <a href="<?= URLHelper::getURL($terms_of_use['url']) ?>" title="<?= _('Nutzungsbedingungen') ?>" + target="_blank" tabindex="0"> + <?= URLHelper::getURL($terms_of_use['url']) ?> + </a> + </strong> + <? endif ?> + </section> +</section> +<? endif ?> -- GitLab