mirror of
https://github.com/complexcaresolutions/cms.c2sgmbh.git
synced 2026-03-18 02:44:12 +00:00
New collections: - Categories: hierarchical content categorization - Pages: flexible page builder with blocks - Posts: blog/news articles with SEO - Testimonials: customer reviews/quotes Cookie & Consent management: - ConsentLogs: GDPR consent tracking - CookieConfigurations: per-tenant cookie settings - CookieInventory: cookie registry Additional: - NewsletterSubscribers: email subscription management - PrivacyPolicySettings: privacy policy configuration - SocialLinks: social media links Update Media collection with tenant support and image variants 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
204 lines
5.8 KiB
TypeScript
204 lines
5.8 KiB
TypeScript
// src/collections/CookieConfigurations.ts
|
|
|
|
import type { CollectionConfig } from 'payload'
|
|
import { tenantScopedPublicRead, authenticatedOnly } from '../lib/tenantAccess'
|
|
|
|
/**
|
|
* CookieConfigurations Collection
|
|
*
|
|
* Mandantenspezifische Cookie-Banner-Konfiguration.
|
|
* Öffentlich lesbar, aber nur für den eigenen Tenant (Domain-basiert).
|
|
*/
|
|
export const CookieConfigurations: CollectionConfig = {
|
|
slug: 'cookie-configurations',
|
|
admin: {
|
|
useAsTitle: 'title',
|
|
group: 'Consent Management',
|
|
description: 'Cookie-Banner Konfiguration pro Tenant',
|
|
},
|
|
access: {
|
|
// Öffentlich, aber tenant-isoliert (Domain-Check)
|
|
read: tenantScopedPublicRead,
|
|
create: authenticatedOnly,
|
|
update: authenticatedOnly,
|
|
delete: authenticatedOnly,
|
|
},
|
|
fields: [
|
|
{
|
|
name: 'tenant',
|
|
type: 'relationship',
|
|
relationTo: 'tenants',
|
|
required: true,
|
|
unique: true,
|
|
admin: {
|
|
description: 'Jeder Tenant kann nur eine Konfiguration haben',
|
|
},
|
|
},
|
|
{
|
|
name: 'title',
|
|
type: 'text',
|
|
required: true,
|
|
defaultValue: 'Cookie-Einstellungen',
|
|
admin: {
|
|
description: 'Interner Titel zur Identifikation',
|
|
},
|
|
},
|
|
{
|
|
name: 'revision',
|
|
type: 'number',
|
|
required: true,
|
|
defaultValue: 1,
|
|
admin: {
|
|
description:
|
|
'Bei inhaltlichen Änderungen erhöhen → erzwingt erneuten Consent bei allen Nutzern',
|
|
},
|
|
},
|
|
{
|
|
name: 'enabledCategories',
|
|
type: 'select',
|
|
hasMany: true,
|
|
required: true,
|
|
defaultValue: ['necessary', 'analytics'],
|
|
options: [
|
|
{ label: 'Notwendig', value: 'necessary' },
|
|
{ label: 'Funktional', value: 'functional' },
|
|
{ label: 'Statistik', value: 'analytics' },
|
|
{ label: 'Marketing', value: 'marketing' },
|
|
],
|
|
admin: {
|
|
description: 'Welche Kategorien sollen im Banner angezeigt werden?',
|
|
},
|
|
},
|
|
{
|
|
name: 'translations',
|
|
type: 'group',
|
|
fields: [
|
|
{
|
|
name: 'de',
|
|
type: 'group',
|
|
label: 'Deutsch',
|
|
fields: [
|
|
{
|
|
name: 'bannerTitle',
|
|
type: 'text',
|
|
defaultValue: 'Wir respektieren Ihre Privatsphäre',
|
|
},
|
|
{
|
|
name: 'bannerDescription',
|
|
type: 'textarea',
|
|
defaultValue:
|
|
'Diese Website verwendet Cookies, um Ihnen die bestmögliche Erfahrung zu bieten.',
|
|
},
|
|
{
|
|
name: 'acceptAllButton',
|
|
type: 'text',
|
|
defaultValue: 'Alle akzeptieren',
|
|
},
|
|
{
|
|
name: 'acceptNecessaryButton',
|
|
type: 'text',
|
|
defaultValue: 'Nur notwendige',
|
|
},
|
|
{
|
|
name: 'settingsButton',
|
|
type: 'text',
|
|
defaultValue: 'Einstellungen',
|
|
},
|
|
{
|
|
name: 'saveButton',
|
|
type: 'text',
|
|
defaultValue: 'Auswahl speichern',
|
|
},
|
|
{
|
|
name: 'privacyPolicyUrl',
|
|
type: 'text',
|
|
defaultValue: '/datenschutz',
|
|
},
|
|
{
|
|
name: 'categoryLabels',
|
|
type: 'group',
|
|
fields: [
|
|
{
|
|
name: 'necessary',
|
|
type: 'group',
|
|
fields: [
|
|
{ name: 'title', type: 'text', defaultValue: 'Notwendig' },
|
|
{
|
|
name: 'description',
|
|
type: 'textarea',
|
|
defaultValue:
|
|
'Diese Cookies sind für die Grundfunktionen der Website erforderlich.',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: 'functional',
|
|
type: 'group',
|
|
fields: [
|
|
{ name: 'title', type: 'text', defaultValue: 'Funktional' },
|
|
{
|
|
name: 'description',
|
|
type: 'textarea',
|
|
defaultValue: 'Diese Cookies ermöglichen erweiterte Funktionen.',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: 'analytics',
|
|
type: 'group',
|
|
fields: [
|
|
{ name: 'title', type: 'text', defaultValue: 'Statistik' },
|
|
{
|
|
name: 'description',
|
|
type: 'textarea',
|
|
defaultValue:
|
|
'Diese Cookies helfen uns zu verstehen, wie Besucher die Website nutzen.',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: 'marketing',
|
|
type: 'group',
|
|
fields: [
|
|
{ name: 'title', type: 'text', defaultValue: 'Marketing' },
|
|
{
|
|
name: 'description',
|
|
type: 'textarea',
|
|
defaultValue: 'Diese Cookies werden für Werbezwecke verwendet.',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: 'styling',
|
|
type: 'group',
|
|
fields: [
|
|
{
|
|
name: 'position',
|
|
type: 'select',
|
|
defaultValue: 'bottom',
|
|
options: [
|
|
{ label: 'Unten', value: 'bottom' },
|
|
{ label: 'Oben', value: 'top' },
|
|
{ label: 'Mitte (Modal)', value: 'middle' },
|
|
],
|
|
},
|
|
{
|
|
name: 'theme',
|
|
type: 'select',
|
|
defaultValue: 'dark',
|
|
options: [
|
|
{ label: 'Dunkel', value: 'dark' },
|
|
{ label: 'Hell', value: 'light' },
|
|
{ label: 'Auto (System)', value: 'auto' },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
}
|