From fc394c9fda053a7e64f6afc78c924ef8b9407bba Mon Sep 17 00:00:00 2001 From: Manuel Reinhardt Date: Mon, 13 May 2024 12:42:41 +0200 Subject: [PATCH 1/2] Show certificates in reverse chronological order Ref syslabcom/scrum#2143 --- src/euphorie/client/browser/certificates.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/euphorie/client/browser/certificates.py b/src/euphorie/client/browser/certificates.py index c400bb6e6..decfbc885 100644 --- a/src/euphorie/client/browser/certificates.py +++ b/src/euphorie/client/browser/certificates.py @@ -57,5 +57,11 @@ def my_certificates(self): f"?training_id={training.id}" ) content = self.get_certificate(training) - certificates.setdefault(year, []).append({"link": link, "content": content}) + certificates.setdefault(year, []).append( + {"link": link, "content": content, "date": training.time} + ) + for year, year_certificates in certificates.items(): + certificates[year] = sorted( + year_certificates, key=lambda c: c["date"], reverse=True + ) return certificates.items() From daf7e0f4cabce8594544cc670130a1582cfda15c Mon Sep 17 00:00:00 2001 From: Manuel Reinhardt Date: Tue, 14 May 2024 14:12:25 +0200 Subject: [PATCH 2/2] Show certificates on assessment status page Ref syslabcom/scrum#2143 --- docs/changes.rst | 2 + src/euphorie/client/browser/certificate.py | 41 +++++++++++++++++++ src/euphorie/client/browser/configure.zcml | 8 ++++ .../client/browser/templates/status_info.pt | 37 ++++++++++++++++- 4 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/euphorie/client/browser/certificate.py diff --git a/docs/changes.rst b/docs/changes.rst index 9d604c9a0..c27d22c8d 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -27,6 +27,8 @@ Changelog - Add certificates overview Ref: scrum-2142 +- Show certificates on assessment status page + Ref: scrum-2143 16.1.2 (2024-03-20) diff --git a/src/euphorie/client/browser/certificate.py b/src/euphorie/client/browser/certificate.py new file mode 100644 index 000000000..4d20da323 --- /dev/null +++ b/src/euphorie/client/browser/certificate.py @@ -0,0 +1,41 @@ +from euphorie.client.model import Training +from plone import api +from plone.memoize.view import memoize +from Products.Five import BrowserView +from z3c.saconfig import Session + + +class Certificate(BrowserView): + @property + @memoize + def trainings(self): + """Get all trainings for this session.""" + session_id = self.context.session.id + return ( + Session.query(Training) + .filter(Training.session_id == session_id, Training.status == "correct") + .order_by(Training.time.desc()) + .all() + ) + + def get_certificate(self, training): + traversed_session = training.session.traversed_session + certificate_view = api.content.get_view( + name="training-certificate-inner", + context=traversed_session, + request=self.request, + ) + return certificate_view.index(training_id=training.id) + + @property + @memoize + def certificates(self): + certificates = [] + for training in self.trainings: + link = ( + f"{training.session.absolute_url()}/@@training-certificate-view" + f"?training_id={training.id}" + ) + content = self.get_certificate(training) + certificates.append({"link": link, "content": content}) + return certificates diff --git a/src/euphorie/client/browser/configure.zcml b/src/euphorie/client/browser/configure.zcml index 69e29b5ee..01f32dca0 100644 --- a/src/euphorie/client/browser/configure.zcml +++ b/src/euphorie/client/browser/configure.zcml @@ -182,6 +182,14 @@ layer="euphorie.client.interfaces.IClientSkinLayer" /> + + - + + +
+
+

+ Certification +

+
+
+

Awarded certificates

+

+ The following certificates were awarded for this assessment. +

+
+
+ +
+ + + +
+
+
+
+
+
+