From a8c0e802e265f0225502bcf0a5a74d775a724a19 Mon Sep 17 00:00:00 2001 From: ctao Date: Fri, 24 Jul 2026 23:11:57 +0200 Subject: [PATCH] feat: pages collection (privacy/disclaimer/contact) editable in CMS --- public/admin/config.yml | 14 ++++++++++++++ src/content.config.ts | 13 ++++++++++++- src/content/pages/contact.md | 12 ++++++++++++ src/content/pages/disclaimer.md | 14 ++++++++++++++ src/content/pages/privacy.md | 16 ++++++++++++++++ src/pages/pages/[slug].astro | 20 ++++++++++++++++++++ 6 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 src/content/pages/contact.md create mode 100644 src/content/pages/disclaimer.md create mode 100644 src/content/pages/privacy.md create mode 100644 src/pages/pages/[slug].astro diff --git a/public/admin/config.yml b/public/admin/config.yml index a305062..fbc8a04 100644 --- a/public/admin/config.yml +++ b/public/admin/config.yml @@ -35,3 +35,17 @@ collections: - { name: cover, label: "Okładka", widget: image, required: false } - { name: draft, label: "Szkic (nieopublikowany)", widget: boolean, default: false } - { name: body, label: "Treść", widget: markdown } + + - name: pages + label: "Pages" + label_singular: "Page" + folder: "src/content/pages" + create: true + slug: "{{slug}}" + extension: md + format: frontmatter + summary: "{{title}}" + fields: + - { name: title, label: "Title", widget: string } + - { name: description, label: "Description", widget: text, required: false } + - { name: body, label: "Body", widget: markdown } diff --git a/src/content.config.ts b/src/content.config.ts index abeeb2d..2ee77ab 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -19,4 +19,15 @@ const news = defineCollection({ }), }); -export const collections = { news }; +// Static portal pages (privacy, disclaimer, contact…) — separate collection +// because the content type differs (no dates/covers/categories), and editors +// get a distinct "Pages" section in the CMS. +const pages = defineCollection({ + loader: glob({ pattern: '**/*.md', base: './src/content/pages' }), + schema: z.object({ + title: z.string(), + description: z.string().optional(), + }), +}); + +export const collections = { news, pages }; diff --git a/src/content/pages/contact.md b/src/content/pages/contact.md new file mode 100644 index 0000000..30df917 --- /dev/null +++ b/src/content/pages/contact.md @@ -0,0 +1,12 @@ +--- +title: Contact +description: How to reach the CTAO and the Science Portal team. +--- + +*Demo page — final wording will be provided by the CTAO Central Organisation.* + +- **General enquiries:** see the contact section on [ctao.org](https://www.ctao.org/) +- **Science user support:** help desk, FAQ and user forum — via [User Support](/support) (integration planned) +- **Portal (technical):** SUSS Science Portal team + +For media and outreach enquiries, please use the channels listed on the CTAO website. diff --git a/src/content/pages/disclaimer.md b/src/content/pages/disclaimer.md new file mode 100644 index 0000000..26b7099 --- /dev/null +++ b/src/content/pages/disclaimer.md @@ -0,0 +1,14 @@ +--- +title: Disclaimer +description: Terms of use of the CTAO Science Portal. +--- + +*Demo page — final wording will be provided by the CTAO Central Organisation.* + +The information on this portal is provided by the Cherenkov Telescope Array Observatory (CTAO) +for general information and scientific use. While we strive to keep content accurate and up to +date, the CTAO makes no warranties of any kind about the completeness, accuracy or reliability +of the information, software or data products made available here. + +External links are provided for convenience; the CTAO is not responsible for the content of +external sites. diff --git a/src/content/pages/privacy.md b/src/content/pages/privacy.md new file mode 100644 index 0000000..0c92bd4 --- /dev/null +++ b/src/content/pages/privacy.md @@ -0,0 +1,16 @@ +--- +title: Privacy statement +description: How the CTAO Science Portal handles personal data. +--- + +*Demo page — final wording will be provided by the CTAO Central Organisation.* + +The CTAO Science Portal processes personal data only to the extent required to provide its +services: account information is managed by the central **CTAO AAI** system, and the portal +stores no passwords. Usage analytics, if any, are anonymised. + +## Your rights + +Under the GDPR you have the right to access, rectify, erase and port your personal data, and +to object to or restrict its processing. Requests are handled by the CTAO data protection +officer (contact details on the [Contact](/pages/contact) page). diff --git a/src/pages/pages/[slug].astro b/src/pages/pages/[slug].astro new file mode 100644 index 0000000..c6674bf --- /dev/null +++ b/src/pages/pages/[slug].astro @@ -0,0 +1,20 @@ +--- +import { getCollection, render } from 'astro:content'; +import Base from '../../layouts/Base.astro'; + +export async function getStaticPaths() { + const pages = await getCollection('pages'); + return pages.map((page) => ({ params: { slug: page.id }, props: { page } })); +} + +const { page } = Astro.props; +const { Content } = await render(page); +--- + +
+

{page.data.title}

+
+ +
+
+