OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

228_portal_notifications.sql

2 KB
-- ============================================================
-- Persönliche Benachrichtigungen im Self-Service-Portal
-- ============================================================
-- Das Portal kannte bisher nur betreiberseitige Ankündigungen und
-- Störungshinweise – also das, was alle angeht. Was eine einzelne Person
-- angeht (ihr Antrag ist entschieden, auf ihr Ticket wurde geantwortet),
-- ging ausschließlich per E-Mail hinaus.
--
-- Eine eigene Tabelle, weil `user_notifications` an `users` hängt: Eine
-- Portal-Person ist eine Zeile in `directory_persons` und hat dort keinen
-- Eintrag.

CREATE TABLE IF NOT EXISTS `person_notifications` (
    `id`          BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `person_id`   INT UNSIGNED    NOT NULL,
    `type`        VARCHAR(50)     NOT NULL DEFAULT 'info'
                  COMMENT 'Anlass, steuert Symbol und Farbe im Portal',
    `title`       VARCHAR(255)    NOT NULL,
    `message`     TEXT            NULL,
    `link`        VARCHAR(500)    NULL COMMENT 'Ziel im Portal, immer ein eigener Pfad',
    `object_type` VARCHAR(50)     NULL,
    `object_id`   BIGINT UNSIGNED NULL,
    `is_read`     TINYINT(1)      NOT NULL DEFAULT 0,
    `created_at`  DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `read_at`     DATETIME        NULL,

    INDEX `idx_person_notif` (`person_id`, `is_read`, `created_at`),
    INDEX `idx_person_notif_zeit` (`created_at`),
    CONSTRAINT `fk_person_notif_person` FOREIGN KEY (`person_id`)
        REFERENCES `directory_persons` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Gelesene Nachrichten jenseits der Aufbewahrung räumt ein täglicher Lauf ab;
-- ungelesene bleiben stehen. Standardmäßig an: Ohne ihn wüchse die Tabelle
-- unbegrenzt, und der Lauf hat ohne Portal ohnehin nichts zu tun.
INSERT IGNORE INTO `cron_tasks`
    (`name`, `label`, `description`, `handler_class`, `frequency_minutes`, `enabled`, `run_in_background`, `max_runtime_seconds`)
VALUES
    ('portal_notification_prune', 'Portal-Nachrichten aufräumen',
     'Entfernt gelesene Nachrichten im Postfach des Self-Service-Portals nach Ablauf der Aufbewahrung. Ungelesene bleiben erhalten.',
     'OpenNIT\\Cron\\Handlers\\PortalNotificationPruneHandler', 1440, 1, 0, 300);