diff --git a/README.md b/README.md index db492b0..8621ad7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# gawa +# Gawa Gawa is my personal website. I've personally written it using the Django framework. @@ -7,21 +7,28 @@ Gawa is my personal website. I've personally written it using the Django framewo These are the Credentials for logging into the admin panel: | Username | Password | |----------|----------| -| root | root | +| `root` | `root` | ### Blog -| Username | Password | -|--------------------|--------------| -| contact@cscherr.de | hrCcDa0jBspG | +| Username | Password | +|--------------------------------------------------|----------------| +| [`contact@cscherr.de`](mailto:contact@cscherr.de) | `hrCcDa0jBspG` | ## License -Bootstrap: MIT Licensed -Django: BSD 3-Clause "New" or "Revised" License +Bootstrap: MIT Licensed +Django: BSD 3-Clause "New" or "Revised" License __Gawa: MIT Licensed, see LICENSE__ +## Dependencies + +| Description | Package (fedora) | +|----------------|------------------| +| Database stuff | `libpq-devel` | +| Database stuff | `mariadb` | + ## Security - [ ] Do something about the files in the blog dir diff --git a/docker-compose.yml b/docker-compose.yml index 54def0d..4d9ddc4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,15 +9,18 @@ services: # MYSQL_PASSWORD: changethisforprod MYSQL_ROOT_PASSWORD: root volumes: - - db_data:/var/lib/mysql + # - db_data:/var/lib/mysql - ./docker/db/scripts:/docker-entrypoint-initdb.d/ main: build: ./docker/main - command: bash -c " - python manage.py migrate + command: bash -c "echo 'setting django up' && python manage.py collectstatic --noinput - && python manage.py runserver 0.0.0.0:8000 + && sleep 3 + && python manage.py migrate + && DJANGO_SUPERUSER_PASSWORD='root' python manage.py createsuperuser\ + --username root --noinput --email software@cscherr.de || true + && python manage.py runserver 0.0.0.0:80 " volumes: - ./gawa:/app @@ -43,21 +46,6 @@ services: - ./gawa/static:/srv/static - ./gawa/media:/srv/media - - blog: - image: ghost - environment: - database__client: mysql - database__connection__host: db - database__connection__user: blog - database__connection__password: blogpass - database__connection__database: blog - url: http://localhost:8081 - NODE_ENV: development - depends_on: - - db - - db-admin: image: phpmyadmin ports: @@ -71,4 +59,4 @@ services: volumes: caddy_data: caddy_config: - db_data: + # db_data: diff --git a/docker/db/scripts/blog.sql b/docker/db/scripts/blog.sql deleted file mode 100644 index d477d6c..0000000 --- a/docker/db/scripts/blog.sql +++ /dev/null @@ -1,3493 +0,0 @@ --- phpMyAdmin SQL Dump --- version 5.2.1 --- https://www.phpmyadmin.net/ --- --- Host: db --- Erstellungszeit: 26. Sep 2023 um 20:24 --- Server-Version: 10.11.3-MariaDB-1:10.11.3+maria~ubu2204 --- PHP-Version: 8.1.19 - -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -START TRANSACTION; -SET time_zone = "+00:00"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; - --- --- Datenbank: `blog` --- -CREATE DATABASE IF NOT EXISTS `blog` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -USE `blog`; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `actions` --- - -CREATE TABLE `actions` ( - `id` varchar(24) NOT NULL, - `resource_id` varchar(24) DEFAULT NULL, - `resource_type` varchar(50) NOT NULL, - `actor_id` varchar(24) NOT NULL, - `actor_type` varchar(50) NOT NULL, - `event` varchar(50) NOT NULL, - `context` text DEFAULT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `actions` --- - -INSERT INTO `actions` (`id`, `resource_id`, `resource_type`, `actor_id`, `actor_type`, `event`, `context`, `created_at`) VALUES -('6511f8abcd1c0b0001715739', '1', 'user', '1', 'user', 'edited', '{\"primary_name\":\"Christoph J. Scherr\"}', '2023-09-25 21:16:27'), -('6511f9c2cd1c0b000171573a', '6511f58c6740bf0001d14224', 'setting', '1', 'user', 'edited', '{\"key\":\"cover_image\",\"group\":\"site\"}', '2023-09-25 21:21:06'), -('6511f9c2cd1c0b000171573b', '6511f58c6740bf0001d14226', 'setting', '1', 'user', 'edited', '{\"key\":\"accent_color\",\"group\":\"site\"}', '2023-09-25 21:21:06'), -('6511f9c2cd1c0b000171573c', '6511f58c6740bf0001d14225', 'setting', '1', 'user', 'edited', '{\"key\":\"icon\",\"group\":\"site\"}', '2023-09-25 21:21:06'), -('6511fa23cd1c0b000171573d', '6511f58c6740bf0001d14224', 'setting', '1', 'user', 'edited', '{\"key\":\"cover_image\",\"group\":\"site\"}', '2023-09-25 21:22:43'), -('6511fa96cd1c0b000171573e', '6511f58c6740bf0001d14224', 'setting', '1', 'user', 'edited', '{\"key\":\"cover_image\",\"group\":\"site\"}', '2023-09-25 21:24:38'), -('6511fac1cd1c0b0001715743', '6511f58c6740bf0001d14237', 'setting', '1', 'user', 'edited', '{\"key\":\"active_theme\",\"group\":\"theme\"}', '2023-09-25 21:25:21'), -('6511fadfcd1c0b0001715744', '6511f58c6740bf0001d14237', 'setting', '1', 'user', 'edited', '{\"key\":\"active_theme\",\"group\":\"theme\"}', '2023-09-25 21:25:51'), -('6511fb20cd1c0b0001715745', '6511f58c6740bf0001d1425a', 'setting', '1', 'user', 'edited', '{\"key\":\"email_track_opens\",\"group\":\"email\"}', '2023-09-25 21:26:56'), -('6511fb20cd1c0b0001715746', '6511f845cd1c0b00017156d6', 'setting', '1', 'user', 'edited', '{\"key\":\"email_track_clicks\",\"group\":\"email\"}', '2023-09-25 21:26:56'), -('6511fb20cd1c0b0001715747', '6511f845cd1c0b00017156e3', 'setting', '1', 'user', 'edited', '{\"key\":\"outbound_link_tagging\",\"group\":\"analytics\"}', '2023-09-25 21:26:56'), -('6511fbd2cd1c0b0001715748', '6511f58c6740bf0001d14222', 'setting', '1', 'user', 'edited', '{\"key\":\"description\",\"group\":\"site\"}', '2023-09-25 21:29:54'), -('6511fc02cd1c0b000171574c', '6511fc02cd1c0b0001715749', 'post', '1', 'user', 'added', '{\"type\":\"page\",\"primary_name\":\"What can i do with pages?\"}', '2023-09-25 21:30:42'), -('6511fc0acd1c0b0001715750', '6511fc02cd1c0b0001715749', 'post', '1', 'user', 'edited', '{\"type\":\"page\",\"primary_name\":\"What can i do with pages?\"}', '2023-09-25 21:30:50'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `api_keys` --- - -CREATE TABLE `api_keys` ( - `id` varchar(24) NOT NULL, - `type` varchar(50) NOT NULL, - `secret` varchar(191) NOT NULL, - `role_id` varchar(24) DEFAULT NULL, - `integration_id` varchar(24) DEFAULT NULL, - `user_id` varchar(24) DEFAULT NULL, - `last_seen_at` datetime DEFAULT NULL, - `last_seen_version` varchar(50) DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `api_keys` --- - -INSERT INTO `api_keys` (`id`, `type`, `secret`, `role_id`, `integration_id`, `user_id`, `last_seen_at`, `last_seen_version`, `created_at`, `created_by`, `updated_at`, `updated_by`) VALUES -('6511f58b6740bf0001d14112', 'admin', '7b19112b007bf41a2dfdb1017d994dac4b51595ba32ca49fff96522749cf4227', '6511f58a6740bf0001d140aa', '6511f58b6740bf0001d14111', NULL, NULL, NULL, '2023-09-25 21:03:07', '1', '2023-09-25 21:03:07', '1'), -('6511f58b6740bf0001d14114', 'admin', '05923cb84fee10110889e5e7bc11331ea259997b3b7c70df330e5d2e9057c0e9', '6511f58a6740bf0001d140ab', '6511f58b6740bf0001d14113', NULL, NULL, NULL, '2023-09-25 21:03:07', '1', '2023-09-25 21:03:07', '1'), -('6511f58b6740bf0001d14116', 'admin', 'b78d67b68466b6ca5330c83d2dc009789c74830f07404d84728d1bd8e353a18c', '6511f58a6740bf0001d140ac', '6511f58b6740bf0001d14115', NULL, NULL, NULL, '2023-09-25 21:03:07', '1', '2023-09-25 21:03:07', '1'), -('6511f844cd1c0b00017156ac', 'content', '5ba6f2aeec53f40aca3fc5165e', NULL, '6511f844cd1c0b00017156ab', NULL, NULL, NULL, '2023-09-25 21:14:44', '1', NULL, NULL), -('6511f844cd1c0b00017156d2', 'admin', '408ece29cd864b32aa51af5b5a1fb2ea92c32e23d81908592a98fc91b8e4c542', '6511f844cd1c0b00017156cc', '6511f844cd1c0b00017156d1', NULL, NULL, NULL, '2023-09-25 21:14:44', '1', NULL, NULL), -('6511f846cd1c0b00017156ed', 'admin', 'e07e4541beceb6117a37e9cd08e9e895238cd45795ff5ba75283a98456cfd287', '6511f846cd1c0b00017156e8', '6511f846cd1c0b00017156ec', NULL, NULL, NULL, '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b000171572b', 'content', '5a196731dd3fbe894c02b3e07f', NULL, '6511f846cd1c0b000171572a', NULL, NULL, NULL, '2023-09-25 21:14:46', '1', NULL, NULL); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `benefits` --- - -CREATE TABLE `benefits` ( - `id` varchar(24) NOT NULL, - `name` varchar(191) NOT NULL, - `slug` varchar(191) NOT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `brute` --- - -CREATE TABLE `brute` ( - `key` varchar(191) NOT NULL, - `firstRequest` bigint(20) NOT NULL, - `lastRequest` bigint(20) NOT NULL, - `lifetime` bigint(20) NOT NULL, - `count` int(11) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `brute` --- - -INSERT INTO `brute` (`key`, `firstRequest`, `lastRequest`, `lifetime`, `count`) VALUES -('2OvUhoXOksZy59gWuAWEv7k11vJcDQC8nkoh0mNOF+E=', 1695676276581, 1695676276581, 1695679876582, 1), -('9RJxfmXk47QyRIKSE0TUqs7ttaowUNM8NLymXi6Wf8s=', 1695676554872, 1695676554872, 1695719754873, 1), -('c7I0cGPKpSZn9B0Mzhzh5fsJSz22ckSH0YCmfrksJ0A=', 1695676554878, 1695676554878, 1708377354878, 1), -('ojbgWQs6vMwYbF78jfWcIJAw729N0uLM85Zr4Vx7HwY=', 1695676088298, 1695676088298, 1708376888300, 1); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `collections` --- - -CREATE TABLE `collections` ( - `id` varchar(24) NOT NULL, - `title` varchar(191) NOT NULL, - `slug` varchar(191) NOT NULL, - `description` varchar(2000) DEFAULT NULL, - `type` varchar(50) NOT NULL, - `filter` text DEFAULT NULL, - `feature_image` varchar(2000) DEFAULT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `collections` --- - -INSERT INTO `collections` (`id`, `title`, `slug`, `description`, `type`, `filter`, `feature_image`, `created_at`, `updated_at`) VALUES -('6511f846cd1c0b000171570f', 'Latest', 'latest', 'All posts', 'automatic', '', NULL, '2023-09-25 21:14:46', NULL), -('6511f846cd1c0b0001715710', 'Featured', 'featured', 'Featured posts', 'automatic', 'featured:true', NULL, '2023-09-25 21:14:46', NULL); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `collections_posts` --- - -CREATE TABLE `collections_posts` ( - `id` varchar(24) NOT NULL, - `collection_id` varchar(24) NOT NULL, - `post_id` varchar(24) NOT NULL, - `sort_order` int(10) UNSIGNED NOT NULL DEFAULT 0 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `comments` --- - -CREATE TABLE `comments` ( - `id` varchar(24) NOT NULL, - `post_id` varchar(24) NOT NULL, - `member_id` varchar(24) DEFAULT NULL, - `parent_id` varchar(24) DEFAULT NULL, - `status` varchar(50) NOT NULL DEFAULT 'published', - `html` longtext DEFAULT NULL, - `edited_at` datetime DEFAULT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `comment_likes` --- - -CREATE TABLE `comment_likes` ( - `id` varchar(24) NOT NULL, - `comment_id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `comment_reports` --- - -CREATE TABLE `comment_reports` ( - `id` varchar(24) NOT NULL, - `comment_id` varchar(24) NOT NULL, - `member_id` varchar(24) DEFAULT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `custom_theme_settings` --- - -CREATE TABLE `custom_theme_settings` ( - `id` varchar(24) NOT NULL, - `theme` varchar(191) NOT NULL, - `key` varchar(191) NOT NULL, - `type` varchar(50) NOT NULL, - `value` text DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `custom_theme_settings` --- - -INSERT INTO `custom_theme_settings` (`id`, `theme`, `key`, `type`, `value`) VALUES -('6511f58c6740bf0001d14273', 'casper', 'title_font', 'select', 'Modern sans-serif'), -('6511f58c6740bf0001d14274', 'casper', 'body_font', 'select', 'Elegant serif'), -('6511f58c6740bf0001d14276', 'casper', 'feed_layout', 'select', 'Classic'), -('6511f58c6740bf0001d14277', 'casper', 'color_scheme', 'select', 'Auto'), -('6511f58c6740bf0001d1427c', 'casper', 'email_signup_text', 'text', 'Receive my Newsletter spam'), -('6511f847cd1c0b0001715732', 'casper', 'navigation_layout', 'select', 'Logo on cover'), -('6511f847cd1c0b0001715733', 'casper', 'show_publication_cover', 'boolean', 'true'), -('6511f847cd1c0b0001715734', 'casper', 'header_style', 'select', 'Left aligned'), -('6511f847cd1c0b0001715735', 'casper', 'post_image_style', 'select', 'Small'), -('6511f847cd1c0b0001715736', 'casper', 'show_recent_posts_footer', 'boolean', 'true'), -('6511fac1cd1c0b0001715740', 'journal', 'navigation_layout', 'select', 'Stacked'), -('6511fac1cd1c0b0001715741', 'journal', 'title_font', 'select', 'Modern sans-serif'), -('6511fac1cd1c0b0001715742', 'journal', 'body_font', 'select', 'Modern sans-serif'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `donation_payment_events` --- - -CREATE TABLE `donation_payment_events` ( - `id` varchar(24) NOT NULL, - `name` varchar(191) DEFAULT NULL, - `email` varchar(191) NOT NULL, - `member_id` varchar(24) DEFAULT NULL, - `amount` int(11) NOT NULL, - `currency` varchar(50) NOT NULL, - `attribution_id` varchar(24) DEFAULT NULL, - `attribution_type` varchar(50) DEFAULT NULL, - `attribution_url` varchar(2000) DEFAULT NULL, - `referrer_source` varchar(191) DEFAULT NULL, - `referrer_medium` varchar(191) DEFAULT NULL, - `referrer_url` varchar(2000) DEFAULT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `emails` --- - -CREATE TABLE `emails` ( - `id` varchar(24) NOT NULL, - `post_id` varchar(24) NOT NULL, - `uuid` varchar(36) NOT NULL, - `status` varchar(50) NOT NULL DEFAULT 'pending', - `recipient_filter` text NOT NULL, - `error` varchar(2000) DEFAULT NULL, - `error_data` longtext DEFAULT NULL, - `email_count` int(10) UNSIGNED NOT NULL DEFAULT 0, - `delivered_count` int(10) UNSIGNED NOT NULL DEFAULT 0, - `opened_count` int(10) UNSIGNED NOT NULL DEFAULT 0, - `failed_count` int(10) UNSIGNED NOT NULL DEFAULT 0, - `subject` varchar(300) DEFAULT NULL, - `from` varchar(2000) DEFAULT NULL, - `reply_to` varchar(2000) DEFAULT NULL, - `html` longtext DEFAULT NULL, - `plaintext` longtext DEFAULT NULL, - `track_opens` tinyint(1) NOT NULL DEFAULT 0, - `submitted_at` datetime NOT NULL, - `newsletter_id` varchar(24) DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL, - `track_clicks` tinyint(1) NOT NULL DEFAULT 0, - `feedback_enabled` tinyint(1) NOT NULL DEFAULT 0, - `source` longtext DEFAULT NULL, - `source_type` varchar(50) NOT NULL DEFAULT 'html' -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `email_batches` --- - -CREATE TABLE `email_batches` ( - `id` varchar(24) NOT NULL, - `email_id` varchar(24) NOT NULL, - `provider_id` varchar(255) DEFAULT NULL, - `status` varchar(50) NOT NULL DEFAULT 'pending', - `member_segment` text DEFAULT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime NOT NULL, - `error_status_code` int(10) UNSIGNED DEFAULT NULL, - `error_message` varchar(2000) DEFAULT NULL, - `error_data` longtext DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `email_recipients` --- - -CREATE TABLE `email_recipients` ( - `id` varchar(24) NOT NULL, - `email_id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `batch_id` varchar(24) NOT NULL, - `processed_at` datetime DEFAULT NULL, - `delivered_at` datetime DEFAULT NULL, - `opened_at` datetime DEFAULT NULL, - `failed_at` datetime DEFAULT NULL, - `member_uuid` varchar(36) NOT NULL, - `member_email` varchar(191) NOT NULL, - `member_name` varchar(191) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `email_recipient_failures` --- - -CREATE TABLE `email_recipient_failures` ( - `id` varchar(24) NOT NULL, - `email_id` varchar(24) NOT NULL, - `member_id` varchar(24) DEFAULT NULL, - `email_recipient_id` varchar(24) NOT NULL, - `code` int(10) UNSIGNED NOT NULL, - `enhanced_code` varchar(50) DEFAULT NULL, - `message` varchar(2000) NOT NULL, - `severity` varchar(50) NOT NULL DEFAULT 'permanent', - `failed_at` datetime NOT NULL, - `event_id` varchar(255) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `email_spam_complaint_events` --- - -CREATE TABLE `email_spam_complaint_events` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `email_id` varchar(24) NOT NULL, - `email_address` varchar(191) NOT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `integrations` --- - -CREATE TABLE `integrations` ( - `id` varchar(24) NOT NULL, - `type` varchar(50) NOT NULL DEFAULT 'custom', - `name` varchar(191) NOT NULL, - `slug` varchar(191) NOT NULL, - `icon_image` varchar(2000) DEFAULT NULL, - `description` varchar(2000) DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `integrations` --- - -INSERT INTO `integrations` (`id`, `type`, `name`, `slug`, `icon_image`, `description`, `created_at`, `created_by`, `updated_at`, `updated_by`) VALUES -('6511f58b6740bf0001d14111', 'builtin', 'Zapier', 'zapier', NULL, 'Built-in Zapier integration', '2023-09-25 21:03:07', '1', '2023-09-25 21:03:07', '1'), -('6511f58b6740bf0001d14113', 'internal', 'Ghost Backup', 'ghost-backup', NULL, 'Internal DB Backup integration', '2023-09-25 21:03:07', '1', '2023-09-25 21:03:07', '1'), -('6511f58b6740bf0001d14115', 'internal', 'Ghost Scheduler', 'ghost-scheduler', NULL, 'Internal Scheduler integration', '2023-09-25 21:03:07', '1', '2023-09-25 21:03:07', '1'), -('6511f844cd1c0b00017156ab', 'internal', 'Ghost Internal Frontend', 'ghost-internal-frontend', NULL, 'Internal frontend integration', '2023-09-25 21:14:44', '1', NULL, NULL), -('6511f844cd1c0b00017156d1', 'core', 'Ghost Explore', 'ghost-explore', NULL, 'Internal Integration for the Ghost Explore directory', '2023-09-25 21:14:44', '1', NULL, NULL), -('6511f846cd1c0b00017156ec', 'core', 'Self-Serve Migration Integration', 'self-serve-migration', NULL, 'Core Integration for the Self-Serve migration tool', '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b000171572a', 'core', 'Ghost Core Content API', 'ghost-core-content', NULL, 'Internal Content API integration for Admin access', '2023-09-25 21:14:46', '1', NULL, NULL); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `invites` --- - -CREATE TABLE `invites` ( - `id` varchar(24) NOT NULL, - `role_id` varchar(24) NOT NULL, - `status` varchar(50) NOT NULL DEFAULT 'pending', - `token` varchar(191) NOT NULL, - `email` varchar(191) NOT NULL, - `expires` bigint(20) NOT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `jobs` --- - -CREATE TABLE `jobs` ( - `id` varchar(24) NOT NULL, - `name` varchar(191) NOT NULL, - `status` varchar(50) NOT NULL DEFAULT 'queued', - `started_at` datetime DEFAULT NULL, - `finished_at` datetime DEFAULT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `jobs` --- - -INSERT INTO `jobs` (`id`, `name`, `status`, `started_at`, `finished_at`, `created_at`, `updated_at`) VALUES -('6511f847cd1c0b0001715737', 'members-migrations', 'finished', '2023-09-25 21:14:47', '2023-09-25 21:14:47', '2023-09-25 21:14:47', '2023-09-25 21:14:47'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `labels` --- - -CREATE TABLE `labels` ( - `id` varchar(24) NOT NULL, - `name` varchar(191) NOT NULL, - `slug` varchar(191) NOT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members` --- - -CREATE TABLE `members` ( - `id` varchar(24) NOT NULL, - `uuid` varchar(36) DEFAULT NULL, - `email` varchar(191) NOT NULL, - `status` varchar(50) NOT NULL DEFAULT 'free', - `name` varchar(191) DEFAULT NULL, - `note` varchar(2000) DEFAULT NULL, - `geolocation` varchar(2000) DEFAULT NULL, - `email_count` int(10) UNSIGNED NOT NULL DEFAULT 0, - `email_opened_count` int(10) UNSIGNED NOT NULL DEFAULT 0, - `email_open_rate` int(10) UNSIGNED DEFAULT NULL, - `last_seen_at` datetime DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL, - `last_commented_at` datetime DEFAULT NULL, - `expertise` varchar(191) DEFAULT NULL, - `enable_comment_notifications` tinyint(1) NOT NULL DEFAULT 1, - `email_disabled` tinyint(1) NOT NULL DEFAULT 0 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_cancel_events` --- - -CREATE TABLE `members_cancel_events` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `from_plan` varchar(255) NOT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_click_events` --- - -CREATE TABLE `members_click_events` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `redirect_id` varchar(24) NOT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_created_events` --- - -CREATE TABLE `members_created_events` ( - `id` varchar(24) NOT NULL, - `created_at` datetime NOT NULL, - `member_id` varchar(24) NOT NULL, - `attribution_id` varchar(24) DEFAULT NULL, - `attribution_type` varchar(50) DEFAULT NULL, - `attribution_url` varchar(2000) DEFAULT NULL, - `source` varchar(50) NOT NULL, - `referrer_source` varchar(191) DEFAULT NULL, - `referrer_medium` varchar(191) DEFAULT NULL, - `referrer_url` varchar(2000) DEFAULT NULL, - `batch_id` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_email_change_events` --- - -CREATE TABLE `members_email_change_events` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `to_email` varchar(191) NOT NULL, - `from_email` varchar(191) NOT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_feedback` --- - -CREATE TABLE `members_feedback` ( - `id` varchar(24) NOT NULL, - `score` int(10) UNSIGNED NOT NULL DEFAULT 0, - `member_id` varchar(24) NOT NULL, - `post_id` varchar(24) NOT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_labels` --- - -CREATE TABLE `members_labels` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `label_id` varchar(24) NOT NULL, - `sort_order` int(10) UNSIGNED NOT NULL DEFAULT 0 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_login_events` --- - -CREATE TABLE `members_login_events` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_newsletters` --- - -CREATE TABLE `members_newsletters` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `newsletter_id` varchar(24) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_paid_subscription_events` --- - -CREATE TABLE `members_paid_subscription_events` ( - `id` varchar(24) NOT NULL, - `type` varchar(50) DEFAULT NULL, - `member_id` varchar(24) NOT NULL, - `subscription_id` varchar(24) DEFAULT NULL, - `from_plan` varchar(255) DEFAULT NULL, - `to_plan` varchar(255) DEFAULT NULL, - `currency` varchar(191) NOT NULL, - `source` varchar(50) NOT NULL, - `mrr_delta` int(11) NOT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_payment_events` --- - -CREATE TABLE `members_payment_events` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `amount` int(11) NOT NULL, - `currency` varchar(191) NOT NULL, - `source` varchar(50) NOT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_products` --- - -CREATE TABLE `members_products` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `product_id` varchar(24) NOT NULL, - `sort_order` int(10) UNSIGNED NOT NULL DEFAULT 0, - `expiry_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_product_events` --- - -CREATE TABLE `members_product_events` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `product_id` varchar(24) NOT NULL, - `action` varchar(50) DEFAULT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_status_events` --- - -CREATE TABLE `members_status_events` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `from_status` varchar(50) DEFAULT NULL, - `to_status` varchar(50) DEFAULT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_stripe_customers` --- - -CREATE TABLE `members_stripe_customers` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `customer_id` varchar(255) NOT NULL, - `name` varchar(191) DEFAULT NULL, - `email` varchar(191) DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_stripe_customers_subscriptions` --- - -CREATE TABLE `members_stripe_customers_subscriptions` ( - `id` varchar(24) NOT NULL, - `customer_id` varchar(255) NOT NULL, - `subscription_id` varchar(255) NOT NULL, - `stripe_price_id` varchar(255) NOT NULL DEFAULT '', - `status` varchar(50) NOT NULL, - `cancel_at_period_end` tinyint(1) NOT NULL DEFAULT 0, - `cancellation_reason` varchar(500) DEFAULT NULL, - `current_period_end` datetime NOT NULL, - `start_date` datetime NOT NULL, - `default_payment_card_last4` varchar(4) DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL, - `mrr` int(10) UNSIGNED NOT NULL DEFAULT 0, - `offer_id` varchar(24) DEFAULT NULL, - `plan_id` varchar(255) NOT NULL, - `plan_nickname` varchar(50) NOT NULL, - `plan_interval` varchar(50) NOT NULL, - `plan_amount` int(11) NOT NULL, - `plan_currency` varchar(191) NOT NULL, - `trial_start_at` datetime DEFAULT NULL, - `trial_end_at` datetime DEFAULT NULL, - `ghost_subscription_id` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_subscribe_events` --- - -CREATE TABLE `members_subscribe_events` ( - `id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `subscribed` tinyint(1) NOT NULL DEFAULT 1, - `created_at` datetime NOT NULL, - `source` varchar(50) DEFAULT NULL, - `newsletter_id` varchar(24) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `members_subscription_created_events` --- - -CREATE TABLE `members_subscription_created_events` ( - `id` varchar(24) NOT NULL, - `created_at` datetime NOT NULL, - `member_id` varchar(24) NOT NULL, - `subscription_id` varchar(24) NOT NULL, - `attribution_id` varchar(24) DEFAULT NULL, - `attribution_type` varchar(50) DEFAULT NULL, - `attribution_url` varchar(2000) DEFAULT NULL, - `referrer_source` varchar(191) DEFAULT NULL, - `referrer_medium` varchar(191) DEFAULT NULL, - `referrer_url` varchar(2000) DEFAULT NULL, - `batch_id` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `mentions` --- - -CREATE TABLE `mentions` ( - `id` varchar(24) NOT NULL, - `source` varchar(2000) NOT NULL, - `source_title` varchar(2000) DEFAULT NULL, - `source_site_title` varchar(2000) DEFAULT NULL, - `source_excerpt` varchar(2000) DEFAULT NULL, - `source_author` varchar(2000) DEFAULT NULL, - `source_featured_image` varchar(2000) DEFAULT NULL, - `source_favicon` varchar(2000) DEFAULT NULL, - `target` varchar(2000) NOT NULL, - `resource_id` varchar(24) DEFAULT NULL, - `resource_type` varchar(50) DEFAULT NULL, - `created_at` datetime NOT NULL, - `payload` text DEFAULT NULL, - `deleted` tinyint(1) NOT NULL DEFAULT 0, - `verified` tinyint(1) NOT NULL DEFAULT 0 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `migrations` --- - -CREATE TABLE `migrations` ( - `id` int(10) UNSIGNED NOT NULL, - `name` varchar(120) NOT NULL, - `version` varchar(70) NOT NULL, - `currentVersion` varchar(255) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `migrations` --- - -INSERT INTO `migrations` (`id`, `name`, `version`, `currentVersion`) VALUES -(1, '1-create-tables.js', 'init', '4.48'), -(2, '2-create-fixtures.js', 'init', '4.48'), -(3, '1-post-excerpt.js', '1.3', '4.48'), -(4, '1-codeinjection-post.js', '1.4', '4.48'), -(5, '1-og-twitter-post.js', '1.5', '4.48'), -(6, '1-add-backup-client.js', '1.7', '4.48'), -(7, '1-add-permissions-redirect.js', '1.9', '4.48'), -(8, '1-custom-template-post.js', '1.13', '4.48'), -(9, '2-theme-permissions.js', '1.13', '4.48'), -(10, '1-add-webhooks-table.js', '1.18', '4.48'), -(11, '1-webhook-permissions.js', '1.19', '4.48'), -(12, '1-remove-settings-keys.js', '1.20', '4.48'), -(13, '1-add-contributor-role.js', '1.21', '4.48'), -(14, '1-multiple-authors-DDL.js', '1.22', '4.48'), -(15, '1-multiple-authors-DML.js', '1.22', '4.48'), -(16, '1-update-koenig-beta-html.js', '1.25', '4.48'), -(17, '2-demo-post.js', '1.25', '4.48'), -(18, '1-rename-amp-column.js', '2.0', '4.48'), -(19, '2-update-posts.js', '2.0', '4.48'), -(20, '3-remove-koenig-labs.js', '2.0', '4.48'), -(21, '4-permalink-setting.js', '2.0', '4.48'), -(22, '5-remove-demo-post.js', '2.0', '4.48'), -(23, '6-replace-fixture-posts.js', '2.0', '4.48'), -(24, '1-add-sessions-table.js', '2.2', '4.48'), -(25, '2-add-integrations-and-api-key-tables.js', '2.2', '4.48'), -(26, '3-insert-admin-integration-role.js', '2.2', '4.48'), -(27, '4-insert-integration-and-api-key-permissions.js', '2.2', '4.48'), -(28, '5-add-mobiledoc-revisions-table.js', '2.2', '4.48'), -(29, '1-add-webhook-columns.js', '2.3', '4.48'), -(30, '2-add-webhook-edit-permission.js', '2.3', '4.48'), -(31, '1-add-webhook-permission-roles.js', '2.6', '4.48'), -(32, '1-add-members-table.js', '2.8', '4.48'), -(33, '1-remove-empty-strings.js', '2.13', '4.48'), -(34, '1-add-actions-table.js', '2.14', '4.48'), -(35, '2-add-actions-permissions.js', '2.14', '4.48'), -(36, '1-add-type-column-to-integrations.js', '2.15', '4.48'), -(37, '2-insert-zapier-integration.js', '2.15', '4.48'), -(38, '1-add-members-perrmissions.js', '2.16', '4.48'), -(39, '1-normalize-settings.js', '2.17', '4.48'), -(40, '2-posts-add-canonical-url.js', '2.17', '4.48'), -(41, '1-restore-settings-from-backup.js', '2.18', '4.48'), -(42, '1-update-editor-permissions.js', '2.21', '4.48'), -(43, '1-add-member-permissions-to-roles.js', '2.22', '4.48'), -(44, '1-insert-ghost-db-backup-role.js', '2.27', '4.48'), -(45, '2-insert-db-backup-integration.js', '2.27', '4.48'), -(46, '3-add-subdirectory-to-relative-canonical-urls.js', '2.27', '4.48'), -(47, '1-add-db-backup-content-permission.js', '2.28', '4.48'), -(48, '2-add-db-backup-content-permission-to-roles.js', '2.28', '4.48'), -(49, '3-insert-ghost-scheduler-role.js', '2.28', '4.48'), -(50, '4-insert-scheduler-integration.js', '2.28', '4.48'), -(51, '5-add-scheduler-permission-to-roles.js', '2.28', '4.48'), -(52, '6-add-type-column.js', '2.28', '4.48'), -(53, '7-populate-type-column.js', '2.28', '4.48'), -(54, '8-remove-page-column.js', '2.28', '4.48'), -(55, '1-add-post-page-column.js', '2.29', '4.48'), -(56, '2-populate-post-page-column.js', '2.29', '4.48'), -(57, '3-remove-page-type-column.js', '2.29', '4.48'), -(58, '1-remove-name-and-password-from-members-table.js', '2.31', '4.48'), -(59, '01-add-members-stripe-customers-table.js', '2.32', '4.48'), -(60, '02-add-name-to-members-table.js', '2.32', '4.48'), -(61, '01-correct-members-stripe-customers-table.js', '2.33', '4.48'), -(62, '01-add-stripe-customers-subscriptions-table.js', '2.34', '4.48'), -(63, '02-add-email-to-members-stripe-customers-table.js', '2.34', '4.48'), -(64, '03-add-name-to-members-stripe-customers-table.js', '2.34', '4.48'), -(65, '01-add-note-to-members-table.js', '2.35', '4.48'), -(66, '01-add-self-signup-and-from address-to-members-settings.js', '2.37', '4.48'), -(67, '01-remove-user-ghost-auth-columns.js', '3.0', '4.48'), -(68, '02-drop-token-auth-tables.js', '3.0', '4.48'), -(69, '03-drop-client-auth-tables.js', '3.0', '4.48'), -(70, '04-add-posts-meta-table.js', '3.0', '4.48'), -(71, '05-populate-posts-meta-table.js', '3.0', '4.48'), -(72, '06-remove-posts-meta-columns.js', '3.0', '4.48'), -(73, '07-add-posts-type-column.js', '3.0', '4.48'), -(74, '08-populate-posts-type-column.js', '3.0', '4.48'), -(75, '09-remove-posts-page-column.js', '3.0', '4.48'), -(76, '10-remove-empty-strings.js', '3.0', '4.48'), -(77, '11-update-posts-html.js', '3.0', '4.48'), -(78, '12-populate-members-table-from-subscribers.js', '3.0', '4.48'), -(79, '13-drop-subscribers-table.js', '3.0', '4.48'), -(80, '14-remove-subscribers-flag.js', '3.0', '4.48'), -(81, '01-add-send-email-when-published-to-posts.js', '3.1', '4.48'), -(82, '02-add-email-subject-to-posts-meta.js', '3.1', '4.48'), -(83, '03-add-email-preview-permissions.js', '3.1', '4.48'), -(84, '04-add-subscribed-flag-to-members.js', '3.1', '4.48'), -(85, '05-add-emails-table.js', '3.1', '4.48'), -(86, '06-add-email-permissions.js', '3.1', '4.48'), -(87, '07-add-uuid-field-to-members.js', '3.1', '4.48'), -(88, '08-add-uuid-values-to-members.js', '3.1', '4.48'), -(89, '09-add-further-email-permissions.js', '3.1', '4.48'), -(90, '10-add-email-error-data-column.js', '3.1', '4.48'), -(91, '01-add-cancel-at-period-end-to-subscriptions.js', '3.2', '4.48'), -(92, '1-add-labels-table.js', '3.6', '4.48'), -(93, '2-add-members-labels-table.js', '3.6', '4.48'), -(94, '3-add-labels-permissions.js', '3.6', '4.48'), -(95, '01-fix-incorrect-member-labels-foreign-keys.js', '3.7', '4.48'), -(96, '01-add-geolocation-to-members.js', '3.8', '4.48'), -(97, '01-add-member-sigin-url-permissions.js', '3.9', '4.48'), -(98, '01-remove-broken-complimentary-plan-from-members-settings.js', '3.11', '4.48'), -(99, '01-add-identity-permission.js', '3.12', '4.48'), -(100, '02-remove-legacy-is-paid-flag-from-settings.js', '3.12', '4.48'), -(101, '01-add-email-preview-permissions-to-roles.js', '3.18', '4.48'), -(102, '02-add-members_stripe_connect-auth-permissions.js', '3.18', '4.48'), -(103, '01-update-member-from-email-address.js', '3.19', '4.48'), -(104, '01-removed-legacy-values-from-settings-table.js', '3.22', '4.48'), -(105, '02-settings-key-renames.js', '3.22', '4.48'), -(106, '03-add-group-and-flags-to-settings.js', '3.22', '4.48'), -(107, '04-populate-settings-groups-and-flags.js', '3.22', '4.48'), -(108, '05-migrate-members-subscription-settings.js', '3.22', '4.48'), -(109, '06-migrate-stripe-connect-settings.js', '3.22', '4.48'), -(110, '07-update-type-for-settings.js', '3.22', '4.48'), -(111, '01-migrate-bulk-email-settings.js', '3.23', '4.48'), -(112, '02-remove-bulk-email-settings.js', '3.23', '4.48'), -(113, '03-update-portal-button-setting.js', '3.23', '4.48'), -(114, '04-add-meta-columns-to-tags-table.js', '3.23', '4.48'), -(115, '01-populate-group-for-new-portal-settings.js', '3.24', '4.48'), -(116, '01-add-members-stripe-webhook-settings.js', '3.25', '4.48'), -(117, '01-add-amp-gtag-id-setting.js', '3.26', '4.48'), -(118, '01-remove-duplicate-subscriptions.js', '3.29', '4.48'), -(119, '02-remove-duplicate-customers.js', '3.29', '4.48'), -(120, '03-remove-orphaned-customers.js', '3.29', '4.48'), -(121, '04-remove-orphaned-subscriptions.js', '3.29', '4.48'), -(122, '05-add-member-constraints.js', '3.29', '4.48'), -(123, '01-add-member-signin-url-permission-roles.js', '3.30', '4.48'), -(124, '01-add-member-support-address-setting.js', '3.32', '4.48'), -(125, '02-add-member-reply-address-setting.js', '3.32', '4.48'), -(126, '03-add-routes-hash-setting.js', '3.32', '4.48'), -(127, '01-add-email-recipients-tables.js', '3.33', '4.48'), -(128, '01-add-tokens-table.js', '3.34', '4.48'), -(129, '01-add-address-columns-to-emails-table.js', '3.35', '4.48'), -(130, '01-add-snippets-table.js', '3.36', '4.48'), -(131, '02-add-snippets-permissions.js', '3.36', '4.48'), -(132, '01-update-portal-button-setting.js', '3.37', '4.48'), -(133, '01-add-email-recipient-filter-column.js', '3.38', '4.48'), -(134, '02-populate-email-recipient-filter-column.js', '3.38', '4.48'), -(135, '03-add-recipient-filter-column.js', '3.38', '4.48'), -(136, '04-populate-recipient-filter-column.js', '3.38', '4.48'), -(137, '05-add-emails-track-opens-column.js', '3.38', '4.48'), -(138, '06-add-newsletter-settings.js', '3.38', '4.48'), -(139, '07-migrate-newsletter-settings-from-config.js', '3.38', '4.48'), -(140, '08-repopulate-send-email-when-published-down-migration.js', '3.38', '4.48'), -(141, '09-remove-send-email-when-published-column.js', '3.38', '4.48'), -(142, '01-add-members-signup-redirect-settings.js', '3.39', '4.48'), -(143, '02-add-user-id-to-api-keys-table.js', '3.39', '4.48'), -(144, '03-add-email-track-opens-setting.js', '3.39', '4.48'), -(145, '04-add-cancellation-reason-column.js', '3.39', '4.48'), -(146, '05-remove-unused-columns-on-emails.js', '3.39', '4.48'), -(147, '06-add-email-recipient-index.js', '3.39', '4.48'), -(148, '07-add-email-recipients-event-timestamps.js', '3.39', '4.48'), -(149, '08-add-email-stats-columns.js', '3.39', '4.48'), -(150, '01-add-members-email-open-rate-column.js', '3.40', '4.48'), -(151, '02-add members-email-aggregation-columns.js', '3.40', '4.48'), -(152, '03-populate-members-email-counts.js', '3.40', '4.48'), -(153, '01-add-firstpromoter-settings.js', '3.41', '4.48'), -(154, '01-update-mobiledoc.js', '4.0', '4.48'), -(155, '02-add-status-column-to-members.js', '4.0', '4.48'), -(156, '03-populate-status-column-for-members.js', '4.0', '4.48'), -(157, '04-drop-apps-related-tables.js', '4.0', '4.48'), -(158, '05-add-members-subscribe-events-table.js', '4.0', '4.48'), -(159, '06-populate-members-subscribe-events-table.js', '4.0', '4.48'), -(160, '07-alter-unique-constraint-for-posts-slug.js', '4.0', '4.48'), -(161, '08-add-members-login-events-table.js', '4.0', '4.48'), -(162, '09-add-members-email-change-events-table.js', '4.0', '4.48'), -(163, '10-add-members-status-events-table.js', '4.0', '4.48'), -(164, '11-add-members-paid-subscription-events-table.js', '4.0', '4.48'), -(165, '12-delete-apps-related-settings-keys.js', '4.0', '4.48'), -(166, '13-add-members-payment-events-table.js', '4.0', '4.48'), -(167, '14-remove-orphaned-stripe-records.js', '4.0', '4.48'), -(168, '15-add-frontmatter-column-to-meta.js', '4.0', '4.48'), -(169, '16-refactor-slack-setting.js', '4.0', '4.48'), -(170, '17-populate-members-status-events-table.js', '4.0', '4.48'), -(171, '18-transform-urls-absolute-to-transform-ready.js', '4.0', '4.48'), -(172, '19-remove-labs-members-setting.js', '4.0', '4.48'), -(173, '20-refactor-unsplash-setting.js', '4.0', '4.48'), -(174, '21-sanitize-email-batches-provider-id.js', '4.0', '4.48'), -(175, '22-solve-orphaned-webhooks.js', '4.0', '4.48'), -(176, '23-regenerate-posts-html.js', '4.0', '4.48'), -(177, '24-add-missing-email-permissions.js', '4.0', '4.48'), -(178, '25-populate-members-paid-subscription-events-table.js', '4.0', '4.48'), -(179, '26-add-cascade-on-delete.js', '4.0', '4.48'), -(180, '27-add-primary-key-brute-migrations-lock.js', '4.0', '4.48'), -(181, '28-add-webhook-intergrations-foreign-key.js', '4.0', '4.48'), -(182, '29-fix-foreign-key-for-members-stripe-customers-subscriptions.js', '4.0', '4.48'), -(183, '30-set-default-accent-color.js', '4.0', '4.48'), -(184, '01-fix-backup-content-permission-typo.js', '4.1', '4.48'), -(185, '02-add-unique-constraint-for-member-stripe-tables.js', '4.1', '4.48'), -(186, '01-fix-incorrect-mrr-delta-events.js', '4.2', '4.48'), -(187, '01-add-products-table.js', '4.3', '4.48'), -(188, '02-add-members-products-table.js', '4.3', '4.48'), -(189, '03-add-default-product.js', '4.3', '4.48'), -(190, '04-attach-members-to-product.js', '4.3', '4.48'), -(191, '05-add-stripe-products-table.js', '4.3', '4.48'), -(192, '06-add-stripe-prices-table.js', '4.3', '4.48'), -(193, '07-add-products-permissions.js', '4.3', '4.48'), -(194, '08-migrate-members-signup-setting.js', '4.3', '4.48'), -(195, '09-add-price-id-column-to-subscriptions-table.js', '4.3', '4.48'), -(196, '10-populate-stripe-price-id-in-subscriptions.js', '4.3', '4.48'), -(197, '01-restore-free-members-signup-setting-from-backup.js', '4.4', '4.48'), -(198, '02-migrate-members-signup-access.js', '4.4', '4.48'), -(199, '01-add-stripe-price-description-column.js', '4.5', '4.48'), -(200, '02-add-product-description-column.js', '4.5', '4.48'), -(201, '03-give-label-read-permissions-to-editors.js', '4.5', '4.48'), -(202, '04-remove-unique-constraint-from-product-name.js', '4.5', '4.48'), -(203, '05-rename-default-product-to-site-title.js', '4.5', '4.48'), -(204, '01-remove-comped-status.js', '4.6', '4.48'), -(205, '01-add-monthly-price-column-to-products.js', '4.7', '4.48'), -(206, '02-add-yearly-price-column-to-products.js', '4.7', '4.48'), -(207, '03-add-labs-setting.js', '4.7', '4.48'), -(208, '01-add-feature-image-alt-column-to-posts-meta.js', '4.8', '4.48'), -(209, '02-add-feature-image-caption-column-to-posts-meta.js', '4.8', '4.48'), -(210, '03-add-default-product-portal-products.js', '4.8', '4.48'), -(211, '04-migrate-show-newsletter-header-setting.js', '4.8', '4.48'), -(212, '01-add-reset-all-passwords-permission.js', '4.9', '4.48'), -(213, '02-add-benefits-table.js', '4.9', '4.48'), -(214, '03-add-products-benefits-table.js', '4.9', '4.48'), -(215, '04-add-member-segment-to-email-batches.js', '4.9', '4.48'), -(216, '05-fix-missed-mobiledoc-url-transforms.js', '4.9', '4.48'), -(217, '06-add-comped-status.js', '4.9', '4.48'), -(218, '07-update-comped-members-status-events.js', '4.9', '4.48'), -(219, '01-add-oauth-user-data.js', '4.11', '4.48'), -(220, '02-add-email-verification-required-setting.js', '4.11', '4.48'), -(221, '01-add-email-only-column-to-posts-meta-table.js', '4.12', '4.48'), -(222, '02-fix-member-statuses.js', '4.12', '4.48'), -(223, '01-add-members-stripe-connect-auth-permission-to-administrators.js', '4.13', '4.48'), -(224, '02-add-members-products-events-table.js', '4.13', '4.48'), -(225, '01-fix-comped-member-statuses.js', '4.14', '4.48'), -(226, '02-fix-free-members-status-events.js', '4.14', '4.48'), -(227, '01-add-temp-members-analytic-events-table.js', '4.15', '4.48'), -(228, '01-add-custom-theme-settings-table.js', '4.16', '4.48'), -(229, '01-add-custom-theme-settings-permissions.js', '4.17', '4.48'), -(230, '02-add-offers-table.js', '4.17', '4.48'), -(231, '03-add-offers-permissions.js', '4.17', '4.48'), -(232, '01-add-active-column-to-offers.js', '4.19', '4.48'), -(233, '02-add-offer-redemptions-table.js', '4.19', '4.48'), -(234, '01-remove-offer-redemptions-table.js', '4.20', '4.48'), -(235, '02-remove-offers-table.js', '4.20', '4.48'), -(236, '03-add-offers-table.js', '4.20', '4.48'), -(237, '04-add-offer-redemptions-table.js', '4.20', '4.48'), -(238, '05-remove-not-null-constraint-from-portal-title.js', '4.20', '4.48'), -(239, '01-add-is-launch-complete-setting.js', '4.22', '4.48'), -(240, '02-update-launch-complete-setting-from-user-data.js', '4.22', '4.48'), -(241, '01-truncate-offer-names.js', '4.23', '4.48'), -(242, '2022-01-14-11-50-add-type-column-to-products.js', '4.33', '4.48'), -(243, '2022-01-14-11-51-add-default-free-tier.js', '4.33', '4.48'), -(244, '2022-01-18-09-07-remove-duplicate-offer-redemptions.js', '4.33', '4.48'), -(245, '2022-01-19-10-43-add-active-column-to-products-table.js', '4.33', '4.48'), -(246, '2022-01-25-13-53-add-welcome-page-url-column-to-products.js', '4.34', '4.48'), -(247, '2022-01-20-05-55-add-post-products-table.js', '4.35', '4.48'), -(248, '2022-01-30-15-17-set-welcome-page-url-from-settings.js', '4.35', '4.48'), -(249, '2022-02-01-11-48-update-email-recipient-filter-column-type.js', '4.35', '4.48'), -(250, '2022-02-01-12-03-update-recipient-filter-column-type.js', '4.35', '4.48'), -(251, '2022-02-02-10-38-add-default-content-visibility-tiers-setting.js', '4.35', '4.48'), -(252, '2022-02-02-13-10-transform-specific-tiers-default-content-visibility.js', '4.35', '4.48'), -(253, '2022-02-04-04-34-populate-empty-portal-products.js', '4.35', '4.48'), -(254, '2022-02-07-14-34-add-last-seen-at-column-to-members.js', '4.36', '4.48'), -(255, '2022-02-21-09-53-backfill-members-last-seen-at-column.js', '4.37', '4.48'), -(256, '2022-03-01-08-46-add-visibility-to-tiers.js', '4.38', '4.48'), -(257, '2022-03-03-16-12-add-visibility-to-tiers.js', '4.38', '4.48'), -(258, '2022-03-03-16-17-drop-tiers-visible-column.js', '4.38', '4.48'), -(259, '2022-03-07-10-57-update-free-products-visibility-column.js', '4.39', '4.48'), -(260, '2022-03-07-10-57-update-products-visibility-column.js', '4.39', '4.48'), -(261, '2022-03-07-14-37-add-members-cancel-events-table.js', '4.40', '4.48'), -(262, '2022-03-15-06-40-add-offers-admin-integration-permission-roles.js', '4.40', '4.48'), -(263, '2022-03-15-06-40-add-tiers-admin-integration-permission-roles.js', '4.40', '4.48'), -(264, '2022-03-21-17-17-add.js', '4.42', '4.48'), -(265, '2022-03-30-15-44-add-newsletter-permissions.js', '4.42', '4.48'), -(266, '2022-03-28-19-26-recreate-newsletter-table.js', '4.43', '4.48'), -(267, '2022-03-29-14-45-add-members-newsletters-table.js', '4.43', '4.48'), -(268, '2022-04-01-10-13-add-post-newsletter-relation.js', '4.43', '4.48'), -(269, '2022-04-06-09-47-add-type-column-to-paid-subscription-events.js', '4.43', '4.48'), -(270, '2022-04-06-14-56-add-email-newsletter-relation.js', '4.43', '4.48'), -(271, '2022-04-08-10-45-add-subscription-id-to-mrr-events.js', '4.43', '4.48'), -(272, '2022-04-06-15-22-populate-type-column-for-paid-subscription-events.js', '4.44', '4.48'), -(273, '2022-04-08-11-54-add-cancelled-events.js', '4.44', '4.48'), -(274, '2022-04-11-08-24-add-newsletter-permissions.js', '4.44', '4.48'), -(275, '2022-04-11-10-54-add-mrr-to-subscriptions.js', '4.44', '4.48'), -(276, '2022-04-12-07-33-fill-mrr.js', '4.44', '4.48'), -(277, '2022-04-13-12-00-remove-newsletter-sender-name-not-null-constraint.js', '4.44', '4.48'), -(278, '2022-04-15-07-53-add-offer-id-to-subscriptions.js', '4.44', '4.48'), -(279, '2022-04-19-12-23-backfill-subscriptions-offers.js', '4.45', '4.48'), -(280, '2022-04-20-11-25-add-newsletter-read-permission.js', '4.45', '4.48'), -(281, '2022-04-21-02-55-add-notifications-key-entry-to-settings-table.js', '4.45', '4.48'), -(282, '2022-04-13-12-00-add-created-at-newsletters.js', '4.46', '4.48'), -(283, '2022-04-13-12-01-add-updated-at-newsletters.js', '4.46', '4.48'), -(284, '2022-04-13-12-02-fill-created-at-newsletters.js', '4.46', '4.48'), -(285, '2022-04-13-12-03-drop-nullable-created-at-newsletters.js', '4.46', '4.48'), -(286, '2022-04-13-12-08-newsletters-show-header-name.js', '4.46', '4.48'), -(287, '2022-04-13-12-57-add-uuid-column-to-newsletters.js', '4.46', '4.48'), -(288, '2022-04-13-12-58-fill-uuid-for-newsletters.js', '4.46', '4.48'), -(289, '2022-04-13-12-59-drop-nullable-uuid-newsletters.js', '4.46', '4.48'), -(290, '2022-04-13-13-00-add-default-newsletter.js', '4.46', '4.48'), -(291, '2022-04-20-08-39-map-subscribers-to-default-newsletter.js', '4.46', '4.48'), -(292, '2022-04-22-07-43-add-newsletter-id-to-subscribe-events.js', '4.46', '4.48'), -(293, '2022-04-27-07-59-set-newsletter-id-subscribe-events.js', '4.46', '4.48'), -(294, '2022-05-03-15-30-update-newsletter-sending-options.js', '4.47', '4.48'), -(295, '2022-05-04-10-03-transform-newsletter-header-image.js', '4.47', '4.48'), -(296, '2022-03-14-12-33-delete-duplicate-offer-redemptions.js', '5.0', '5.65'), -(297, '2022-03-28-15-25-backfill-mrr-adjustments-for-offers.js', '5.0', '5.65'), -(298, '2022-04-25-10-32-backfill-mrr-for-discounted-subscriptions.js', '5.0', '5.65'), -(299, '2022-04-26-15-44-backfill-mrr-events-for-canceled-subscriptions.js', '5.0', '5.65'), -(300, '2022-04-27-11-26-backfill-mrr-for-canceled-subscriptions.js', '5.0', '5.65'), -(301, '2022-04-28-03-26-remove-author-id-column-from-posts-table.js', '5.0', '5.65'), -(302, '2022-05-03-09-39-drop-nullable-subscribe-event-newsletter-id.js', '5.0', '5.65'), -(303, '2022-05-04-15-24-map-existing-emails-to-default-newsletter.js', '5.0', '5.65'), -(304, '2022-05-05-13-13-migrate-legacy-recipient-filters.js', '5.0', '5.65'), -(305, '2022-05-05-13-29-add-newsletters-admin-integration-permission-roles.js', '5.0', '5.65'), -(306, '2022-05-05-15-17-drop-oauth-table.js', '5.0', '5.65'), -(307, '2022-05-06-08-16-cleanup-client-subscriber-permissions.js', '5.0', '5.65'), -(308, '2022-05-06-13-22-add-frontend-integration.js', '5.0', '5.65'), -(309, '2022-05-09-10-00-drop-members-subscribed-column.js', '5.0', '5.65'), -(310, '2022-05-09-14-17-cleanup-invalid-users-status.js', '5.0', '5.65'), -(311, '2022-05-10-08-33-drop-members-analytics-table.js', '5.0', '5.65'), -(312, '2022-05-10-14-57-cleanup-invalid-posts-status.js', '5.0', '5.65'), -(313, '2022-05-11-12-08-drop-webhooks-status-column.js', '5.0', '5.65'), -(314, '2022-05-11-13-12-rename-settings.js', '5.0', '5.65'), -(315, '2022-05-11-16-36-remove-unused-settings.js', '5.0', '5.65'), -(316, '2022-05-12-10-29-add-newsletter-permissions-for-editors-and-authors.js', '5.0', '5.65'), -(317, '2022-05-12-13-51-add-label-permissions-for-authors.js', '5.0', '5.65'), -(318, '2022-05-13-11-38-drop-none-email-recipient-filter.js', '5.0', '5.65'), -(319, '2022-05-21-00-00-regenerate-posts-html.js', '5.0', '5.65'), -(320, '2022-07-04-13-49-add-comments-table.js', '5.3', '5.65'), -(321, '2022-07-05-09-36-add-comments-likes-table.js', '5.3', '5.65'), -(322, '2022-07-05-09-47-add-comments-reports-table.js', '5.3', '5.65'), -(323, '2022-07-05-10-00-add-comment-related-fields-to-members.js', '5.3', '5.65'), -(324, '2022-07-05-12-55-add-comments-crud-permissions.js', '5.3', '5.65'), -(325, '2022-07-05-15-35-add-comment-notifications-field-to-users-table.js', '5.3', '5.65'), -(326, '2022-07-06-07-26-add-comments-enabled-setting.js', '5.3', '5.65'), -(327, '2022-07-06-07-58-add-ghost-explore-integration-role.js', '5.3', '5.65'), -(328, '2022-07-06-09-13-add-ghost-explore-integration-role-permissions.js', '5.3', '5.65'), -(329, '2022-07-06-09-17-add-ghost-explore-integration.js', '5.3', '5.65'), -(330, '2022-07-06-09-26-add-ghost-explore-integration-api-key.js', '5.3', '5.65'), -(331, '2022-07-18-14-29-add-comment-reporting-permissions.js', '5.5', '5.65'), -(332, '2022-07-18-14-31-drop-reports-reason.js', '5.5', '5.65'), -(333, '2022-07-18-14-32-drop-nullable-member-id-from-likes.js', '5.5', '5.65'), -(334, '2022-07-18-14-33-fix-comments-on-delete-foreign-keys.js', '5.5', '5.65'), -(335, '2022-07-21-08-56-add-jobs-table.js', '5.5', '5.65'), -(336, '2022-07-27-13-40-change-explore-type.js', '5.6', '5.65'), -(337, '2022-08-02-06-09-add-trial-period-days-column-to-tiers.js', '5.8', '5.65'), -(338, '2022-08-03-15-28-add-trial-start-column-to-stripe-subscriptions.js', '5.8', '5.65'), -(339, '2022-08-03-15-29-add-trial-end-column-to-stripe-subscriptions.js', '5.8', '5.65'), -(340, '2022-08-09-08-32-added-new-integration-type.js', '5.9', '5.65'), -(341, '2022-08-15-05-34-add-expiry-at-column-to-members-products.js', '5.10', '5.65'), -(342, '2022-08-16-14-25-add-member-created-events-table.js', '5.10', '5.65'), -(343, '2022-08-16-14-25-add-subscription-created-events-table.js', '5.10', '5.65'), -(344, '2022-08-19-14-15-fix-comments-deletion-strategy.js', '5.10', '5.65'), -(345, '2022-08-22-11-03-add-member-alert-settings-columns-to-users.js', '5.11', '5.65'), -(346, '2022-08-23-13-41-backfill-members-created-events.js', '5.11', '5.65'), -(347, '2022-08-23-13-59-fix-page-resource-type.js', '5.11', '5.65'), -(348, '2022-09-02-12-55-rename-members-bio-to-expertise.js', '5.14', '5.65'), -(349, '2022-09-12-16-10-add-posts-lexical-column.js', '5.15', '5.65'), -(350, '2022-09-14-12-46-add-email-track-clicks-setting.js', '5.15', '5.65'), -(351, '2022-09-16-08-22-add-post-revisions-table.js', '5.15', '5.65'), -(352, '2022-09-19-09-04-add-link-redirects-table.js', '5.16', '5.65'), -(353, '2022-09-19-09-05-add-members-link-click-events-table.js', '5.16', '5.65'), -(354, '2022-09-19-17-44-add-referrer-columns-to-member-events-table.js', '5.16', '5.65'), -(355, '2022-09-19-17-44-add-referrer-columns-to-subscription-events-table.js', '5.16', '5.65'), -(356, '2022-09-27-13-53-remove-click-tracking-tables.js', '5.17', '5.65'), -(357, '2022-09-27-13-55-add-redirects-table.js', '5.17', '5.65'), -(358, '2022-09-27-13-56-add-members-click-events-table.js', '5.17', '5.65'), -(359, '2022-09-27-16-49-set-track-clicks-based-on-opens.js', '5.17', '5.65'), -(360, '2022-09-29-12-39-add-track-clicks-column-to-emails.js', '5.17', '5.65'), -(361, '2022-09-02-20-25-add-columns-to-products-table.js', '5.19', '5.65'), -(362, '2022-09-02-20-52-backfill-new-product-columns.js', '5.19', '5.65'), -(363, '2022-10-10-06-58-add-subscriptions-table.js', '5.19', '5.65'), -(364, '2022-10-10-10-05-add-members-feedback-table.js', '5.19', '5.65'), -(365, '2022-10-11-10-38-add-feedback-enabled-column-to-newsletters.js', '5.19', '5.65'), -(366, '2022-10-18-05-39-drop-nullable-tier-id.js', '5.20', '5.65'), -(367, '2022-10-18-10-13-add-ghost-subscription-id-column-to-mscs.js', '5.20', '5.65'), -(368, '2022-10-19-11-17-add-link-browse-permissions.js', '5.20', '5.65'), -(369, '2022-10-20-02-52-add-link-edit-permissions.js', '5.20', '5.65'), -(370, '2022-10-24-07-23-disable-feedback-enabled.js', '5.21', '5.65'), -(371, '2022-10-25-12-05-backfill-missed-products-columns.js', '5.21', '5.65'), -(372, '2022-10-26-04-49-add-batch-id-members-created-events.js', '5.21', '5.65'), -(373, '2022-10-26-04-49-add-batch-id-subscription-created-events.js', '5.21', '5.65'), -(374, '2022-10-26-04-50-member-subscription-created-batch-id.js', '5.21', '5.65'), -(375, '2022-10-26-09-32-add-feedback-enabled-column-to-emails.js', '5.21', '5.65'), -(376, '2022-10-27-09-50-add-member-track-source-setting.js', '5.21', '5.65'), -(377, '2022-10-31-12-03-backfill-new-product-columns.js', '5.22', '5.65'), -(378, '2022-11-21-09-32-add-source-columns-to-emails-table.js', '5.24', '5.65'), -(379, '2022-11-21-15-03-populate-source-column-with-html-for-emails.js', '5.24', '5.65'), -(380, '2022-11-21-15-57-add-error-columns-for-email-batches.js', '5.24', '5.65'), -(381, '2022-11-24-10-36-add-suppressions-table.js', '5.25', '5.65'), -(382, '2022-11-24-10-37-add-email-spam-complaint-events-table.js', '5.25', '5.65'), -(383, '2022-11-29-08-30-add-error-recipient-failures-table.js', '5.25', '5.65'), -(384, '2022-12-13-16-15-add-usage-colums-to-tokens.js', '5.27', '5.65'), -(385, '2023-01-04-04-12-drop-suppressions-table.js', '5.27', '5.65'), -(386, '2023-01-04-04-13-add-suppressions-table.js', '5.27', '5.65'), -(387, '2023-01-05-15-13-add-active-theme-permissions.js', '5.28', '5.65'), -(388, '2023-01-11-02-45-truncate-suppressions.js', '5.29', '5.65'), -(389, '2023-01-13-04-25-unsubscribe-suppressed-emails.js', '5.30', '5.65'), -(390, '2022-12-05-09-56-update-newsletter-subscriptions.js', '5.31', '5.65'), -(391, '2023-01-17-14-59-add-outbound-link-tagging-setting.js', '5.31', '5.65'), -(392, '2023-01-19-07-46-add-mentions-table.js', '5.31', '5.65'), -(393, '2023-01-24-08-00-fix-invalid-tier-expiry-for-paid-members.js', '5.32', '5.65'), -(394, '2023-01-24-08-09-restore-incorrect-expired-tiers-for-members.js', '5.32', '5.65'), -(395, '2023-01-30-07-27-add-mentions-permission.js', '5.34', '5.65'), -(396, '2023-02-08-03-08-add-mentions-notifications-column.js', '5.34', '5.65'), -(397, '2023-02-08-22-32-add-mentions-delete-column.js', '5.34', '5.65'), -(398, '2023-02-13-06-24-add-mentions-verified-column.js', '5.35', '5.65'), -(399, '2023-02-20-12-22-add-milestones-table.js', '5.36', '5.65'), -(400, '2023-02-21-12-29-add-milestone-notifications-column.js', '5.36', '5.65'), -(401, '2023-02-23-10-40-set-outbound-link-tagging-based-on-source-tracking.js', '5.36', '5.65'), -(402, '2023-03-13-09-29-add-newsletter-show-post-title-section.js', '5.39', '5.65'), -(403, '2023-03-13-13-11-add-newsletter-show-comment-cta.js', '5.39', '5.65'), -(404, '2023-03-13-14-30-add-newsletter-show-subscription-details.js', '5.39', '5.65'), -(405, '2023-03-14-12-26-add-last-mentions-email-report-timestamp-setting.js', '5.39', '5.65'), -(406, '2023-03-13-14-05-add-newsletter-show-latest-posts.js', '5.40', '5.65'), -(407, '2023-03-21-18-42-add-self-serve-integration-role.js', '5.40', '5.65'), -(408, '2023-03-21-18-43-add-self-serve-migration-and-permissions.js', '5.40', '5.65'), -(409, '2023-03-21-18-52-add-self-serve-integration.js', '5.40', '5.65'), -(410, '2023-03-21-19-02-add-self-serve-integration-api-key.js', '5.40', '5.65'), -(411, '2023-03-27-15-00-add-newsletter-colors.js', '5.41', '5.65'), -(412, '2023-03-27-17-51-fix-self-serve-integration-api-key-type.js', '5.41', '5.65'), -(413, '2023-04-04-07-03-add-portal-terms-settings.js', '5.42', '5.65'), -(414, '2023-04-14-04-17-add-snippets-lexical-column.js', '5.44', '5.65'), -(415, '2023-04-17-11-05-add-post-revision-author.js', '5.45', '5.65'), -(416, '2023-04-18-12-56-add-announcement-settings.js', '5.45', '5.65'), -(417, '2023-04-19-13-45-add-pintura-settings.js', '5.45', '5.65'), -(418, '2023-04-20-14-19-add-announcement-visibility-setting.js', '5.45', '5.65'), -(419, '2023-04-21-08-54-add-post-revision-status.js', '5.45', '5.65'), -(420, '2023-04-21-10-30-add-feature-image-to-revisions.js', '5.45', '5.65'), -(421, '2023-04-21-13-01-add-feature-image-meta-to-post-revisions.js', '5.45', '5.65'), -(422, '2023-05-30-19-03-update-pintura-setting.js', '5.51', '5.65'), -(423, '2023-06-07-10-17-add-collections-crud-persmissions.js', '5.51', '5.65'), -(424, '2023-06-13-12-24-add-temp-mail-events-table.js', '5.53', '5.65'), -(425, '2023-06-20-10-18-add-collections-table.js', '5.53', '5.65'), -(426, '2023-06-20-10-19-add-collections-posts-table.js', '5.53', '5.65'), -(427, '2023-07-07-11-57-add-show-title-and-feature-image-column-to-posts.js', '5.54', '5.65'), -(428, '2023-07-10-05-15-55-add-built-in-collections.js', '5.55', '5.65'), -(429, '2023-07-10-05-16-55-add-built-in-collection-posts.js', '5.55', '5.65'), -(430, '2023-07-14-10-11-12-add-email-disabled-field-to-members.js', '5.56', '5.65'), -(431, '2023-07-15-10-11-12-update-members-email-disabled-field.js', '5.56', '5.65'), -(432, '2023-07-26-12-44-stripe-products-nullable-product.js', '5.57', '5.65'), -(433, '2023-07-27-11-47-49-create-donation-events.js', '5.57', '5.65'), -(434, '2023-08-02-09-42-add-donation-settings.js', '5.58', '5.65'), -(435, '2023-08-07-10-42-add-donation-notifications-column.js', '5.59', '5.65'), -(436, '2023-08-07-11-17-05-add-posts-published-at-index.js', '5.59', '5.65'), -(437, '2023-08-29-10-17-add-recommendations-crud-permissions.js', '5.61', '5.65'), -(438, '2023-08-29-11-39-10-add-recommendations-table.js', '5.61', '5.65'), -(439, '2023-08-30-07-37-04-add-recommendations-enabled-settings.js', '5.61', '5.65'), -(440, '2023-09-12-11-22-10-add-recommendation-click-events-table.js', '5.63', '5.65'), -(441, '2023-09-12-11-22-11-add-recommendation-subscribe-events-table.js', '5.63', '5.65'), -(442, '2023-09-13-13-03-10-add-ghost-core-content-integration.js', '5.63', '5.65'), -(443, '2023-09-13-13-34-11-add-ghost-core-content-integration-key.js', '5.63', '5.65'), -(444, '2023-09-19-04-25-40-truncate-stale-built-in-collections-posts.js', '5.64', '5.65'), -(445, '2023-09-19-04-34-10-repopulate-built-in-collection-posts.js', '5.64', '5.65'), -(446, '2023-09-22-06-42-15-truncate-stale-built-in-collections-posts.js', '5.65', '5.65'), -(447, '2023-09-22-06-42-55-repopulate-built-in-featured-collection-posts.js', '5.65', '5.65'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `migrations_lock` --- - -CREATE TABLE `migrations_lock` ( - `lock_key` varchar(191) NOT NULL, - `locked` tinyint(1) DEFAULT 0, - `acquired_at` datetime DEFAULT NULL, - `released_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `migrations_lock` --- - -INSERT INTO `migrations_lock` (`lock_key`, `locked`, `acquired_at`, `released_at`) VALUES -('km01', 0, '2023-09-25 21:14:44', '2023-09-25 21:14:46'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `milestones` --- - -CREATE TABLE `milestones` ( - `id` varchar(24) NOT NULL, - `type` varchar(24) NOT NULL, - `value` int(11) NOT NULL, - `currency` varchar(24) DEFAULT NULL, - `created_at` datetime NOT NULL, - `email_sent_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `milestones` --- - -INSERT INTO `milestones` (`id`, `type`, `value`, `currency`, `created_at`, `email_sent_at`) VALUES -('6511f84dcd1c0b0001715738', 'members', 0, NULL, '2023-09-25 21:14:53', NULL); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `mobiledoc_revisions` --- - -CREATE TABLE `mobiledoc_revisions` ( - `id` varchar(24) NOT NULL, - `post_id` varchar(24) NOT NULL, - `mobiledoc` longtext DEFAULT NULL, - `created_at_ts` bigint(20) NOT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `mobiledoc_revisions` --- - -INSERT INTO `mobiledoc_revisions` (`id`, `post_id`, `mobiledoc`, `created_at_ts`, `created_at`) VALUES -('6511f774fcc22500013e608f', '6511f58b6740bf0001d1410f', '{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[[\"hr\",{}]],\"markups\":[[\"a\",[\"href\",\"https://ghost.org\"]]],\"sections\":[[1,\"p\",[[0,[],0,\"This is an independent publication. If you subscribe today, you\'ll get full access to the website as well as email newsletters about new content when it\'s available. Your subscription makes this site possible. Thank you!\"]]],[1,\"h3\",[[0,[],0,\"Access all areas\"]]],[1,\"p\",[[0,[],0,\"By signing up, you\'ll get access to the full archive of everything that\'s been published before and everything that\'s still to come. Your very own private library.\"]]],[1,\"h3\",[[0,[],0,\"Fresh content, delivered\"]]],[1,\"p\",[[0,[],0,\"Stay up to date with new content sent straight to your inbox! No more worrying about whether you missed something because of a pesky algorithm or news feed.\"]]],[1,\"h3\",[[0,[],0,\"Meet people like you\"]]],[1,\"p\",[[0,[],0,\"Join a community of other subscribers who share the same interests.\"]]],[10,0],[1,\"h3\",[[0,[],0,\"Start your own thing\"]]],[1,\"p\",[[0,[],0,\"Enjoying the experience? Get started for free and set up your very own subscription business using \"],[0,[0],1,\"Ghost\"],[0,[],0,\", the same platform that powers this website.\"]]]],\"ghostVersion\":\"4.0\"}', 1695676276474, '2023-09-25 21:11:16'), -('6511f774fcc22500013e6090', '6511f58b6740bf0001d1410f', '{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[[\"hr\",{}]],\"markups\":[[\"a\",[\"href\",\"https://ghost.org\"]]],\"sections\":[[1,\"p\",[[0,[],0,\"cscherr Blog is an independent publication launched in September 2023 by Christoph J. Scherr. If you subscribe today, you\'ll get full access to the website as well as email newsletters about new content when it\'s available. Your subscription makes this site possible, and allows cscherr Blog to continue to exist. Thank you!\"]]],[1,\"h3\",[[0,[],0,\"Access all areas\"]]],[1,\"p\",[[0,[],0,\"By signing up, you\'ll get access to the full archive of everything that\'s been published before and everything that\'s still to come. Your very own private library.\"]]],[1,\"h3\",[[0,[],0,\"Fresh content, delivered\"]]],[1,\"p\",[[0,[],0,\"Stay up to date with new content sent straight to your inbox! No more worrying about whether you missed something because of a pesky algorithm or news feed.\"]]],[1,\"h3\",[[0,[],0,\"Meet people like you\"]]],[1,\"p\",[[0,[],0,\"Join a community of other subscribers who share the same interests.\"]]],[10,0],[1,\"h3\",[[0,[],0,\"Start your own thing\"]]],[1,\"p\",[[0,[],0,\"Enjoying the experience? Get started for free and set up your very own subscription business using \"],[0,[0],1,\"Ghost\"],[0,[],0,\", the same platform that powers this website.\"]]]],\"ghostVersion\":\"4.0\"}', 1695676276475, '2023-09-25 21:11:16'), -('6511f774fcc22500013e6091', '6511f58b6740bf0001d1410d', '{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[[\"a\",[\"href\",\"#/portal/\",\"rel\",\"noopener noreferrer\"]]],\"sections\":[[1,\"p\",[[0,[],0,\"This is a brand new site that\'s just getting started. Things will be up and running here shortly, but you can \"],[0,[0],1,\"subscribe\"],[0,[],0,\" in the meantime if you\'d like to stay up to date and receive emails when new content is published!\"]]]],\"ghostVersion\":\"4.0\"}', 1695676276535, '2023-09-25 21:11:16'), -('6511f774fcc22500013e6092', '6511f58b6740bf0001d1410d', '{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[[\"a\",[\"href\",\"#/portal/\"]]],\"sections\":[[1,\"p\",[[0,[],0,\"This is cscherr Blog, a brand new site by Christoph J. Scherr that\'s just getting started. Things will be up and running here shortly, but you can \"],[0,[0],1,\"subscribe\"],[0,[],0,\" in the meantime if you\'d like to stay up to date and receive emails when new content is published!\"]]]],\"ghostVersion\":\"4.0\"}', 1695676276536, '2023-09-25 21:11:16'), -('6511fc02cd1c0b000171574b', '6511fc02cd1c0b0001715749', '{\"version\":\"0.3.1\",\"ghostVersion\":\"4.0\",\"markups\":[],\"atoms\":[],\"cards\":[],\"sections\":[[1,\"p\",[[0,[],0,\"\"]]]]}', 1695677442561, '2023-09-25 21:30:42'), -('6511fc0acd1c0b000171574f', '6511fc02cd1c0b0001715749', '{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"foo bar qux\"]]]],\"ghostVersion\":\"4.0\"}', 1695677450380, '2023-09-25 21:30:50'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `newsletters` --- - -CREATE TABLE `newsletters` ( - `id` varchar(24) NOT NULL, - `uuid` varchar(36) NOT NULL, - `name` varchar(191) NOT NULL, - `description` varchar(2000) DEFAULT NULL, - `slug` varchar(191) NOT NULL, - `sender_name` varchar(191) DEFAULT NULL, - `sender_email` varchar(191) DEFAULT NULL, - `sender_reply_to` varchar(191) NOT NULL DEFAULT 'newsletter', - `status` varchar(50) NOT NULL DEFAULT 'active', - `visibility` varchar(50) NOT NULL DEFAULT 'members', - `subscribe_on_signup` tinyint(1) NOT NULL DEFAULT 1, - `sort_order` int(10) UNSIGNED NOT NULL DEFAULT 0, - `header_image` varchar(2000) DEFAULT NULL, - `show_header_icon` tinyint(1) NOT NULL DEFAULT 1, - `show_header_title` tinyint(1) NOT NULL DEFAULT 1, - `title_font_category` varchar(191) NOT NULL DEFAULT 'sans_serif', - `title_alignment` varchar(191) NOT NULL DEFAULT 'center', - `show_feature_image` tinyint(1) NOT NULL DEFAULT 1, - `body_font_category` varchar(191) NOT NULL DEFAULT 'sans_serif', - `footer_content` text DEFAULT NULL, - `show_badge` tinyint(1) NOT NULL DEFAULT 1, - `show_header_name` tinyint(1) NOT NULL DEFAULT 1, - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL, - `feedback_enabled` tinyint(1) NOT NULL DEFAULT 0, - `show_post_title_section` tinyint(1) NOT NULL DEFAULT 1, - `show_comment_cta` tinyint(1) NOT NULL DEFAULT 1, - `show_subscription_details` tinyint(1) NOT NULL DEFAULT 0, - `show_latest_posts` tinyint(1) NOT NULL DEFAULT 0, - `background_color` varchar(50) NOT NULL DEFAULT 'light', - `border_color` varchar(50) DEFAULT NULL, - `title_color` varchar(50) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `newsletters` --- - -INSERT INTO `newsletters` (`id`, `uuid`, `name`, `description`, `slug`, `sender_name`, `sender_email`, `sender_reply_to`, `status`, `visibility`, `subscribe_on_signup`, `sort_order`, `header_image`, `show_header_icon`, `show_header_title`, `title_font_category`, `title_alignment`, `show_feature_image`, `body_font_category`, `footer_content`, `show_badge`, `show_header_name`, `created_at`, `updated_at`, `feedback_enabled`, `show_post_title_section`, `show_comment_cta`, `show_subscription_details`, `show_latest_posts`, `background_color`, `border_color`, `title_color`) VALUES -('6511f58a6740bf0001d140a3', '871f0c4a-bc86-480e-9ad8-08deb2bf3113', 'cscherr Blog', NULL, 'default-newsletter', NULL, NULL, 'newsletter', 'active', 'members', 1, 0, NULL, 1, 1, 'sans_serif', 'center', 1, 'sans_serif', NULL, 1, 0, '2023-09-25 21:03:06', '2023-09-25 21:11:16', 0, 1, 1, 0, 0, 'light', NULL, NULL); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `offers` --- - -CREATE TABLE `offers` ( - `id` varchar(24) NOT NULL, - `active` tinyint(1) NOT NULL DEFAULT 1, - `name` varchar(191) NOT NULL, - `code` varchar(191) NOT NULL, - `product_id` varchar(24) NOT NULL, - `stripe_coupon_id` varchar(255) DEFAULT NULL, - `interval` varchar(50) NOT NULL, - `currency` varchar(50) DEFAULT NULL, - `discount_type` varchar(50) NOT NULL, - `discount_amount` int(11) NOT NULL, - `duration` varchar(50) NOT NULL, - `duration_in_months` int(11) DEFAULT NULL, - `portal_title` varchar(191) DEFAULT NULL, - `portal_description` varchar(2000) DEFAULT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `offer_redemptions` --- - -CREATE TABLE `offer_redemptions` ( - `id` varchar(24) NOT NULL, - `offer_id` varchar(24) NOT NULL, - `member_id` varchar(24) NOT NULL, - `subscription_id` varchar(24) NOT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `permissions` --- - -CREATE TABLE `permissions` ( - `id` varchar(24) NOT NULL, - `name` varchar(50) NOT NULL, - `object_type` varchar(50) NOT NULL, - `action_type` varchar(50) NOT NULL, - `object_id` varchar(24) DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `permissions` --- - -INSERT INTO `permissions` (`id`, `name`, `object_type`, `action_type`, `object_id`, `created_at`, `created_by`, `updated_at`, `updated_by`) VALUES -('6511f58a6740bf0001d140ad', 'Export database', 'db', 'exportContent', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140ae', 'Import database', 'db', 'importContent', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140af', 'Delete all content', 'db', 'deleteAllContent', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140b0', 'Send mail', 'mail', 'send', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140b1', 'Browse notifications', 'notification', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140b2', 'Add notifications', 'notification', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140b3', 'Delete notifications', 'notification', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140b4', 'Browse posts', 'post', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140b5', 'Read posts', 'post', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140b6', 'Edit posts', 'post', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140b7', 'Add posts', 'post', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140b8', 'Delete posts', 'post', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140b9', 'Browse settings', 'setting', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140ba', 'Read settings', 'setting', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140bb', 'Edit settings', 'setting', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140bc', 'Generate slugs', 'slug', 'generate', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140bd', 'Browse tags', 'tag', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140be', 'Read tags', 'tag', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140bf', 'Edit tags', 'tag', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140c0', 'Add tags', 'tag', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140c1', 'Delete tags', 'tag', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140c2', 'Browse themes', 'theme', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140c3', 'Edit themes', 'theme', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140c4', 'Activate themes', 'theme', 'activate', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140c5', 'Upload themes', 'theme', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140c6', 'Download themes', 'theme', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140c7', 'Delete themes', 'theme', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140c8', 'Browse users', 'user', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140c9', 'Read users', 'user', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140ca', 'Edit users', 'user', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140cb', 'Add users', 'user', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140cc', 'Delete users', 'user', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140cd', 'Assign a role', 'role', 'assign', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140ce', 'Browse roles', 'role', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140cf', 'Browse invites', 'invite', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140d0', 'Read invites', 'invite', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140d1', 'Edit invites', 'invite', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140d2', 'Add invites', 'invite', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140d3', 'Delete invites', 'invite', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140d4', 'Download redirects', 'redirect', 'download', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140d5', 'Upload redirects', 'redirect', 'upload', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140d6', 'Add webhooks', 'webhook', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140d7', 'Edit webhooks', 'webhook', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140d8', 'Delete webhooks', 'webhook', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140d9', 'Browse integrations', 'integration', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140da', 'Read integrations', 'integration', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140db', 'Edit integrations', 'integration', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140dc', 'Add integrations', 'integration', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140dd', 'Delete integrations', 'integration', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140de', 'Browse API keys', 'api_key', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140df', 'Read API keys', 'api_key', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140e0', 'Edit API keys', 'api_key', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140e1', 'Add API keys', 'api_key', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140e2', 'Delete API keys', 'api_key', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140e3', 'Browse Actions', 'action', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140e4', 'Browse Members', 'member', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140e5', 'Read Members', 'member', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140e6', 'Edit Members', 'member', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140e7', 'Add Members', 'member', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140e8', 'Delete Members', 'member', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140e9', 'Browse Products', 'product', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140ea', 'Read Products', 'product', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140eb', 'Edit Products', 'product', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140ec', 'Add Products', 'product', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140ed', 'Delete Products', 'product', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140ee', 'Publish posts', 'post', 'publish', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140ef', 'Backup database', 'db', 'backupContent', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140f0', 'Email preview', 'email_preview', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140f1', 'Send test email', 'email_preview', 'sendTestEmail', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140f2', 'Browse emails', 'email', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140f3', 'Read emails', 'email', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140f4', 'Retry emails', 'email', 'retry', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140f5', 'Browse labels', 'label', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140f6', 'Read labels', 'label', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140f7', 'Edit labels', 'label', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140f8', 'Add labels', 'label', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140f9', 'Delete labels', 'label', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140fa', 'Read member signin urls', 'member_signin_url', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140fb', 'Read identities', 'identity', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140fc', 'Auth Stripe Connect for Members', 'members_stripe_connect', 'auth', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140fd', 'Browse snippets', 'snippet', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140fe', 'Read snippets', 'snippet', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140ff', 'Edit snippets', 'snippet', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d14100', 'Add snippets', 'snippet', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d14101', 'Delete snippets', 'snippet', 'destroy', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d14102', 'Browse offers', 'offer', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d14103', 'Read offers', 'offer', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d14104', 'Edit offers', 'offer', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d14105', 'Add offers', 'offer', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d14106', 'Reset all passwords', 'authentication', 'resetAllPasswords', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d14107', 'Browse custom theme settings', 'custom_theme_setting', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d14108', 'Edit custom theme settings', 'custom_theme_setting', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d14109', 'Browse newsletters', 'newsletter', 'browse', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d1410a', 'Read newsletters', 'newsletter', 'read', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d1410b', 'Add newsletters', 'newsletter', 'add', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d1410c', 'Edit newsletters', 'newsletter', 'edit', NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f844cd1c0b00017156b3', 'Browse comments', 'comment', 'browse', NULL, '2023-09-25 21:14:44', '1', '2023-09-25 21:14:44', '1'), -('6511f844cd1c0b00017156b6', 'Read comments', 'comment', 'read', NULL, '2023-09-25 21:14:44', '1', '2023-09-25 21:14:44', '1'), -('6511f844cd1c0b00017156b9', 'Edit comments', 'comment', 'edit', NULL, '2023-09-25 21:14:44', '1', '2023-09-25 21:14:44', '1'), -('6511f844cd1c0b00017156bc', 'Add comments', 'comment', 'add', NULL, '2023-09-25 21:14:44', '1', '2023-09-25 21:14:44', '1'), -('6511f844cd1c0b00017156bf', 'Delete comments', 'comment', 'destroy', NULL, '2023-09-25 21:14:44', '1', '2023-09-25 21:14:44', '1'), -('6511f844cd1c0b00017156c2', 'Moderate comments', 'comment', 'moderate', NULL, '2023-09-25 21:14:44', '1', '2023-09-25 21:14:44', '1'), -('6511f844cd1c0b00017156c5', 'Like comments', 'comment', 'like', NULL, '2023-09-25 21:14:44', '1', '2023-09-25 21:14:44', '1'), -('6511f844cd1c0b00017156c8', 'Unlike comments', 'comment', 'unlike', NULL, '2023-09-25 21:14:44', '1', '2023-09-25 21:14:44', '1'), -('6511f844cd1c0b00017156cd', 'Read explore data', 'explore', 'read', NULL, '2023-09-25 21:14:44', '1', '2023-09-25 21:14:44', '1'), -('6511f844cd1c0b00017156d3', 'Report comments', 'comment', 'report', NULL, '2023-09-25 21:14:44', '1', '2023-09-25 21:14:44', '1'), -('6511f845cd1c0b00017156d7', 'Browse links', 'link', 'browse', NULL, '2023-09-25 21:14:45', '1', '2023-09-25 21:14:45', '1'), -('6511f845cd1c0b00017156da', 'Edit links', 'link', 'edit', NULL, '2023-09-25 21:14:45', '1', '2023-09-25 21:14:45', '1'), -('6511f845cd1c0b00017156de', 'View active theme details', 'theme', 'readActive', NULL, '2023-09-25 21:14:45', '1', '2023-09-25 21:14:45', '1'), -('6511f846cd1c0b00017156e4', 'Browse mentions', 'mention', 'browse', NULL, '2023-09-25 21:14:46', '1', '2023-09-25 21:14:46', '1'), -('6511f846cd1c0b00017156f6', 'Browse collections', 'collection', 'browse', NULL, '2023-09-25 21:14:46', '1', '2023-09-25 21:14:46', '1'), -('6511f846cd1c0b00017156fc', 'Read collections', 'collection', 'read', NULL, '2023-09-25 21:14:46', '1', '2023-09-25 21:14:46', '1'), -('6511f846cd1c0b0001715702', 'Edit collections', 'collection', 'edit', NULL, '2023-09-25 21:14:46', '1', '2023-09-25 21:14:46', '1'), -('6511f846cd1c0b0001715706', 'Add collections', 'collection', 'add', NULL, '2023-09-25 21:14:46', '1', '2023-09-25 21:14:46', '1'), -('6511f846cd1c0b000171570b', 'Delete collections', 'collection', 'destroy', NULL, '2023-09-25 21:14:46', '1', '2023-09-25 21:14:46', '1'), -('6511f846cd1c0b0001715714', 'Browse recommendations', 'recommendation', 'browse', NULL, '2023-09-25 21:14:46', '1', '2023-09-25 21:14:46', '1'), -('6511f846cd1c0b000171571a', 'Read recommendations', 'recommendation', 'read', NULL, '2023-09-25 21:14:46', '1', '2023-09-25 21:14:46', '1'), -('6511f846cd1c0b0001715720', 'Edit recommendations', 'recommendation', 'edit', NULL, '2023-09-25 21:14:46', '1', '2023-09-25 21:14:46', '1'), -('6511f846cd1c0b0001715723', 'Add recommendations', 'recommendation', 'add', NULL, '2023-09-25 21:14:46', '1', '2023-09-25 21:14:46', '1'), -('6511f846cd1c0b0001715726', 'Delete recommendations', 'recommendation', 'destroy', NULL, '2023-09-25 21:14:46', '1', '2023-09-25 21:14:46', '1'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `permissions_roles` --- - -CREATE TABLE `permissions_roles` ( - `id` varchar(24) NOT NULL, - `role_id` varchar(24) NOT NULL, - `permission_id` varchar(24) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `permissions_roles` --- - -INSERT INTO `permissions_roles` (`id`, `role_id`, `permission_id`) VALUES -('6511f58b6740bf0001d14117', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140ad'), -('6511f58b6740bf0001d14118', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140ae'), -('6511f58b6740bf0001d14119', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140af'), -('6511f58b6740bf0001d1411a', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140ef'), -('6511f58b6740bf0001d1411b', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140b0'), -('6511f58b6740bf0001d1411c', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140b1'), -('6511f58b6740bf0001d1411d', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140b2'), -('6511f58b6740bf0001d1411e', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140b3'), -('6511f58b6740bf0001d1411f', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140b4'), -('6511f58b6740bf0001d14120', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140b5'), -('6511f58b6740bf0001d14121', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140b6'), -('6511f58b6740bf0001d14122', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140b7'), -('6511f58b6740bf0001d14123', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140b8'), -('6511f58b6740bf0001d14124', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140ee'), -('6511f58b6740bf0001d14125', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140b9'), -('6511f58b6740bf0001d14126', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140ba'), -('6511f58b6740bf0001d14127', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140bb'), -('6511f58b6740bf0001d14128', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140bc'), -('6511f58b6740bf0001d14129', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140bd'), -('6511f58b6740bf0001d1412a', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140be'), -('6511f58b6740bf0001d1412b', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140bf'), -('6511f58b6740bf0001d1412c', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140c0'), -('6511f58b6740bf0001d1412d', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140c1'), -('6511f58b6740bf0001d1412e', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140c2'), -('6511f58b6740bf0001d1412f', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140c3'), -('6511f58b6740bf0001d14130', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140c4'), -('6511f58b6740bf0001d14131', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140c5'), -('6511f58b6740bf0001d14132', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140c6'), -('6511f58b6740bf0001d14133', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140c7'), -('6511f58b6740bf0001d14134', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140c8'), -('6511f58b6740bf0001d14135', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140c9'), -('6511f58b6740bf0001d14136', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140ca'), -('6511f58b6740bf0001d14137', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140cb'), -('6511f58b6740bf0001d14138', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140cc'), -('6511f58b6740bf0001d14139', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140cd'), -('6511f58b6740bf0001d1413a', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140ce'), -('6511f58b6740bf0001d1413b', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140cf'), -('6511f58b6740bf0001d1413c', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140d0'), -('6511f58b6740bf0001d1413d', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140d1'), -('6511f58b6740bf0001d1413e', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140d2'), -('6511f58b6740bf0001d1413f', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140d3'), -('6511f58b6740bf0001d14140', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140d4'), -('6511f58b6740bf0001d14141', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140d5'), -('6511f58b6740bf0001d14142', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140d6'), -('6511f58b6740bf0001d14143', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140d7'), -('6511f58b6740bf0001d14144', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140d8'), -('6511f58b6740bf0001d14145', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140d9'), -('6511f58b6740bf0001d14146', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140da'), -('6511f58b6740bf0001d14147', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140db'), -('6511f58b6740bf0001d14148', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140dc'), -('6511f58b6740bf0001d14149', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140dd'), -('6511f58b6740bf0001d1414a', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140de'), -('6511f58b6740bf0001d1414b', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140df'), -('6511f58b6740bf0001d1414c', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140e0'), -('6511f58b6740bf0001d1414d', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140e1'), -('6511f58b6740bf0001d1414e', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140e2'), -('6511f58b6740bf0001d1414f', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140e3'), -('6511f58b6740bf0001d14150', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140e4'), -('6511f58b6740bf0001d14151', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140e5'), -('6511f58b6740bf0001d14152', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140e6'), -('6511f58b6740bf0001d14153', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140e7'), -('6511f58b6740bf0001d14154', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140e8'), -('6511f58b6740bf0001d14155', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140e9'), -('6511f58b6740bf0001d14156', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140ea'), -('6511f58b6740bf0001d14157', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140eb'), -('6511f58b6740bf0001d14158', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140ec'), -('6511f58b6740bf0001d14159', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140ed'), -('6511f58b6740bf0001d1415a', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140f5'), -('6511f58b6740bf0001d1415b', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140f6'), -('6511f58b6740bf0001d1415c', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140f7'), -('6511f58b6740bf0001d1415d', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140f8'), -('6511f58b6740bf0001d1415e', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140f9'), -('6511f58b6740bf0001d1415f', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140f0'), -('6511f58b6740bf0001d14160', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140f1'), -('6511f58b6740bf0001d14161', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140f2'), -('6511f58b6740bf0001d14162', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140f3'), -('6511f58b6740bf0001d14163', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140f4'), -('6511f58b6740bf0001d14164', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140fa'), -('6511f58b6740bf0001d14165', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140fd'), -('6511f58b6740bf0001d14166', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140fe'), -('6511f58b6740bf0001d14167', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140ff'), -('6511f58b6740bf0001d14168', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d14100'), -('6511f58b6740bf0001d14169', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d14101'), -('6511f58b6740bf0001d1416a', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d14107'), -('6511f58b6740bf0001d1416b', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d14108'), -('6511f58b6740bf0001d1416c', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d14102'), -('6511f58b6740bf0001d1416d', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d14103'), -('6511f58b6740bf0001d1416e', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d14104'), -('6511f58b6740bf0001d1416f', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d14105'), -('6511f58b6740bf0001d14170', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d14106'), -('6511f58b6740bf0001d14171', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d140fc'), -('6511f58b6740bf0001d14172', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d14109'), -('6511f58b6740bf0001d14173', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d1410a'), -('6511f58b6740bf0001d14174', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d1410b'), -('6511f58b6740bf0001d14175', '6511f58a6740bf0001d140a5', '6511f58a6740bf0001d1410c'), -('6511f58b6740bf0001d14176', '6511f58a6740bf0001d140ab', '6511f58a6740bf0001d140ad'), -('6511f58b6740bf0001d14177', '6511f58a6740bf0001d140ab', '6511f58a6740bf0001d140ae'), -('6511f58b6740bf0001d14178', '6511f58a6740bf0001d140ab', '6511f58a6740bf0001d140af'), -('6511f58b6740bf0001d14179', '6511f58a6740bf0001d140ab', '6511f58a6740bf0001d140ef'), -('6511f58b6740bf0001d1417a', '6511f58a6740bf0001d140ac', '6511f58a6740bf0001d140ee'), -('6511f58b6740bf0001d1417b', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140b0'), -('6511f58b6740bf0001d1417c', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140b1'), -('6511f58b6740bf0001d1417d', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140b2'), -('6511f58b6740bf0001d1417e', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140b3'), -('6511f58b6740bf0001d1417f', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140b4'), -('6511f58b6740bf0001d14180', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140b5'), -('6511f58b6740bf0001d14181', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140b6'), -('6511f58b6740bf0001d14182', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140b7'), -('6511f58b6740bf0001d14183', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140b8'), -('6511f58b6740bf0001d14184', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140ee'), -('6511f58b6740bf0001d14185', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140b9'), -('6511f58b6740bf0001d14186', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140ba'), -('6511f58b6740bf0001d14187', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140bb'), -('6511f58b6740bf0001d14188', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140bc'), -('6511f58b6740bf0001d14189', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140bd'), -('6511f58b6740bf0001d1418a', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140be'), -('6511f58b6740bf0001d1418b', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140bf'), -('6511f58b6740bf0001d1418c', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140c0'), -('6511f58b6740bf0001d1418d', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140c1'), -('6511f58b6740bf0001d1418e', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140c2'), -('6511f58b6740bf0001d1418f', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140c3'), -('6511f58b6740bf0001d14190', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140c4'), -('6511f58b6740bf0001d14191', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140c5'), -('6511f58b6740bf0001d14192', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140c6'), -('6511f58b6740bf0001d14193', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140c7'), -('6511f58b6740bf0001d14194', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140c8'), -('6511f58b6740bf0001d14195', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140c9'), -('6511f58b6740bf0001d14196', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140ca'), -('6511f58b6740bf0001d14197', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140cb'), -('6511f58b6740bf0001d14198', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140cc'), -('6511f58b6740bf0001d14199', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140cd'), -('6511f58b6740bf0001d1419a', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140ce'), -('6511f58b6740bf0001d1419b', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140cf'), -('6511f58b6740bf0001d1419c', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140d0'), -('6511f58b6740bf0001d1419d', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140d1'), -('6511f58b6740bf0001d1419e', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140d2'), -('6511f58b6740bf0001d1419f', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140d3'), -('6511f58b6740bf0001d141a0', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140d4'), -('6511f58b6740bf0001d141a1', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140d5'), -('6511f58b6740bf0001d141a2', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140d6'), -('6511f58b6740bf0001d141a3', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140d7'), -('6511f58b6740bf0001d141a4', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140d8'), -('6511f58b6740bf0001d141a5', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140e3'), -('6511f58b6740bf0001d141a6', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140e4'), -('6511f58b6740bf0001d141a7', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140e5'), -('6511f58b6740bf0001d141a8', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140e6'), -('6511f58b6740bf0001d141a9', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140e7'), -('6511f58b6740bf0001d141aa', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140e8'), -('6511f58b6740bf0001d141ab', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140f5'), -('6511f58b6740bf0001d141ac', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140f6'), -('6511f58b6740bf0001d141ad', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140f7'), -('6511f58b6740bf0001d141ae', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140f8'), -('6511f58b6740bf0001d141af', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140f9'), -('6511f58b6740bf0001d141b0', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140f0'), -('6511f58b6740bf0001d141b1', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140f1'), -('6511f58b6740bf0001d141b2', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140f2'), -('6511f58b6740bf0001d141b3', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140f3'), -('6511f58b6740bf0001d141b4', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140f4'), -('6511f58b6740bf0001d141b5', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140fd'), -('6511f58b6740bf0001d141b6', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140fe'), -('6511f58b6740bf0001d141b7', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140ff'), -('6511f58b6740bf0001d141b8', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d14100'), -('6511f58b6740bf0001d141b9', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d14101'), -('6511f58b6740bf0001d141ba', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140e9'), -('6511f58b6740bf0001d141bb', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140ea'), -('6511f58b6740bf0001d141bc', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140eb'), -('6511f58b6740bf0001d141bd', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d140ec'), -('6511f58b6740bf0001d141be', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d14102'), -('6511f58b6740bf0001d141bf', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d14103'), -('6511f58b6740bf0001d141c0', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d14104'), -('6511f58b6740bf0001d141c1', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d14105'), -('6511f58b6740bf0001d141c2', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140b1'), -('6511f58b6740bf0001d141c3', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140b2'), -('6511f58b6740bf0001d141c4', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140b3'), -('6511f58b6740bf0001d141c5', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140b4'), -('6511f58b6740bf0001d141c6', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140b5'), -('6511f58b6740bf0001d141c7', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140b6'), -('6511f58b6740bf0001d141c8', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140b7'), -('6511f58b6740bf0001d141c9', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140b8'), -('6511f58b6740bf0001d141ca', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140ee'), -('6511f58b6740bf0001d141cb', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140b9'), -('6511f58b6740bf0001d141cc', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140ba'), -('6511f58b6740bf0001d141cd', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140bc'), -('6511f58b6740bf0001d141ce', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140bd'), -('6511f58b6740bf0001d141cf', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140be'), -('6511f58b6740bf0001d141d0', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140bf'), -('6511f58b6740bf0001d141d1', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140c0'), -('6511f58b6740bf0001d141d2', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140c1'), -('6511f58b6740bf0001d141d3', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140c8'), -('6511f58b6740bf0001d141d4', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140c9'), -('6511f58b6740bf0001d141d5', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140ca'), -('6511f58b6740bf0001d141d6', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140cb'), -('6511f58b6740bf0001d141d7', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140cc'), -('6511f58b6740bf0001d141d8', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140cd'), -('6511f58b6740bf0001d141d9', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140ce'), -('6511f58b6740bf0001d141da', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140cf'), -('6511f58b6740bf0001d141db', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140d0'), -('6511f58b6740bf0001d141dc', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140d1'), -('6511f58b6740bf0001d141dd', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140d2'), -('6511f58b6740bf0001d141de', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140d3'), -('6511f58b6740bf0001d141df', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140c2'), -('6511f58b6740bf0001d141e0', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140f0'), -('6511f58b6740bf0001d141e1', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140f1'), -('6511f58b6740bf0001d141e2', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140f2'), -('6511f58b6740bf0001d141e3', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140f3'), -('6511f58b6740bf0001d141e4', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140f4'), -('6511f58b6740bf0001d141e5', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140fd'), -('6511f58b6740bf0001d141e6', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140fe'), -('6511f58b6740bf0001d141e7', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140ff'), -('6511f58b6740bf0001d141e8', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d14100'), -('6511f58b6740bf0001d141e9', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d14101'), -('6511f58b6740bf0001d141ea', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140f5'), -('6511f58b6740bf0001d141eb', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140f6'), -('6511f58b6740bf0001d141ec', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140e9'), -('6511f58b6740bf0001d141ed', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d140ea'), -('6511f58b6740bf0001d141ee', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140b4'), -('6511f58b6740bf0001d141ef', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140b5'), -('6511f58b6740bf0001d141f0', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140b7'), -('6511f58b6740bf0001d141f1', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140b9'), -('6511f58b6740bf0001d141f2', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140ba'), -('6511f58b6740bf0001d141f3', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140bc'), -('6511f58b6740bf0001d141f4', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140bd'), -('6511f58b6740bf0001d141f5', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140be'), -('6511f58b6740bf0001d141f6', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140c0'), -('6511f58b6740bf0001d141f7', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140c8'), -('6511f58b6740bf0001d141f8', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140c9'), -('6511f58b6740bf0001d141f9', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140ce'), -('6511f58b6740bf0001d141fa', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140c2'), -('6511f58b6740bf0001d141fb', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140f0'), -('6511f58b6740bf0001d141fc', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140f3'), -('6511f58b6740bf0001d141fd', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140fd'), -('6511f58b6740bf0001d141fe', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140fe'), -('6511f58b6740bf0001d141ff', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140e9'), -('6511f58b6740bf0001d14200', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140ea'), -('6511f58b6740bf0001d14201', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140b4'), -('6511f58b6740bf0001d14202', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140b5'), -('6511f58b6740bf0001d14203', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140b7'), -('6511f58b6740bf0001d14204', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140b9'), -('6511f58b6740bf0001d14205', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140ba'), -('6511f58b6740bf0001d14206', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140bc'), -('6511f58b6740bf0001d14207', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140bd'), -('6511f58b6740bf0001d14208', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140be'), -('6511f58b6740bf0001d14209', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140c8'), -('6511f58b6740bf0001d1420a', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140c9'), -('6511f58b6740bf0001d1420b', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140ce'), -('6511f58b6740bf0001d1420c', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140c2'), -('6511f58b6740bf0001d1420d', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140f0'), -('6511f58b6740bf0001d1420e', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140f3'), -('6511f58b6740bf0001d1420f', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140fd'), -('6511f58b6740bf0001d14210', '6511f58a6740bf0001d140a8', '6511f58a6740bf0001d140fe'), -('6511f844cd1c0b00017156a7', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d14109'), -('6511f844cd1c0b00017156a8', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d1410a'), -('6511f844cd1c0b00017156a9', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d1410c'), -('6511f844cd1c0b00017156aa', '6511f58a6740bf0001d140aa', '6511f58a6740bf0001d1410b'), -('6511f844cd1c0b00017156ad', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d14109'), -('6511f844cd1c0b00017156ae', '6511f58a6740bf0001d140a6', '6511f58a6740bf0001d1410a'), -('6511f844cd1c0b00017156af', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d14109'), -('6511f844cd1c0b00017156b0', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d1410a'), -('6511f844cd1c0b00017156b1', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140f5'), -('6511f844cd1c0b00017156b2', '6511f58a6740bf0001d140a7', '6511f58a6740bf0001d140f6'), -('6511f844cd1c0b00017156b4', '6511f58a6740bf0001d140a5', '6511f844cd1c0b00017156b3'), -('6511f844cd1c0b00017156b5', '6511f58a6740bf0001d140aa', '6511f844cd1c0b00017156b3'), -('6511f844cd1c0b00017156b7', '6511f58a6740bf0001d140a5', '6511f844cd1c0b00017156b6'), -('6511f844cd1c0b00017156b8', '6511f58a6740bf0001d140aa', '6511f844cd1c0b00017156b6'), -('6511f844cd1c0b00017156ba', '6511f58a6740bf0001d140a5', '6511f844cd1c0b00017156b9'), -('6511f844cd1c0b00017156bb', '6511f58a6740bf0001d140aa', '6511f844cd1c0b00017156b9'), -('6511f844cd1c0b00017156bd', '6511f58a6740bf0001d140a5', '6511f844cd1c0b00017156bc'), -('6511f844cd1c0b00017156be', '6511f58a6740bf0001d140aa', '6511f844cd1c0b00017156bc'), -('6511f844cd1c0b00017156c0', '6511f58a6740bf0001d140a5', '6511f844cd1c0b00017156bf'), -('6511f844cd1c0b00017156c1', '6511f58a6740bf0001d140aa', '6511f844cd1c0b00017156bf'), -('6511f844cd1c0b00017156c3', '6511f58a6740bf0001d140a5', '6511f844cd1c0b00017156c2'), -('6511f844cd1c0b00017156c4', '6511f58a6740bf0001d140aa', '6511f844cd1c0b00017156c2'), -('6511f844cd1c0b00017156c6', '6511f58a6740bf0001d140a5', '6511f844cd1c0b00017156c5'), -('6511f844cd1c0b00017156c7', '6511f58a6740bf0001d140aa', '6511f844cd1c0b00017156c5'), -('6511f844cd1c0b00017156c9', '6511f58a6740bf0001d140a5', '6511f844cd1c0b00017156c8'), -('6511f844cd1c0b00017156ca', '6511f58a6740bf0001d140aa', '6511f844cd1c0b00017156c8'), -('6511f844cd1c0b00017156ce', '6511f58a6740bf0001d140a5', '6511f844cd1c0b00017156cd'), -('6511f844cd1c0b00017156cf', '6511f58a6740bf0001d140aa', '6511f844cd1c0b00017156cd'), -('6511f844cd1c0b00017156d0', '6511f844cd1c0b00017156cc', '6511f844cd1c0b00017156cd'), -('6511f844cd1c0b00017156d4', '6511f58a6740bf0001d140a5', '6511f844cd1c0b00017156d3'), -('6511f844cd1c0b00017156d5', '6511f58a6740bf0001d140aa', '6511f844cd1c0b00017156d3'), -('6511f845cd1c0b00017156d8', '6511f58a6740bf0001d140a5', '6511f845cd1c0b00017156d7'), -('6511f845cd1c0b00017156d9', '6511f58a6740bf0001d140aa', '6511f845cd1c0b00017156d7'), -('6511f845cd1c0b00017156db', '6511f58a6740bf0001d140a5', '6511f845cd1c0b00017156da'), -('6511f845cd1c0b00017156dc', '6511f58a6740bf0001d140aa', '6511f845cd1c0b00017156da'), -('6511f845cd1c0b00017156df', '6511f58a6740bf0001d140a7', '6511f845cd1c0b00017156de'), -('6511f845cd1c0b00017156e0', '6511f58a6740bf0001d140a6', '6511f845cd1c0b00017156de'), -('6511f845cd1c0b00017156e1', '6511f58a6740bf0001d140a5', '6511f845cd1c0b00017156de'), -('6511f845cd1c0b00017156e2', '6511f58a6740bf0001d140aa', '6511f845cd1c0b00017156de'), -('6511f846cd1c0b00017156e5', '6511f58a6740bf0001d140a5', '6511f846cd1c0b00017156e4'), -('6511f846cd1c0b00017156e6', '6511f58a6740bf0001d140aa', '6511f846cd1c0b00017156e4'), -('6511f846cd1c0b00017156e9', '6511f846cd1c0b00017156e8', '6511f58a6740bf0001d140ae'), -('6511f846cd1c0b00017156ea', '6511f846cd1c0b00017156e8', '6511f58a6740bf0001d140e7'), -('6511f846cd1c0b00017156eb', '6511f846cd1c0b00017156e8', '6511f58a6740bf0001d140be'), -('6511f846cd1c0b00017156f7', '6511f58a6740bf0001d140a5', '6511f846cd1c0b00017156f6'), -('6511f846cd1c0b00017156f8', '6511f58a6740bf0001d140aa', '6511f846cd1c0b00017156f6'), -('6511f846cd1c0b00017156f9', '6511f58a6740bf0001d140a6', '6511f846cd1c0b00017156f6'), -('6511f846cd1c0b00017156fa', '6511f58a6740bf0001d140a7', '6511f846cd1c0b00017156f6'), -('6511f846cd1c0b00017156fb', '6511f58a6740bf0001d140a8', '6511f846cd1c0b00017156f6'), -('6511f846cd1c0b00017156fd', '6511f58a6740bf0001d140a5', '6511f846cd1c0b00017156fc'), -('6511f846cd1c0b00017156fe', '6511f58a6740bf0001d140aa', '6511f846cd1c0b00017156fc'), -('6511f846cd1c0b00017156ff', '6511f58a6740bf0001d140a6', '6511f846cd1c0b00017156fc'), -('6511f846cd1c0b0001715700', '6511f58a6740bf0001d140a7', '6511f846cd1c0b00017156fc'), -('6511f846cd1c0b0001715701', '6511f58a6740bf0001d140a8', '6511f846cd1c0b00017156fc'), -('6511f846cd1c0b0001715703', '6511f58a6740bf0001d140a5', '6511f846cd1c0b0001715702'), -('6511f846cd1c0b0001715704', '6511f58a6740bf0001d140aa', '6511f846cd1c0b0001715702'), -('6511f846cd1c0b0001715705', '6511f58a6740bf0001d140a6', '6511f846cd1c0b0001715702'), -('6511f846cd1c0b0001715707', '6511f58a6740bf0001d140a5', '6511f846cd1c0b0001715706'), -('6511f846cd1c0b0001715708', '6511f58a6740bf0001d140aa', '6511f846cd1c0b0001715706'), -('6511f846cd1c0b0001715709', '6511f58a6740bf0001d140a6', '6511f846cd1c0b0001715706'), -('6511f846cd1c0b000171570a', '6511f58a6740bf0001d140a7', '6511f846cd1c0b0001715706'), -('6511f846cd1c0b000171570c', '6511f58a6740bf0001d140a5', '6511f846cd1c0b000171570b'), -('6511f846cd1c0b000171570d', '6511f58a6740bf0001d140aa', '6511f846cd1c0b000171570b'), -('6511f846cd1c0b000171570e', '6511f58a6740bf0001d140a6', '6511f846cd1c0b000171570b'), -('6511f846cd1c0b0001715715', '6511f58a6740bf0001d140a5', '6511f846cd1c0b0001715714'), -('6511f846cd1c0b0001715716', '6511f58a6740bf0001d140aa', '6511f846cd1c0b0001715714'), -('6511f846cd1c0b0001715717', '6511f58a6740bf0001d140a6', '6511f846cd1c0b0001715714'), -('6511f846cd1c0b0001715718', '6511f58a6740bf0001d140a7', '6511f846cd1c0b0001715714'), -('6511f846cd1c0b0001715719', '6511f58a6740bf0001d140a8', '6511f846cd1c0b0001715714'), -('6511f846cd1c0b000171571b', '6511f58a6740bf0001d140a5', '6511f846cd1c0b000171571a'), -('6511f846cd1c0b000171571c', '6511f58a6740bf0001d140aa', '6511f846cd1c0b000171571a'), -('6511f846cd1c0b000171571d', '6511f58a6740bf0001d140a6', '6511f846cd1c0b000171571a'), -('6511f846cd1c0b000171571e', '6511f58a6740bf0001d140a7', '6511f846cd1c0b000171571a'), -('6511f846cd1c0b000171571f', '6511f58a6740bf0001d140a8', '6511f846cd1c0b000171571a'), -('6511f846cd1c0b0001715721', '6511f58a6740bf0001d140a5', '6511f846cd1c0b0001715720'), -('6511f846cd1c0b0001715722', '6511f58a6740bf0001d140aa', '6511f846cd1c0b0001715720'), -('6511f846cd1c0b0001715724', '6511f58a6740bf0001d140a5', '6511f846cd1c0b0001715723'), -('6511f846cd1c0b0001715725', '6511f58a6740bf0001d140aa', '6511f846cd1c0b0001715723'), -('6511f846cd1c0b0001715727', '6511f58a6740bf0001d140a5', '6511f846cd1c0b0001715726'), -('6511f846cd1c0b0001715728', '6511f58a6740bf0001d140aa', '6511f846cd1c0b0001715726'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `permissions_users` --- - -CREATE TABLE `permissions_users` ( - `id` varchar(24) NOT NULL, - `user_id` varchar(24) NOT NULL, - `permission_id` varchar(24) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `posts` --- - -CREATE TABLE `posts` ( - `id` varchar(24) NOT NULL, - `uuid` varchar(36) NOT NULL, - `title` varchar(2000) NOT NULL, - `slug` varchar(191) NOT NULL, - `mobiledoc` longtext DEFAULT NULL, - `html` longtext DEFAULT NULL, - `comment_id` varchar(50) DEFAULT NULL, - `plaintext` longtext DEFAULT NULL, - `feature_image` varchar(2000) DEFAULT NULL, - `featured` tinyint(1) NOT NULL DEFAULT 0, - `type` varchar(50) NOT NULL DEFAULT 'post', - `status` varchar(50) NOT NULL DEFAULT 'draft', - `locale` varchar(6) DEFAULT NULL, - `visibility` varchar(50) NOT NULL DEFAULT 'public', - `email_recipient_filter` text NOT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL, - `published_at` datetime DEFAULT NULL, - `published_by` varchar(24) DEFAULT NULL, - `custom_excerpt` varchar(2000) DEFAULT NULL, - `codeinjection_head` text DEFAULT NULL, - `codeinjection_foot` text DEFAULT NULL, - `custom_template` varchar(100) DEFAULT NULL, - `canonical_url` text DEFAULT NULL, - `newsletter_id` varchar(24) DEFAULT NULL, - `lexical` longtext DEFAULT NULL, - `show_title_and_feature_image` tinyint(1) NOT NULL DEFAULT 1 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `posts` --- - -INSERT INTO `posts` (`id`, `uuid`, `title`, `slug`, `mobiledoc`, `html`, `comment_id`, `plaintext`, `feature_image`, `featured`, `type`, `status`, `locale`, `visibility`, `email_recipient_filter`, `created_at`, `created_by`, `updated_at`, `updated_by`, `published_at`, `published_by`, `custom_excerpt`, `codeinjection_head`, `codeinjection_foot`, `custom_template`, `canonical_url`, `newsletter_id`, `lexical`, `show_title_and_feature_image`) VALUES -('6511f58b6740bf0001d1410d', 'ec448f26-4a46-4de5-b5c4-3ebf6f019750', 'Coming soon', 'coming-soon', '{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[[\"a\",[\"href\",\"#/portal/\"]]],\"sections\":[[1,\"p\",[[0,[],0,\"This is cscherr Blog, a brand new site by Christoph J. Scherr that\'s just getting started. Things will be up and running here shortly, but you can \"],[0,[0],1,\"subscribe\"],[0,[],0,\" in the meantime if you\'d like to stay up to date and receive emails when new content is published!\"]]]],\"ghostVersion\":\"4.0\"}', '

