diff --git a/docs/changes.rst b/docs/changes.rst
index 4f02b9fa7..858c20144 100644
--- a/docs/changes.rst
+++ b/docs/changes.rst
@@ -4,6 +4,9 @@ Changelog
16.1.3 (unreleased)
-------------------
+- CSV download of similar title details.
+ Ref: scrum-2198
+
- Add registry setting `euphorie.notifications__allow_user_settings` to allow users to change their notification settings.
The default is set to `True` to allow users to do changes on their own.
This can be prevented if internal policies require so by changing this setting to `False`.
@@ -17,10 +20,12 @@ Changelog
- Do not do linkintegrity checks when removing contents
(Fix regression introduced in https://github.com/euphorie/Euphorie/pull/692)
[ale-rt]
+
- Delete guest account after sessions have been transferred
Ref: scrum-2155
+
16.1.2 (2024-03-20)
-------------------
diff --git a/src/euphorie/content/browser/configure.zcml b/src/euphorie/content/browser/configure.zcml
index a9c6bd9f2..9d414e250 100644
--- a/src/euphorie/content/browser/configure.zcml
+++ b/src/euphorie/content/browser/configure.zcml
@@ -476,6 +476,14 @@
layer="plonetheme.nuplone.skin.interfaces.NuPloneSkin"
/>
+
+
idx else "") for sub in solutions)
+
+ def __call__(self):
+ buffer = StringIO()
+ writer = csv.writer(buffer)
+
+ self.write_data(self.solutions_by_risk(), writer)
+
+ csv_data = buffer.getvalue()
+ buffer.close()
+ response = self.request.RESPONSE
+ today_iso = datetime.date.today().isoformat()
+ response.setHeader(
+ "Content-Disposition",
+ (
+ f"attachment; filename=similar_titles_details_{self.context.Title()}_"
+ f"{today_iso}.csv"
+ ),
+ )
+ response.setHeader("Content-Type", "text/csv;charset=utf-8")
+ return csv_data
diff --git a/src/euphorie/content/browser/templates/similar_titles_details.pt b/src/euphorie/content/browser/templates/similar_titles_details.pt
index 4eb786d32..cb5c00377 100644
--- a/src/euphorie/content/browser/templates/similar_titles_details.pt
+++ b/src/euphorie/content/browser/templates/similar_titles_details.pt
@@ -43,6 +43,22 @@
solutions_by_risk view/solutions_by_risk;
"
>
+