From 58068b75bee4f773b9d7ecb104f765d9d28fbec2 Mon Sep 17 00:00:00 2001 From: Justus Dieckmann Date: Tue, 8 Nov 2022 20:31:07 +0100 Subject: [PATCH 1/5] Redesign the login page --- classes/layout.php | 3 +++ classes/output/core_renderer.php | 35 +++++++++++++++------------ config.php | 2 +- lang/de/theme_wwu2019.php | 9 +++++++ lang/en/theme_wwu2019.php | 9 +++++++ pix/screenshot.png | Bin 0 -> 41418 bytes templates/core/loginform.mustache | 39 +++++++++++++----------------- templates/menu.mustache | 2 +- 8 files changed, 60 insertions(+), 39 deletions(-) create mode 100644 pix/screenshot.png diff --git a/classes/layout.php b/classes/layout.php index 47aa8aa..efabc48 100644 --- a/classes/layout.php +++ b/classes/layout.php @@ -39,6 +39,9 @@ class layout { * Autologin if access takes place via SSO. */ public static function sso_auto_login() { + if (!function_exists('wwusso_username')) { + return; + } if (!isloggedin() && wwusso_username()) { global $CFG; $url = qualified_me(); diff --git a/classes/output/core_renderer.php b/classes/output/core_renderer.php index f21de5a..9df5659 100644 --- a/classes/output/core_renderer.php +++ b/classes/output/core_renderer.php @@ -117,6 +117,10 @@ public function logo_header() { public function main_menu() { global $CFG, $USER; + if (isset($this->page->layout_options['nomainmenu']) && $this->page->layout_options['nomainmenu']) { + return ''; + } + $mainmenu = []; // Add MyCourses menu. @@ -1079,7 +1083,11 @@ private function get_login() { } $loginurl = get_login_url(); - $wwwhost = htmlentities(selfmsp(true)); + if (function_exists('selfmsp')) { + $wwwhost = htmlentities(selfmsp(true)); + } else { + $wwwhost = ''; + } $ssologinurl = str_ireplace($wwwhost, 'https://sso.uni-muenster.de', $CFG->wwwroot); return ['url' => $loginurl, 'ssourl' => $ssologinurl]; @@ -1125,22 +1133,19 @@ public function render_login(\core_auth\output\login $form) { // Set the context variables for the mustache template. global $CFG, $SESSION; - $wwwhost = htmlentities(selfmsp(true)); + if (function_exists('selfmsp')) { + $wwwhost = htmlentities(selfmsp(true)); + } else { + $wwwhost = ''; + } $context->ssofield = (stripos($wwwhost, "www") !== false && stripos($CFG->wwwroot, $wwwhost) !== false); $wantsurl = empty($SESSION->wantsurl) ? $CFG->wwwroot : $SESSION->wantsurl; - $context->ssoactionurl = str_ireplace($wwwhost, 'https://sso.uni-muenster.de', $wantsurl); - $context->xssoactionurl = str_ireplace($wwwhost, 'https://xsso.uni-muenster.de', $wantsurl); - // Read parameters from url, thus they can be used in form as hidden fields - // $wantsurl can contain parameters e.g. user/view.php?id=5&course=10 - // form method needs to be 'get', because an xsso forward would drop post values. - // within the get action of a form query string values are dropped as well. - $params = array(); - parse_str(parse_url($wantsurl, PHP_URL_QUERY), $params); - $paramsmustache = array(); - foreach ($params as $key => $val) { - $paramsmustache[] = ["key" => $key, "value" => $val]; - } - $context->ssoparams = $paramsmustache; + $context->ssourl = str_ireplace($wwwhost, 'https://sso.uni-muenster.de', $wantsurl); + $context->xssourl = str_ireplace($wwwhost, 'https://xsso.uni-muenster.de', $wantsurl); + $context->moodleloginurl = new moodle_url($this->page->url, ['moodlelogin' => '1']); + $moodlelogin = (bool) optional_param('moodlelogin', 0, PARAM_BOOL); + $context->showmoodlelogin = !self::is_examweb() && $moodlelogin; + $context->showssologin = !$moodlelogin; return $this->render_from_template('core/loginform', $context); } diff --git a/config.php b/config.php index b262d0f..cc72c3e 100644 --- a/config.php +++ b/config.php @@ -139,7 +139,7 @@ 'theme' => 'wwu2019', 'file' => 'columns.php', 'regions' => array(), - 'options' => array('langmenu' => true), + 'options' => array('langmenu' => true, 'nomainmenu' => true, 'nonavbar' => true), ), // Pages that appear in pop-up windows - no navigation, no blocks, no header. diff --git a/lang/de/theme_wwu2019.php b/lang/de/theme_wwu2019.php index b2030bf..f5ab5d1 100644 --- a/lang/de/theme_wwu2019.php +++ b/lang/de/theme_wwu2019.php @@ -109,3 +109,12 @@ $string['exam:end'] = 'Klausurende:'; $string['examweb_description'] = 'Online-Prüfungssystem der WWU Münster'; + +// SSO Strings. +$string['loginSSO_long'] = 'Anmelden per SSO'; +$string['loginXSSO_long'] = 'Mit Nutzerzertifikat anmelden'; +$string['loginSSO_link'] = 'Login (SSO)'; +$string['login_via_sso_desc'] = 'Bei Nutzung von Single-Sign-On (SSO) reicht die einmalige Anmeldung zu Beginn der Sitzung zur Nutzung (fast) aller Dienste, die zentral für die WWU Münster bereitgestellt werden. Sie müssen sich also in anderen Systemen nicht erneut anmelden! Besitzen Sie ein kostenloses Nutzerzertifikat der WWUCA? Dann können Sie auch dieses zur Anmeldung verwenden und ersparen sich somit vollständig die Eingabe von Nutzername und Passwort.'; +$string['heading_login_via_sso'] = 'Login per SSO (empfohlen)'; +$string['heading_login_usual_way'] = 'Moodle-Login'; +$string['login_usual_way'] = 'Per internem Moodle-Login anmelden'; diff --git a/lang/en/theme_wwu2019.php b/lang/en/theme_wwu2019.php index 4c5fcd3..acd632d 100644 --- a/lang/en/theme_wwu2019.php +++ b/lang/en/theme_wwu2019.php @@ -109,3 +109,12 @@ $string['exam:end'] = 'End of exam:'; $string['examweb_description'] = 'Online examination system of the University of Münster'; + +// SSO Strings. +$string['loginSSO_long'] = 'Log in via SSO'; +$string['loginXSSO_long'] = 'Log in with certificate'; +$string['loginSSO_link'] = 'Log in (SSO)'; +$string['login_via_sso_desc'] = 'Using Single-Sign-On (SSO) means that a single login provides you with access to all central services offered by the university. Without having to login again! If you possess a user certificate issued by the WWUCA you can even skip login completely.'; +$string['heading_login_via_sso'] = 'Login via SSO (recommended)'; +$string['heading_login_usual_way'] = 'Moodle login'; +$string['login_usual_way'] = 'Use the internal moodle login'; diff --git a/pix/screenshot.png b/pix/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..e8275db1ad55cc66bc367215fd668b272c85d5b2 GIT binary patch literal 41418 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 Q0{>k+FC+fptoGgi1+9*PFaQ7m literal 0 HcmV?d00001 diff --git a/templates/core/loginform.mustache b/templates/core/loginform.mustache index d1e399c..4628191 100644 --- a/templates/core/loginform.mustache +++ b/templates/core/loginform.mustache @@ -122,38 +122,33 @@ {{/ isexamweb }} + {{# showssologin }}
{{! Beginn Block Container }}
- {{^isexamweb}} + {{/showssologin}} + {{#showmoodlelogin}}
{{! Beginn Block Container }}
@@ -175,7 +171,6 @@ {{#str}} login {{/str}} {{/ssofield}} -
{{! Block contents }}
@@ -241,7 +236,7 @@
{{! End Block Container }}
- {{/isexamweb}} + {{/showmoodlelogin}}
diff --git a/templates/menu.mustache b/templates/menu.mustache index 70b2482..9e3c416 100644 --- a/templates/menu.mustache +++ b/templates/menu.mustache @@ -96,7 +96,7 @@ {{/login}} From eddc6077d457fa31a7dbf38fe2bac725ec6e3ece Mon Sep 17 00:00:00 2001 From: n_herr03 Date: Fri, 18 Nov 2022 17:27:57 +0100 Subject: [PATCH 2/5] Single Block Login TODO space between login and footer --- lang/de/theme_wwu2019.php | 11 ++- lang/en/theme_wwu2019.php | 11 ++- templates/core/loginform.mustache | 116 ++++++++++++++---------------- 3 files changed, 68 insertions(+), 70 deletions(-) diff --git a/lang/de/theme_wwu2019.php b/lang/de/theme_wwu2019.php index f5ab5d1..f8fe1e7 100644 --- a/lang/de/theme_wwu2019.php +++ b/lang/de/theme_wwu2019.php @@ -111,10 +111,15 @@ $string['examweb_description'] = 'Online-Prüfungssystem der WWU Münster'; // SSO Strings. +$string['login'] = 'Anmelden'; $string['loginSSO_long'] = 'Anmelden per SSO'; -$string['loginXSSO_long'] = 'Mit Nutzerzertifikat anmelden'; +$string['persistent_login_methods'] = 'Universitätsweite Anmeldung'; +$string['loginXSSO_long'] = 'Nutzerzertifikat'; +$string['get_cert'] = 'Zertifikat beantragen?'; +$string['forgot_pwd'] = 'Passwort vergessen?'; +$string['security_info'] = 'IV-Sicherheitsflyer'; +$string['guest_and_intern'] = 'Zugang für Gäste und LearnWeb interner Login'; $string['loginSSO_link'] = 'Login (SSO)'; $string['login_via_sso_desc'] = 'Bei Nutzung von Single-Sign-On (SSO) reicht die einmalige Anmeldung zu Beginn der Sitzung zur Nutzung (fast) aller Dienste, die zentral für die WWU Münster bereitgestellt werden. Sie müssen sich also in anderen Systemen nicht erneut anmelden! Besitzen Sie ein kostenloses Nutzerzertifikat der WWUCA? Dann können Sie auch dieses zur Anmeldung verwenden und ersparen sich somit vollständig die Eingabe von Nutzername und Passwort.'; $string['heading_login_via_sso'] = 'Login per SSO (empfohlen)'; -$string['heading_login_usual_way'] = 'Moodle-Login'; -$string['login_usual_way'] = 'Per internem Moodle-Login anmelden'; +$string['login_usual_way'] = 'LearnWeb interner Login'; diff --git a/lang/en/theme_wwu2019.php b/lang/en/theme_wwu2019.php index acd632d..0e50392 100644 --- a/lang/en/theme_wwu2019.php +++ b/lang/en/theme_wwu2019.php @@ -111,10 +111,15 @@ $string['examweb_description'] = 'Online examination system of the University of Münster'; // SSO Strings. +$string['login'] = 'Login'; $string['loginSSO_long'] = 'Log in via SSO'; -$string['loginXSSO_long'] = 'Log in with certificate'; +$string['persistent_login_methods'] = 'University-wide Login'; +$string['loginXSSO_long'] = 'Certificate'; +$string['get_cert'] = 'Get Certifikat'; +$string['forgot_pwd'] = 'Forgotten Password?'; +$string['security_info'] = 'IV-Security Information'; +$string['guest_and_intern'] = 'Guests and LearnWeb internal login'; $string['loginSSO_link'] = 'Log in (SSO)'; $string['login_via_sso_desc'] = 'Using Single-Sign-On (SSO) means that a single login provides you with access to all central services offered by the university. Without having to login again! If you possess a user certificate issued by the WWUCA you can even skip login completely.'; $string['heading_login_via_sso'] = 'Login via SSO (recommended)'; -$string['heading_login_usual_way'] = 'Moodle login'; -$string['login_usual_way'] = 'Use the internal moodle login'; +$string['login_usual_way'] = 'LearnWeb internal login'; diff --git a/templates/core/loginform.mustache b/templates/core/loginform.mustache index 4628191..6104ae4 100644 --- a/templates/core/loginform.mustache +++ b/templates/core/loginform.mustache @@ -103,11 +103,13 @@
{{/error}} - +
-
+
{{# isexamweb }}
+ {{! Beginn Block Container }}
{{! Block header }} @@ -120,35 +122,71 @@
+ {{/ isexamweb }} + {{# showssologin }} -
+ +
+ + + {{! Beginn Block Container }}
{{! Block header }}
- {{#str}} login {{/str}} + {{#str}} login, theme_wwu2019 {{/str}}
{{! Block contents }}
-

{{#str}} login_via_sso_desc, theme_wwu2019 {{/str}}

-
-
- {{#str}} loginSSO_long, theme_wwu2019{{/str}} +

{{#str}} persistent_login_methods, theme_wwu2019{{/str}}

+ + +
{{^ isexamweb }} -
- {{#str}} login_usual_way, theme_wwu2019{{/str}} +

{{#str}} guest_and_intern, theme_wwu2019{{/str}}

+ {{/ isexamweb }} + {{#canloginasguest}} +
+
+
+ + + + +
+
+
+ {{/canloginasguest}} +
+ +

+ {{#str}} security_info, theme_wwu2019{{/str}}

+ +

+ {{#str}} forgot_pwd, theme_wwu2019{{/str}}

+ +

+ {{#str}} get_cert, theme_wwu2019{{/str}}

+ + +
+ {{#str}} cookiesenabled {{/str}} + {{{cookieshelpiconformatted}}} +
@@ -156,9 +194,11 @@
{{! End Block Container }}
+
+
{{/showssologin}} {{#showmoodlelogin}} -
+
{{! Beginn Block Container }}
{{! Block header }} @@ -211,26 +251,8 @@
-
- {{#str}} cookiesenabled {{/str}} - {{{cookieshelpiconformatted}}} -
- - {{#canloginasguest}} -
-
{{#str}} someallowguest {{/str}}
-
-
- - - - -
-
-
- {{/canloginasguest}} @@ -270,40 +292,6 @@
{{/hasinstructions}} -
- {{! Beginn Block Container }} -
- {{! Block header }} -
-
- Wichtige Hinweise zum Umgang mit Passwörtern -
- -
- {{! Block contents }} -
-

- Informationen zum Serverzertifikat in Google Chrome - Keine Person oder Einrichtung der Universität wird Sie in E-Mails nach Ihrem persönlichen Passwort fragen. Bitte geben Sie dieses nie an jemanden weiter. Geben Sie Kennung und Passwort nur auf Webseiten der Uni Münster ein, die sich per Serverzertifikat als vertrauenswürdig ausweisen! Klicken Sie zur Überprüfung auf das Schlosssymbol in der Adressleiste Ihres Browsers. -

- -

Weitere Informationen

-

- IV-Sicherheitsflyer

- -

Passwort vergessen?

-

- Hinweise zum Wiedererlangen vergessener Passwörter und Nutzerkennungen

- -

Nutzerzertifikat beantragen?

-

- Weiterführende Informationen bei der Zertifizierungsstelle der WWU

-
- -
- {{! End Block Container }} -
- {{#hasidentityproviders}}
{{#str}} potentialidps, auth {{/str}}
From 67e2ebe0084a7dda5b46ecff1dbe64aa46c7693d Mon Sep 17 00:00:00 2001 From: n_herr03 Date: Fri, 18 Nov 2022 17:39:54 +0100 Subject: [PATCH 3/5] some clean up --- templates/core/loginform.mustache | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/templates/core/loginform.mustache b/templates/core/loginform.mustache index 6104ae4..a01bd5a 100644 --- a/templates/core/loginform.mustache +++ b/templates/core/loginform.mustache @@ -103,13 +103,10 @@
{{/error}} -
{{# isexamweb }}
- {{! Beginn Block Container }}
{{! Block header }} @@ -119,19 +116,13 @@ {{#str}} examweb_description, theme_wwu2019 {{/str}}

-
-
{{/ isexamweb }} {{# showssologin }} - -
- - - +
{{! Beginn Block Container }}
{{! Block header }} @@ -181,8 +172,6 @@

{{#str}} get_cert, theme_wwu2019{{/str}}

- -
{{#str}} cookiesenabled {{/str}} {{{cookieshelpiconformatted}}} @@ -261,7 +250,7 @@ {{/showmoodlelogin}}
-
+
{{#hasinstructions}}
{{! Beginn Block Container }} From 1c1aacaf5a3f643a7da73f9c2edeaa03c4e6f0e4 Mon Sep 17 00:00:00 2001 From: n_herr03 Date: Fri, 18 Nov 2022 17:42:56 +0100 Subject: [PATCH 4/5] testing additional information style --- templates/core/loginform.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/core/loginform.mustache b/templates/core/loginform.mustache index a01bd5a..d832ecd 100644 --- a/templates/core/loginform.mustache +++ b/templates/core/loginform.mustache @@ -252,7 +252,7 @@
{{#hasinstructions}} -
+
{{! Beginn Block Container }}
{{! Block header }} From ecfed37288e0e0ea8461eba143199b3c15d99ecb Mon Sep 17 00:00:00 2001 From: n_herr03 Date: Fri, 18 Nov 2022 17:50:12 +0100 Subject: [PATCH 5/5] minor spelling corrections --- lang/de/theme_wwu2019.php | 2 +- lang/en/theme_wwu2019.php | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lang/de/theme_wwu2019.php b/lang/de/theme_wwu2019.php index f8fe1e7..40f93c5 100644 --- a/lang/de/theme_wwu2019.php +++ b/lang/de/theme_wwu2019.php @@ -110,7 +110,7 @@ $string['examweb_description'] = 'Online-Prüfungssystem der WWU Münster'; -// SSO Strings. +// Login Strings. $string['login'] = 'Anmelden'; $string['loginSSO_long'] = 'Anmelden per SSO'; $string['persistent_login_methods'] = 'Universitätsweite Anmeldung'; diff --git a/lang/en/theme_wwu2019.php b/lang/en/theme_wwu2019.php index 0e50392..3971fff 100644 --- a/lang/en/theme_wwu2019.php +++ b/lang/en/theme_wwu2019.php @@ -110,16 +110,16 @@ $string['examweb_description'] = 'Online examination system of the University of Münster'; -// SSO Strings. +// Login Strings. $string['login'] = 'Login'; -$string['loginSSO_long'] = 'Log in via SSO'; +$string['loginSSO_long'] = 'Login via SSO'; $string['persistent_login_methods'] = 'University-wide Login'; $string['loginXSSO_long'] = 'Certificate'; $string['get_cert'] = 'Get Certifikat'; $string['forgot_pwd'] = 'Forgotten Password?'; $string['security_info'] = 'IV-Security Information'; -$string['guest_and_intern'] = 'Guests and LearnWeb internal login'; -$string['loginSSO_link'] = 'Log in (SSO)'; +$string['guest_and_intern'] = 'Guests and LearnWeb internal Login'; +$string['loginSSO_link'] = 'Login (SSO)'; $string['login_via_sso_desc'] = 'Using Single-Sign-On (SSO) means that a single login provides you with access to all central services offered by the university. Without having to login again! If you possess a user certificate issued by the WWUCA you can even skip login completely.'; $string['heading_login_via_sso'] = 'Login via SSO (recommended)'; -$string['login_usual_way'] = 'LearnWeb internal login'; +$string['login_usual_way'] = 'LearnWeb internal Login';