This is cscherr Blog, a brand new site by Christoph J. Scherr that\'s just getting started. Things will be up and running here shortly, but you can subscribe in the meantime if you\'d like to stay up to date and receive emails when new content is published!

', '6511f58b6740bf0001d1410d', 'This is cscherr Blog, a brand new site by Christoph J. Scherr that\'s just\ngetting started. Things will be up and running here shortly, but you can \nsubscribe in the meantime if you\'d like to stay up to date and receive emails\nwhen new content is published!', 'https://static.ghost.org/v4.0.0/images/feature-image.jpg', 0, 'post', 'published', NULL, 'public', 'all', '2023-09-25 21:03:07', '1', '2023-09-25 21:11:16', '6511f58b6740bf0001d1410d', '2023-09-25 21:03:07', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1), -('6511f58b6740bf0001d1410f', '165debda-163b-4435-aa80-aca192466bf7', 'About this site', 'about', '{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[[\"hr\",{}]],\"markups\":[[\"a\",[\"href\",\"https://ghost.org\"]]],\"sections\":[[1,\"p\",[[0,[],0,\"cscherr Blog is an independent publication launched in September 2023 by Christoph J. Scherr. If you subscribe today, you\'ll get full access to the website as well as email newsletters about new content when it\'s available. Your subscription makes this site possible, and allows cscherr Blog to continue to exist. Thank you!\"]]],[1,\"h3\",[[0,[],0,\"Access all areas\"]]],[1,\"p\",[[0,[],0,\"By signing up, you\'ll get access to the full archive of everything that\'s been published before and everything that\'s still to come. Your very own private library.\"]]],[1,\"h3\",[[0,[],0,\"Fresh content, delivered\"]]],[1,\"p\",[[0,[],0,\"Stay up to date with new content sent straight to your inbox! No more worrying about whether you missed something because of a pesky algorithm or news feed.\"]]],[1,\"h3\",[[0,[],0,\"Meet people like you\"]]],[1,\"p\",[[0,[],0,\"Join a community of other subscribers who share the same interests.\"]]],[10,0],[1,\"h3\",[[0,[],0,\"Start your own thing\"]]],[1,\"p\",[[0,[],0,\"Enjoying the experience? Get started for free and set up your very own subscription business using \"],[0,[0],1,\"Ghost\"],[0,[],0,\", the same platform that powers this website.\"]]]],\"ghostVersion\":\"4.0\"}', '

cscherr Blog is an independent publication launched in September 2023 by Christoph J. Scherr. If you subscribe today, you\'ll get full access to the website as well as email newsletters about new content when it\'s available. Your subscription makes this site possible, and allows cscherr Blog to continue to exist. Thank you!

Access all areas

By signing up, you\'ll get access to the full archive of everything that\'s been published before and everything that\'s still to come. Your very own private library.

Fresh content, delivered

Stay up to date with new content sent straight to your inbox! No more worrying about whether you missed something because of a pesky algorithm or news feed.

Meet people like you

Join a community of other subscribers who share the same interests.


Start your own thing

Enjoying the experience? Get started for free and set up your very own subscription business using Ghost, the same platform that powers this website.

', '6511f58b6740bf0001d1410f', 'cscherr Blog is an independent publication launched in September 2023 by\nChristoph J. Scherr. If you subscribe today, you\'ll get full access to the\nwebsite as well as email newsletters about new content when it\'s available. Your\nsubscription makes this site possible, and allows cscherr Blog to continue to\nexist. Thank you!\n\nAccess all areas\nBy signing up, you\'ll get access to the full archive of everything that\'s been\npublished before and everything that\'s still to come. Your very own private\nlibrary.\n\nFresh content, delivered\nStay up to date with new content sent straight to your inbox! No more worrying\nabout whether you missed something because of a pesky algorithm or news feed.\n\nMeet people like you\nJoin a community of other subscribers who share the same interests.\n\n\n--------------------------------------------------------------------------------\n\nStart your own thing\nEnjoying the experience? Get started for free and set up your very own\nsubscription business using Ghost [https://ghost.org], the same platform that\npowers this website.', NULL, 0, 'page', 'published', NULL, 'public', 'all', '2023-09-25 21:03:07', '1', '2023-09-25 21:11:16', '6511f58b6740bf0001d1410f', '2023-09-25 21:03:08', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1), -('6511fc02cd1c0b0001715749', 'b4ddffd1-1ceb-4e8d-839a-46250ccc8386', 'What can i do with pages?', 'what-can-i-do-with-pages', '{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"foo bar qux\"]]]],\"ghostVersion\":\"4.0\"}', '

foo bar qux

', '6511fc02cd1c0b0001715749', 'foo bar qux', NULL, 0, 'page', 'draft', NULL, 'public', 'all', '2023-09-25 21:30:42', '1', '2023-09-25 21:30:50', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `posts_authors` --- - -CREATE TABLE `posts_authors` ( - `id` varchar(24) NOT NULL, - `post_id` varchar(24) NOT NULL, - `author_id` varchar(24) NOT NULL, - `sort_order` int(10) UNSIGNED NOT NULL DEFAULT 0 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `posts_authors` --- - -INSERT INTO `posts_authors` (`id`, `post_id`, `author_id`, `sort_order`) VALUES -('6511f58b6740bf0001d1410e', '6511f58b6740bf0001d1410d', '1', 0), -('6511f58b6740bf0001d14110', '6511f58b6740bf0001d1410f', '1', 0), -('6511fc02cd1c0b000171574a', '6511fc02cd1c0b0001715749', '1', 0); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `posts_meta` --- - -CREATE TABLE `posts_meta` ( - `id` varchar(24) NOT NULL, - `post_id` varchar(24) NOT NULL, - `og_image` varchar(2000) DEFAULT NULL, - `og_title` varchar(300) DEFAULT NULL, - `og_description` varchar(500) DEFAULT NULL, - `twitter_image` varchar(2000) DEFAULT NULL, - `twitter_title` varchar(300) DEFAULT NULL, - `twitter_description` varchar(500) DEFAULT NULL, - `meta_title` varchar(2000) DEFAULT NULL, - `meta_description` varchar(2000) DEFAULT NULL, - `email_subject` varchar(300) DEFAULT NULL, - `frontmatter` text DEFAULT NULL, - `feature_image_alt` varchar(191) DEFAULT NULL, - `feature_image_caption` text DEFAULT NULL, - `email_only` tinyint(1) NOT NULL DEFAULT 0 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `posts_products` --- - -CREATE TABLE `posts_products` ( - `id` varchar(24) NOT NULL, - `post_id` varchar(24) NOT NULL, - `product_id` varchar(24) NOT NULL, - `sort_order` int(10) UNSIGNED NOT NULL DEFAULT 0 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `posts_products` --- - -INSERT INTO `posts_products` (`id`, `post_id`, `product_id`, `sort_order`) VALUES -('6511fc0acd1c0b000171574d', '6511fc02cd1c0b0001715749', '6511f58a6740bf0001d140a1', 0), -('6511fc0acd1c0b000171574e', '6511fc02cd1c0b0001715749', '6511f58a6740bf0001d140a2', 1); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `posts_tags` --- - -CREATE TABLE `posts_tags` ( - `id` varchar(24) NOT NULL, - `post_id` varchar(24) NOT NULL, - `tag_id` varchar(24) NOT NULL, - `sort_order` int(10) UNSIGNED NOT NULL DEFAULT 0 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `posts_tags` --- - -INSERT INTO `posts_tags` (`id`, `post_id`, `tag_id`, `sort_order`) VALUES -('6511f58b6740bf0001d14211', '6511f58b6740bf0001d1410d', '6511f58a6740bf0001d140a4', 0); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `post_revisions` --- - -CREATE TABLE `post_revisions` ( - `id` varchar(24) NOT NULL, - `post_id` varchar(24) NOT NULL, - `lexical` longtext DEFAULT NULL, - `created_at_ts` bigint(20) NOT NULL, - `created_at` datetime NOT NULL, - `author_id` varchar(24) DEFAULT NULL, - `title` varchar(2000) DEFAULT NULL, - `post_status` varchar(50) DEFAULT 'draft', - `reason` varchar(50) DEFAULT NULL, - `feature_image` varchar(2000) DEFAULT NULL, - `feature_image_caption` text DEFAULT NULL, - `feature_image_alt` varchar(191) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `products` --- - -CREATE TABLE `products` ( - `id` varchar(24) NOT NULL, - `name` varchar(191) NOT NULL, - `slug` varchar(191) NOT NULL, - `active` tinyint(1) NOT NULL DEFAULT 1, - `welcome_page_url` varchar(2000) DEFAULT NULL, - `visibility` varchar(50) NOT NULL DEFAULT 'none', - `monthly_price_id` varchar(24) DEFAULT NULL, - `yearly_price_id` varchar(24) DEFAULT NULL, - `description` varchar(191) DEFAULT NULL, - `type` varchar(50) NOT NULL DEFAULT 'paid', - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL, - `trial_days` int(10) UNSIGNED NOT NULL DEFAULT 0, - `monthly_price` int(10) UNSIGNED DEFAULT NULL, - `yearly_price` int(10) UNSIGNED DEFAULT NULL, - `currency` varchar(50) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `products` --- - -INSERT INTO `products` (`id`, `name`, `slug`, `active`, `welcome_page_url`, `visibility`, `monthly_price_id`, `yearly_price_id`, `description`, `type`, `created_at`, `updated_at`, `trial_days`, `monthly_price`, `yearly_price`, `currency`) VALUES -('6511f58a6740bf0001d140a1', 'Free', 'free', 1, NULL, 'public', NULL, NULL, NULL, 'free', '2023-09-25 21:03:06', '2023-09-25 21:03:06', 0, NULL, NULL, NULL), -('6511f58a6740bf0001d140a2', 'cscherr Blog', 'default-product', 1, NULL, 'public', NULL, NULL, NULL, 'paid', '2023-09-25 21:03:06', '2023-09-25 21:11:16', 0, 500, 5000, 'usd'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `products_benefits` --- - -CREATE TABLE `products_benefits` ( - `id` varchar(24) NOT NULL, - `product_id` varchar(24) NOT NULL, - `benefit_id` varchar(24) NOT NULL, - `sort_order` int(10) UNSIGNED NOT NULL DEFAULT 0 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `recommendations` --- - -CREATE TABLE `recommendations` ( - `id` varchar(24) NOT NULL, - `url` varchar(2000) NOT NULL, - `title` varchar(2000) NOT NULL, - `excerpt` varchar(2000) DEFAULT NULL, - `featured_image` varchar(2000) DEFAULT NULL, - `favicon` varchar(2000) DEFAULT NULL, - `reason` varchar(2000) DEFAULT NULL, - `one_click_subscribe` tinyint(1) NOT NULL DEFAULT 0, - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `recommendation_click_events` --- - -CREATE TABLE `recommendation_click_events` ( - `id` varchar(24) NOT NULL, - `recommendation_id` varchar(24) NOT NULL, - `member_id` varchar(24) DEFAULT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `recommendation_subscribe_events` --- - -CREATE TABLE `recommendation_subscribe_events` ( - `id` varchar(24) NOT NULL, - `recommendation_id` varchar(24) NOT NULL, - `member_id` varchar(24) DEFAULT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `redirects` --- - -CREATE TABLE `redirects` ( - `id` varchar(24) NOT NULL, - `from` varchar(2000) NOT NULL, - `to` varchar(2000) NOT NULL, - `post_id` varchar(24) DEFAULT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `roles` --- - -CREATE TABLE `roles` ( - `id` varchar(24) NOT NULL, - `name` varchar(50) NOT NULL, - `description` varchar(2000) DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `roles` --- - -INSERT INTO `roles` (`id`, `name`, `description`, `created_at`, `created_by`, `updated_at`, `updated_by`) VALUES -('6511f58a6740bf0001d140a5', 'Administrator', 'Administrators', '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140a6', 'Editor', 'Editors', '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140a7', 'Author', 'Authors', '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140a8', 'Contributor', 'Contributors', '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140a9', 'Owner', 'Blog Owner', '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140aa', 'Admin Integration', 'External Apps', '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140ab', 'DB Backup Integration', 'Internal DB Backup Client', '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f58a6740bf0001d140ac', 'Scheduler Integration', 'Internal Scheduler Client', '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'), -('6511f844cd1c0b00017156cc', 'Ghost Explore Integration', 'Internal Integration for the Ghost Explore directory', '2023-09-25 21:14:44', '1', NULL, NULL), -('6511f846cd1c0b00017156e8', 'Self-Serve Migration Integration', 'Core Integration for the Ghost Explore directory', '2023-09-25 21:14:46', '1', NULL, NULL); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `roles_users` --- - -CREATE TABLE `roles_users` ( - `id` varchar(24) NOT NULL, - `role_id` varchar(24) NOT NULL, - `user_id` varchar(24) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `roles_users` --- - -INSERT INTO `roles_users` (`id`, `role_id`, `user_id`) VALUES -('6511f58b6740bf0001d14212', '6511f58a6740bf0001d140a9', '1'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `sessions` --- - -CREATE TABLE `sessions` ( - `id` varchar(24) NOT NULL, - `session_id` varchar(32) NOT NULL, - `user_id` varchar(24) NOT NULL, - `session_data` varchar(2000) NOT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `sessions` --- - -INSERT INTO `sessions` (`id`, `session_id`, `user_id`, `session_data`, `created_at`, `updated_at`) VALUES -('6511f774fcc22500013e6093', 'qu4Vs1MtAzDdkku6fwCdrQC97aTUpdA-', '1', '{\"cookie\":{\"originalMaxAge\":15768000000,\"expires\":\"2024-03-26T09:11:16.662Z\",\"secure\":false,\"httpOnly\":true,\"path\":\"/ghost\",\"sameSite\":\"lax\"},\"user_id\":\"1\",\"origin\":\"http://localhost:8081\",\"user_agent\":\"Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/117.0\",\"ip\":\"172.27.0.1\"}', '2023-09-25 21:11:16', '2023-09-25 21:11:16'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `settings` --- - -CREATE TABLE `settings` ( - `id` varchar(24) NOT NULL, - `group` varchar(50) NOT NULL DEFAULT 'core', - `key` varchar(50) NOT NULL, - `value` text DEFAULT NULL, - `type` varchar(50) NOT NULL, - `flags` varchar(50) DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `settings` --- - -INSERT INTO `settings` (`id`, `group`, `key`, `value`, `type`, `flags`, `created_at`, `created_by`, `updated_at`, `updated_by`) VALUES -('6511f58c6740bf0001d14213', 'core', 'db_hash', 'd1f645cf-5585-481b-91ac-6838470ed10f', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14214', 'core', 'routes_hash', '3d180d52c663d173a6be791ef411ed01', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14215', 'core', 'next_update_check', '1695762464', 'number', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:07:44', '1'), -('6511f58c6740bf0001d14216', 'core', 'notifications', '[{\"dismissible\":true,\"location\":\"bottom\",\"status\":\"alert\",\"id\":\"130f7c24-113a-4768-a698-12a8b3422e81\",\"createdAtVersion\":\"4.48.9\",\"custom\":true,\"createdAt\":\"2022-05-26T17:12:51.000Z\",\"type\":\"info\",\"top\":true,\"message\":\"Ghost 5.0 is now available - You are using an old version of Ghost, which means you don\'t have access to the latest features. Read more!\",\"seen\":false,\"addedAt\":\"2023-09-25T21:07:44.536Z\"},{\"dismissible\":true,\"location\":\"bottom\",\"status\":\"alert\",\"id\":\"6511f775fcc22500013e6094\",\"createdAtVersion\":\"4.48.9\",\"type\":\"warn\",\"message\":\"Ghost is currently unable to send email. See https://ghost.org/docs/concepts/config/#mail for instructions.\",\"seen\":false,\"addedAt\":\"2023-09-25T21:11:17.195Z\"}]', 'array', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:11:17', '1'), -('6511f58c6740bf0001d14217', 'core', 'version_notifications', '[]', 'array', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14218', 'core', 'admin_session_secret', '6a6ebd1303050e46856d16fa094d754a19373afb4ab0d6e54c2acd1c379ae3bd', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14219', 'core', 'theme_session_secret', '1798fc87f3662244208673217985c9b951371f0f7c98d4580bcc5be265fc37f1', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1421a', 'core', 'ghost_public_key', '-----BEGIN RSA PUBLIC KEY-----\nMIGJAoGBAIukDOu3DZaPpECFs75aVG1ycwyRlBk49V7PIcvX8PXDzQ7OCsCF7FFgJQvlg3Kc\nz2vIF4gtSKRU66aBC+T5rJyfj2y5kvi7oVS+5h679tocdpuCfaC7ir//lOt7QdYRGUL4cYWA\nFEGTEdPufgxuJ/JyWc+GIk/EDiWGX95IkUJxAgMBAAE=\n-----END RSA PUBLIC KEY-----\n', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1421b', 'core', 'ghost_private_key', '-----BEGIN RSA PRIVATE KEY-----\nMIICWwIBAAKBgQCLpAzrtw2Wj6RAhbO+WlRtcnMMkZQZOPVezyHL1/D1w80OzgrAhexRYCUL\n5YNynM9ryBeILUikVOumgQvk+aycn49suZL4u6FUvuYeu/baHHabgn2gu4q//5Tre0HWERlC\n+HGFgBRBkxHT7n4MbifyclnPhiJPxA4lhl/eSJFCcQIDAQABAoGARPvuRiRQWijsA9QJT+hf\n/RGlNHhWqX8x+HxrPcCYEVGBY+b1+NYwQKM2qgHgRiahcaWPun5kfIpXQBJQRfXyB1LGA4NE\naxYrrt8YeYQSWOgSJnZUwYBTwWfbTijuV75bTFDpSKCPmwUHrnBDXjzFwpiglG//p9BTYrhp\nKUZs2IECQQDIzxKKRENGhljxXHgapZFV2ZcVSaMm9WrVZX59a2rYmHu0OsF1IvuOPBXfUTgH\n6DU+EZIzOM9iuN+7BHEnoWQ9AkEAsgUwbNtXb/3ISjjN0Dk1FXhnOtNFt1U9ajohvuy+PVmJ\nv2TN9Z+EetnDb8D9IrjxqCS2ZIdD6CvQvUiP/IQWRQJASk2k9JiRtDTeEGFA58s/3d5nsy7O\nOgoxf8jQZyQqIv85NtVO5EMPhe/hwAJTk0lu+gqSaHWq90KlNpRMMnfbmQJAT6HKm6cyYcJg\nSfNG/ZHZkRUe+E1xriTPKCmA1usH3mGjIJ5zEyCcHmgy6Fan5VRdpR1nCWkIk16mLUW8QvTD\nEQJANJwtnLZHwHTo1wgjA1uQelp51YLn9yjbQ5Df/7dMaO9sMYxMM/3JJipVzd9veS/DUw1O\nifVgOQb/9B5emyKJaw==\n-----END RSA PRIVATE KEY-----\n', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1421c', 'core', 'members_public_key', '-----BEGIN RSA PUBLIC KEY-----\nMIGJAoGBAMImjUMRGOYJfiP0gZ8VXUZTdeMl/27wZ7y3NnFziKC8FazDWnOvFIiXmuMh2Dx5\nmJ81Hesc6EEujJP+ofkw7AIlyV2qYWtWB/0ESNt9OgblfbUJ3M8u6jkDHziShsmzbvABD5h2\nmXu2Y0+gmbvsFWMOpuG1s/twu5Rc71uwPuQLAgMBAAE=\n-----END RSA PUBLIC KEY-----\n', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1421d', 'core', 'members_private_key', '-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDCJo1DERjmCX4j9IGfFV1GU3XjJf9u8Ge8tzZxc4igvBWsw1pzrxSIl5rj\nIdg8eZifNR3rHOhBLoyT/qH5MOwCJcldqmFrVgf9BEjbfToG5X21CdzPLuo5Ax84kobJs27w\nAQ+Ydpl7tmNPoJm77BVjDqbhtbP7cLuUXO9bsD7kCwIDAQABAoGAabro7v8emhfNU/NRq7rM\nwwGsj3kf8+CD/eeghIQwgagr/ZudZKaR/hjhxpOl2Lk3fmxE0Mc7TFP3RplCyBv2SfkmgVT6\n8AGj7MhPbu+p6j96DIUbPIGjsSPwgrkqOEnJqKgW16snk26eaKKIGHtBKrmX/jEosEXIx+tK\nt8WsilECQQD1rYc49aek00wWJSF5iPt3p0a9eRoM1il/YsqIFKCug9Rmz/2oH8cYal6wZwor\nzhkN3SlhONqzD4YmqkcLLPx3AkEAyk7N/0Fonwe+K2/6zmtwjoAy07NM8q22X2pEVwumPkXp\ny76yC/PP+RkJuJME0VLhbnEX76rCh2is9isfHUj+DQJBAMNNjrjOONZEDzFvlRvrtJTbStYn\nJnlb6yNUYtMpKs9xB3IwGGMF2B1luh6b2y8VqT8nONUMAHfmeGvWY6HTwmMCQFAhYopl9/B1\neqdt1SOJfq2SrY8Yh7PfhkrIpoTrwk8MFgxzXcZKLef2ONl4sgHPGCdMeDSfqClGFqvybIKG\n9MkCQFbRN5gF4fDQ+iyaStFgONhlLuv+ICXLCLiiEzyToPe6XiYAyDx0Tf0X3lEyCDii60fl\n5Fu18LSD+ozMLQV52PE=\n-----END RSA PRIVATE KEY-----\n', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1421e', 'core', 'members_email_auth_secret', '7dfb987128b9be01e41c162f2df36ff905ad3a8974f2be404b6c2be0757942ff33f884c3bc459bdc5aee4d21f0c0fc2d6835ee9bae4988a11556ae5483577739', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1421f', 'core', 'members_stripe_webhook_id', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14220', 'core', 'members_stripe_webhook_secret', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14221', 'site', 'title', 'cscherr Blog', 'string', 'PUBLIC', '2023-09-25 21:03:08', '1', '2023-09-25 21:11:16', '1'), -('6511f58c6740bf0001d14222', 'site', 'description', 'Technology, Open-Source Software, Cybersecurity.', 'string', 'PUBLIC', '2023-09-25 21:03:08', '1', '2023-09-25 21:29:54', '1'), -('6511f58c6740bf0001d14223', 'site', 'logo', '', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14224', 'site', 'cover_image', '__GHOST_URL__/content/images/2023/09/The_Great_Wave_off_Kanagawa-original-3.jpg', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:24:38', '1'), -('6511f58c6740bf0001d14225', 'site', 'icon', '__GHOST_URL__/content/images/2023/09/new-PB--wide-margin-.png', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:21:05', '1'), -('6511f58c6740bf0001d14226', 'site', 'accent_color', '#ff7800', 'string', 'PUBLIC', '2023-09-25 21:03:08', '1', '2023-09-25 21:21:05', '1'), -('6511f58c6740bf0001d14227', 'site', 'locale', 'en', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14228', 'site', 'timezone', 'Europe/Amsterdam', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:13:36', '1'), -('6511f58c6740bf0001d14229', 'site', 'codeinjection_head', '', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1422a', 'site', 'codeinjection_foot', '', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1422b', 'site', 'facebook', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:13:36', '1'), -('6511f58c6740bf0001d1422c', 'site', 'twitter', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:13:36', '1'), -('6511f58c6740bf0001d1422d', 'site', 'navigation', '[{\"label\":\"Home\",\"url\":\"/\"},{\"label\":\"About\",\"url\":\"/about/\"}]', 'array', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1422e', 'site', 'secondary_navigation', '[{\"label\":\"Sign up\",\"url\":\"#/portal/\"}]', 'array', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1422f', 'site', 'meta_title', 'Personal Blog of Christoph J. Scherr', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:13:36', '1'), -('6511f58c6740bf0001d14230', 'site', 'meta_description', 'Technology, Open-Source Software, Cybersecurity.', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:13:36', '1'), -('6511f58c6740bf0001d14231', 'site', 'og_image', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14232', 'site', 'og_title', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14233', 'site', 'og_description', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14234', 'site', 'twitter_image', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14235', 'site', 'twitter_title', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14236', 'site', 'twitter_description', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14237', 'theme', 'active_theme', 'casper', 'string', 'RO', '2023-09-25 21:03:08', '1', '2023-09-25 21:25:51', '1'), -('6511f58c6740bf0001d14238', 'private', 'is_private', 'false', 'boolean', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14239', 'private', 'password', '', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1423a', 'private', 'public_hash', '0eb3d21de543d2e5a2e6300c5a3c24', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1423b', 'members', 'default_content_visibility', 'public', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1423c', 'members', 'default_content_visibility_tiers', '[]', 'array', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1423d', 'members', 'members_signup_access', 'all', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1423f', 'members', 'members_support_address', 'noreply', 'string', 'PUBLIC,RO', '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14244', 'members', 'stripe_secret_key', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14245', 'members', 'stripe_publishable_key', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14246', 'members', 'stripe_plans', '[]', 'array', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14247', 'members', 'stripe_connect_publishable_key', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14248', 'members', 'stripe_connect_secret_key', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14249', 'members', 'stripe_connect_livemode', NULL, 'boolean', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1424a', 'members', 'stripe_connect_display_name', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1424b', 'members', 'stripe_connect_account_id', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1424e', 'members', 'members_monthly_price_id', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1424f', 'members', 'members_yearly_price_id', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14250', 'portal', 'portal_name', 'true', 'boolean', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14251', 'portal', 'portal_button', 'true', 'boolean', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14252', 'portal', 'portal_plans', '[\"free\"]', 'array', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14253', 'portal', 'portal_products', '[]', 'array', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14254', 'portal', 'portal_button_style', 'icon-and-text', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14255', 'portal', 'portal_button_icon', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14256', 'portal', 'portal_button_signup_text', 'Subscribe', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14257', 'email', 'mailgun_domain', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14258', 'email', 'mailgun_api_key', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14259', 'email', 'mailgun_base_url', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1425a', 'email', 'email_track_opens', 'false', 'boolean', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:26:56', '1'), -('6511f58c6740bf0001d1425b', 'email', 'email_verification_required', 'false', 'boolean', 'RO', '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1425c', 'amp', 'amp', 'false', 'boolean', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1425d', 'amp', 'amp_gtag_id', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1425e', 'firstpromoter', 'firstpromoter', 'false', 'boolean', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d1425f', 'firstpromoter', 'firstpromoter_id', NULL, 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14260', 'labs', 'labs', '{}', 'object', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14261', 'slack', 'slack_url', '', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:13:36', '1'), -('6511f58c6740bf0001d14262', 'slack', 'slack_username', 'Ghost', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:13:36', '1'), -('6511f58c6740bf0001d14263', 'unsplash', 'unsplash', 'true', 'boolean', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14264', 'views', 'shared_views', '[]', 'array', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14270', 'editor', 'editor_default_email_recipients', 'visibility', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f58c6740bf0001d14271', 'editor', 'editor_default_email_recipients_filter', 'all', 'string', NULL, '2023-09-25 21:03:08', '1', '2023-09-25 21:03:08', '1'), -('6511f844cd1c0b00017156cb', 'comments', 'comments_enabled', 'off', 'string', NULL, '2023-09-25 21:14:44', '1', NULL, NULL), -('6511f845cd1c0b00017156d6', 'email', 'email_track_clicks', 'false', 'boolean', NULL, '2023-09-25 21:14:45', '1', '2023-09-25 21:26:56', '1'), -('6511f845cd1c0b00017156dd', 'members', 'members_track_sources', 'true', 'boolean', NULL, '2023-09-25 21:14:45', '1', NULL, NULL), -('6511f845cd1c0b00017156e3', 'analytics', 'outbound_link_tagging', 'false', 'boolean', NULL, '2023-09-25 21:14:45', '1', '2023-09-25 21:26:56', '1'), -('6511f846cd1c0b00017156e7', 'core', 'last_mentions_report_email_timestamp', NULL, 'number', NULL, '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b00017156ee', 'portal', 'portal_signup_terms_html', NULL, 'string', NULL, '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b00017156ef', 'portal', 'portal_signup_checkbox_required', 'false', 'boolean', NULL, '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b00017156f0', 'announcement', 'announcement_content', NULL, 'string', 'PUBLIC', '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b00017156f1', 'announcement', 'announcement_background', 'dark', 'string', 'PUBLIC', '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b00017156f2', 'pintura', 'pintura', 'true', 'boolean', NULL, '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b00017156f3', 'pintura', 'pintura_js_url', NULL, 'string', NULL, '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b00017156f4', 'pintura', 'pintura_css_url', NULL, 'string', NULL, '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b00017156f5', 'announcement', 'announcement_visibility', '[]', 'array', NULL, '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b0001715712', 'donations', 'donations_currency', 'USD', 'string', NULL, '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b0001715713', 'donations', 'donations_suggested_amount', '0', 'number', NULL, '2023-09-25 21:14:46', '1', NULL, NULL), -('6511f846cd1c0b0001715729', 'recommendations', 'recommendations_enabled', 'false', 'boolean', NULL, '2023-09-25 21:14:46', '1', NULL, NULL); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `snippets` --- - -CREATE TABLE `snippets` ( - `id` varchar(24) NOT NULL, - `name` varchar(191) NOT NULL, - `mobiledoc` longtext NOT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL, - `lexical` longtext DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `stripe_prices` --- - -CREATE TABLE `stripe_prices` ( - `id` varchar(24) NOT NULL, - `stripe_price_id` varchar(255) NOT NULL, - `stripe_product_id` varchar(255) NOT NULL, - `active` tinyint(1) NOT NULL, - `nickname` varchar(50) DEFAULT NULL, - `currency` varchar(191) NOT NULL, - `amount` int(11) NOT NULL, - `type` varchar(50) NOT NULL DEFAULT 'recurring', - `interval` varchar(50) DEFAULT NULL, - `description` varchar(191) DEFAULT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `stripe_products` --- - -CREATE TABLE `stripe_products` ( - `id` varchar(24) NOT NULL, - `product_id` varchar(24) DEFAULT NULL, - `stripe_product_id` varchar(255) NOT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `subscriptions` --- - -CREATE TABLE `subscriptions` ( - `id` varchar(24) NOT NULL, - `type` varchar(50) NOT NULL, - `status` varchar(50) NOT NULL, - `member_id` varchar(24) NOT NULL, - `tier_id` varchar(24) NOT NULL, - `cadence` varchar(50) DEFAULT NULL, - `currency` varchar(50) DEFAULT NULL, - `amount` int(11) DEFAULT NULL, - `payment_provider` varchar(50) DEFAULT NULL, - `payment_subscription_url` varchar(2000) DEFAULT NULL, - `payment_user_url` varchar(2000) DEFAULT NULL, - `offer_id` varchar(24) DEFAULT NULL, - `expires_at` datetime DEFAULT NULL, - `created_at` datetime NOT NULL, - `updated_at` datetime DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `suppressions` --- - -CREATE TABLE `suppressions` ( - `id` varchar(24) NOT NULL, - `email` varchar(191) NOT NULL, - `email_id` varchar(24) DEFAULT NULL, - `reason` varchar(50) NOT NULL, - `created_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `tags` --- - -CREATE TABLE `tags` ( - `id` varchar(24) NOT NULL, - `name` varchar(191) NOT NULL, - `slug` varchar(191) NOT NULL, - `description` text DEFAULT NULL, - `feature_image` varchar(2000) DEFAULT NULL, - `parent_id` varchar(191) DEFAULT NULL, - `visibility` varchar(50) NOT NULL DEFAULT 'public', - `og_image` varchar(2000) DEFAULT NULL, - `og_title` varchar(300) DEFAULT NULL, - `og_description` varchar(500) DEFAULT NULL, - `twitter_image` varchar(2000) DEFAULT NULL, - `twitter_title` varchar(300) DEFAULT NULL, - `twitter_description` varchar(500) DEFAULT NULL, - `meta_title` varchar(2000) DEFAULT NULL, - `meta_description` varchar(2000) DEFAULT NULL, - `codeinjection_head` text DEFAULT NULL, - `codeinjection_foot` text DEFAULT NULL, - `canonical_url` varchar(2000) DEFAULT NULL, - `accent_color` varchar(50) DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `tags` --- - -INSERT INTO `tags` (`id`, `name`, `slug`, `description`, `feature_image`, `parent_id`, `visibility`, `og_image`, `og_title`, `og_description`, `twitter_image`, `twitter_title`, `twitter_description`, `meta_title`, `meta_description`, `codeinjection_head`, `codeinjection_foot`, `canonical_url`, `accent_color`, `created_at`, `created_by`, `updated_at`, `updated_by`) VALUES -('6511f58a6740bf0001d140a4', 'News', 'news', NULL, NULL, NULL, 'public', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-09-25 21:03:06', '1', '2023-09-25 21:03:06', '1'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `temp_mail_events` --- - -CREATE TABLE `temp_mail_events` ( - `id` varchar(100) NOT NULL, - `type` varchar(50) NOT NULL, - `message_id` varchar(150) NOT NULL, - `recipient` varchar(191) NOT NULL, - `occurred_at` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `tokens` --- - -CREATE TABLE `tokens` ( - `id` varchar(24) NOT NULL, - `token` varchar(32) NOT NULL, - `data` varchar(2000) DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `first_used_at` datetime DEFAULT NULL, - `used_count` int(10) UNSIGNED NOT NULL DEFAULT 0 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `tokens` --- - -INSERT INTO `tokens` (`id`, `token`, `data`, `created_at`, `created_by`, `updated_at`, `first_used_at`, `used_count`) VALUES -('6511f6b8fcc22500013e608e', 'KcrdAk9K3NU4q5VKlrCSgQIle4Mv9dE3', '{\"email\":\"admin@cscherr.de\",\"name\":\"admin\"}', '2023-09-25 21:08:08', '6511f6b8fcc22500013e608e', NULL, NULL, 0); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `users` --- - -CREATE TABLE `users` ( - `id` varchar(24) NOT NULL, - `name` varchar(191) NOT NULL, - `slug` varchar(191) NOT NULL, - `password` varchar(60) NOT NULL, - `email` varchar(191) NOT NULL, - `profile_image` varchar(2000) DEFAULT NULL, - `cover_image` varchar(2000) DEFAULT NULL, - `bio` text DEFAULT NULL, - `website` varchar(2000) DEFAULT NULL, - `location` text DEFAULT NULL, - `facebook` varchar(2000) DEFAULT NULL, - `twitter` varchar(2000) DEFAULT NULL, - `accessibility` text DEFAULT NULL, - `status` varchar(50) NOT NULL DEFAULT 'active', - `locale` varchar(6) DEFAULT NULL, - `visibility` varchar(50) NOT NULL DEFAULT 'public', - `meta_title` varchar(2000) DEFAULT NULL, - `meta_description` varchar(2000) DEFAULT NULL, - `tour` text DEFAULT NULL, - `last_seen` datetime DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL, - `comment_notifications` tinyint(1) NOT NULL DEFAULT 1, - `free_member_signup_notification` tinyint(1) NOT NULL DEFAULT 1, - `paid_subscription_canceled_notification` tinyint(1) NOT NULL DEFAULT 0, - `paid_subscription_started_notification` tinyint(1) NOT NULL DEFAULT 1, - `mention_notifications` tinyint(1) NOT NULL DEFAULT 1, - `milestone_notifications` tinyint(1) NOT NULL DEFAULT 1, - `donation_notifications` tinyint(1) NOT NULL DEFAULT 1 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `users` --- - -INSERT INTO `users` (`id`, `name`, `slug`, `password`, `email`, `profile_image`, `cover_image`, `bio`, `website`, `location`, `facebook`, `twitter`, `accessibility`, `status`, `locale`, `visibility`, `meta_title`, `meta_description`, `tour`, `last_seen`, `created_at`, `created_by`, `updated_at`, `updated_by`, `comment_notifications`, `free_member_signup_notification`, `paid_subscription_canceled_notification`, `paid_subscription_started_notification`, `mention_notifications`, `milestone_notifications`, `donation_notifications`) VALUES -('1', 'Christoph J. Scherr', 'christoph', '$2a$10$ugGf8ugWBgKOUXL39oT15./jmTQJRZDtYEr6aX4swILDUBle4pDWq', 'contact@cscherr.de', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '{\"nightShift\":true}', 'active', NULL, 'public', NULL, NULL, NULL, '2023-09-25 21:11:16', '2023-09-25 21:03:06', '1', '2023-09-25 21:16:27', '1', 1, 1, 0, 1, 1, 1, 1); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `webhooks` --- - -CREATE TABLE `webhooks` ( - `id` varchar(24) NOT NULL, - `event` varchar(50) NOT NULL, - `target_url` varchar(2000) NOT NULL, - `name` varchar(191) DEFAULT NULL, - `secret` varchar(191) DEFAULT NULL, - `api_version` varchar(50) NOT NULL DEFAULT 'v2', - `integration_id` varchar(24) NOT NULL, - `last_triggered_at` datetime DEFAULT NULL, - `last_triggered_status` varchar(50) DEFAULT NULL, - `last_triggered_error` varchar(50) DEFAULT NULL, - `created_at` datetime NOT NULL, - `created_by` varchar(24) NOT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(24) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Indizes der exportierten Tabellen --- - --- --- Indizes für die Tabelle `actions` --- -ALTER TABLE `actions` - ADD PRIMARY KEY (`id`); - --- --- Indizes für die Tabelle `api_keys` --- -ALTER TABLE `api_keys` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `api_keys_secret_unique` (`secret`); - --- --- Indizes für die Tabelle `benefits` --- -ALTER TABLE `benefits` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `benefits_slug_unique` (`slug`); - --- --- Indizes für die Tabelle `brute` --- -ALTER TABLE `brute` - ADD PRIMARY KEY (`key`); - --- --- Indizes für die Tabelle `collections` --- -ALTER TABLE `collections` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `collections_slug_unique` (`slug`); - --- --- Indizes für die Tabelle `collections_posts` --- -ALTER TABLE `collections_posts` - ADD PRIMARY KEY (`id`), - ADD KEY `collections_posts_collection_id_foreign` (`collection_id`), - ADD KEY `collections_posts_post_id_foreign` (`post_id`); - --- --- Indizes für die Tabelle `comments` --- -ALTER TABLE `comments` - ADD PRIMARY KEY (`id`), - ADD KEY `comments_post_id_foreign` (`post_id`), - ADD KEY `comments_member_id_foreign` (`member_id`), - ADD KEY `comments_parent_id_foreign` (`parent_id`); - --- --- Indizes für die Tabelle `comment_likes` --- -ALTER TABLE `comment_likes` - ADD PRIMARY KEY (`id`), - ADD KEY `comment_likes_comment_id_foreign` (`comment_id`), - ADD KEY `comment_likes_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `comment_reports` --- -ALTER TABLE `comment_reports` - ADD PRIMARY KEY (`id`), - ADD KEY `comment_reports_comment_id_foreign` (`comment_id`), - ADD KEY `comment_reports_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `custom_theme_settings` --- -ALTER TABLE `custom_theme_settings` - ADD PRIMARY KEY (`id`); - --- --- Indizes für die Tabelle `donation_payment_events` --- -ALTER TABLE `donation_payment_events` - ADD PRIMARY KEY (`id`), - ADD KEY `donation_payment_events_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `emails` --- -ALTER TABLE `emails` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `emails_post_id_unique` (`post_id`), - ADD KEY `emails_post_id_index` (`post_id`), - ADD KEY `emails_newsletter_id_foreign` (`newsletter_id`); - --- --- Indizes für die Tabelle `email_batches` --- -ALTER TABLE `email_batches` - ADD PRIMARY KEY (`id`), - ADD KEY `email_batches_email_id_foreign` (`email_id`); - --- --- Indizes für die Tabelle `email_recipients` --- -ALTER TABLE `email_recipients` - ADD PRIMARY KEY (`id`), - ADD KEY `email_recipients_member_id_index` (`member_id`), - ADD KEY `email_recipients_batch_id_foreign` (`batch_id`), - ADD KEY `email_recipients_delivered_at_index` (`delivered_at`), - ADD KEY `email_recipients_opened_at_index` (`opened_at`), - ADD KEY `email_recipients_failed_at_index` (`failed_at`), - ADD KEY `email_recipients_email_id_member_email_index` (`email_id`,`member_email`); - --- --- Indizes für die Tabelle `email_recipient_failures` --- -ALTER TABLE `email_recipient_failures` - ADD PRIMARY KEY (`id`), - ADD KEY `email_recipient_failures_email_id_foreign` (`email_id`), - ADD KEY `email_recipient_failures_email_recipient_id_foreign` (`email_recipient_id`); - --- --- Indizes für die Tabelle `email_spam_complaint_events` --- -ALTER TABLE `email_spam_complaint_events` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `email_spam_complaint_events_email_id_member_id_unique` (`email_id`,`member_id`), - ADD KEY `email_spam_complaint_events_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `integrations` --- -ALTER TABLE `integrations` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `integrations_slug_unique` (`slug`); - --- --- Indizes für die Tabelle `invites` --- -ALTER TABLE `invites` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `invites_token_unique` (`token`), - ADD UNIQUE KEY `invites_email_unique` (`email`); - --- --- Indizes für die Tabelle `jobs` --- -ALTER TABLE `jobs` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `jobs_name_unique` (`name`); - --- --- Indizes für die Tabelle `labels` --- -ALTER TABLE `labels` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `labels_name_unique` (`name`), - ADD UNIQUE KEY `labels_slug_unique` (`slug`); - --- --- Indizes für die Tabelle `members` --- -ALTER TABLE `members` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `members_email_unique` (`email`), - ADD UNIQUE KEY `members_uuid_unique` (`uuid`), - ADD KEY `members_email_open_rate_index` (`email_open_rate`); - --- --- Indizes für die Tabelle `members_cancel_events` --- -ALTER TABLE `members_cancel_events` - ADD PRIMARY KEY (`id`), - ADD KEY `members_cancel_events_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `members_click_events` --- -ALTER TABLE `members_click_events` - ADD PRIMARY KEY (`id`), - ADD KEY `members_click_events_member_id_foreign` (`member_id`), - ADD KEY `members_click_events_redirect_id_foreign` (`redirect_id`); - --- --- Indizes für die Tabelle `members_created_events` --- -ALTER TABLE `members_created_events` - ADD PRIMARY KEY (`id`), - ADD KEY `members_created_events_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `members_email_change_events` --- -ALTER TABLE `members_email_change_events` - ADD PRIMARY KEY (`id`), - ADD KEY `members_email_change_events_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `members_feedback` --- -ALTER TABLE `members_feedback` - ADD PRIMARY KEY (`id`), - ADD KEY `members_feedback_member_id_foreign` (`member_id`), - ADD KEY `members_feedback_post_id_foreign` (`post_id`); - --- --- Indizes für die Tabelle `members_labels` --- -ALTER TABLE `members_labels` - ADD PRIMARY KEY (`id`), - ADD KEY `members_labels_member_id_foreign` (`member_id`), - ADD KEY `members_labels_label_id_foreign` (`label_id`); - --- --- Indizes für die Tabelle `members_login_events` --- -ALTER TABLE `members_login_events` - ADD PRIMARY KEY (`id`), - ADD KEY `members_login_events_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `members_newsletters` --- -ALTER TABLE `members_newsletters` - ADD PRIMARY KEY (`id`), - ADD KEY `members_newsletters_member_id_foreign` (`member_id`), - ADD KEY `members_newsletters_newsletter_id_foreign` (`newsletter_id`); - --- --- Indizes für die Tabelle `members_paid_subscription_events` --- -ALTER TABLE `members_paid_subscription_events` - ADD PRIMARY KEY (`id`), - ADD KEY `members_paid_subscription_events_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `members_payment_events` --- -ALTER TABLE `members_payment_events` - ADD PRIMARY KEY (`id`), - ADD KEY `members_payment_events_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `members_products` --- -ALTER TABLE `members_products` - ADD PRIMARY KEY (`id`), - ADD KEY `members_products_member_id_foreign` (`member_id`), - ADD KEY `members_products_product_id_foreign` (`product_id`); - --- --- Indizes für die Tabelle `members_product_events` --- -ALTER TABLE `members_product_events` - ADD PRIMARY KEY (`id`), - ADD KEY `members_product_events_member_id_foreign` (`member_id`), - ADD KEY `members_product_events_product_id_foreign` (`product_id`); - --- --- Indizes für die Tabelle `members_status_events` --- -ALTER TABLE `members_status_events` - ADD PRIMARY KEY (`id`), - ADD KEY `members_status_events_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `members_stripe_customers` --- -ALTER TABLE `members_stripe_customers` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `members_stripe_customers_customer_id_unique` (`customer_id`), - ADD KEY `members_stripe_customers_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `members_stripe_customers_subscriptions` --- -ALTER TABLE `members_stripe_customers_subscriptions` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `members_stripe_customers_subscriptions_subscription_id_unique` (`subscription_id`), - ADD KEY `members_stripe_customers_subscriptions_customer_id_foreign` (`customer_id`), - ADD KEY `members_stripe_customers_subscriptions_stripe_price_id_index` (`stripe_price_id`), - ADD KEY `members_stripe_customers_subscriptions_offer_id_foreign` (`offer_id`), - ADD KEY `mscs_ghost_subscription_id_foreign` (`ghost_subscription_id`); - --- --- Indizes für die Tabelle `members_subscribe_events` --- -ALTER TABLE `members_subscribe_events` - ADD PRIMARY KEY (`id`), - ADD KEY `members_subscribe_events_member_id_foreign` (`member_id`), - ADD KEY `members_subscribe_events_newsletter_id_foreign` (`newsletter_id`); - --- --- Indizes für die Tabelle `members_subscription_created_events` --- -ALTER TABLE `members_subscription_created_events` - ADD PRIMARY KEY (`id`), - ADD KEY `members_subscription_created_events_member_id_foreign` (`member_id`), - ADD KEY `members_subscription_created_events_subscription_id_foreign` (`subscription_id`); - --- --- Indizes für die Tabelle `mentions` --- -ALTER TABLE `mentions` - ADD PRIMARY KEY (`id`); - --- --- Indizes für die Tabelle `migrations` --- -ALTER TABLE `migrations` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `migrations_name_version_unique` (`name`,`version`); - --- --- Indizes für die Tabelle `migrations_lock` --- -ALTER TABLE `migrations_lock` - ADD PRIMARY KEY (`lock_key`); - --- --- Indizes für die Tabelle `milestones` --- -ALTER TABLE `milestones` - ADD PRIMARY KEY (`id`); - --- --- Indizes für die Tabelle `mobiledoc_revisions` --- -ALTER TABLE `mobiledoc_revisions` - ADD PRIMARY KEY (`id`), - ADD KEY `mobiledoc_revisions_post_id_index` (`post_id`); - --- --- Indizes für die Tabelle `newsletters` --- -ALTER TABLE `newsletters` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `newsletters_uuid_unique` (`uuid`), - ADD UNIQUE KEY `newsletters_name_unique` (`name`), - ADD UNIQUE KEY `newsletters_slug_unique` (`slug`); - --- --- Indizes für die Tabelle `offers` --- -ALTER TABLE `offers` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `offers_name_unique` (`name`), - ADD UNIQUE KEY `offers_code_unique` (`code`), - ADD UNIQUE KEY `offers_stripe_coupon_id_unique` (`stripe_coupon_id`), - ADD KEY `offers_product_id_foreign` (`product_id`); - --- --- Indizes für die Tabelle `offer_redemptions` --- -ALTER TABLE `offer_redemptions` - ADD PRIMARY KEY (`id`), - ADD KEY `offer_redemptions_offer_id_foreign` (`offer_id`), - ADD KEY `offer_redemptions_member_id_foreign` (`member_id`), - ADD KEY `offer_redemptions_subscription_id_foreign` (`subscription_id`); - --- --- Indizes für die Tabelle `permissions` --- -ALTER TABLE `permissions` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `permissions_name_unique` (`name`); - --- --- Indizes für die Tabelle `permissions_roles` --- -ALTER TABLE `permissions_roles` - ADD PRIMARY KEY (`id`); - --- --- Indizes für die Tabelle `permissions_users` --- -ALTER TABLE `permissions_users` - ADD PRIMARY KEY (`id`); - --- --- Indizes für die Tabelle `posts` --- -ALTER TABLE `posts` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `posts_slug_type_unique` (`slug`,`type`), - ADD KEY `posts_newsletter_id_foreign` (`newsletter_id`), - ADD KEY `posts_published_at_index` (`published_at`); - --- --- Indizes für die Tabelle `posts_authors` --- -ALTER TABLE `posts_authors` - ADD PRIMARY KEY (`id`), - ADD KEY `posts_authors_post_id_foreign` (`post_id`), - ADD KEY `posts_authors_author_id_foreign` (`author_id`); - --- --- Indizes für die Tabelle `posts_meta` --- -ALTER TABLE `posts_meta` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `posts_meta_post_id_unique` (`post_id`); - --- --- Indizes für die Tabelle `posts_products` --- -ALTER TABLE `posts_products` - ADD PRIMARY KEY (`id`), - ADD KEY `posts_products_post_id_foreign` (`post_id`), - ADD KEY `posts_products_product_id_foreign` (`product_id`); - --- --- Indizes für die Tabelle `posts_tags` --- -ALTER TABLE `posts_tags` - ADD PRIMARY KEY (`id`), - ADD KEY `posts_tags_post_id_foreign` (`post_id`), - ADD KEY `posts_tags_tag_id_foreign` (`tag_id`); - --- --- Indizes für die Tabelle `post_revisions` --- -ALTER TABLE `post_revisions` - ADD PRIMARY KEY (`id`), - ADD KEY `post_revisions_post_id_index` (`post_id`), - ADD KEY `post_revs_author_id_foreign` (`author_id`); - --- --- Indizes für die Tabelle `products` --- -ALTER TABLE `products` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `products_slug_unique` (`slug`); - --- --- Indizes für die Tabelle `products_benefits` --- -ALTER TABLE `products_benefits` - ADD PRIMARY KEY (`id`), - ADD KEY `products_benefits_product_id_foreign` (`product_id`), - ADD KEY `products_benefits_benefit_id_foreign` (`benefit_id`); - --- --- Indizes für die Tabelle `recommendations` --- -ALTER TABLE `recommendations` - ADD PRIMARY KEY (`id`); - --- --- Indizes für die Tabelle `recommendation_click_events` --- -ALTER TABLE `recommendation_click_events` - ADD PRIMARY KEY (`id`), - ADD KEY `recommendation_click_events_recommendation_id_foreign` (`recommendation_id`), - ADD KEY `recommendation_click_events_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `recommendation_subscribe_events` --- -ALTER TABLE `recommendation_subscribe_events` - ADD PRIMARY KEY (`id`), - ADD KEY `recommendation_subscribe_events_recommendation_id_foreign` (`recommendation_id`), - ADD KEY `recommendation_subscribe_events_member_id_foreign` (`member_id`); - --- --- Indizes für die Tabelle `redirects` --- -ALTER TABLE `redirects` - ADD PRIMARY KEY (`id`), - ADD KEY `redirects_post_id_foreign` (`post_id`); - --- --- Indizes für die Tabelle `roles` --- -ALTER TABLE `roles` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `roles_name_unique` (`name`); - --- --- Indizes für die Tabelle `roles_users` --- -ALTER TABLE `roles_users` - ADD PRIMARY KEY (`id`); - --- --- Indizes für die Tabelle `sessions` --- -ALTER TABLE `sessions` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `sessions_session_id_unique` (`session_id`); - --- --- Indizes für die Tabelle `settings` --- -ALTER TABLE `settings` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `settings_key_unique` (`key`); - --- --- Indizes für die Tabelle `snippets` --- -ALTER TABLE `snippets` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `snippets_name_unique` (`name`); - --- --- Indizes für die Tabelle `stripe_prices` --- -ALTER TABLE `stripe_prices` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `stripe_prices_stripe_price_id_unique` (`stripe_price_id`), - ADD KEY `stripe_prices_stripe_product_id_foreign` (`stripe_product_id`); - --- --- Indizes für die Tabelle `stripe_products` --- -ALTER TABLE `stripe_products` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `stripe_products_stripe_product_id_unique` (`stripe_product_id`), - ADD KEY `stripe_products_product_id_foreign` (`product_id`); - --- --- Indizes für die Tabelle `subscriptions` --- -ALTER TABLE `subscriptions` - ADD PRIMARY KEY (`id`), - ADD KEY `subscriptions_member_id_foreign` (`member_id`), - ADD KEY `subscriptions_tier_id_foreign` (`tier_id`), - ADD KEY `subscriptions_offer_id_foreign` (`offer_id`); - --- --- Indizes für die Tabelle `suppressions` --- -ALTER TABLE `suppressions` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `suppressions_email_unique` (`email`), - ADD KEY `suppressions_email_id_foreign` (`email_id`); - --- --- Indizes für die Tabelle `tags` --- -ALTER TABLE `tags` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `tags_slug_unique` (`slug`); - --- --- Indizes für die Tabelle `temp_mail_events` --- -ALTER TABLE `temp_mail_events` - ADD PRIMARY KEY (`id`); - --- --- Indizes für die Tabelle `tokens` --- -ALTER TABLE `tokens` - ADD PRIMARY KEY (`id`), - ADD KEY `tokens_token_index` (`token`); - --- --- Indizes für die Tabelle `users` --- -ALTER TABLE `users` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `users_slug_unique` (`slug`), - ADD UNIQUE KEY `users_email_unique` (`email`); - --- --- Indizes für die Tabelle `webhooks` --- -ALTER TABLE `webhooks` - ADD PRIMARY KEY (`id`), - ADD KEY `webhooks_integration_id_foreign` (`integration_id`); - --- --- AUTO_INCREMENT für exportierte Tabellen --- - --- --- AUTO_INCREMENT für Tabelle `migrations` --- -ALTER TABLE `migrations` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=448; - --- --- Constraints der exportierten Tabellen --- - --- --- Constraints der Tabelle `collections_posts` --- -ALTER TABLE `collections_posts` - ADD CONSTRAINT `collections_posts_collection_id_foreign` FOREIGN KEY (`collection_id`) REFERENCES `collections` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `collections_posts_post_id_foreign` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `comments` --- -ALTER TABLE `comments` - ADD CONSTRAINT `comments_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE SET NULL, - ADD CONSTRAINT `comments_parent_id_foreign` FOREIGN KEY (`parent_id`) REFERENCES `comments` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `comments_post_id_foreign` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `comment_likes` --- -ALTER TABLE `comment_likes` - ADD CONSTRAINT `comment_likes_comment_id_foreign` FOREIGN KEY (`comment_id`) REFERENCES `comments` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `comment_likes_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `comment_reports` --- -ALTER TABLE `comment_reports` - ADD CONSTRAINT `comment_reports_comment_id_foreign` FOREIGN KEY (`comment_id`) REFERENCES `comments` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `comment_reports_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE SET NULL; - --- --- Constraints der Tabelle `donation_payment_events` --- -ALTER TABLE `donation_payment_events` - ADD CONSTRAINT `donation_payment_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE SET NULL; - --- --- Constraints der Tabelle `emails` --- -ALTER TABLE `emails` - ADD CONSTRAINT `emails_newsletter_id_foreign` FOREIGN KEY (`newsletter_id`) REFERENCES `newsletters` (`id`); - --- --- Constraints der Tabelle `email_batches` --- -ALTER TABLE `email_batches` - ADD CONSTRAINT `email_batches_email_id_foreign` FOREIGN KEY (`email_id`) REFERENCES `emails` (`id`); - --- --- Constraints der Tabelle `email_recipients` --- -ALTER TABLE `email_recipients` - ADD CONSTRAINT `email_recipients_batch_id_foreign` FOREIGN KEY (`batch_id`) REFERENCES `email_batches` (`id`), - ADD CONSTRAINT `email_recipients_email_id_foreign` FOREIGN KEY (`email_id`) REFERENCES `emails` (`id`); - --- --- Constraints der Tabelle `email_recipient_failures` --- -ALTER TABLE `email_recipient_failures` - ADD CONSTRAINT `email_recipient_failures_email_id_foreign` FOREIGN KEY (`email_id`) REFERENCES `emails` (`id`), - ADD CONSTRAINT `email_recipient_failures_email_recipient_id_foreign` FOREIGN KEY (`email_recipient_id`) REFERENCES `email_recipients` (`id`); - --- --- Constraints der Tabelle `email_spam_complaint_events` --- -ALTER TABLE `email_spam_complaint_events` - ADD CONSTRAINT `email_spam_complaint_events_email_id_foreign` FOREIGN KEY (`email_id`) REFERENCES `emails` (`id`), - ADD CONSTRAINT `email_spam_complaint_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_cancel_events` --- -ALTER TABLE `members_cancel_events` - ADD CONSTRAINT `members_cancel_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_click_events` --- -ALTER TABLE `members_click_events` - ADD CONSTRAINT `members_click_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `members_click_events_redirect_id_foreign` FOREIGN KEY (`redirect_id`) REFERENCES `redirects` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_created_events` --- -ALTER TABLE `members_created_events` - ADD CONSTRAINT `members_created_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_email_change_events` --- -ALTER TABLE `members_email_change_events` - ADD CONSTRAINT `members_email_change_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_feedback` --- -ALTER TABLE `members_feedback` - ADD CONSTRAINT `members_feedback_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `members_feedback_post_id_foreign` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_labels` --- -ALTER TABLE `members_labels` - ADD CONSTRAINT `members_labels_label_id_foreign` FOREIGN KEY (`label_id`) REFERENCES `labels` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `members_labels_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_login_events` --- -ALTER TABLE `members_login_events` - ADD CONSTRAINT `members_login_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_newsletters` --- -ALTER TABLE `members_newsletters` - ADD CONSTRAINT `members_newsletters_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `members_newsletters_newsletter_id_foreign` FOREIGN KEY (`newsletter_id`) REFERENCES `newsletters` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_paid_subscription_events` --- -ALTER TABLE `members_paid_subscription_events` - ADD CONSTRAINT `members_paid_subscription_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_payment_events` --- -ALTER TABLE `members_payment_events` - ADD CONSTRAINT `members_payment_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_products` --- -ALTER TABLE `members_products` - ADD CONSTRAINT `members_products_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `members_products_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_product_events` --- -ALTER TABLE `members_product_events` - ADD CONSTRAINT `members_product_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `members_product_events_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`); - --- --- Constraints der Tabelle `members_status_events` --- -ALTER TABLE `members_status_events` - ADD CONSTRAINT `members_status_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_stripe_customers` --- -ALTER TABLE `members_stripe_customers` - ADD CONSTRAINT `members_stripe_customers_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_stripe_customers_subscriptions` --- -ALTER TABLE `members_stripe_customers_subscriptions` - ADD CONSTRAINT `members_stripe_customers_subscriptions_customer_id_foreign` FOREIGN KEY (`customer_id`) REFERENCES `members_stripe_customers` (`customer_id`) ON DELETE CASCADE, - ADD CONSTRAINT `members_stripe_customers_subscriptions_offer_id_foreign` FOREIGN KEY (`offer_id`) REFERENCES `offers` (`id`), - ADD CONSTRAINT `mscs_ghost_subscription_id_foreign` FOREIGN KEY (`ghost_subscription_id`) REFERENCES `subscriptions` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `members_subscribe_events` --- -ALTER TABLE `members_subscribe_events` - ADD CONSTRAINT `members_subscribe_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `members_subscribe_events_newsletter_id_foreign` FOREIGN KEY (`newsletter_id`) REFERENCES `newsletters` (`id`); - --- --- Constraints der Tabelle `members_subscription_created_events` --- -ALTER TABLE `members_subscription_created_events` - ADD CONSTRAINT `members_subscription_created_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `members_subscription_created_events_subscription_id_foreign` FOREIGN KEY (`subscription_id`) REFERENCES `members_stripe_customers_subscriptions` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `offers` --- -ALTER TABLE `offers` - ADD CONSTRAINT `offers_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`); - --- --- Constraints der Tabelle `offer_redemptions` --- -ALTER TABLE `offer_redemptions` - ADD CONSTRAINT `offer_redemptions_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `offer_redemptions_offer_id_foreign` FOREIGN KEY (`offer_id`) REFERENCES `offers` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `offer_redemptions_subscription_id_foreign` FOREIGN KEY (`subscription_id`) REFERENCES `members_stripe_customers_subscriptions` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `posts` --- -ALTER TABLE `posts` - ADD CONSTRAINT `posts_newsletter_id_foreign` FOREIGN KEY (`newsletter_id`) REFERENCES `newsletters` (`id`); - --- --- Constraints der Tabelle `posts_authors` --- -ALTER TABLE `posts_authors` - ADD CONSTRAINT `posts_authors_author_id_foreign` FOREIGN KEY (`author_id`) REFERENCES `users` (`id`), - ADD CONSTRAINT `posts_authors_post_id_foreign` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`); - --- --- Constraints der Tabelle `posts_meta` --- -ALTER TABLE `posts_meta` - ADD CONSTRAINT `posts_meta_post_id_foreign` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`); - --- --- Constraints der Tabelle `posts_products` --- -ALTER TABLE `posts_products` - ADD CONSTRAINT `posts_products_post_id_foreign` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `posts_products_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `posts_tags` --- -ALTER TABLE `posts_tags` - ADD CONSTRAINT `posts_tags_post_id_foreign` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`), - ADD CONSTRAINT `posts_tags_tag_id_foreign` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`); - --- --- Constraints der Tabelle `post_revisions` --- -ALTER TABLE `post_revisions` - ADD CONSTRAINT `post_revs_author_id_foreign` FOREIGN KEY (`author_id`) REFERENCES `users` (`id`); - --- --- Constraints der Tabelle `products_benefits` --- -ALTER TABLE `products_benefits` - ADD CONSTRAINT `products_benefits_benefit_id_foreign` FOREIGN KEY (`benefit_id`) REFERENCES `benefits` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `products_benefits_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `recommendation_click_events` --- -ALTER TABLE `recommendation_click_events` - ADD CONSTRAINT `recommendation_click_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE SET NULL, - ADD CONSTRAINT `recommendation_click_events_recommendation_id_foreign` FOREIGN KEY (`recommendation_id`) REFERENCES `recommendations` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `recommendation_subscribe_events` --- -ALTER TABLE `recommendation_subscribe_events` - ADD CONSTRAINT `recommendation_subscribe_events_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE SET NULL, - ADD CONSTRAINT `recommendation_subscribe_events_recommendation_id_foreign` FOREIGN KEY (`recommendation_id`) REFERENCES `recommendations` (`id`) ON DELETE CASCADE; - --- --- Constraints der Tabelle `redirects` --- -ALTER TABLE `redirects` - ADD CONSTRAINT `redirects_post_id_foreign` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON DELETE SET NULL; - --- --- Constraints der Tabelle `stripe_prices` --- -ALTER TABLE `stripe_prices` - ADD CONSTRAINT `stripe_prices_stripe_product_id_foreign` FOREIGN KEY (`stripe_product_id`) REFERENCES `stripe_products` (`stripe_product_id`); - --- --- Constraints der Tabelle `stripe_products` --- -ALTER TABLE `stripe_products` - ADD CONSTRAINT `stripe_products_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`); - --- --- Constraints der Tabelle `subscriptions` --- -ALTER TABLE `subscriptions` - ADD CONSTRAINT `subscriptions_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `subscriptions_offer_id_foreign` FOREIGN KEY (`offer_id`) REFERENCES `offers` (`id`), - ADD CONSTRAINT `subscriptions_tier_id_foreign` FOREIGN KEY (`tier_id`) REFERENCES `products` (`id`); - --- --- Constraints der Tabelle `suppressions` --- -ALTER TABLE `suppressions` - ADD CONSTRAINT `suppressions_email_id_foreign` FOREIGN KEY (`email_id`) REFERENCES `emails` (`id`); - --- --- Constraints der Tabelle `webhooks` --- -ALTER TABLE `webhooks` - ADD CONSTRAINT `webhooks_integration_id_foreign` FOREIGN KEY (`integration_id`) REFERENCES `integrations` (`id`) ON DELETE CASCADE; -COMMIT; - -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/docker/db/scripts/gawa.sql b/docker/db/scripts/gawa.sql index a7842a8..33f8fcf 100644 --- a/docker/db/scripts/gawa.sql +++ b/docker/db/scripts/gawa.sql @@ -22,863 +22,3 @@ SET time_zone = "+00:00"; -- CREATE DATABASE IF NOT EXISTS `gawa` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE `gawa`; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `auth_group` --- - -CREATE TABLE `auth_group` ( - `id` int(11) NOT NULL, - `name` varchar(150) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `auth_group_permissions` --- - -CREATE TABLE `auth_group_permissions` ( - `id` bigint(20) NOT NULL, - `group_id` int(11) NOT NULL, - `permission_id` int(11) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `auth_permission` --- - -CREATE TABLE `auth_permission` ( - `id` int(11) NOT NULL, - `name` varchar(255) NOT NULL, - `content_type_id` int(11) NOT NULL, - `codename` varchar(100) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `auth_permission` --- - -INSERT INTO `auth_permission` (`id`, `name`, `content_type_id`, `codename`) VALUES -(1, 'Can add keyword', 1, 'add_keyword'), -(2, 'Can change keyword', 1, 'change_keyword'), -(3, 'Can delete keyword', 1, 'delete_keyword'), -(4, 'Can view keyword', 1, 'view_keyword'), -(5, 'Can add searchable', 2, 'add_searchable'), -(6, 'Can change searchable', 2, 'change_searchable'), -(7, 'Can delete searchable', 2, 'delete_searchable'), -(8, 'Can view searchable', 2, 'view_searchable'), -(9, 'Can add static site', 3, 'add_staticsite'), -(10, 'Can change static site', 3, 'change_staticsite'), -(11, 'Can delete static site', 3, 'delete_staticsite'), -(12, 'Can view static site', 3, 'view_staticsite'), -(13, 'Can add category', 4, 'add_category'), -(14, 'Can change category', 4, 'change_category'), -(15, 'Can delete category', 4, 'delete_category'), -(16, 'Can view category', 4, 'view_category'), -(17, 'Can add blog post', 5, 'add_blogpost'), -(18, 'Can change blog post', 5, 'change_blogpost'), -(19, 'Can delete blog post', 5, 'delete_blogpost'), -(20, 'Can view blog post', 5, 'view_blogpost'), -(21, 'Can add log entry', 6, 'add_logentry'), -(22, 'Can change log entry', 6, 'change_logentry'), -(23, 'Can delete log entry', 6, 'delete_logentry'), -(24, 'Can view log entry', 6, 'view_logentry'), -(25, 'Can add permission', 7, 'add_permission'), -(26, 'Can change permission', 7, 'change_permission'), -(27, 'Can delete permission', 7, 'delete_permission'), -(28, 'Can view permission', 7, 'view_permission'), -(29, 'Can add group', 8, 'add_group'), -(30, 'Can change group', 8, 'change_group'), -(31, 'Can delete group', 8, 'delete_group'), -(32, 'Can view group', 8, 'view_group'), -(33, 'Can add user', 9, 'add_user'), -(34, 'Can change user', 9, 'change_user'), -(35, 'Can delete user', 9, 'delete_user'), -(36, 'Can view user', 9, 'view_user'), -(37, 'Can add content type', 10, 'add_contenttype'), -(38, 'Can change content type', 10, 'change_contenttype'), -(39, 'Can delete content type', 10, 'delete_contenttype'), -(40, 'Can view content type', 10, 'view_contenttype'), -(41, 'Can add session', 11, 'add_session'), -(42, 'Can change session', 11, 'change_session'), -(43, 'Can delete session', 11, 'delete_session'), -(44, 'Can view session', 11, 'view_session'), -(45, 'Can add Link', 12, 'add_link'), -(46, 'Can change Link', 12, 'change_link'), -(47, 'Can delete Link', 12, 'delete_link'), -(48, 'Can view Link', 12, 'view_link'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `auth_user` --- - -CREATE TABLE `auth_user` ( - `id` int(11) NOT NULL, - `password` varchar(128) NOT NULL, - `last_login` datetime(6) DEFAULT NULL, - `is_superuser` tinyint(1) NOT NULL, - `username` varchar(150) NOT NULL, - `first_name` varchar(150) NOT NULL, - `last_name` varchar(150) NOT NULL, - `email` varchar(254) NOT NULL, - `is_staff` tinyint(1) NOT NULL, - `is_active` tinyint(1) NOT NULL, - `date_joined` datetime(6) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `auth_user` --- - -INSERT INTO `auth_user` (`id`, `password`, `last_login`, `is_superuser`, `username`, `first_name`, `last_name`, `email`, `is_staff`, `is_active`, `date_joined`) VALUES -(1, 'pbkdf2_sha256$260000$cOxciSMkcV8kSVG1gUjOi7$LmOAxpppL7oBM2F+rFy0cdOZfReqdHqq1T6vw8PfODQ=', '2023-09-26 20:47:23.142649', 1, 'root', '', '', '', 1, 1, '2023-06-03 11:59:57.779755'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `auth_user_groups` --- - -CREATE TABLE `auth_user_groups` ( - `id` bigint(20) NOT NULL, - `user_id` int(11) NOT NULL, - `group_id` int(11) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `auth_user_user_permissions` --- - -CREATE TABLE `auth_user_user_permissions` ( - `id` bigint(20) NOT NULL, - `user_id` int(11) NOT NULL, - `permission_id` int(11) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `blog_blogpost` --- - -CREATE TABLE `blog_blogpost` ( - `searchable_ptr_id` bigint(20) NOT NULL, - `thumbnail` varchar(100) NOT NULL, - `category_id` bigint(20) DEFAULT NULL, - `slug` varchar(50) NOT NULL, - `featured` tinyint(1) NOT NULL, - `markdown` tinyint(1) NOT NULL, - `body_de` longtext NOT NULL, - `body_en` longtext NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `blog_blogpost` --- - -INSERT INTO `blog_blogpost` (`searchable_ptr_id`, `thumbnail`, `category_id`, `slug`, `featured`, `markdown`, `body_de`, `body_en`) VALUES -(3, 'img/thumbnails/echter_ottifant.png', 1, 'test', 1, 0, 'Bis jetzt keine deutsche Übersetzung.', '
\r\n81.271 Aufrufe  29.03.2023\r\nStellaris First Contact challenge video. No FTL Challenge. We will not research or use any FTL methods, from hyperdrive to jump drive. Can we survive and become a galactic superpower? Or will the forces of darkness seek to usurp us!\r\n\r\nThey called me a madman.\r\nThey said it couldn\'t be done.\r\nNow I present to you,\r\n\r\nStellaris With No FTL Travel.\r\n\r\nLets Dive In!\r\n\r\nSellaris Stories Playlist:    • Stellaris Playthr...  \r\n\r\nStellaris Version 3.7\r\n\r\nIf you enjoyed this video please leave a like & SUBSCRIBE!\r\n\r\nHumble Bundle Affiliate link: https://www.humblebundle.com/?partner...\r\n\r\nPatreon: https://www.patreon.com/MontuPlays\r\nChannel Membership:    / @montuplays  \r\nTwitter: https://twitter.com/MontuPlays\r\nTwitch: https://www.twitch.tv/montuplays\r\nInstagram: https://www.instagram.com/montuplays/\r\nTiktok: https://www.tiktok.com/@montuplays\r\n\r\nAnd please comment with any feedback, any ideas or if you disagree!\r\n
'), -(4, 'img/thumbnails/thuglifemathemann.png', 1, 'hidden', 0, 0, 'Bis jetzt keine deutsche Übersetzung.', 'No english translation yet.'), -(5, 'img/thumbnails/wayland_logo.jpg', 2, 'wayland', 1, 0, 'Bis jetzt keine deutsche Übersetzung.', 'No english translation yet.'), -(6, 'img/thumbnails/Center_of_the_Milky_Way_Galaxy_IV__Composite.jpg', 1, 'badly-formatted', 1, 0, 'Bis jetzt keine deutsche Übersetzung.', 'No english translation yet.'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `blog_category` --- - -CREATE TABLE `blog_category` ( - `id` bigint(20) NOT NULL, - `name` varchar(50) NOT NULL, - `slug` varchar(50) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `blog_category` --- - -INSERT INTO `blog_category` (`id`, `name`, `slug`) VALUES -(1, 'test', 'test'), -(2, 'Linux', 'Linux'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `django_admin_log` --- - -CREATE TABLE `django_admin_log` ( - `id` int(11) NOT NULL, - `action_time` datetime(6) NOT NULL, - `object_id` longtext DEFAULT NULL, - `object_repr` varchar(200) NOT NULL, - `action_flag` smallint(5) UNSIGNED NOT NULL CHECK (`action_flag` >= 0), - `change_message` longtext NOT NULL, - `content_type_id` int(11) DEFAULT NULL, - `user_id` int(11) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `django_admin_log` --- - -INSERT INTO `django_admin_log` (`id`, `action_time`, `object_id`, `object_repr`, `action_flag`, `change_message`, `content_type_id`, `user_id`) VALUES -(1, '2023-06-03 12:04:18.697869', '1', 'Keyword object (1)', 1, '[{\"added\": {}}]', 1, 1), -(2, '2023-06-03 12:04:25.298763', '1', 'StaticSite object (1)', 1, '[{\"added\": {}}]', 3, 1), -(3, '2023-06-03 12:39:47.580686', '2', 'Keyword object (2)', 1, '[{\"added\": {}}]', 1, 1), -(4, '2023-06-03 12:39:54.676532', '2', 'StaticSite object (2)', 1, '[{\"added\": {}}]', 3, 1), -(5, '2023-06-03 18:49:19.838998', '3', 'Keyword object (3)', 1, '[{\"added\": {}}]', 1, 1), -(6, '2023-06-03 18:49:38.820915', '1', 'Category object (1)', 1, '[{\"added\": {}}]', 4, 1), -(7, '2023-06-03 18:50:06.156603', '3', 'BlogPost object (3)', 1, '[{\"added\": {}}]', 5, 1), -(8, '2023-06-03 22:24:55.684062', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Body\", \"Thumbnail\"]}}]', 5, 1), -(9, '2023-06-03 22:25:23.238473', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Body\"]}}]', 5, 1), -(10, '2023-06-03 22:32:15.868151', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(11, '2023-06-03 22:32:19.806919', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(12, '2023-06-03 22:34:12.390100', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(13, '2023-06-03 22:34:18.657049', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(14, '2023-06-03 22:35:20.148384', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(15, '2023-06-03 22:35:31.942529', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(16, '2023-06-03 22:37:55.565581', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(17, '2023-06-03 22:38:00.515394', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(18, '2023-06-03 22:42:32.527820', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(19, '2023-06-03 22:42:38.983331', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(20, '2023-06-03 22:43:03.221503', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(21, '2023-06-03 22:43:09.756742', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(22, '2023-06-03 22:43:32.898889', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(23, '2023-06-03 22:43:58.455830', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(24, '2023-06-03 22:44:49.711409', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(25, '2023-06-03 22:44:53.900045', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(26, '2023-06-03 22:46:22.495718', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(27, '2023-06-03 22:46:48.813958', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(28, '2023-06-03 23:10:31.960472', '3', 'BlogPost object (3)', 2, '[{\"changed\": {\"fields\": [\"Featured\"]}}]', 5, 1), -(29, '2023-06-03 23:11:49.738524', '3', 'BlogPost object (3)', 2, '[]', 5, 1), -(30, '2023-06-03 23:12:32.389296', '4', 'BlogPost object (4)', 1, '[{\"added\": {}}]', 5, 1), -(31, '2023-06-03 23:12:40.179260', '4', 'BlogPost object (4)', 2, '[{\"changed\": {\"fields\": [\"Public\", \"Featured\"]}}]', 5, 1), -(32, '2023-06-04 18:05:05.011703', '4', '{\"hidden test\"}', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(33, '2023-06-04 18:30:33.544753', '4', '{\"some keyword\"}', 1, '[{\"added\": {}}]', 1, 1), -(34, '2023-06-04 18:30:36.040424', '4', '{\"hidden test\"}', 2, '[{\"changed\": {\"fields\": [\"Keywords\"]}}]', 5, 1), -(35, '2023-06-04 18:43:00.039374', '5', '{\"Linux\"}', 1, '[{\"added\": {}}]', 1, 1), -(36, '2023-06-04 18:43:06.821221', '6', '{\"Wayland\"}', 1, '[{\"added\": {}}]', 1, 1), -(37, '2023-06-04 18:43:30.492957', '2', '{\"Linux\"}', 1, '[{\"added\": {}}]', 4, 1), -(38, '2023-06-04 18:43:53.420012', '5', '{\"wayland\"}', 1, '[{\"added\": {}}]', 5, 1), -(39, '2023-06-04 18:44:38.145122', '5', '{\"wayland\"}', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(40, '2023-06-04 18:48:08.975475', '5', '{\"wayland\"}', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(41, '2023-06-04 20:59:48.580334', '3', '{\"test\"}', 2, '[{\"changed\": {\"fields\": [\"Keywords\"]}}]', 5, 1), -(42, '2023-06-04 21:12:48.508525', '6', '{\"keywords\"}', 1, '[{\"added\": {}}]', 5, 1), -(43, '2023-06-04 21:13:03.091539', '6', '{\"keywords\"}', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(44, '2023-06-04 21:13:30.855689', '6', '{\"keywords\"}', 2, '[{\"changed\": {\"fields\": [\"Thumbnail\"]}}]', 5, 1), -(45, '2023-06-05 16:17:00.484477', '7', '{\"selfhosting\"}', 1, '[{\"added\": {}}]', 1, 1), -(46, '2023-06-05 16:19:31.228250', 'https://european-alternatives.eu/', '{\"european alternative\"}', 1, '[{\"added\": {}}]', 12, 1), -(47, '2023-06-05 16:19:42.921776', 'https://european-alternatives.eu/', '{\"european alternatives\"}', 2, '[{\"changed\": {\"fields\": [\"Title en\"]}}]', 12, 1), -(48, '2023-06-05 16:40:04.807992', '8', '{\"tool\"}', 1, '[{\"added\": {}}]', 1, 1), -(49, '2023-06-05 16:40:51.112180', 'https://grep.app/', '{\"grep.app\"}', 1, '[{\"added\": {}}]', 12, 1), -(50, '2023-06-05 16:46:27.851078', 'https://cscherr.de', '{\"title EN\"}', 1, '[{\"added\": {}}]', 12, 1), -(51, '2023-06-05 16:46:30.662372', 'https://cscherr.de', '{\"title EN\"}', 2, '[]', 12, 1), -(52, '2023-06-05 16:46:32.422354', 'https://cscherr.de', '{\"title EN\"}', 2, '[]', 12, 1), -(53, '2023-06-05 16:46:59.815579', 'https://cscherr.de', '{\"title EN\"}', 2, '[]', 12, 1), -(54, '2023-06-05 16:47:14.035243', 'https://cschderr.de', '{\"title EN\"}', 1, '[{\"added\": {}}]', 12, 1), -(55, '2023-06-05 16:47:19.004185', 'https://dscschderr.de', '{\"title EN\"}', 1, '[{\"added\": {}}]', 12, 1), -(56, '2023-06-05 16:47:23.499798', 'https://cssdachderr.de', '{\"title EN\"}', 1, '[{\"added\": {}}]', 12, 1), -(57, '2023-06-05 17:13:16.967522', 'https://cscherr.de', '{\"title EN\"}', 2, '[{\"changed\": {\"fields\": [\"Keywords\"]}}]', 12, 1), -(58, '2023-06-05 17:14:44.255231', 'https://dscschderr.de', '{\"title EN\"}', 3, '', 12, 1), -(59, '2023-06-05 17:14:44.256420', 'https://cssdachderr.de', '{\"title EN\"}', 3, '', 12, 1), -(60, '2023-06-05 17:14:44.257328', 'https://cscherr.de', '{\"title EN\"}', 3, '', 12, 1), -(61, '2023-06-05 17:14:44.258159', 'https://cschderr.de', '{\"title EN\"}', 3, '', 12, 1), -(62, '2023-06-05 17:57:00.163052', 'https://cscherr.de', '{\"title EN\"}', 1, '[{\"added\": {}}]', 12, 1), -(63, '2023-06-05 20:58:00.230539', 'https://teslskdhglkjsahglkjdhflahgdlkjshgalskdhglkjsahglkjdsah.de', '{\"unavailable test\"}', 1, '[{\"added\": {}}]', 12, 1), -(64, '2023-06-05 21:17:01.550940', '4', '{\"hidden test\"}', 2, '[{\"changed\": {\"fields\": [\"Featured\"]}}]', 5, 1), -(65, '2023-06-16 20:37:32.073731', '3', '{\"test en\"}', 2, '[{\"changed\": {\"fields\": [\"Title de\", \"Title en\", \"Subtitle de\", \"Subtitle en\", \"Desc de\", \"Desc en\", \"Body en\"]}}]', 5, 1), -(66, '2023-06-16 22:05:16.217084', '3', '{\"test en\"}', 2, '[{\"changed\": {\"fields\": [\"Body en\"]}}]', 5, 1), -(67, '2023-06-16 22:06:07.120314', '3', '{\"test en\"}', 2, '[{\"changed\": {\"fields\": [\"Body en\"]}}]', 5, 1), -(68, '2023-06-16 22:09:16.732254', '3', '{\"test en\"}', 2, '[{\"changed\": {\"fields\": [\"Body en\"]}}]', 5, 1), -(69, '2023-06-16 22:09:57.723744', '3', '{\"test en\"}', 2, '[{\"changed\": {\"fields\": [\"Desc de\"]}}]', 5, 1), -(70, '2023-06-16 22:11:24.685523', '3', '{\"test en\"}', 2, '[{\"changed\": {\"fields\": [\"Desc en\"]}}]', 5, 1), -(71, '2023-06-16 22:35:07.849677', '3', '{\"test en\"}', 2, '[{\"changed\": {\"fields\": [\"Desc de\"]}}]', 5, 1), -(72, '2023-06-16 22:36:52.536498', '3', '{\"test en\"}', 2, '[{\"changed\": {\"fields\": [\"Body en\"]}}]', 5, 1), -(73, '2023-06-16 22:37:59.812320', '3', '{\"test en\"}', 2, '[{\"changed\": {\"fields\": [\"Body en\"]}}]', 5, 1), -(74, '2023-07-15 12:44:37.681112', '9', '{\"social media\"}', 1, '[{\"added\": {}}]', 1, 1), -(75, '2023-07-15 12:44:47.420748', '10', '{\"mastodon\"}', 1, '[{\"added\": {}}]', 1, 1), -(76, '2023-07-15 12:46:17.179222', 'https://infosec.exchange/@plexsheep/', '{\"Mastodon\"}', 1, '[{\"added\": {}}]', 12, 1), -(77, '2023-07-15 12:47:41.308504', 'https://cscherr.de', '{\"title EN\"}', 3, '', 12, 1), -(78, '2023-09-27 18:43:24.048812', '11', '{\"Hacking\"}', 1, '[{\"added\": {}}]', 1, 1), -(79, '2023-09-27 18:43:32.913389', 'https://cscg.de/', '{\"Cyber Security Challenge Germany\"}', 1, '[{\"added\": {}}]', 12, 1); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `django_content_type` --- - -CREATE TABLE `django_content_type` ( - `id` int(11) NOT NULL, - `app_label` varchar(100) NOT NULL, - `model` varchar(100) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `django_content_type` --- - -INSERT INTO `django_content_type` (`id`, `app_label`, `model`) VALUES -(6, 'admin', 'logentry'), -(8, 'auth', 'group'), -(7, 'auth', 'permission'), -(9, 'auth', 'user'), -(5, 'blog', 'blogpost'), -(4, 'blog', 'category'), -(10, 'contenttypes', 'contenttype'), -(11, 'sessions', 'session'), -(1, 'start', 'keyword'), -(12, 'start', 'link'), -(2, 'start', 'searchable'), -(3, 'start', 'staticsite'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `django_migrations` --- - -CREATE TABLE `django_migrations` ( - `id` bigint(20) NOT NULL, - `app` varchar(255) NOT NULL, - `name` varchar(255) NOT NULL, - `applied` datetime(6) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `django_migrations` --- - -INSERT INTO `django_migrations` (`id`, `app`, `name`, `applied`) VALUES -(1, 'contenttypes', '0001_initial', '2023-06-03 11:56:39.134383'), -(2, 'auth', '0001_initial', '2023-06-03 11:56:39.493397'), -(3, 'admin', '0001_initial', '2023-06-03 11:56:39.576389'), -(4, 'admin', '0002_logentry_remove_auto_add', '2023-06-03 11:56:39.587912'), -(5, 'admin', '0003_logentry_add_action_flag_choices', '2023-06-03 11:56:39.599213'), -(6, 'contenttypes', '0002_remove_content_type_name', '2023-06-03 11:56:39.670533'), -(7, 'auth', '0002_alter_permission_name_max_length', '2023-06-03 11:56:39.707524'), -(8, 'auth', '0003_alter_user_email_max_length', '2023-06-03 11:56:39.731843'), -(9, 'auth', '0004_alter_user_username_opts', '2023-06-03 11:56:39.745982'), -(10, 'auth', '0005_alter_user_last_login_null', '2023-06-03 11:56:39.782422'), -(11, 'auth', '0006_require_contenttypes_0002', '2023-06-03 11:56:39.785282'), -(12, 'auth', '0007_alter_validators_add_error_messages', '2023-06-03 11:56:39.797106'), -(13, 'auth', '0008_alter_user_username_max_length', '2023-06-03 11:56:39.827272'), -(14, 'auth', '0009_alter_user_last_name_max_length', '2023-06-03 11:56:39.851866'), -(15, 'auth', '0010_alter_group_name_max_length', '2023-06-03 11:56:39.879276'), -(16, 'auth', '0011_update_proxy_permissions', '2023-06-03 11:56:39.894042'), -(17, 'auth', '0012_alter_user_first_name_max_length', '2023-06-03 11:56:39.922412'), -(18, 'sessions', '0001_initial', '2023-06-03 11:56:39.960733'), -(19, 'start', '0001_initial', '2023-06-03 12:03:45.768696'), -(20, 'start', '0002_keyword_searchable_staticsite', '2023-06-03 12:03:45.941730'), -(21, 'blog', '0001_initial', '2023-06-03 12:03:45.945010'), -(22, 'blog', '0002_blogpost_category', '2023-06-03 12:03:46.053269'), -(23, 'blog', '0003_blogpost_public', '2023-06-03 18:52:48.544852'), -(24, 'blog', '0004_blogpost_slug', '2023-06-03 19:06:14.602364'), -(25, 'blog', '0005_auto_20230604_0050', '2023-06-03 22:50:53.031820'), -(26, 'blog', '0006_blogpost_markdown', '2023-06-03 22:55:58.592031'), -(27, 'blog', '0007_remove_blogpost_public', '2023-06-03 23:13:24.592228'), -(28, 'start', '0003_searchable_public', '2023-06-03 23:13:24.624613'), -(29, 'blog', '0008_auto_20230604_0156', '2023-06-03 23:56:46.268858'), -(30, 'start', '0004_auto_20230604_2312', '2023-06-04 21:12:38.055586'), -(31, 'start', '0005_link', '2023-06-05 16:15:09.586322'), -(32, 'start', '0006_alter_searchable_title_en', '2023-06-05 16:18:36.026234'), -(33, 'start', '0007_link_favicon', '2023-06-05 17:48:34.359895'), -(34, 'start', '0008_link_status', '2023-06-05 20:55:49.654569'), -(35, 'start', '0009_alter_link_favicon', '2023-06-05 23:01:06.878071'), -(36, 'blog', '0009_auto_20230616_2236', '2023-06-16 20:36:25.811914'), -(37, 'start', '0010_link_personal', '2023-07-15 12:20:30.979727'), -(38, 'start', '0011_auto_20230715_1441', '2023-07-15 12:41:41.290671'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `django_session` --- - -CREATE TABLE `django_session` ( - `session_key` varchar(40) NOT NULL, - `session_data` longtext NOT NULL, - `expire_date` datetime(6) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `django_session` --- - -INSERT INTO `django_session` (`session_key`, `session_data`, `expire_date`) VALUES -('0upcgnoxwloj2oe517p5gs49u5lp5zzq', 'eyJfbGFuZ3VhZ2UiOiJlbiJ9:1qAGqc:py_DCOFJ-FumxDRyHNdQX5fRdemoczmVG1R6SSAoQXA', '2023-06-30 21:19:10.696506'), -('1gv9x0aqsv9wnwjrdfn2jb2lmb6e7m1q', 'eyJfbGFuZ3VhZ2UiOiJlbiJ9:1q6I0M:8ck2jJRPvLCTVo8eO3Uf55V1qSCCmhbIVhoTqD-r-Io', '2023-06-19 21:44:46.153044'), -('2vj0n37v54tosuve9rzd869cxcto8mz2', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q5sLF:8r4rYdTtQYok9kkyr3UhO9m92jAPZC405pDYwP09-qA', '2023-06-18 18:20:37.522039'), -('3xiqj0zj3hqhng68kgetjvl3h3ef6rga', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6Dwi:pSwhudkZDOHfIFHna_Qhk4zH3yb3hNDC_HIwKt70DIE', '2023-06-19 17:24:44.189905'), -('64c4rub7ajgnj111shwcpvpvhfangkw6', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6IWp:gB20zXAKoPRbLklQlEzPAB2etNe510dvcw3HjZ2YqhE', '2023-06-19 22:18:19.400916'), -('7ig4cdxegsgr67am0qahc168ne7vnl6n', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q5aKH:la2kbcUB5332lRGgq-fmRfExgAqu21jCINyFziVMiPw', '2023-06-17 23:06:25.760931'), -('7zziio2fl6g4y2zlmbod3iqz8axi0c0w', '.eJxVjDsOgzAQBe_iOrLwD-yU6TmDtbteAwkyEuAqyt0DEg3tvJn3FXGGMlQYWDwFF_EQEeo-xrrxGqd0QHVnCPThcg7pfZSLpKXs64TyVOS1brJfEs-vy70djLCNR20Qk2tyY3UO1gT0wWhEm5kaF6gNGdkZRc560IrYAOkWsLPOd4iEIH5_vbE96w:1qAdo6:_7Ggp630uFVTXvIfzqnMcFQPZifnfd32YNw2xrRX4e4', '2023-07-01 21:50:06.829517'), -('82mt5l930fx2l18pvq62xve1dyjuczg4', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6ImI:L5uK3sW-CLiZwmK82SRpB46kruvoVv7shUM9VtzOvaw', '2023-06-19 22:34:18.417914'), -('90cu9ksglbxjuav0ycu34entpl3u4qze', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6DPn:FCYUrqa7sxjHrLAxvrd4xcXst3Bld3roZXiMIm6_F7g', '2023-06-19 16:50:43.835428'), -('9vrglur3tcfw30khosdk0whixdw5868f', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6DJf:JMQ65g3ch9bxIJXCyHfBkmz8xqpCFDLqCCEB-Fjk1j8', '2023-06-19 16:44:23.542502'), -('a4lile9twdhc1yhb4jm2v5arw3njpmej', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6bpg:OnpuTHTxOIhBWx00CQPrpYZhMxGIhsNypGHc_4oxT_Q', '2023-06-20 18:55:04.321078'), -('aj8r2xou6zmiev2qu09skea7uxl7mk4s', 'eyJfbGFuZ3VhZ2UiOiJlbiJ9:1qlEwK:PJsxynHSnR99RgKTXCdS04bczAM31zWnfKa_JbPQZJQ', '2023-10-10 20:45:52.004706'), -('b19ur3eet73u66lfhf7iowvb8e6ki2td', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6IJN:ZIdTfsHuPhlUBDAW9wvz2hoEtMH4NYqgkomYVIieAhY', '2023-06-19 22:04:25.445445'), -('b1xgysjxf4yjco704xam548jixstkxk4', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6IWp:gB20zXAKoPRbLklQlEzPAB2etNe510dvcw3HjZ2YqhE', '2023-06-19 22:18:19.426849'), -('evj2deqvxhbyxb49e9h6l9na2qbaqf95', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q5QmI:1rGcG2CjkEKezGaLrT8fLFdInLOqIDp2ctZb5w2h9eY', '2023-06-17 12:54:42.590440'), -('gx6813mra4mjk14s8731rtb9yrqepdq6', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6IJN:ZIdTfsHuPhlUBDAW9wvz2hoEtMH4NYqgkomYVIieAhY', '2023-06-19 22:04:25.426613'), -('hseisfnzpao3n9vgsrm5xup83mnh5m8x', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6Ddw:jbkCHqvAo-dZVnT_cPPyzr3ifoYQ8RWqavgGkZOLxM4', '2023-06-19 17:05:20.044989'), -('i99yua650ef8vl8b5fj5ap6adkwga4mf', 'eyJfbGFuZ3VhZ2UiOiJlbiJ9:1qlEKO:T9QlV6VyTrt6qAIWcDbc_DQAlr_CjRHFQupnY92Oqnc', '2023-10-10 20:06:40.283402'), -('iax6u7cdt7ccouzt9ewkgyzz1my8jl16', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6FnU:aw4jJP-LzV0_VQMDgNJdIAkd4HinLKxDb6fP3ls6p5I', '2023-06-19 19:23:20.996410'), -('ir5lngwwf38u4ro0dreraqdv7sy8fl4j', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1qkrLe:q--VIRxGKEfZEr1h28GRACqTPEwcSGOklzwjb2-BBco', '2023-10-09 19:34:26.798740'), -('jav4im7bxc31yig1weoojczl725hjetd', '.eJxVjDsOgzAQBe_iOrLwD-yU6TmDtbteAwkyEuAqyt0DEg3tvJn3FXGGMlQYWDwFF_EQEeo-xrrxGqd0QHVnCPThcg7pfZSLpKXs64TyVOS1brJfEs-vy70djLCNR20Qk2tyY3UO1gT0wWhEm5kaF6gNGdkZRc560IrYAOkWsLPOd4iEIH5_vbE96w:1qKfJc:bpPnwVuuqPB9oVGr8Revg7vj3eAIo1niHfWEmf8O0o0', '2023-07-29 13:28:04.767178'), -('jf3upknvj24cbyz5ucf2hvqes4o6brzf', 'eyJfbGFuZ3VhZ2UiOiJlbiJ9:1qAFve:_RL7IYW9MkLOwRPU7s-iljlJETcf2JNT8-s0CiQBgbI', '2023-06-30 20:20:18.080997'), -('nowaza4auf15ea5ceduizupmuoai5wed', '.eJxVjDsOgzAQBe_iOrLwD-yU6TmDtbteAwkyEuAqyt0DEg3tvJn3FXGGMlQYWDwFF_EQEeo-xrrxGqd0QHVnCPThcg7pfZSLpKXs64TyVOS1brJfEs-vy70djLCNR20Qk2tyY3UO1gT0wWhEm5kaF6gNGdkZRc560IrYAOkWsLPOd4iEIH5_vbE96w:1qlZTU:uwTe0XhXUDx5AoyAuiMe8bsgud4-dczCsuKKhjQxjno', '2023-10-11 18:41:28.391526'), -('nxbpuu69n360c4rtr30gatez80zceypc', 'eyJfbGFuZ3VhZ2UiOiJlbiJ9:1q5uwg:26g54m5XFWYTIyQ_XXmbuFM0dXKFK5PjIpnffTPooec', '2023-06-18 21:07:26.651759'), -('oksqlmqq4d95qbthf77cekpstsoras0x', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1qAHVI:zMwTYu2mF4TuMp3z6xyGegM5Z4dV2QOS4KErwB_42IY', '2023-06-30 22:01:12.013664'), -('ou12hhptv10i3dicpx9eg73qhr2c2spw', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1qAFve:D4NUcsnUU5BQLest9ZT3q98QlX1Vidt_wW73IIUcD0c', '2023-06-30 20:20:18.023866'), -('oxfk3q8saufspyg0hiinj9re5by7exfa', 'eyJfbGFuZ3VhZ2UiOiJlbiJ9:1qKdzi:6328QizeSnm7IrCb8D9WhpBYgBql6UhxN2DT65FLV8I', '2023-07-29 12:03:26.437263'), -('puu3uusjwghp6krjt33eh1hkd8zmpzp5', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6bpg:OnpuTHTxOIhBWx00CQPrpYZhMxGIhsNypGHc_4oxT_Q', '2023-06-20 18:55:04.318858'), -('qizi095sgnejjvs8rwhp7pqdfekmallu', 'eyJfbGFuZ3VhZ2UiOiJlbiJ9:1q5WGm:eC3Esvpesob9k12yWTUQU-w3r1_FbxdRLENuAFm9ZXk', '2023-06-17 18:46:32.666643'), -('qkmrqp3xxmungtb5xbrwe2yjwe7lqt4g', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6D0o:MBtnPS-eBpBPozK1IVNCJRQ7FAd7kNKqq2aK4M8oq80', '2023-06-19 16:24:54.958490'), -('qwkkyzzeqjg9172kyfek1hd9nzqtru3q', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6IWp:gB20zXAKoPRbLklQlEzPAB2etNe510dvcw3HjZ2YqhE', '2023-06-19 22:18:19.401336'), -('qysgaziztbpgvtl3kyttosi93s1zwtvf', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q5QV9:1Uw36kLgFSXm1VjcuuiIGpkmQuRN_KK0Ma3Zl4DXT6o', '2023-06-17 12:36:59.495979'), -('rkty698r11z7zm85k2geknm0rcjwyfqv', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6IWp:gB20zXAKoPRbLklQlEzPAB2etNe510dvcw3HjZ2YqhE', '2023-06-19 22:18:19.414335'), -('rtammfv9ja1mbvbgw7sdw4veiyp03xxm', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6IJN:ZIdTfsHuPhlUBDAW9wvz2hoEtMH4NYqgkomYVIieAhY', '2023-06-19 22:04:25.435536'), -('swp0hlg8yx4hxwu7u9d7si0o9m8it1pn', 'eyJfbGFuZ3VhZ2UiOiJlbiJ9:1q5uoj:aBQfKM4_0_2dMJJKcfn6UXCiUpxS-b_UgIJiN0nRaqo', '2023-06-18 20:59:13.449268'), -('t2kwan6ekp81crswrsi9hii4b61imuue', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6DnA:j-cI0mcCObdleGdnyjXwXCzYLi4AmXpo610VPxQBmM4', '2023-06-19 17:14:52.657342'), -('tvscp47jrsn5z4fzay4sozctp4o9tpr7', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6Ftl:fbR1czINKX_3OFLpBEjlPSoOqVf4B5Yx5U13i83cz2Y', '2023-06-19 19:29:49.516429'), -('ty2uxmb0kropbz7ag4yk848t4hen54j7', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6J1L:beudjtx8mUL9cLZg3z3PKqP5hW8lp_inxnyW3f3HEDk', '2023-06-19 22:49:51.870050'), -('whu9nbomfw3i5gs8fttvjxacu247tuft', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6Drn:Eb7ima9uOKmHWTfkubqTkzHczghiDOglJCki3bib51I', '2023-06-19 17:19:39.665491'), -('z35tevuzugpk08wbgtlcvktitb5cuuvj', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1qkrLg:t7mBZwP_Vzcn3gtTR-jeZ3P779bwZI_4o502I-Erxks', '2023-10-09 19:34:28.894312'), -('zj7tnj6l3xwq4n2vy4eg1gsvmc7rgagx', 'eyJfbGFuZ3VhZ2UiOiJkZSJ9:1q6Czj:IPERPMMtjCuW4sOHOEc7FY58NgjY0u8Lh10NMcinf_Y', '2023-06-19 16:23:47.958648'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `start_keyword` --- - -CREATE TABLE `start_keyword` ( - `id` bigint(20) NOT NULL, - `text_de` varchar(40) NOT NULL, - `text_en` varchar(40) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `start_keyword` --- - -INSERT INTO `start_keyword` (`id`, `text_de`, `text_en`) VALUES -(1, 'Statisch', 'static'), -(2, 'Blog', 'blog'), -(3, 'test', 'test'), -(4, 'ein keyword', 'some keyword'), -(5, 'Linux', 'Linux'), -(6, 'Wayland', 'Wayland'), -(7, 'Selfhosting', 'selfhosting'), -(8, 'Tool', 'tool'), -(9, 'Social Media', 'social media'), -(10, 'Mastodon', 'mastodon'), -(11, 'Hacking', 'Hacking'); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `start_link` --- - -CREATE TABLE `start_link` ( - `searchable_ptr_id` bigint(20) NOT NULL, - `url` varchar(200) NOT NULL, - `favicon` varchar(100) DEFAULT NULL, - `status` tinyint(1) NOT NULL, - `personal` tinyint(1) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `start_link` --- - -INSERT INTO `start_link` (`searchable_ptr_id`, `url`, `favicon`, `status`, `personal`) VALUES -(19, 'https://cscg.de/', 'img/links/favicons/favicon-12398.png', 1, 0), -(10, 'https://european-alternatives.eu/', 'img/links/favicons/favicon-36105.png', 1, 0), -(11, 'https://grep.app/', 'img/links/favicons/favicon-43495.png', 1, 0), -(18, 'https://infosec.exchange/@plexsheep/', 'img/links/favicons/favicon-46734.png', 1, 1), -(17, 'https://teslskdhglkjsahglkjdhflahgdlkjshgalskdhglkjsahglkjdsah.de', '', 0, 0); - --- -------------------------------------------------------- - --- --- Tabellenstruktur für Tabelle `start_searchable` --- - -CREATE TABLE `start_searchable` ( - `id` bigint(20) NOT NULL, - `title_de` varchar(50) NOT NULL, - `title_en` varchar(50) NOT NULL, - `subtitle_de` varchar(50) NOT NULL, - `subtitle_en` varchar(50) NOT NULL, - `desc_de` longtext NOT NULL, - `desc_en` longtext NOT NULL, - `date` date DEFAULT NULL, - `suburl` varchar(200) DEFAULT NULL, - `public` tinyint(1) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Daten für Tabelle `start_searchable` --- - -INSERT INTO `start_searchable` (`id`, `title_de`, `title_en`, `subtitle_de`, `subtitle_en`, `desc_de`, `desc_en`, `date`, `suburl`, `public`) VALUES -(1, 'Startseite', 'startpage', '', '', 'Die Startseite von cscherr.de', 'The startpage of cscherr.de', NULL, '/', 1), -(2, 'Blog', 'blog', '', '', 'Die Startseite des Blogs', 'The startpage of the blob', NULL, '/blog', 1), -(3, 'Test de', 'test en', 'test blogpost de', 'test blogpost en', 'selbst gebaut oder template? Moritz — gestern um 23:16 Uhr Selbst natürlich Christoph — gestern um 23:16 Uhr wenn du ein framework suchst empfehle ich django, gibt aber genug auswahl Moritz — gestern um 23:16 Uhr Brauche aber erstmal die Zeit, wollte', 'ENENENEN
/app/static/codehighlight.css diff --git a/docker/main/requirements.txt b/docker/main/requirements.txt index 1a9a9ae..31fb00a 100644 --- a/docker/main/requirements.txt +++ b/docker/main/requirements.txt @@ -6,4 +6,6 @@ django-libsass>=0.7 pillow>=9.0.0 colorlog>=6.7.0 favicon>=0.7.0 -libpt>=0.1.5 +markdown>=3.4.4 +Pygments>=2.16.1 +toml>=0.10 diff --git a/gawa/blog/admin.py b/gawa/blog/admin.py index 889b084..fd8f9f2 100644 --- a/gawa/blog/admin.py +++ b/gawa/blog/admin.py @@ -1,5 +1,7 @@ from django.contrib import admin +from django.urls import path from django.utils.translation import gettext as _ +from django.http.response import HttpResponseRedirect from .models import * @admin.register(Category) @@ -15,6 +17,7 @@ def regenerate(modeladmin, request, queryset): for obj in queryset: obj.regenerate() + @admin.register(BlogPost) class BlogPostAdmin(admin.ModelAdmin): """ @@ -24,3 +27,16 @@ class BlogPostAdmin(admin.ModelAdmin): date_hierarchy = "date" ordering = ['title_de', 'title_en'] actions = [regenerate] + + change_list_template = "admin/blogpost.html" + + def get_urls(self): + urls = super().get_urls() + my_urls = [ + path('sync/', self.sync_with_fs), + ] + return my_urls + urls + + def sync_with_fs(self, request): + BlogPost.sync_with_fs() + return HttpResponseRedirect("../") diff --git a/gawa/blog/data/articles/bash-arrays.toml b/gawa/blog/data/articles/bash-arrays.toml new file mode 100644 index 0000000..b6146c2 --- /dev/null +++ b/gawa/blog/data/articles/bash-arrays.toml @@ -0,0 +1,15 @@ +date = "2023-10-02 09:59:00.127936" +update = "2023-10-02 10:59:00.127936" +keywords = ["bash"] +category = "Guide" +featured = true +public = true +thumbnail = "img/thumbnails/bash.png" + +[lang.en] +title = "bash arrays" +subtitle = "how to work with bash arrays" +desc = """ +bash scripting can be kind of weird. +This guide explains how they work without any fuzz. +""" diff --git a/gawa/blog/data/articles/de-bash-arrays.md b/gawa/blog/data/articles/de-bash-arrays.md new file mode 100644 index 0000000..1b84e4c --- /dev/null +++ b/gawa/blog/data/articles/de-bash-arrays.md @@ -0,0 +1,91 @@ +**NOTE** + +This is a stolen article from [opensource.com](https://opensource.com/article/18/5/you-dont-know-bash-intro-bash-arrays) +about bash scripting. It's a good article and I've decided to use it to test my +markdown rendering. + +# GERMAN VERY YES YES +# Bash scripting + +[TOC] + + +## Wait, but why? + +Writing about Bash is challenging because it's remarkably easy for an article +to devolve into a manual that focuses on syntax oddities. Rest assured, +however, the intent of this article is to avoid having you RTFM. + +## A real (actually useful) example + +To that end, let's consider a real-world scenario and how Bash can help: +You are leading a new effort at your company to evaluate and optimize the +runtime of your internal data pipeline. As a first step, you want to do a +parameter sweep to evaluate how well the pipeline makes use of threads. For +the sake of simplicity, we'll treat the pipeline as a compiled C++ black box +where the only parameter we can tweak is the number of threads reserved for +data processing: `./pipeline --threads 4.` + +## The basics + +The first thing we'll do is define an array containing the values of the +`--threads` parameter that we want to test: + +```bash +allThreads=(1 2 4 8 16 32 64 128) +``` + +In this example, all the elements are numbers, but it need not be the +case—arrays in Bash can contain both numbers and strings, e.g., `myArray=(1 +2 "three" 4 "five")` is a valid expression. And just as with any other Bash +variable, make sure to leave no spaces around the equal sign. Otherwise, +Bash will treat the variable name as a program to execute, and the `=` as its +first parameter! + +Now that we've initialized the array, let's retrieve a few of its +elements. You'll notice that simply doing `echo $allThreads` will output only +the first element. + +To understand why that is, let's take a step back and revisit how we usually +output variables in Bash. Consider the following scenario: + +```bash +type="article" echo "Found 42 $type" +``` + +Say the variable $type is given to us as a singular noun and we want to add +an `s` at the end of our sentence. We can't simply add an s to `$type` since +that would turn it into a different variable, `$types`. And although we could +utilize code contortions such as `echo "Found 42 "$type"s"`, the best way +to solve this problem is to use curly braces: `echo "Found 42 ${type}s"`, +which allows us to tell Bash where the name of a variable starts and ends +(interestingly, this is the same syntax used in JavaScript/ES6 to inject +variables and expressions in template literals). + +So as it turns out, although Bash variables don't generally require curly +brackets, they are required for arrays. In turn, this allows us to specify +the index to access, e.g., `echo ${allThreads[1]}` returns the second element +of the array. Not including brackets, e.g.,`echo $allThreads[1]`, leads Bash +to treat `[1]` as a string and output it as such. + +Yes, Bash arrays have odd syntax, but at least they are zero-indexed, unlike +some other languages (I'm looking at you, R).[^1] + +## Looping through arrays + +Although in the examples above we used integer indices in our arrays, let's +consider two occasions when that won't be the case: First, if we wanted the +$i-th element of the array, where $i is a variable containing the index of +interest, we can retrieve that element using: echo ${allThreads[$i]}. Second, +to output all the elements of an array, we replace the numeric index with +the @ symbol (you can think of @ as standing for all): + +```bash +type="article" +echo "Found 42 $type" +``` + +*[RTFM]: Read the Fucking Manual +*[HTML]: Hyper Text Markup Language + +[^1]: Example Footnote diff --git a/gawa/blog/data/articles/en-bash-arrays.md b/gawa/blog/data/articles/en-bash-arrays.md new file mode 100644 index 0000000..1fa7e64 --- /dev/null +++ b/gawa/blog/data/articles/en-bash-arrays.md @@ -0,0 +1,90 @@ +**NOTE** + +This is a stolen article from [opensource.com](https://opensource.com/article/18/5/you-dont-know-bash-intro-bash-arrays) +about bash scripting. It's a good article and I've decided to use it to test my +markdown rendering. + +# Bash scripting + +[TOC] + + +## Wait, but why? + +Writing about Bash is challenging because it's remarkably easy for an article +to devolve into a manual that focuses on syntax oddities. Rest assured, +however, the intent of this article is to avoid having you RTFM. + +## A real (actually useful) example + +To that end, let's consider a real-world scenario and how Bash can help: +You are leading a new effort at your company to evaluate and optimize the +runtime of your internal data pipeline. As a first step, you want to do a +parameter sweep to evaluate how well the pipeline makes use of threads. For +the sake of simplicity, we'll treat the pipeline as a compiled C++ black box +where the only parameter we can tweak is the number of threads reserved for +data processing: `./pipeline --threads 4.` + +## The basics + +The first thing we'll do is define an array containing the values of the +`--threads` parameter that we want to test: + +```bash +allThreads=(1 2 4 8 16 32 64 128) +``` + +In this example, all the elements are numbers, but it need not be the +case—arrays in Bash can contain both numbers and strings, e.g., `myArray=(1 +2 "three" 4 "five")` is a valid expression. And just as with any other Bash +variable, make sure to leave no spaces around the equal sign. Otherwise, +Bash will treat the variable name as a program to execute, and the `=` as its +first parameter! + +Now that we've initialized the array, let's retrieve a few of its +elements. You'll notice that simply doing `echo $allThreads` will output only +the first element. + +To understand why that is, let's take a step back and revisit how we usually +output variables in Bash. Consider the following scenario: + +```bash +type="article" echo "Found 42 $type" +``` + +Say the variable $type is given to us as a singular noun and we want to add +an `s` at the end of our sentence. We can't simply add an s to `$type` since +that would turn it into a different variable, `$types`. And although we could +utilize code contortions such as `echo "Found 42 "$type"s"`, the best way +to solve this problem is to use curly braces: `echo "Found 42 ${type}s"`, +which allows us to tell Bash where the name of a variable starts and ends +(interestingly, this is the same syntax used in JavaScript/ES6 to inject +variables and expressions in template literals). + +So as it turns out, although Bash variables don't generally require curly +brackets, they are required for arrays. In turn, this allows us to specify +the index to access, e.g., `echo ${allThreads[1]}` returns the second element +of the array. Not including brackets, e.g.,`echo $allThreads[1]`, leads Bash +to treat `[1]` as a string and output it as such. + +Yes, Bash arrays have odd syntax, but at least they are zero-indexed, unlike +some other languages (I'm looking at you, R).[^1] + +## Looping through arrays + +Although in the examples above we used integer indices in our arrays, let's +consider two occasions when that won't be the case: First, if we wanted the +$i-th element of the array, where $i is a variable containing the index of +interest, we can retrieve that element using: echo ${allThreads[$i]}. Second, +to output all the elements of an array, we replace the numeric index with +the @ symbol (you can think of @ as standing for all): + +```bash +type="article" +echo "Found 42 $type" +``` + +*[RTFM]: Read the Fucking Manual +*[HTML]: Hyper Text Markup Language + +[^1]: Example Footnote diff --git a/gawa/blog/migrations/0001_initial.py b/gawa/blog/migrations/0001_initial.py index b5a62a1..b521008 100644 --- a/gawa/blog/migrations/0001_initial.py +++ b/gawa/blog/migrations/0001_initial.py @@ -1,12 +1,47 @@ -# Generated by Django 3.2.19 on 2023-06-03 12:03 +# Generated by Django 3.2.21 on 2023-10-02 08:14 -from django.db import migrations +import blog.models +from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): + initial = True + dependencies = [ + ('start', '0001_initial'), ] operations = [ + migrations.CreateModel( + name='Category', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=50)), + ('slug', models.SlugField(unique=True)), + ], + options={ + 'verbose_name': 'Category', + 'verbose_name_plural': 'Categories', + }, + ), + migrations.CreateModel( + name='BlogPost', + fields=[ + ('searchable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='start.searchable')), + ('body_en', models.TextField(blank=True, default='Dieser Artikel ist nicht auf deutsch verfügbar.')), + ('body_de', models.TextField(blank=True, default='This aritcle is not available in english.')), + ('thumbnail', models.ImageField(blank=True, default='img/thumbnails/default.jpg', upload_to='img/thumbnails')), + ('featured', models.BooleanField(default=False)), + ('langs', models.CharField(default="{'en': False, 'de': False}", max_length=64)), + ('slug', models.SlugField()), + ('category', models.ForeignKey(default=blog.models.Category.get_or_create_uncategorized, on_delete=django.db.models.deletion.SET_DEFAULT, to='blog.category')), + ], + options={ + 'verbose_name': 'blog post', + 'verbose_name_plural': 'blog posts', + }, + bases=('start.searchable',), + ), ] diff --git a/gawa/blog/migrations/0002_blogpost_category.py b/gawa/blog/migrations/0002_blogpost_category.py deleted file mode 100644 index d4c110c..0000000 --- a/gawa/blog/migrations/0002_blogpost_category.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-03 12:03 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('start', '0002_keyword_searchable_staticsite'), - ('blog', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Category', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=50)), - ('slug', models.SlugField()), - ], - ), - migrations.CreateModel( - name='BlogPost', - fields=[ - ('searchable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='start.searchable')), - ('body', models.TextField()), - ('thumbnail', models.ImageField(blank=True, upload_to='')), - ('category', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='blog.category')), - ], - bases=('start.searchable',), - ), - ] diff --git a/gawa/blog/migrations/0003_blogpost_public.py b/gawa/blog/migrations/0003_blogpost_public.py deleted file mode 100644 index 4e45995..0000000 --- a/gawa/blog/migrations/0003_blogpost_public.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-03 18:52 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('blog', '0002_blogpost_category'), - ] - - operations = [ - migrations.AddField( - model_name='blogpost', - name='public', - field=models.BooleanField(default=True), - ), - ] diff --git a/gawa/blog/migrations/0004_blogpost_slug.py b/gawa/blog/migrations/0004_blogpost_slug.py deleted file mode 100644 index e7e4941..0000000 --- a/gawa/blog/migrations/0004_blogpost_slug.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-03 19:06 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('blog', '0003_blogpost_public'), - ] - - operations = [ - migrations.AddField( - model_name='blogpost', - name='slug', - field=models.SlugField(default='test'), - preserve_default=False, - ), - ] diff --git a/gawa/blog/migrations/0005_auto_20230604_0050.py b/gawa/blog/migrations/0005_auto_20230604_0050.py deleted file mode 100644 index f831cf9..0000000 --- a/gawa/blog/migrations/0005_auto_20230604_0050.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-03 22:50 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('blog', '0004_blogpost_slug'), - ] - - operations = [ - migrations.AddField( - model_name='blogpost', - name='featured', - field=models.BooleanField(default=False), - ), - migrations.AlterField( - model_name='blogpost', - name='thumbnail', - field=models.ImageField(blank=True, upload_to='img/thumbnails'), - ), - ] diff --git a/gawa/blog/migrations/0006_blogpost_markdown.py b/gawa/blog/migrations/0006_blogpost_markdown.py deleted file mode 100644 index 833d6ea..0000000 --- a/gawa/blog/migrations/0006_blogpost_markdown.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-03 22:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('blog', '0005_auto_20230604_0050'), - ] - - operations = [ - migrations.AddField( - model_name='blogpost', - name='markdown', - field=models.BooleanField(default=False), - ), - ] diff --git a/gawa/blog/migrations/0007_remove_blogpost_public.py b/gawa/blog/migrations/0007_remove_blogpost_public.py deleted file mode 100644 index 220197b..0000000 --- a/gawa/blog/migrations/0007_remove_blogpost_public.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-03 23:13 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('blog', '0006_blogpost_markdown'), - ] - - operations = [ - migrations.RemoveField( - model_name='blogpost', - name='public', - ), - ] diff --git a/gawa/blog/migrations/0008_auto_20230604_0156.py b/gawa/blog/migrations/0008_auto_20230604_0156.py deleted file mode 100644 index 6b405bb..0000000 --- a/gawa/blog/migrations/0008_auto_20230604_0156.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-03 23:56 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('blog', '0007_remove_blogpost_public'), - ] - - operations = [ - migrations.AlterModelOptions( - name='blogpost', - options={'verbose_name': 'blog post', 'verbose_name_plural': 'blog posts'}, - ), - migrations.AlterModelOptions( - name='category', - options={'verbose_name': 'Category', 'verbose_name_plural': 'Categories'}, - ), - ] diff --git a/gawa/blog/migrations/0009_auto_20230616_2236.py b/gawa/blog/migrations/0009_auto_20230616_2236.py deleted file mode 100644 index a69017a..0000000 --- a/gawa/blog/migrations/0009_auto_20230616_2236.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-16 20:36 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('blog', '0008_auto_20230604_0156'), - ] - - operations = [ - migrations.RemoveField( - model_name='blogpost', - name='body', - ), - migrations.AddField( - model_name='blogpost', - name='body_de', - field=models.TextField(default='Bis jetzt keine deutsche Übersetzung.'), - ), - migrations.AddField( - model_name='blogpost', - name='body_en', - field=models.TextField(default='No english translation yet.'), - ), - ] diff --git a/gawa/blog/models.py b/gawa/blog/models.py index 7e4ba13..395ec6d 100644 --- a/gawa/blog/models.py +++ b/gawa/blog/models.py @@ -1,10 +1,34 @@ +import toml +import ast +import re +import os +import pathlib +import markdown from django.db import models from django.utils.translation import gettext as _ -from start.models import Searchable +from start.models import Keyword, Searchable import logging logger = logging.getLogger(__name__) +EXTENSIONS = [ + "extra", + "admonition", + "codehilite", + "meta", + "toc" +] +EXTENSION_CONFIGS = { + 'codehilite': { + 'linenums': True, + 'pygments_style': 'monokai' + }, +} + +MD = markdown.Markdown(extensions=EXTENSIONS, + extension_configs=EXTENSION_CONFIGS) + + class Category(models.Model): """ A category of blog posts @@ -12,8 +36,8 @@ class Category(models.Model): Name not translated because it would make i18n in urls and Searchables specifically a pain. Maybe some day it would be cool if these were Searchable """ - name= models.CharField(max_length=50) - slug = models.SlugField() + name = models.CharField(max_length=50) + slug = models.SlugField(unique=True) class Meta: verbose_name = _("Category") @@ -22,18 +46,46 @@ class Category(models.Model): def __str__(self): return f"{{<{self.__class__.__name__}>\"{self.name}\"}}" + @staticmethod + def get_or_create_uncategorized(): + try: + return Category.objects.get(slug="uncategorized") + except Category.DoesNotExist: + return Category.objects.create( + slug="uncategorized", name="uncategorized") + + class BlogPost(Searchable): """ Should contain a blogpost """ - body_en = models.TextField(default="No english translation yet.") - body_de = models.TextField(default="Bis jetzt keine deutsche Übersetzung.") - category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True) - thumbnail = models.ImageField(blank=True, upload_to="img/thumbnails") - featured = models.BooleanField(default=False) - markdown = models.BooleanField(default=False) - slug = models.SlugField() + DATA_DIR = "/app/blog/data/articles" + DEFAULT_LANGS = {'en': False, 'de': False} + META_TOP_KEYS = [ + "date", + "update", + "keywords", + "category", + "featured", + "public", + "lang"] + META_LANG_KEYS = ["title", "subtitle", "desc"] + body_en = models.TextField(blank=True, + default="""Dieser Artikel ist nicht auf deutsch verfügbar.""") + body_de = models.TextField(blank=True, + default="""This aritcle is not available in english.""") + category = models.ForeignKey( + Category, on_delete=models.SET_DEFAULT, null=False, + default=Category.get_or_create_uncategorized) + thumbnail = models.ImageField( + blank=True, + upload_to="img/thumbnails", + default="img/thumbnails/default.jpg") + featured = models.BooleanField(default=False) + langs = models.CharField( + default=DEFAULT_LANGS.__repr__(), max_length=64) + slug = models.SlugField() def regenerate(self): """ @@ -42,9 +94,207 @@ class BlogPost(Searchable): Implements the abstract method of Searchable """ logger.info(f"regenerating {self.__class__.__name__} object: {self}") + # url stuff self.suburl = f"/blog/{self.category.name}/{self.slug}" + + # load from markdown + # self.sync_file() + + # redundand vvvv self.save() + def sync_file(self): + """ + generate an article fromm it's original markdown file + """ + logger = logging.getLogger(__name__) + logger.info(f"syncing article to markdown for: {self}") + # read metadata + try: + fmeta = open(f"{self.DATA_DIR}/{self.slug}.toml", "r") + except Exception as e: + logger.error(f"could not find meta file for '{self}'") + return + data = toml.load(fmeta) + langs = self.get_langs() + for key in self.META_TOP_KEYS: + if key not in data: + logger.error(f"Key '{key}' missing in meta file for '{self}'") + raise ValueError( + f"Key '{key}' missing in meta file for '{self}'") + for lang in self.DEFAULT_LANGS.keys(): + if lang not in data['lang']: + langs[lang] = False + else: + langs[lang] = True + self.set_langs(langs) + for lang in data['lang']: + for key in self.META_LANG_KEYS: + if key not in data['lang'][lang]: + logger.warning( + f"Key '{key}' ('{lang}') missing in meta file for '{self}'") + langs[lang] = False + else: + langs[lang] = True + if not langs[lang]: + # no translation for this language + continue + with open(f"{self.DATA_DIR}/{lang}-{self.slug}.md") as f_en: + MD.reset() + body: str = f_en.read() + match lang: + case "en": + self.title_en = data['lang'][lang]["title"] + self.subtitle_en = data['lang'][lang]["subtitle"] + self.desc_en = data['lang'][lang]["desc"] + self.body_en = MD.convert(body) + case "de": + self.title_de = data['lang'][lang]["title"] + self.subtitle_de = data['lang'][lang]["subtitle"] + self.desc_de = data['lang'][lang]["desc"] + self.body_de = MD.convert(body) + case _: + logger.error( + f"unknown language '{lang}' in meta file for '{self}'") + self.date = data["date"] + self.update = data["update"] + self.featured = data["featured"] + self.public = data["public"] + # NOTE: thumbnail is optional + if "thumbnail" in data: + self.thumbnail = data["thumbnail"] + # NOTE: category is optional + if "category" in data: + try: + category: Category = Category.objects.get( + slug=data['category']) + except Category.DoesNotExist: + category = Category.objects.create( + name=data['category'], slug=data['category']) + self.category = category + self.save() + for keyword in data["keywords"]: + try: + self.keywords.add(Keyword.objects.get(slug=keyword)) + except Keyword.DoesNotExist: + self.keywords.create( + slug=keyword, text_en=keyword, text_de=keyword) + self.save() + + def get_langs(self) -> dict[str, bool]: + """ + get available languages + """ + # SECURITY: + # If someone could inject the langs field, literal_eval will evaluate to + # any literal Python value. This should not be a concern. + # If we would use a regular eval here, an attacker who controls one of + # the `langs` of a BlogPost could run arbitrary Python code. + try: + # literal_eval is safe because it only parses literals, not any kind + # of python expression. If the given str is not a valid literal, + # ValueError will be raised + langs = ast.literal_eval(str(self.langs)) + return langs + except ValueError as e: + logger.error( + f"could not safely evaluate 'langs' for '{self}': {e}") + raise e + + def set_langs(self, langs: dict[str, bool]): + """ + set available languages + """ + self.langs = langs.__repr__() + + @ classmethod + def sync_with_fs(cls): + """ + Sync all Blog Posts with the filesystem. + + Caution: Will delete all Blog Posts + """ + # logger.name = logger.name + ".sync_with_fs" + + # delete all existing objects + BlogPost.objects.all().delete() + + # check if the DATA_DIR is OK + data_dir = pathlib.Path(cls.DATA_DIR) + if not data_dir.exists(): + logger.error(f"'{cls.DATA_DIR} does not exist'") + if not data_dir.is_dir(): + logger.error(f"'{cls.DATA_DIR} is not a directory'") + + files = [f for f in os.listdir(data_dir) if ( + data_dir.joinpath(f)).is_file()] + logger.debug(f"discovered files: {files}") + + # finding lang and title + regex = r"^(en|de)-(.*)\.md" + # TODO: only find toml files + + # filepath, language codes, slug + files = [[f, cls.DEFAULT_LANGS, ""] for f in files] + for file in files: + # parse file name + try: + matches = re.match(regex, file[0]) + if matches is None: + logger.warning( + f"Data file '{file[0]}' does not fit to the filename\ + regex") + files.remove(file) + else: + current_lang = matches.group(1) + file[1][current_lang] = True + file[2] = matches.group(2) + except Exception as e: + logger.error(e) + files.remove(file) + + # PERF: + # Optimize for single loop, should be doable and better design + + # collapse diffrent versions + for file in files: + try: + if [_f[2] for _f in files].count(file[2]) >= 2: + logger.debug(f"multiple versions of '{file[2]}'") + versions = [_f for _f in files if _f[2] == file[2]] + lang: dict[str, bool] = file[1] + for version in versions: + for key in version[1]: + lang[key] |= version[1][key] + else: + # only a single version of this file + continue + except Exception as e: + logger.error( + f"Could not combine BlogPosts for '{file[0]}': {e}") + + # TODO: not needed when relying on toml files + try: + # deduplicate + _files = [] + for f in [[_f[1], _f[2]] + for _f in files]: # dont care about fname + if f not in _files: + _files.append(f) + files = _files + logger.debug(f"to save: {files}") + except Exception as e: + logger.error(f"Could not dedup BlogPosts: {e}") + + for file in files: + try: + obj = BlogPost(langs=file[0], slug=file[1]) + obj.sync_file() + obj.regenerate() + obj.save() + except Exception as e: + logger.error(f"Could not create BlogPost for '{file[1]}': {e}") + class Meta: verbose_name = _("blog post") verbose_name_plural = _("blog posts") diff --git a/gawa/blog/templates/admin/blogpost.html b/gawa/blog/templates/admin/blogpost.html new file mode 100644 index 0000000..750d46d --- /dev/null +++ b/gawa/blog/templates/admin/blogpost.html @@ -0,0 +1,6 @@ +{% extends 'admin/change_list.html' %} {% block object-tools %} +
+ {% csrf_token %} + +
+{{ block.super }} {% endblock %} diff --git a/gawa/blog/templates/blog/blogpost.html b/gawa/blog/templates/blog/blogpost.html index 94e40c4..09a0e79 100644 --- a/gawa/blog/templates/blog/blogpost.html +++ b/gawa/blog/templates/blog/blogpost.html @@ -1,69 +1,96 @@ {% extends 'base.html' %} {% load i18n %} +{% load helper_tags %} {% get_current_language as LANGUAGE_CODE %} -{% block languagecode %}{{ LANGUAGE_CODE }}{% endblock languagecode %} -{% block title %}{% translate "cscherr.de" %} - {% translate "Blog" %}{% endblock title %} +{% block languagecode %} + {{ LANGUAGE_CODE }} +{% endblock languagecode %} +{% block title %} + {% translate "cscherr.de" %} - {% translate "Blog" %} +{% endblock title %} {% block nav %} -{% include 'nav.html' %} + {% include 'nav.html' %} {% endblock nav %} {% block headscripts %} - + {% endblock headscripts %} {% block main %} -
-
-
-
-
+
+
+
+
+
+ + thumbnail + +
+
+
+ {% if LANGUAGE_CODE == "de" %} +

+ {{ post.title_de }} +
+ {{ post.subtitle_de }} +

+
+ {% elif LANGUAGE_CODE == "en" %} +

+ {{ post.title_en }} +
+ {{ post.subtitle_en }} +

+
+ {% else %} +

+ {{ post.title_en }} +
+ {{ post.subtitle_en }} +

+
+ {% endif %} +
+
+ {% if LANGUAGE_CODE == "de" %} +

{{ post.desc_de }}

+ {% elif LANGUAGE_CODE == "en" %} +

{{ post.desc_en }}

+ {% else %} +

{{ post.desc_en }}

+ {% endif %} +
+
+

+ {{ post.category.name }} +

+
+
+
+
+
+
{% if LANGUAGE_CODE == "de" %} -

{{ post.title_de }}
- {{ post.subtitle_de }}


+ {{ post.body_de | safe }} {% elif LANGUAGE_CODE == "en" %} -

{{ post.title_en }}
- {{ post.subtitle_en }}


+ {{ post.body_en | safe }} {% else %} -

{{ post.title_en }}
- {{ post.subtitle_en }}


+ {{ post.body_en | safe }} {% endif %}
-
-
-
- - thumbnail - -
-
+
+
- {% if LANGUAGE_CODE == "de" %} -

{{ post.desc_de }}

- {% elif LANGUAGE_CODE == "en" %} -

{{ post.desc_en }}

- {% else %} -

{{ post.desc_en }}

- {% endif %} + {% format_time post.date as date %} +

{% trans "published" %}: {{ date }}

-

{{ post.date }}

-
-
-

{{ post.category.name }}

+ {% format_time post.update as update %} +

{% trans "updated" %}: {{ update }}

-
+
-
-
- {% if LANGUAGE_CODE == "de" %} - {{ post.body_de | safe }} - {% elif LANGUAGE_CODE == "en" %} - {{ post.body_en | safe }} - {% else %} - {{ post.body_en | safe }} - {% endif %} -
-
- -
-{% include 'blog/featured.html' %} -{% endblock main %} + {% include 'blog/featured.html' %} + {% endblock main %} diff --git a/gawa/blog/templates/blog/featured.html b/gawa/blog/templates/blog/featured.html index 22d064a..a575c4f 100644 --- a/gawa/blog/templates/blog/featured.html +++ b/gawa/blog/templates/blog/featured.html @@ -1,40 +1,59 @@ {% load i18n %} +{% load helper_tags %} {% get_current_language as LANGUAGE_CODE %} {% endfor %}
diff --git a/gawa/gawa/settings.py b/gawa/gawa/settings.py index 25546ad..4c65909 100644 --- a/gawa/gawa/settings.py +++ b/gawa/gawa/settings.py @@ -11,6 +11,8 @@ https://docs.djangoproject.com/en/3.2/ref/settings/ """ # for getting envvars +import logging +from django.utils.translation import gettext_lazy as _ import os # default django @@ -35,7 +37,7 @@ ALLOWED_HOSTS = ["*"] # Allow inclusion of stuff from these origins CORS_ALLOWED_ORIGINS = [ - "https://static.cscherr.de", + "https://static.cscherr.de", ] # Application definition @@ -100,7 +102,6 @@ DATABASES = { } - # Password validation # https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators @@ -123,7 +124,6 @@ AUTH_PASSWORD_VALIDATORS = [ # Internationalization # https://docs.djangoproject.com/en/3.2/topics/i18n/ -from django.utils.translation import gettext_lazy as _ LANGUAGES = [ ("de", _("German")), @@ -155,10 +155,10 @@ STATIC_URL = '/static/' COMPRESS_ENABLED = True STATICFILES_FINDERS = [ - 'django.contrib.staticfiles.finders.FileSystemFinder', - 'django.contrib.staticfiles.finders.AppDirectoriesFinder', - 'compressor.finders.CompressorFinder', - ] + 'django.contrib.staticfiles.finders.FileSystemFinder', + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', + 'compressor.finders.CompressorFinder', +] COMPRESS_PRECOMPILERS = ( ('text/x-scss', 'django_libsass.SassCompiler'), @@ -173,7 +173,6 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' # Logging configs -import logging myServerFormatter = ServerFormatter myServerFormatter.default_time_format = "%Y-%M-%d %H:%M:%S" @@ -294,7 +293,7 @@ LOGGING = { # Media stuff # this is where user uploaded files will go. # TODO change this for prod -#MEDIA_ROOT = "/home/plex/Documents/code/python/gawa/media" +# MEDIA_ROOT = "/home/plex/Documents/code/python/gawa/media" MEDIA_ROOT = "/app/media" MEDIA_URL = "/media/" -FILE_UPLOAD_TEMP_DIR = "/tmp/gawa/upload" +# FILE_UPLOAD_TEMP_DIR = "/tmp/gawa/upload" diff --git a/gawa/gawa/urls.py b/gawa/gawa/urls.py index 26c88d8..e748c58 100644 --- a/gawa/gawa/urls.py +++ b/gawa/gawa/urls.py @@ -14,14 +14,14 @@ Including another URLconf 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.conf.urls.i18n import i18n_patterns -from django.conf.urls import url from django.contrib import admin +from django.urls import include, re_path from django.urls import include, path from django.conf import settings from django.conf.urls.static import static urlpatterns = [ - url(r'^i18n/', include('django.conf.urls.i18n')), + re_path(r'^i18n/', include('django.conf.urls.i18n')), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += i18n_patterns( diff --git a/gawa/media/img/thumbnails/AlbumCover.png b/gawa/media/img/thumbnails/AlbumCover.png deleted file mode 100644 index 51a81fa..0000000 Binary files a/gawa/media/img/thumbnails/AlbumCover.png and /dev/null differ diff --git a/gawa/media/img/thumbnails/bash.png b/gawa/media/img/thumbnails/bash.png new file mode 100644 index 0000000..2ede2ad Binary files /dev/null and b/gawa/media/img/thumbnails/bash.png differ diff --git a/gawa/media/img/thumbnails/default.jpg b/gawa/media/img/thumbnails/default.jpg new file mode 100644 index 0000000..c808d08 Binary files /dev/null and b/gawa/media/img/thumbnails/default.jpg differ diff --git a/gawa/media/img/thumbnails/wayland_logo.png b/gawa/media/img/thumbnails/wayland_logo.png deleted file mode 100644 index 06c7038..0000000 Binary files a/gawa/media/img/thumbnails/wayland_logo.png and /dev/null differ diff --git a/gawa/start/admin.py b/gawa/start/admin.py index a050b64..5865b61 100644 --- a/gawa/start/admin.py +++ b/gawa/start/admin.py @@ -10,6 +10,7 @@ def regenerate(modeladmin, request, queryset): for obj in queryset: obj.regenerate() + @admin.register(Keyword) class KeywordAdmin(admin.ModelAdmin): """ @@ -17,21 +18,25 @@ class KeywordAdmin(admin.ModelAdmin): """ list_display = ["text_en", "text_de"] + @admin.register(StaticSite) class StaticSiteAdmin(admin.ModelAdmin): """ Admin Interface for StaticSite """ - list_display = ["title_en", "subtitle_en", "title_de", "subtitle_de", "suburl"] + list_display = ["title_en", "subtitle_en", + "title_de", "subtitle_de", "suburl"] ordering = ['title_de', 'title_en'] actions = [regenerate] + @admin.register(Searchable) class SearchableAdmin(admin.ModelAdmin): """ Abstract Admin Interface for all Searchables """ - list_display = ["title_en", "subtitle_en", "title_de", "subtitle_de", "suburl"] + list_display = ["title_en", "subtitle_en", + "title_de", "subtitle_de", "suburl"] ordering = ['title_de', 'title_en'] actions = [regenerate] @@ -41,6 +46,7 @@ class LinkAdmin(admin.ModelAdmin): """ Admin Interface for Links """ - list_display = ["title_en", "title_de", "url", "suburl", "favicon", "status", "personal"] + list_display = ["title_en", "title_de", "url", + "suburl", "favicon", "status", "personal"] ordering = ['status', 'title_de', 'title_en'] actions = [regenerate] diff --git a/gawa/start/apps.py b/gawa/start/apps.py index 7ec3c85..9f48da5 100644 --- a/gawa/start/apps.py +++ b/gawa/start/apps.py @@ -1,5 +1,6 @@ from django.apps import AppConfig + class StartConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'start' diff --git a/gawa/start/forms.py b/gawa/start/forms.py index ae05552..50c218b 100644 --- a/gawa/start/forms.py +++ b/gawa/start/forms.py @@ -1,10 +1,11 @@ from django import forms from django.utils.translation import gettext as _ + class MainSearchForm(forms.Form): search = forms.CharField( - max_length=100, - label='' + max_length=100, + label='' ) search.widget = forms.TextInput( attrs={ diff --git a/gawa/start/middleware.py b/gawa/start/middleware.py index d8fa48f..a2d286c 100644 --- a/gawa/start/middleware.py +++ b/gawa/start/middleware.py @@ -15,7 +15,8 @@ class LangBasedOnUrlMiddleware(MiddlewareMixin): def process_request(request): if hasattr(request, 'session'): - active_session_lang = request.session.get(translation.LANGUAGE_SESSION_KEY) + active_session_lang = request.session.get( + translation.LANGUAGE_SESSION_KEY) if active_session_lang == request.LANGUAGE_CODE: return diff --git a/gawa/start/migrations/0001_initial.py b/gawa/start/migrations/0001_initial.py index b5a62a1..b61b82f 100644 --- a/gawa/start/migrations/0001_initial.py +++ b/gawa/start/migrations/0001_initial.py @@ -1,12 +1,75 @@ -# Generated by Django 3.2.19 on 2023-06-03 12:03 +# Generated by Django 3.2.21 on 2023-10-02 08:14 -from django.db import migrations +from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): + initial = True + dependencies = [ ] operations = [ + migrations.CreateModel( + name='Keyword', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('slug', models.SlugField(unique=True)), + ('text_de', models.CharField(max_length=40)), + ('text_en', models.CharField(max_length=40)), + ], + options={ + 'verbose_name': 'Keyword', + 'verbose_name_plural': 'keywords', + }, + ), + migrations.CreateModel( + name='Searchable', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title_de', models.CharField(default='Nicht übersetzt', max_length=50)), + ('title_en', models.CharField(default='Not translated', max_length=50)), + ('subtitle_de', models.CharField(blank=True, max_length=50)), + ('subtitle_en', models.CharField(blank=True, max_length=50)), + ('desc_de', models.TextField(blank=True, default='Keine Beschreibung', max_length=250)), + ('desc_en', models.TextField(blank=True, default='no description', max_length=250)), + ('date', models.DateTimeField(blank=True, null=True)), + ('update', models.DateTimeField(blank=True, null=True)), + ('suburl', models.CharField(blank=True, max_length=200, null=True)), + ('public', models.BooleanField(default=False)), + ('keywords', models.ManyToManyField(blank=True, to='start.Keyword')), + ], + options={ + 'verbose_name': 'Searchable', + 'verbose_name_plural': 'Searchables', + }, + ), + migrations.CreateModel( + name='Link', + fields=[ + ('searchable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, to='start.searchable')), + ('url', models.URLField(primary_key=True, serialize=False, unique=True)), + ('favicon', models.ImageField(blank=True, null=True, upload_to='img/links/favicons')), + ('status', models.BooleanField(default=False)), + ('personal', models.BooleanField(default=False)), + ], + options={ + 'verbose_name': 'Link', + 'verbose_name_plural': 'Links', + }, + bases=('start.searchable',), + ), + migrations.CreateModel( + name='StaticSite', + fields=[ + ('searchable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='start.searchable')), + ], + options={ + 'verbose_name': 'static site', + 'verbose_name_plural': 'static sites', + }, + bases=('start.searchable',), + ), ] diff --git a/gawa/start/migrations/0002_keyword_searchable_staticsite.py b/gawa/start/migrations/0002_keyword_searchable_staticsite.py deleted file mode 100644 index 77e2dae..0000000 --- a/gawa/start/migrations/0002_keyword_searchable_staticsite.py +++ /dev/null @@ -1,46 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-03 12:03 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('start', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Keyword', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('text_de', models.CharField(max_length=40)), - ('text_en', models.CharField(max_length=40)), - ], - ), - migrations.CreateModel( - name='Searchable', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title_de', models.CharField(default='Titel DE', max_length=50)), - ('title_en', models.CharField(default='title en', max_length=50)), - ('subtitle_de', models.CharField(blank=True, max_length=50)), - ('subtitle_en', models.CharField(blank=True, max_length=50)), - ('desc_de', models.CharField(default='Beschreibung DE', max_length=250, unique=True)), - ('desc_en', models.CharField(default='Description EN', max_length=250, unique=True)), - ('date', models.DateField(blank=True, null=True)), - ('suburl', models.CharField(blank=True, max_length=200, null=True)), - ('keywords', models.ManyToManyField(to='start.Keyword')), - ], - ), - migrations.CreateModel( - name='StaticSite', - fields=[ - ('searchable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='start.searchable')), - ], - bases=('start.searchable',), - ), - ] diff --git a/gawa/start/migrations/0003_searchable_public.py b/gawa/start/migrations/0003_searchable_public.py deleted file mode 100644 index a923f0c..0000000 --- a/gawa/start/migrations/0003_searchable_public.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-03 23:13 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('start', '0002_keyword_searchable_staticsite'), - ] - - operations = [ - migrations.AddField( - model_name='searchable', - name='public', - field=models.BooleanField(default=True), - ), - ] diff --git a/gawa/start/migrations/0004_auto_20230604_2312.py b/gawa/start/migrations/0004_auto_20230604_2312.py deleted file mode 100644 index 079904a..0000000 --- a/gawa/start/migrations/0004_auto_20230604_2312.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-04 21:12 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('start', '0003_searchable_public'), - ] - - operations = [ - migrations.AlterModelOptions( - name='keyword', - options={'verbose_name': 'Keyword', 'verbose_name_plural': 'keywords'}, - ), - migrations.AlterModelOptions( - name='searchable', - options={'verbose_name': 'Searchable', 'verbose_name_plural': 'Searchables'}, - ), - migrations.AlterModelOptions( - name='staticsite', - options={'verbose_name': 'static site', 'verbose_name_plural': 'static sites'}, - ), - migrations.AlterField( - model_name='searchable', - name='desc_de', - field=models.CharField(default='Beschreibung DE', max_length=250), - ), - migrations.AlterField( - model_name='searchable', - name='desc_en', - field=models.CharField(default='Description EN', max_length=250), - ), - ] diff --git a/gawa/start/migrations/0005_link.py b/gawa/start/migrations/0005_link.py deleted file mode 100644 index 30cb69a..0000000 --- a/gawa/start/migrations/0005_link.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-05 16:15 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('start', '0004_auto_20230604_2312'), - ] - - operations = [ - migrations.CreateModel( - name='Link', - fields=[ - ('searchable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, to='start.searchable')), - ('url', models.URLField(primary_key=True, serialize=False, unique=True)), - ], - options={ - 'verbose_name': 'Link', - 'verbose_name_plural': 'Links', - }, - bases=('start.searchable',), - ), - ] diff --git a/gawa/start/migrations/0006_alter_searchable_title_en.py b/gawa/start/migrations/0006_alter_searchable_title_en.py deleted file mode 100644 index b12d787..0000000 --- a/gawa/start/migrations/0006_alter_searchable_title_en.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-05 16:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('start', '0005_link'), - ] - - operations = [ - migrations.AlterField( - model_name='searchable', - name='title_en', - field=models.CharField(default='title EN', max_length=50), - ), - ] diff --git a/gawa/start/migrations/0007_link_favicon.py b/gawa/start/migrations/0007_link_favicon.py deleted file mode 100644 index 6c4f097..0000000 --- a/gawa/start/migrations/0007_link_favicon.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-05 17:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('start', '0006_alter_searchable_title_en'), - ] - - operations = [ - migrations.AddField( - model_name='link', - name='favicon', - field=models.ImageField(blank=True, upload_to='img/links/favicons'), - ), - ] diff --git a/gawa/start/migrations/0008_link_status.py b/gawa/start/migrations/0008_link_status.py deleted file mode 100644 index 8509f2a..0000000 --- a/gawa/start/migrations/0008_link_status.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-05 20:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('start', '0007_link_favicon'), - ] - - operations = [ - migrations.AddField( - model_name='link', - name='status', - field=models.BooleanField(default=False), - ), - ] diff --git a/gawa/start/migrations/0009_alter_link_favicon.py b/gawa/start/migrations/0009_alter_link_favicon.py deleted file mode 100644 index e9aecdf..0000000 --- a/gawa/start/migrations/0009_alter_link_favicon.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-05 23:01 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('start', '0008_link_status'), - ] - - operations = [ - migrations.AlterField( - model_name='link', - name='favicon', - field=models.ImageField(blank=True, null=True, upload_to='img/links/favicons'), - ), - ] diff --git a/gawa/start/migrations/0010_link_personal.py b/gawa/start/migrations/0010_link_personal.py deleted file mode 100644 index 273bbbf..0000000 --- a/gawa/start/migrations/0010_link_personal.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.19 on 2023-07-15 12:29 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('start', '0009_alter_link_favicon'), - ] - - operations = [ - migrations.AddField( - model_name='link', - name='personal', - field=models.BooleanField(default=False), - ), - ] diff --git a/gawa/start/migrations/0011_auto_20230715_1441.py b/gawa/start/migrations/0011_auto_20230715_1441.py deleted file mode 100644 index b0d8291..0000000 --- a/gawa/start/migrations/0011_auto_20230715_1441.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.19 on 2023-07-15 12:41 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('start', '0010_link_personal'), - ] - - operations = [ - migrations.AlterField( - model_name='searchable', - name='desc_de', - field=models.TextField(default='Beschreibung DE', max_length=250), - ), - migrations.AlterField( - model_name='searchable', - name='desc_en', - field=models.TextField(default='Description EN', max_length=250), - ), - ] diff --git a/gawa/start/models.py b/gawa/start/models.py index 0c06496..636e86d 100644 --- a/gawa/start/models.py +++ b/gawa/start/models.py @@ -1,3 +1,6 @@ +import random +import favicon +import requests from django.db import models from django.db.models.options import override from django.utils.translation import gettext as _ @@ -8,24 +11,23 @@ from django.conf import settings import logging logger = logging.getLogger(__name__) -import requests -import favicon -import random class Keyword(models.Model): """ this is the model that should contain searchable keywords """ + slug = models.SlugField(unique=True) text_de = models.CharField(max_length=40) text_en = models.CharField(max_length=40) def __str__(self): - return f"{{<{self.__class__.__name__}>\"{self.text_en}\"}}" + return f"{{<{self.__class__.__name__}>\"{self.slug}\"}}" class Meta: verbose_name = _("Keyword") verbose_name_plural = _("keywords") + class Searchable(models.Model): """ Abstract class for any model that should be searchable. @@ -33,17 +35,19 @@ class Searchable(models.Model): This class is not a real abstract class, I need to query it in the main search, so thats impossible """ - title_de = models.CharField(max_length=50, default="Titel DE") - title_en = models.CharField(max_length=50, default="title EN") + title_de = models.CharField(max_length=50, default="Nicht übersetzt") + title_en = models.CharField(max_length=50, default="Not translated") subtitle_de = models.CharField(max_length=50, blank=True) subtitle_en = models.CharField(max_length=50, blank=True) - desc_de = models.TextField(max_length=250, unique=False, default="Beschreibung DE") - desc_en = models.TextField(max_length=250, unique=False, default="Description EN") - # may be empty/blank for some entries - date = models.DateField(blank=True, null=True) - keywords = models.ManyToManyField(Keyword) + desc_de = models.TextField( + blank=True, max_length=250, unique=False, default="Keine Beschreibung") + desc_en = models.TextField( + blank=True, max_length=250, unique=False, default="no description") + date = models.DateTimeField(blank=True, null=True) + update = models.DateTimeField(blank=True, null=True) + keywords = models.ManyToManyField(Keyword, blank=True) suburl = models.CharField(max_length=200, blank=True, null=True) - public = models.BooleanField(default=True) + public = models.BooleanField(default=False) @classmethod def regenerate_all_entries(cls): @@ -55,18 +59,20 @@ class Searchable(models.Model): obj.regenerate() def __str__(self): - return f"{{<{self.__class__.__name__}>\"{self.title_en}\"}}" + return f"{{<{self.__class__.__name__}>\"{self.slug}\"}}" def regenerate(self): """ regenerate a object """ - raise NotImplementedError(f"{self.__class__.__name__} does not implement regenerate") + raise NotImplementedError( + f"{self.__class__.__name__} does not implement regenerate") class Meta: verbose_name = _("Searchable") verbose_name_plural = _("Searchables") + class StaticSite(Searchable): """ This model represents any static site, such as start:index, @@ -75,20 +81,21 @@ class StaticSite(Searchable): Every searchable view should inherit from start.views.SearchableView. # TODO automate scanning for SearchableView classes """ - + def regenerate(self): """ regenerate a object """ logger.info(f"regenerating {self.__class__.__name__} object: {self}") logger.warning(f"{self.__class__.__name__} cannot regenerate.") - #self.save() + # self.save() pass class Meta: verbose_name = _("static site") verbose_name_plural = _("static sites") + class Link(Searchable): """ contains all my interesting links @@ -121,11 +128,13 @@ class Link(Searchable): icons = favicon.get(self.url, timeout=2) except (ConnectionError) as ce: # just keep whatever was stored if we cant get a new favicon - logger.warn(f"unable to download favicon for {self}: {ce.with_traceback(None)}") + logger.warn( + f"unable to download favicon for {self}: {ce.with_traceback(None)}") self.status = False except Exception as e: - logger.warn(f"Unexpected Exception while downloading {self}: {e.with_traceback(None)}") + logger.warn( + f"Unexpected Exception while downloading {self}: {e.with_traceback(None)}") self.status = False else: @@ -144,9 +153,10 @@ class Link(Searchable): except FileNotFoundError as fe: logger.error(f"cant write favicon to file for {self}: {fe}") self.favicon = None - + except Exception as e: - logger.warn(f"Unexpected Exception while downloading {self}: {e.with_traceback(None)}") + logger.warn( + f"Unexpected Exception while downloading {self}: {e.with_traceback(None)}") self.favicon = None self.save() diff --git a/gawa/start/templates/base.html b/gawa/start/templates/base.html index c9b980f..c413731 100644 --- a/gawa/start/templates/base.html +++ b/gawa/start/templates/base.html @@ -11,13 +11,9 @@ {% compress css %} + + {% endcompress %} - {% block headscripts %} {% endblock headscripts %} @@ -106,6 +102,7 @@ {% compress js %} + {% endcompress %} diff --git a/gawa/start/templates/dark_light_switch.html b/gawa/start/templates/dark_light_switch.html deleted file mode 100644 index 18fb77f..0000000 --- a/gawa/start/templates/dark_light_switch.html +++ /dev/null @@ -1,23 +0,0 @@ - - diff --git a/gawa/start/templates/nav.html b/gawa/start/templates/nav.html index fec8528..51ac8b4 100644 --- a/gawa/start/templates/nav.html +++ b/gawa/start/templates/nav.html @@ -51,7 +51,7 @@ {% include 'main_search_form.html' %} - diff --git a/gawa/start/templatetags/helper_tags.py b/gawa/start/templatetags/helper_tags.py index d5ca8ef..65adf8a 100644 --- a/gawa/start/templatetags/helper_tags.py +++ b/gawa/start/templatetags/helper_tags.py @@ -1,6 +1,7 @@ from django.template import Library from django.urls import resolve, reverse from django.utils.translation import activate, get_language +from datetime import datetime import re @@ -9,6 +10,9 @@ logger = logging.getLogger(__name__) register = Library() +@register.simple_tag +def format_time(timestamp: datetime, format: str = "%F %H:%M:%S %Z") -> str: + return timestamp.strftime(format) @register.simple_tag(takes_context=True) def change_lang(context, lang="de", *args, **kwargs): @@ -19,18 +23,21 @@ def change_lang(context, lang="de", *args, **kwargs): shamelessly stolen from stackoverflow: https://stackoverflow.com/a/41147772 """ + logger = logging.getLogger(__name__) - path = context['request'].get_raw_uri() - url = path try: - cur_lang: str = get_language() - url = re.sub(f"/{cur_lang}/", f"/{lang}/", url) + path = context['request'].get_raw_uri() + url = path + try: + cur_lang: str = get_language() + url = re.sub(f"/{cur_lang}/", f"/{lang}/", url) + except Exception as e: + logger.error(f"exception while building language switcher form: {e}") + logger.debug(f"this is the context: {context}") + + finally: + activate(lang) + return "%s" % url except Exception as e: - logger.error(f"exception while building language switcher form: {e}") - logger.debug(f"this is the context: {context}") - - finally: - activate(lang) - return "%s" % url - + logger.error(f"passing error chain: {e}") diff --git a/gawa/start/urls.py b/gawa/start/urls.py index cf2981d..de4b1cb 100644 --- a/gawa/start/urls.py +++ b/gawa/start/urls.py @@ -9,5 +9,6 @@ urlpatterns = [ path("legal/", views.LegalInfo.as_view(), name="legal"), path("links/", views.Links.as_view(), name="links"), path("professional/", views.LegalInfo.as_view(), name="professional"), - path('language/activate//', views.ActivateLanguage.as_view(), name='activate_language'), + path('language/activate//', + views.ActivateLanguage.as_view(), name='activate_language'), ] diff --git a/gawa/start/views.py b/gawa/start/views.py index 8aacbd8..d07cf7a 100644 --- a/gawa/start/views.py +++ b/gawa/start/views.py @@ -18,6 +18,7 @@ from abc import ABC import logging logger = logging.getLogger(__name__) + class SearchableView(View, ABC): """ This abstract view implements some traits of views that should show up @@ -40,6 +41,7 @@ class Index(TemplateView, SearchableView): template_name: str = "start/index.html" + class Professional(TemplateView, SearchableView): """ Professional informations that might interest a professional employer @@ -47,6 +49,7 @@ class Professional(TemplateView, SearchableView): # TODO template_name: str = "start/legalinfo.html" + class LegalInfo(TemplateView, SearchableView): """ Legal info that the german authorities want. @@ -54,20 +57,22 @@ class LegalInfo(TemplateView, SearchableView): # TODO template_name: str = "start/legalinfo.html" + class ActivateLanguage(View): """ Set the language to whatever """ language_code = '' - redirect_to = '' + redirect_to = '' def get(self, request, *args, **kwargs): - self.redirect_to = request.META.get('HTTP_REFERER') + self.redirect_to = request.META.get('HTTP_REFERER') self.language_code = kwargs.get('language_code') translation.activate(self.language_code) request.session[translation.LANGUAGE_SESSION_KEY] = self.language_code return redirect(self.redirect_to) + class MainSearch(ListView): """ Search for anything. @@ -94,6 +99,7 @@ class MainSearch(ListView): return render(request, "errors/bad_request.html") return super().get(request, *args, **kwargs) + class Links(ListView): """ This View contains links to various interesting sites. @@ -115,6 +121,6 @@ class Links(ListView): return object_list def get_context_data(self, *, object_list=None, **kwargs): - context = super().get_context_data(object_list=object_list, **kwargs) + context = super().get_context_data(object_list=object_list, **kwargs) context['personal_links'] = self.get_queryset_personal_links() return context diff --git a/makemigrations.sh b/makemigrations.sh new file mode 100755 index 0000000..18d7725 --- /dev/null +++ b/makemigrations.sh @@ -0,0 +1,3 @@ +#!/bin/bash +docker compose exec main python /app/manage.py makemigrations +docker compose exec main python /app/manage.py migrate diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..082b81c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +Django>=3.0,<4.0 +psycopg2>=2.8 +mysqlclient>=1.4.3 +django_compressor>=2.2 +django-libsass>=0.7 +pillow>=9.0.0 +colorlog>=6.7.0 +favicon>=0.7.0 +markdown>=3.4.4 +Pygments>=2.16.1 diff --git a/shell.sh b/shell.sh new file mode 100755 index 0000000..d7405b3 --- /dev/null +++ b/shell.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker compose exec -it main python manage.py shell