Skip to content

Commit

Permalink
Merge pull request #734 from euphorie/scrum-2143-certificates-on-stat…
Browse files Browse the repository at this point in the history
…us-page

Show certificates on assessment status page
  • Loading branch information
cillianderoiste authored May 15, 2024
2 parents b7219db + 712de32 commit a125068
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 3 deletions.
4 changes: 3 additions & 1 deletion docs/changes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,13 @@ Changelog
- Add certificates overview
Ref: scrum-2142

- Show certificates on assessment status page
Ref: scrum-2143

- Show organisation logo on training certificate
Ref: scrum-2142



16.1.2 (2024-03-20)
-------------------

Expand Down
41 changes: 41 additions & 0 deletions src/euphorie/client/browser/certificate.py
Original file line number Diff line number Diff line change
@@ -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
8 changes: 7 additions & 1 deletion src/euphorie/client/browser/certificates.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
8 changes: 8 additions & 0 deletions src/euphorie/client/browser/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,14 @@
layer="euphorie.client.interfaces.IClientSkinLayer"
/>

<browser:page
name="certificate"
for="euphorie.client.adapters.session_traversal.ITraversedSurveySession"
class=".certificate.Certificate"
permission="zope2.View"
layer="euphorie.client.interfaces.IClientSkinLayer"
/>

<browser:page
name="certificates"
for="euphorie.client.country.IClientCountry"
Expand Down
37 changes: 36 additions & 1 deletion src/euphorie/client/browser/templates/status_info.pt
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,42 @@
</dl>
</section>

<metal:certificate define-slot="certificate" />
<metal:certificate define-slot="certificate">
<tal:certificates tal:define="
certificate_view nocall: webhelpers/traversed_session/@@certificate;
">
<div class="page-module"
id="section-certification"
tal:condition="certificate_view/certificates|nothing"
>
<section class="pat-rich">
<h2 i18n:translate="heading_certification">
Certification
</h2>
</section>
<div class="pat-rich">
<h3 i18n:translate="">Awarded certificates</h3>
<p i18n:translate="">
The following certificates were awarded for this assessment.
</p>
</div>
<div class="certificate-overview col-3">
<tal:certificates tal:repeat="info certificate_view/certificates">
<figure class="certificate-preview">
<a class="certificate pat-auto-scale pat-inject"
href="${info/link}"
data-pat-inject="source: #content; target: #content; history: record"
tal:condition="nocall:info/content"
>
<tal:certificate replace="structure info/content" />
</a>
</figure>
</tal:certificates>
</div>
</div>
</tal:certificates>
</metal:certificate>

<metal:sampling define-slot="sampling" />

<metal:modules define-slot="modules">
Expand Down

0 comments on commit a125068

Please sign in to comment.