diff --git a/.coderabbit.yaml b/.coderabbit.yaml new file mode 100644 index 00000000..3cc5119b --- /dev/null +++ b/.coderabbit.yaml @@ -0,0 +1,9 @@ +language: "en-US" +reviews: + profile: "chill" + high_level_summary: true + auto_review: + enabled: true + base_branches: + - ".*" + drafts: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 43dea8d7..8e0d5fbe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,4 +75,4 @@ jobs: - name: Running PHPMD run: vendor/bin/phpmd src/ text config/PHPMD/rules.xml; - name: Running PHP_CodeSniffer - run: vendor/bin/phpcs --standard=config/PhpCodeSniffer/ bin/ src/ tests/ public/; + run: vendor/bin/phpcs --standard=config/PhpCodeSniffer/ --ignore=*/Migrations/* bin/ src/ tests/ public/; diff --git a/config/PHPMD/rules.xml b/config/PHPMD/rules.xml index 081ed9f3..b8b0c3df 100644 --- a/config/PHPMD/rules.xml +++ b/config/PHPMD/rules.xml @@ -4,6 +4,8 @@ PHPMD rules for phpList + */Migrations/* + @@ -71,5 +73,4 @@ - diff --git a/config/doctrine.yml b/config/doctrine.yml index 327cf305..caaaec71 100644 --- a/config/doctrine.yml +++ b/config/doctrine.yml @@ -11,6 +11,7 @@ doctrine: user: '%database_user%' password: '%database_password%' charset: UTF8 + use_savepoints: true orm: auto_generate_proxy_classes: '%kernel.debug%' diff --git a/config/doctrine_migrations.yml b/config/doctrine_migrations.yml index cd7f9e12..97e3bd6f 100644 --- a/config/doctrine_migrations.yml +++ b/config/doctrine_migrations.yml @@ -4,6 +4,7 @@ doctrine_migrations: # 'TatevikGr\RssBundle\RssFeedBundle\Migrations': '%kernel.project_dir%/vendor/tatevikgr/rss-bundle/src/RssFeedBundle/Migrations' all_or_nothing: true organize_migrations: false + custom_template: '%kernel.project_dir%/src/Migrations/_template_migration.php.tpl' storage: table_storage: table_name: 'doctrine_migration_versions' diff --git a/config/services.yml b/config/services.yml index b21dc5aa..59f32e7a 100644 --- a/config/services.yml +++ b/config/services.yml @@ -45,3 +45,8 @@ services: arguments: - '@annotation_reader' - '%kernel.project_dir%/src/Domain/Model/' + + PhpList\Core\Core\Doctrine\OnlyOrmTablesFilter: + lazy: true + tags: + - { name: 'doctrine.dbal.schema_filter', connection: 'default' } diff --git a/resources/Database/Schema.sql b/resources/Database/Schema.sql index d14d73b3..fa9e6966 100644 --- a/resources/Database/Schema.sql +++ b/resources/Database/Schema.sql @@ -1,207 +1,358 @@ +-- MySQL dump 10.13 Distrib 8.0.43, for Linux (x86_64) +-- +-- Host: localhost Database: phplistdb +-- ------------------------------------------------------ +-- Server version 8.0.43-0ubuntu0.20.04.1+esm1 + +/*!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 */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `phplist_admin` +-- + DROP TABLE IF EXISTS `phplist_admin`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_admin` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `loginname` varchar(25) NOT NULL, - `namelc` varchar(255) DEFAULT NULL, - `email` varchar(255) NOT NULL, - `created` datetime DEFAULT NULL, - `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `modifiedby` varchar(25) DEFAULT NULL, - `password` varchar(255) DEFAULT NULL, - `passwordchanged` date DEFAULT NULL, - `superuser` tinyint(4) DEFAULT '0', - `disabled` tinyint(4) DEFAULT '0', - `privileges` text, - PRIMARY KEY (`id`), - UNIQUE KEY `loginnameidx` (`loginname`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; + `id` int NOT NULL AUTO_INCREMENT, + `loginname` varchar(66) NOT NULL, + `namelc` varchar(255) DEFAULT NULL, + `email` varchar(255) NOT NULL, + `created` datetime DEFAULT NULL, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `modifiedby` varchar(66) DEFAULT NULL, + `password` varchar(255) DEFAULT NULL, + `passwordchanged` date DEFAULT NULL, + `superuser` tinyint DEFAULT '0', + `disabled` tinyint DEFAULT '0', + `privileges` text, + PRIMARY KEY (`id`), + UNIQUE KEY `loginnameidx` (`loginname`) +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_admin_attribute` +-- DROP TABLE IF EXISTS `phplist_admin_attribute`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_admin_attribute` ( - `adminattributeid` int(11) NOT NULL, - `adminid` int(11) NOT NULL, - `value` varchar(255) DEFAULT NULL, - PRIMARY KEY (`adminattributeid`,`adminid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `adminattributeid` int NOT NULL, + `adminid` int NOT NULL, + `value` varchar(255) DEFAULT NULL, + PRIMARY KEY (`adminattributeid`,`adminid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_admin_login` +-- + +DROP TABLE IF EXISTS `phplist_admin_login`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_admin_login` ( + `id` int NOT NULL AUTO_INCREMENT, + `moment` bigint NOT NULL, + `adminid` int NOT NULL, + `remote_ip4` varchar(32) NOT NULL, + `remote_ip6` varchar(50) NOT NULL, + `sessionid` varchar(50) NOT NULL, + `active` tinyint NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=414 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_admin_password_request` +-- DROP TABLE IF EXISTS `phplist_admin_password_request`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_admin_password_request` ( - `id_key` int(11) NOT NULL AUTO_INCREMENT, - `date` datetime DEFAULT NULL, - `admin` int(11) DEFAULT NULL, - `key_value` varchar(32) NOT NULL, - PRIMARY KEY (`id_key`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `id_key` int NOT NULL AUTO_INCREMENT, + `date` datetime DEFAULT NULL, + `admin` int DEFAULT NULL, + `key_value` varchar(32) NOT NULL, + PRIMARY KEY (`id_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_adminattribute` +-- DROP TABLE IF EXISTS `phplist_adminattribute`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_adminattribute` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(255) NOT NULL, - `type` varchar(30) DEFAULT NULL, - `listorder` int(11) DEFAULT NULL, - `default_value` varchar(255) DEFAULT NULL, - `required` tinyint(4) DEFAULT NULL, - `tablename` varchar(255) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(30) DEFAULT NULL, + `listorder` int DEFAULT NULL, + `default_value` varchar(255) DEFAULT NULL, + `required` tinyint DEFAULT NULL, + `tablename` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_admintoken` +-- DROP TABLE IF EXISTS `phplist_admintoken`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_admintoken` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `adminid` int(11) NOT NULL, + `id` int NOT NULL AUTO_INCREMENT, + `adminid` int NOT NULL, `value` varchar(255) DEFAULT NULL, - `entered` int(11) NOT NULL, + `entered` int NOT NULL, `expires` datetime NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=3670 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_attachment` +-- DROP TABLE IF EXISTS `phplist_attachment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_attachment` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` int NOT NULL AUTO_INCREMENT, `filename` varchar(255) DEFAULT NULL, `remotefile` varchar(255) DEFAULT NULL, `mimetype` varchar(255) DEFAULT NULL, `description` text, - `size` int(11) DEFAULT NULL, + `size` int DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_bounce` +-- DROP TABLE IF EXISTS `phplist_bounce`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_bounce` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` int NOT NULL AUTO_INCREMENT, `date` datetime DEFAULT NULL, `header` text, `data` mediumblob, `status` varchar(255) DEFAULT NULL, `comment` text, PRIMARY KEY (`id`), - KEY `dateindex` (`date`) -) ENGINE=InnoDB AUTO_INCREMENT=2168 DEFAULT CHARSET=utf8; - -DROP TABLE IF EXISTS phplist_bounceregex; -CREATE TABLE phplist_bounceregex ( - id int(11) NOT NULL AUTO_INCREMENT, - regex varchar(2083) DEFAULT NULL, - regexhash char(32) DEFAULT NULL, - action varchar(255) DEFAULT NULL, - listorder int(11) DEFAULT '0', - admin int(11) DEFAULT NULL, - comment text, - status varchar(255) DEFAULT NULL, - count int(11) DEFAULT '0', - PRIMARY KEY (id), - UNIQUE KEY regex (regexhash) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `dateindex` (`date`), + KEY `statusidx` (`status`(20)) +) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_bounceregex` +-- + +DROP TABLE IF EXISTS `phplist_bounceregex`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_bounceregex` ( + `id` int NOT NULL AUTO_INCREMENT, + `regex` varchar(2083) DEFAULT NULL, + `regexhash` char(32) DEFAULT NULL, + `action` varchar(255) DEFAULT NULL, + `listorder` int DEFAULT '0', + `admin` int DEFAULT NULL, + `comment` text, + `status` varchar(255) DEFAULT NULL, + `count` int DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `regex` (`regexhash`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_bounceregex_bounce` +-- DROP TABLE IF EXISTS `phplist_bounceregex_bounce`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_bounceregex_bounce` ( - `regex` int(11) NOT NULL, - `bounce` int(11) NOT NULL, + `regex` int NOT NULL, + `bounce` int NOT NULL, PRIMARY KEY (`regex`,`bounce`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_config` +-- DROP TABLE IF EXISTS `phplist_config`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_config` ( `item` varchar(35) NOT NULL, `value` longtext, - `editable` tinyint(4) DEFAULT '1', + `editable` tinyint DEFAULT '1', `type` varchar(25) DEFAULT NULL, PRIMARY KEY (`item`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_eventlog` +-- DROP TABLE IF EXISTS `phplist_eventlog`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_eventlog` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` int NOT NULL AUTO_INCREMENT, `entered` datetime DEFAULT NULL, `page` varchar(100) DEFAULT NULL, `entry` text, PRIMARY KEY (`id`), KEY `enteredidx` (`entered`), KEY `pageidx` (`page`) -) ENGINE=InnoDB AUTO_INCREMENT=204119 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=343 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_i18n` +-- DROP TABLE IF EXISTS `phplist_i18n`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_i18n` ( - `lan` varchar(255) NOT NULL, + `lan` varchar(10) NOT NULL, `original` text NOT NULL, `translation` text NOT NULL, - KEY `lanorigidx` (`lan`(50),`original`(200)) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `lanorigunq` (`lan`,`original`(200)), + KEY `lanorigidx` (`lan`,`original`(200)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `phplist_language`; -CREATE TABLE `phplist_language` ( - `iso` varchar(10) DEFAULT NULL, - `name` varchar(255) DEFAULT NULL, - `charset` varchar(100) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +-- +-- Table structure for table `phplist_linktrack` +-- DROP TABLE IF EXISTS `phplist_linktrack`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_linktrack` ( - `linkid` int(11) NOT NULL AUTO_INCREMENT, - `messageid` int(11) NOT NULL, - `userid` int(11) NOT NULL, + `linkid` int NOT NULL AUTO_INCREMENT, + `messageid` int NOT NULL, + `userid` int NOT NULL, `url` varchar(255) DEFAULT NULL, - `forward` text, + `forward` varchar(255) DEFAULT NULL, `firstclick` datetime DEFAULT NULL, - `latestclick` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `clicked` int(11) DEFAULT '0', + `latestclick` timestamp NULL DEFAULT NULL, + `clicked` int DEFAULT '0', PRIMARY KEY (`linkid`), UNIQUE KEY `miduidurlindex` (`messageid`,`userid`,`url`), KEY `midindex` (`messageid`), KEY `uidindex` (`userid`), KEY `urlindex` (`url`), KEY `miduidindex` (`messageid`,`userid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -DROP TABLE IF EXISTS phplist_linktrack_forward; -CREATE TABLE phplist_linktrack_forward ( - id int(11) NOT NULL AUTO_INCREMENT, - url varchar(2083) DEFAULT NULL, - urlhash char(32) DEFAULT NULL, - personalise tinyint(4) DEFAULT '0', - PRIMARY KEY (id), - UNIQUE KEY urlunique (urlhash), - KEY urlindex (url(255)) -) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_linktrack_forward` +-- + +DROP TABLE IF EXISTS `phplist_linktrack_forward`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_linktrack_forward` ( + `id` int NOT NULL AUTO_INCREMENT, + `url` varchar(2083) DEFAULT NULL, + `urlhash` char(32) DEFAULT NULL, + `uuid` varchar(36) DEFAULT '', + `personalise` tinyint DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `urlunique` (`urlhash`), + KEY `urlindex` (`url`(255)), + KEY `uuididx` (`uuid`) +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_linktrack_ml` +-- DROP TABLE IF EXISTS `phplist_linktrack_ml`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_linktrack_ml` ( - `messageid` int(11) NOT NULL, - `forwardid` int(11) NOT NULL, + `messageid` int NOT NULL, + `forwardid` int NOT NULL, `firstclick` datetime DEFAULT NULL, `latestclick` datetime DEFAULT NULL, - `total` int(11) DEFAULT '0', - `clicked` int(11) DEFAULT '0', - `htmlclicked` int(11) DEFAULT '0', - `textclicked` int(11) DEFAULT '0', + `total` int DEFAULT '0', + `clicked` int DEFAULT '0', + `htmlclicked` int DEFAULT '0', + `textclicked` int DEFAULT '0', PRIMARY KEY (`messageid`,`forwardid`), KEY `midindex` (`messageid`), KEY `fwdindex` (`forwardid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_linktrack_uml_click` +-- DROP TABLE IF EXISTS `phplist_linktrack_uml_click`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_linktrack_uml_click` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `messageid` int(11) NOT NULL, - `userid` int(11) NOT NULL, - `forwardid` int(11) DEFAULT NULL, + `id` int NOT NULL AUTO_INCREMENT, + `messageid` int NOT NULL, + `userid` int NOT NULL, + `forwardid` int DEFAULT NULL, `firstclick` datetime DEFAULT NULL, `latestclick` datetime DEFAULT NULL, - `clicked` int(11) DEFAULT '0', - `htmlclicked` int(11) DEFAULT '0', - `textclicked` int(11) DEFAULT '0', + `clicked` int DEFAULT '0', + `htmlclicked` int DEFAULT '0', + `textclicked` int DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `miduidfwdid` (`messageid`,`userid`,`forwardid`), KEY `midindex` (`messageid`), KEY `uidindex` (`userid`), KEY `miduidindex` (`messageid`,`userid`) -) ENGINE=InnoDB AUTO_INCREMENT=58434 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_linktrack_userclick` +-- DROP TABLE IF EXISTS `phplist_linktrack_userclick`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_linktrack_userclick` ( - `linkid` int(11) NOT NULL, - `userid` int(11) NOT NULL, - `messageid` int(11) NOT NULL, + `linkid` int NOT NULL, + `userid` int NOT NULL, + `messageid` int NOT NULL, `name` varchar(255) DEFAULT NULL, `data` text, `date` datetime DEFAULT NULL, @@ -210,52 +361,127 @@ CREATE TABLE `phplist_linktrack_userclick` ( KEY `midindex` (`messageid`), KEY `linkuserindex` (`linkid`,`userid`), KEY `linkusermessageindex` (`linkid`,`userid`,`messageid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_list` +-- DROP TABLE IF EXISTS `phplist_list`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_list` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `description` text, `entered` datetime DEFAULT NULL, - `listorder` int(11) DEFAULT NULL, + `listorder` int DEFAULT NULL, `prefix` varchar(10) DEFAULT NULL, `rssfeed` varchar(255) DEFAULT NULL, `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `active` tinyint(4) DEFAULT NULL, - `owner` int(11) DEFAULT NULL, + `active` tinyint DEFAULT NULL, + `owner` int DEFAULT NULL, `category` varchar(255) DEFAULT '', PRIMARY KEY (`id`), KEY `nameidx` (`name`), KEY `listorderidx` (`listorder`) -) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_listattr_becities` +-- + +DROP TABLE IF EXISTS `phplist_listattr_becities`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_listattr_becities` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `listorder` int DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`(150)) +) ENGINE=InnoDB AUTO_INCREMENT=2680 DEFAULT CHARSET=utf8mb4; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_listattr_termsofservice` +-- + +DROP TABLE IF EXISTS `phplist_listattr_termsofservice`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_listattr_termsofservice` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `listorder` int DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`(150)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_listattr_ukcounties` +-- + +DROP TABLE IF EXISTS `phplist_listattr_ukcounties`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_listattr_ukcounties` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `listorder` int DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`(150)) +) ENGINE=InnoDB AUTO_INCREMENT=184 DEFAULT CHARSET=utf8mb4; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_listattr_ukcounties1` +-- + +DROP TABLE IF EXISTS `phplist_listattr_ukcounties1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_listattr_ukcounties1` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `listorder` int DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`(150)) +) ENGINE=InnoDB AUTO_INCREMENT=184 DEFAULT CHARSET=utf8mb4; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_listmessage` +-- DROP TABLE IF EXISTS `phplist_listmessage`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_listmessage` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `messageid` int(11) NOT NULL, - `listid` int(11) NOT NULL, + `id` int NOT NULL AUTO_INCREMENT, + `messageid` int NOT NULL, + `listid` int NOT NULL, `entered` datetime DEFAULT NULL, `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `messageid` (`messageid`,`listid`), KEY `listmessageidx` (`listid`,`messageid`) -) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `phplist_listrss`; -CREATE TABLE `phplist_listrss` ( - `listid` int(11) NOT NULL, - `type` varchar(255) NOT NULL, - `entered` datetime NOT NULL, - `info` text, - KEY `listididx` (`listid`), - KEY `enteredidx` (`entered`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +-- +-- Table structure for table `phplist_listuser` +-- DROP TABLE IF EXISTS `phplist_listuser`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_listuser` ( - `userid` int(11) NOT NULL, - `listid` int(11) NOT NULL, + `userid` int NOT NULL, + `listid` int NOT NULL, `entered` datetime DEFAULT NULL, `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`userid`,`listid`), @@ -263,192 +489,235 @@ CREATE TABLE `phplist_listuser` ( KEY `userlistenteredidx` (`userid`,`listid`,`entered`), KEY `useridx` (`userid`), KEY `listidx` (`listid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_message` +-- DROP TABLE IF EXISTS `phplist_message`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_message` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` int NOT NULL AUTO_INCREMENT, + `uuid` varchar(36) DEFAULT '', `subject` varchar(255) NOT NULL DEFAULT '(no subject)', `fromfield` varchar(255) NOT NULL DEFAULT '', `tofield` varchar(255) NOT NULL DEFAULT '', `replyto` varchar(255) NOT NULL DEFAULT '', - `message` mediumtext, - `textmessage` mediumtext, + `message` longtext, + `textmessage` longtext, `footer` text, `entered` datetime DEFAULT NULL, `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `embargo` datetime DEFAULT NULL, - `repeatinterval` int(11) DEFAULT '0', + `repeatinterval` int DEFAULT '0', `repeatuntil` datetime DEFAULT NULL, - `requeueinterval` int(11) DEFAULT '0', + `requeueinterval` int DEFAULT '0', `requeueuntil` datetime DEFAULT NULL, `status` varchar(255) DEFAULT NULL, `userselection` text, `sent` datetime DEFAULT NULL, - `htmlformatted` tinyint(4) DEFAULT '0', + `htmlformatted` tinyint DEFAULT '0', `sendformat` varchar(20) DEFAULT NULL, - `template` int(11) DEFAULT NULL, - `processed` mediumint(8) unsigned DEFAULT '0', - `astext` int(11) DEFAULT '0', - `ashtml` int(11) DEFAULT '0', - `astextandhtml` int(11) DEFAULT '0', - `aspdf` int(11) DEFAULT '0', - `astextandpdf` int(11) DEFAULT '0', - `viewed` int(11) DEFAULT '0', - `bouncecount` int(11) DEFAULT '0', + `template` int DEFAULT NULL, + `processed` int unsigned DEFAULT '0', + `astext` int DEFAULT '0', + `ashtml` int DEFAULT '0', + `astextandhtml` int DEFAULT '0', + `aspdf` int DEFAULT '0', + `astextandpdf` int DEFAULT '0', + `viewed` int DEFAULT '0', + `bouncecount` int DEFAULT '0', `sendstart` datetime DEFAULT NULL, `rsstemplate` varchar(100) DEFAULT NULL, - `owner` int(11) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; + `owner` int DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `uuididx` (`uuid`) +) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_message_attachment` +-- DROP TABLE IF EXISTS `phplist_message_attachment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_message_attachment` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `messageid` int(11) NOT NULL, - `attachmentid` int(11) NOT NULL, + `id` int NOT NULL AUTO_INCREMENT, + `messageid` int NOT NULL, + `attachmentid` int NOT NULL, PRIMARY KEY (`id`), KEY `messageidx` (`messageid`), KEY `messageattidx` (`messageid`,`attachmentid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_messagedata` +-- DROP TABLE IF EXISTS `phplist_messagedata`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_messagedata` ( `name` varchar(100) NOT NULL, - `id` int(11) NOT NULL, - `data` text, + `id` int NOT NULL, + `data` longtext, PRIMARY KEY (`name`,`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -DROP TABLE IF EXISTS `phplist_rssitem`; -CREATE TABLE `phplist_rssitem` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` varchar(100) NOT NULL, - `link` varchar(100) NOT NULL, - `source` varchar(255) DEFAULT NULL, - `list` int(11) NOT NULL, - `added` datetime DEFAULT NULL, - `processed` mediumint(8) unsigned DEFAULT '0', - `astext` int(11) DEFAULT '0', - `ashtml` int(11) DEFAULT '0', - PRIMARY KEY (`id`), - KEY `titlelinkidx` (`title`,`link`), - KEY `titleidx` (`title`), - KEY `listidx` (`list`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -DROP TABLE IF EXISTS `phplist_rssitem_data`; -CREATE TABLE `phplist_rssitem_data` ( - `itemid` int(11) NOT NULL, - `tag` varchar(100) NOT NULL, - `data` text, - PRIMARY KEY (`itemid`,`tag`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `phplist_rssitem_user`; -CREATE TABLE `phplist_rssitem_user` ( - `itemid` int(11) NOT NULL, - `userid` int(11) NOT NULL, - `entered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`itemid`,`userid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +-- +-- Table structure for table `phplist_sendprocess` +-- DROP TABLE IF EXISTS `phplist_sendprocess`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_sendprocess` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` int NOT NULL AUTO_INCREMENT, `started` datetime DEFAULT NULL, `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `alive` int(11) DEFAULT '1', + `alive` int DEFAULT '1', `ipaddress` varchar(50) DEFAULT NULL, `page` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_subscribepage` +-- DROP TABLE IF EXISTS `phplist_subscribepage`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_subscribepage` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` int NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, - `active` tinyint(4) DEFAULT '0', - `owner` int(11) DEFAULT NULL, + `active` tinyint DEFAULT '0', + `owner` int DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_subscribepage_data` +-- DROP TABLE IF EXISTS `phplist_subscribepage_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_subscribepage_data` ( - `id` int(11) NOT NULL, + `id` int NOT NULL, `name` varchar(100) NOT NULL, `data` text, PRIMARY KEY (`id`,`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_template` +-- DROP TABLE IF EXISTS `phplist_template`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_template` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` int NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `template` longblob, - `listorder` int(11) DEFAULT NULL, + `template_text` longblob, + `listorder` int DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `title` (`title`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_templateimage` +-- DROP TABLE IF EXISTS `phplist_templateimage`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_templateimage` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `template` int(11) NOT NULL DEFAULT '0', + `id` int NOT NULL AUTO_INCREMENT, + `template` int NOT NULL DEFAULT '0', `mimetype` varchar(100) DEFAULT NULL, `filename` varchar(100) DEFAULT NULL, `data` longblob, - `width` int(11) DEFAULT NULL, - `height` int(11) DEFAULT NULL, + `width` int DEFAULT NULL, + `height` int DEFAULT NULL, PRIMARY KEY (`id`), KEY `templateidx` (`template`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_urlcache` +-- + +DROP TABLE IF EXISTS `phplist_urlcache`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_urlcache` ( + `id` int NOT NULL AUTO_INCREMENT, + `url` varchar(2083) NOT NULL, + `lastmodified` int DEFAULT NULL, + `added` datetime DEFAULT NULL, + `content` longblob, + PRIMARY KEY (`id`), + KEY `urlindex` (`url`(255)) +) ENGINE=InnoDB AUTO_INCREMENT=207 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `phplist_translation`; -CREATE TABLE `phplist_translation` ( - `tag` varchar(255) NOT NULL, - `page` varchar(100) NOT NULL, - `lan` varchar(10) NOT NULL, - `translation` text, - KEY `tagidx` (`tag`), - KEY `pageidx` (`page`), - KEY `lanidx` (`lan`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -DROP TABLE IF EXISTS phplist_urlcache; -CREATE TABLE phplist_urlcache ( - id int(11) NOT NULL AUTO_INCREMENT, - url varchar(2083) NOT NULL, - lastmodified int(11) DEFAULT NULL, - added datetime DEFAULT NULL, - content mediumtext, - PRIMARY KEY (id), - KEY urlindex (url(255)) -) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; +-- +-- Table structure for table `phplist_user_attribute` +-- DROP TABLE IF EXISTS `phplist_user_attribute`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_user_attribute` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `type` varchar(30) DEFAULT NULL, - `listorder` int(11) DEFAULT NULL, + `listorder` int DEFAULT NULL, `default_value` varchar(255) DEFAULT NULL, - `required` tinyint(4) DEFAULT NULL, + `required` tinyint DEFAULT NULL, `tablename` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `nameindex` (`name`), KEY `idnameindex` (`id`,`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_blacklist` +-- DROP TABLE IF EXISTS `phplist_user_blacklist`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_user_blacklist` ( `email` varchar(255) NOT NULL, `added` datetime DEFAULT NULL, UNIQUE KEY `email` (`email`), KEY `emailidx` (`email`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_blacklist_data` +-- DROP TABLE IF EXISTS `phplist_user_blacklist_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_user_blacklist_data` ( `email` varchar(150) NOT NULL, `name` varchar(25) NOT NULL, @@ -456,27 +725,41 @@ CREATE TABLE `phplist_user_blacklist_data` ( UNIQUE KEY `email` (`email`), KEY `emailidx` (`email`), KEY `emailnameidx` (`email`,`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_message_bounce` +-- DROP TABLE IF EXISTS `phplist_user_message_bounce`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_user_message_bounce` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `user` int(11) NOT NULL, - `message` int(11) NOT NULL, - `bounce` int(11) NOT NULL, + `id` int NOT NULL AUTO_INCREMENT, + `user` int NOT NULL, + `message` int NOT NULL, + `bounce` int NOT NULL, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `umbindex` (`user`,`message`,`bounce`), KEY `useridx` (`user`), KEY `msgidx` (`message`), KEY `bounceidx` (`bounce`) -) ENGINE=InnoDB AUTO_INCREMENT=2168 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_message_forward` +-- DROP TABLE IF EXISTS `phplist_user_message_forward`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_user_message_forward` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `user` int(11) NOT NULL, - `message` int(11) NOT NULL, + `id` int NOT NULL AUTO_INCREMENT, + `user` int NOT NULL, + `message` int NOT NULL, `forward` varchar(255) DEFAULT NULL, `status` varchar(255) DEFAULT NULL, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, @@ -484,32 +767,54 @@ CREATE TABLE `phplist_user_message_forward` ( KEY `usermessageidx` (`user`,`message`), KEY `useridx` (`user`), KEY `messageidx` (`message`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_message_view` +-- + +DROP TABLE IF EXISTS `phplist_user_message_view`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_user_message_view` ( + `id` int NOT NULL AUTO_INCREMENT, + `messageid` int NOT NULL, + `userid` int NOT NULL, + `viewed` datetime DEFAULT NULL, + `ip` varchar(255) DEFAULT NULL, + `data` longtext, + PRIMARY KEY (`id`), + KEY `usermsgidx` (`userid`,`messageid`), + KEY `msgidx` (`messageid`), + KEY `useridx` (`userid`) +) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `phplist_user_rss`; -CREATE TABLE `phplist_user_rss` ( - `userid` int(11) NOT NULL, - `last` datetime DEFAULT NULL, - PRIMARY KEY (`userid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +-- +-- Table structure for table `phplist_user_user` +-- DROP TABLE IF EXISTS `phplist_user_user`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_user_user` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` int NOT NULL AUTO_INCREMENT, `email` varchar(255) NOT NULL, - `confirmed` tinyint(4) DEFAULT '0', - `blacklisted` tinyint(4) DEFAULT '0', - `optedin` tinyint(4) DEFAULT '0', - `bouncecount` int(11) DEFAULT '0', + `confirmed` tinyint DEFAULT '0', + `blacklisted` tinyint DEFAULT '0', + `optedin` tinyint DEFAULT '0', + `bouncecount` int DEFAULT '0', `entered` datetime DEFAULT NULL, `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `uniqid` varchar(255) DEFAULT NULL, - `htmlemail` tinyint(4) DEFAULT '0', - `subscribepage` int(11) DEFAULT NULL, + `uuid` varchar(36) DEFAULT '', + `htmlemail` tinyint DEFAULT '0', + `subscribepage` int DEFAULT NULL, `rssfrequency` varchar(100) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `passwordchanged` date DEFAULT NULL, - `disabled` tinyint(4) DEFAULT '0', + `disabled` tinyint DEFAULT '0', `extradata` text, `foreignkey` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`), @@ -519,24 +824,39 @@ CREATE TABLE `phplist_user_user` ( KEY `enteredindex` (`entered`), KEY `confidx` (`confirmed`), KEY `blidx` (`blacklisted`), - KEY `optidx` (`optedin`) -) ENGINE=InnoDB AUTO_INCREMENT=102306 DEFAULT CHARSET=utf8; + KEY `optidx` (`optedin`), + KEY `uuididx` (`uuid`) +) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_user_attribute` +-- DROP TABLE IF EXISTS `phplist_user_user_attribute`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_user_user_attribute` ( - `attributeid` int(11) NOT NULL, - `userid` int(11) NOT NULL, - `value` varchar(255) DEFAULT NULL, + `attributeid` int NOT NULL, + `userid` int NOT NULL, + `value` text, PRIMARY KEY (`attributeid`,`userid`), KEY `userindex` (`userid`), KEY `attindex` (`attributeid`), KEY `attuserid` (`userid`,`attributeid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_user_history` +-- DROP TABLE IF EXISTS `phplist_user_user_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_user_user_history` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `userid` int(11) NOT NULL, + `id` int NOT NULL AUTO_INCREMENT, + `userid` int NOT NULL, `ip` varchar(255) DEFAULT NULL, `date` datetime DEFAULT NULL, `summary` varchar(255) DEFAULT NULL, @@ -545,12 +865,19 @@ CREATE TABLE `phplist_user_user_history` ( PRIMARY KEY (`id`), KEY `userididx` (`userid`), KEY `dateidx` (`date`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_usermessage` +-- DROP TABLE IF EXISTS `phplist_usermessage`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_usermessage` ( - `messageid` int(11) NOT NULL, - `userid` int(11) NOT NULL, + `messageid` int NOT NULL, + `userid` int NOT NULL, `entered` datetime NOT NULL, `viewed` datetime DEFAULT NULL, `status` varchar(255) DEFAULT NULL, @@ -560,19 +887,38 @@ CREATE TABLE `phplist_usermessage` ( KEY `enteredindex` (`entered`), KEY `statusidx` (`status`), KEY `viewedidx` (`viewed`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_userstats` +-- DROP TABLE IF EXISTS `phplist_userstats`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `phplist_userstats` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `unixdate` int(11) DEFAULT NULL, + `id` int NOT NULL AUTO_INCREMENT, + `unixdate` int DEFAULT NULL, `item` varchar(255) DEFAULT NULL, - `listid` int(11) DEFAULT '0', - `value` int(11) DEFAULT '0', + `listid` int DEFAULT '0', + `value` int DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `entry` (`unixdate`,`item`,`listid`), KEY `dateindex` (`unixdate`), KEY `itemindex` (`item`), KEY `listindex` (`listid`), KEY `listdateindex` (`listid`,`unixdate`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!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 */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2025-10-28 14:22:41 diff --git a/src/Bounce/Service/SubscriberBlacklistService.php b/src/Bounce/Service/SubscriberBlacklistService.php index eee70215..38d37e7d 100644 --- a/src/Bounce/Service/SubscriberBlacklistService.php +++ b/src/Bounce/Service/SubscriberBlacklistService.php @@ -40,7 +40,7 @@ public function blacklist(Subscriber $subscriber, string $reason): void { $subscriber->setBlacklisted(true); $this->entityManager->flush(); - $this->blacklistManager->addEmailToBlacklist($subscriber->getEmail(), $reason); + $userBlacklist = $this->blacklistManager->addEmailToBlacklist($subscriber->getEmail(), $reason); $this->entityManager->flush(); foreach (['REMOTE_ADDR','HTTP_X_FORWARDED_FOR'] as $item) { @@ -50,7 +50,7 @@ public function blacklist(Subscriber $subscriber, string $reason): void } if ($request->server->get($item)) { $this->blacklistManager->addBlacklistData( - email: $subscriber->getEmail(), + userBlacklist: $userBlacklist, name: $item, data: $request->server->get($item) ); diff --git a/src/Core/Doctrine/OnlyOrmTablesFilter.php b/src/Core/Doctrine/OnlyOrmTablesFilter.php new file mode 100644 index 00000000..69097fcd --- /dev/null +++ b/src/Core/Doctrine/OnlyOrmTablesFilter.php @@ -0,0 +1,84 @@ +getName(); + $pos = strrpos($name, '.'); + if (false !== $pos) { + $name = substr($name, $pos + 1); + } + $nameLower = strtolower($name); + + [$allow, $allowPrefixes] = $this->buildAllowOnce(); + + if (\is_string($asset) || $asset instanceof Table) { + return \in_array($nameLower, $allow, true); + } + + // PostgreSQL sequences: allow those that belong to our ORM tables + // (default naming: {table}_{column}_seq, so we check table_ prefix) + if ($asset instanceof Sequence) { + foreach ($allowPrefixes as $prefix) { + if (str_starts_with($nameLower, $prefix)) { + return true; + } + } + // Disallow unrelated sequences + return false; + } + + // Other dependent assets (indexes, FKs) are tied to allowed tables → allow + return true; + } + + private function buildAllowOnce(): array + { + if ($this->allow !== null) { + return [$this->allow, $this->allowPrefixes]; + } + + $tables = []; + foreach ($this->entityManager->getMetadataFactory()->getAllMetadata() as $metadatum) { + $tableName = $metadatum->getTableName(); + if ($tableName) { + $tables[] = strtolower($tableName); + } + // many-to-many join tables + foreach ($metadatum->getAssociationMappings() as $assoc) { + if (!empty($assoc['joinTable']['name'])) { + $tables[] = strtolower($assoc['joinTable']['name']); + } + } + } + + $tables[] = 'doctrine_migration_versions'; + + $tables = array_values(array_unique($tables)); + $prefixes = array_map(static fn($table) => $table . '_', $tables); + + $this->allow = $tables; + $this->allowPrefixes = $prefixes; + + return [$this->allow, $this->allowPrefixes]; + } +} diff --git a/src/Domain/Analytics/Model/LinkTrack.php b/src/Domain/Analytics/Model/LinkTrack.php index 2dc32de6..848dde5e 100644 --- a/src/Domain/Analytics/Model/LinkTrack.php +++ b/src/Domain/Analytics/Model/LinkTrack.php @@ -4,6 +4,7 @@ namespace PhpList\Core\Domain\Analytics\Model; +use DateTime; use DateTimeInterface; use Doctrine\ORM\Mapping as ORM; use PhpList\Core\Domain\Analytics\Repository\LinkTrackRepository; @@ -12,11 +13,11 @@ #[ORM\Entity(repositoryClass: LinkTrackRepository::class)] #[ORM\Table(name: 'phplist_linktrack')] -#[ORM\UniqueConstraint(name: 'miduidurlindex', columns: ['messageid', 'userid', 'url'])] -#[ORM\Index(name: 'midindex', columns: ['messageid'])] -#[ORM\Index(name: 'miduidindex', columns: ['messageid', 'userid'])] -#[ORM\Index(name: 'uidindex', columns: ['userid'])] -#[ORM\Index(name: 'urlindex', columns: ['url'])] +#[ORM\UniqueConstraint(name: 'phplist_linktrack_miduidurlindex', columns: ['messageid', 'userid', 'url'])] +#[ORM\Index(name: 'phplist_linktrack_midindex', columns: ['messageid'])] +#[ORM\Index(name: 'phplist_linktrack_miduidindex', columns: ['messageid', 'userid'])] +#[ORM\Index(name: 'phplist_linktrack_uidindex', columns: ['userid'])] +#[ORM\Index(name: 'phplist_linktrack_urlindex', columns: ['url'])] class LinkTrack implements DomainModel, Identity { #[ORM\Id] @@ -39,12 +40,17 @@ class LinkTrack implements DomainModel, Identity #[ORM\Column(name: 'firstclick', type: 'datetime', nullable: true)] private ?DateTimeInterface $firstClick = null; - #[ORM\Column(name: 'latestclick', type: 'datetime', nullable: true, options: ['default' => 'CURRENT_TIMESTAMP'])] + #[ORM\Column(name: 'latestclick', type: 'datetime')] private ?DateTimeInterface $latestClick = null; #[ORM\Column(type: 'integer', nullable: true, options: ['default' => 0])] private int $clicked = 0; + public function __construct() + { + $this->latestClick = new DateTime(); + } + public function getId(): int { return $this->id; diff --git a/src/Domain/Analytics/Model/LinkTrackForward.php b/src/Domain/Analytics/Model/LinkTrackForward.php index 17049dfc..0e03c017 100644 --- a/src/Domain/Analytics/Model/LinkTrackForward.php +++ b/src/Domain/Analytics/Model/LinkTrackForward.php @@ -11,9 +11,9 @@ #[ORM\Entity(repositoryClass: LinkTrackForwardRepository::class)] #[ORM\Table(name: 'phplist_linktrack_forward')] -#[ORM\UniqueConstraint(name: 'urlunique', columns: ['urlhash'])] -#[ORM\Index(name: 'urlindex', columns: ['url'])] -#[ORM\Index(name: 'uuididx', columns: ['uuid'])] +#[ORM\UniqueConstraint(name: 'phplist_linktrack_forward_urlunique', columns: ['urlhash'])] +#[ORM\Index(name: 'phplist_linktrack_forward_urlindex', columns: ['url'])] +#[ORM\Index(name: 'phplist_linktrack_forward_uuididx', columns: ['uuid'])] class LinkTrackForward implements DomainModel, Identity { #[ORM\Id] diff --git a/src/Domain/Analytics/Model/LinkTrackMl.php b/src/Domain/Analytics/Model/LinkTrackMl.php index 8569fa14..419c7911 100644 --- a/src/Domain/Analytics/Model/LinkTrackMl.php +++ b/src/Domain/Analytics/Model/LinkTrackMl.php @@ -11,8 +11,8 @@ #[ORM\Entity(repositoryClass: LinkTrackMlRepository::class)] #[ORM\Table(name: 'phplist_linktrack_ml')] -#[ORM\Index(name: 'fwdindex', columns: ['forwardid'])] -#[ORM\Index(name: 'midindex', columns: ['messageid'])] +#[ORM\Index(name: 'phplist_linktrack_ml_fwdindex', columns: ['forwardid'])] +#[ORM\Index(name: 'phplist_linktrack_ml_midindex', columns: ['messageid'])] class LinkTrackMl implements DomainModel { #[ORM\Id] diff --git a/src/Domain/Analytics/Model/LinkTrackUmlClick.php b/src/Domain/Analytics/Model/LinkTrackUmlClick.php index 2b8c8068..3faf811d 100644 --- a/src/Domain/Analytics/Model/LinkTrackUmlClick.php +++ b/src/Domain/Analytics/Model/LinkTrackUmlClick.php @@ -12,10 +12,10 @@ #[ORM\Entity(repositoryClass: LinkTrackUmlClickRepository::class)] #[ORM\Table(name: 'phplist_linktrack_uml_click')] -#[ORM\UniqueConstraint(name: 'miduidfwdid', columns: ['messageid', 'userid', 'forwardid'])] -#[ORM\Index(name: 'midindex', columns: ['messageid'])] -#[ORM\Index(name: 'miduidindex', columns: ['messageid', 'userid'])] -#[ORM\Index(name: 'uidindex', columns: ['userid'])] +#[ORM\UniqueConstraint(name: 'phplist_linktrack_uml_click_miduidfwdid', columns: ['messageid', 'userid', 'forwardid'])] +#[ORM\Index(name: 'phplist_linktrack_uml_click_midindex', columns: ['messageid'])] +#[ORM\Index(name: 'phplist_linktrack_uml_click_miduidindex', columns: ['messageid', 'userid'])] +#[ORM\Index(name: 'phplist_linktrack_uml_click_uidindex', columns: ['userid'])] class LinkTrackUmlClick implements DomainModel, Identity { #[ORM\Id] diff --git a/src/Domain/Analytics/Model/LinkTrackUserClick.php b/src/Domain/Analytics/Model/LinkTrackUserClick.php index 464ae3e0..27205cbb 100644 --- a/src/Domain/Analytics/Model/LinkTrackUserClick.php +++ b/src/Domain/Analytics/Model/LinkTrackUserClick.php @@ -11,11 +11,11 @@ #[ORM\Entity(repositoryClass: LinkTrackUserClickRepository::class)] #[ORM\Table(name: 'phplist_linktrack_userclick')] -#[ORM\Index(name: 'linkindex', columns: ['linkid'])] -#[ORM\Index(name: 'linkuserindex', columns: ['linkid', 'userid'])] -#[ORM\Index(name: 'linkusermessageindex', columns: ['linkid', 'userid', 'messageid'])] -#[ORM\Index(name: 'midindex', columns: ['messageid'])] -#[ORM\Index(name: 'uidindex', columns: ['userid'])] +#[ORM\Index(name: 'phplist_linktrack_userclick_linkindex', columns: ['linkid'])] +#[ORM\Index(name: 'phplist_linktrack_userclick_linkuserindex', columns: ['linkid', 'userid'])] +#[ORM\Index(name: 'phplist_linktrack_userclick_linkusermessageindex', columns: ['linkid', 'userid', 'messageid'])] +#[ORM\Index(name: 'phplist_linktrack_userclick_midindex', columns: ['messageid'])] +#[ORM\Index(name: 'phplist_linktrack_userclick_uidindex', columns: ['userid'])] class LinkTrackUserClick implements DomainModel { #[ORM\Id] diff --git a/src/Domain/Analytics/Model/UserMessageView.php b/src/Domain/Analytics/Model/UserMessageView.php index 6b80b75e..846c8e97 100644 --- a/src/Domain/Analytics/Model/UserMessageView.php +++ b/src/Domain/Analytics/Model/UserMessageView.php @@ -12,9 +12,9 @@ #[ORM\Entity(repositoryClass: UserMessageViewRepository::class)] #[ORM\Table(name: 'phplist_user_message_view')] -#[ORM\Index(name: 'msgidx', columns: ['messageid'])] -#[ORM\Index(name: 'useridx', columns: ['userid'])] -#[ORM\Index(name: 'usermsgidx', columns: ['userid', 'messageid'])] +#[ORM\Index(name: 'phplist_user_message_view_msgidx', columns: ['messageid'])] +#[ORM\Index(name: 'phplist_user_message_view_useridx', columns: ['userid'])] +#[ORM\Index(name: 'phplist_user_message_view_usermsgidx', columns: ['userid', 'messageid'])] class UserMessageView implements DomainModel, Identity { #[ORM\Id] diff --git a/src/Domain/Analytics/Model/UserStats.php b/src/Domain/Analytics/Model/UserStats.php index a2f835bf..c7b4b97e 100644 --- a/src/Domain/Analytics/Model/UserStats.php +++ b/src/Domain/Analytics/Model/UserStats.php @@ -11,11 +11,11 @@ #[ORM\Entity(repositoryClass: UserStatsRepository::class)] #[ORM\Table(name: 'phplist_userstats')] -#[ORM\UniqueConstraint(name: 'entry', columns: ['unixdate', 'item', 'listid'])] -#[ORM\Index(name: 'dateindex', columns: ['unixdate'])] -#[ORM\Index(name: 'itemindex', columns: ['item'])] -#[ORM\Index(name: 'listdateindex', columns: ['listid', 'unixdate'])] -#[ORM\Index(name: 'listindex', columns: ['listid'])] +#[ORM\UniqueConstraint(name: 'phplist_userstats_entry', columns: ['unixdate', 'item', 'listid'])] +#[ORM\Index(name: 'phplist_userstats_dateindex', columns: ['unixdate'])] +#[ORM\Index(name: 'phplist_userstats_itemindex', columns: ['item'])] +#[ORM\Index(name: 'phplist_userstats_listdateindex', columns: ['listid', 'unixdate'])] +#[ORM\Index(name: 'phplist_userstats_listindex', columns: ['listid'])] class UserStats implements DomainModel, Identity { #[ORM\Id] @@ -29,11 +29,11 @@ class UserStats implements DomainModel, Identity #[ORM\Column(name: 'item', type: 'string', length: 255, nullable: true)] private ?string $item = null; - #[ORM\Column(name: 'listid', type: 'integer', options: ['default' => 0])] + #[ORM\Column(name: 'listid', type: 'integer', nullable: true, options: ['default' => 0])] private int $listId = 0; - #[ORM\Column(name: 'value', type: 'integer', options: ['default' => 0])] - private int $value = 0; + #[ORM\Column(name: 'value', type: 'integer', nullable: true, options: ['default' => 0])] + private ?int $value = null; public function getId(): ?int { diff --git a/src/Domain/Common/Model/Interfaces/ModificationDate.php b/src/Domain/Common/Model/Interfaces/ModificationDate.php index 22432b2f..11c383e2 100644 --- a/src/Domain/Common/Model/Interfaces/ModificationDate.php +++ b/src/Domain/Common/Model/Interfaces/ModificationDate.php @@ -20,14 +20,4 @@ interface ModificationDate * @return DateTime|null */ public function getUpdatedAt(): ?DateTime; - - /** - * Updates the modification date to be now. - * - * @Mapping\PrePersist - * @Mapping\PreUpdate - * - * @return DomainModel - */ - public function updateUpdatedAt(): DomainModel; } diff --git a/src/Domain/Configuration/Model/EventLog.php b/src/Domain/Configuration/Model/EventLog.php index 170171ee..c0cff22b 100644 --- a/src/Domain/Configuration/Model/EventLog.php +++ b/src/Domain/Configuration/Model/EventLog.php @@ -4,6 +4,7 @@ namespace PhpList\Core\Domain\Configuration\Model; +use DateTimeImmutable; use DateTimeInterface; use Doctrine\ORM\Mapping as ORM; use PhpList\Core\Domain\Common\Model\Interfaces\DomainModel; @@ -12,8 +13,9 @@ #[ORM\Entity(repositoryClass: EventLogRepository::class)] #[ORM\Table(name: 'phplist_eventlog')] -#[ORM\Index(name: 'enteredidx', columns: ['entered'])] -#[ORM\Index(name: 'pageidx', columns: ['page'])] +#[ORM\Index(name: 'phplist_eventlog_enteredidx', columns: ['entered'])] +#[ORM\Index(name: 'phplist_eventlog_pageidx', columns: ['page'])] +#[ORM\HasLifecycleCallbacks] class EventLog implements DomainModel, Identity { #[ORM\Id] @@ -35,6 +37,13 @@ public function getId(): ?int return $this->id; } + #[ORM\PrePersist] + public function setCreatedTimestamps(): void + { + $now = new DateTimeImmutable(); + $this->entered = $now; + } + public function getEntered(): ?DateTimeInterface { return $this->entered; diff --git a/src/Domain/Configuration/Model/I18n.php b/src/Domain/Configuration/Model/I18n.php index b8eefd63..72397bb4 100644 --- a/src/Domain/Configuration/Model/I18n.php +++ b/src/Domain/Configuration/Model/I18n.php @@ -15,8 +15,8 @@ */ #[ORM\Entity(repositoryClass: I18nRepository::class)] #[ORM\Table(name: 'phplist_i18n')] -#[ORM\UniqueConstraint(name: 'lanorigunq', columns: ['lan', 'original'])] -#[ORM\Index(name: 'lanorigidx', columns: ['lan', 'original'])] +#[ORM\UniqueConstraint(name: 'phplist_i18n_lanorigunq', columns: ['lan', 'original'])] +#[ORM\Index(name: 'phplist_i18n_lanorigidx', columns: ['lan', 'original'])] class I18n implements DomainModel { #[ORM\Id] diff --git a/src/Domain/Configuration/Model/UrlCache.php b/src/Domain/Configuration/Model/UrlCache.php index 5d460104..b6d032b9 100644 --- a/src/Domain/Configuration/Model/UrlCache.php +++ b/src/Domain/Configuration/Model/UrlCache.php @@ -12,7 +12,8 @@ #[ORM\Entity(repositoryClass: UrlCacheRepository::class)] #[ORM\Table(name: 'phplist_urlcache')] -#[ORM\Index(name: 'urlindex', columns: ['url'])] +#[ORM\Index(name: 'phplist_urlcache_urlindex', columns: ['url'])] +#[ORM\HasLifecycleCallbacks] class UrlCache implements DomainModel, Identity { #[ORM\Id] @@ -71,10 +72,11 @@ public function setLastModified(?int $lastModified): self return $this; } - public function setAdded(?DateTime $added): self + #[ORM\PrePersist] + public function setCreatedTimestamps(): void { - $this->added = $added; - return $this; + $now = new DateTime(); + $this->added = $now; } public function setContent(?string $content): self diff --git a/src/Domain/Identity/Command/CleanUpOldSessionTokens.php b/src/Domain/Identity/Command/CleanUpOldSessionTokens.php index 820db648..981a5210 100644 --- a/src/Domain/Identity/Command/CleanUpOldSessionTokens.php +++ b/src/Domain/Identity/Command/CleanUpOldSessionTokens.php @@ -28,9 +28,6 @@ public function __construct(AdministratorTokenRepository $tokenRepository, Entit $this->entityManager = $entityManager; } - /** - * @SuppressWarnings("PHPMD.UnusedFormalParameter") - */ protected function execute(InputInterface $input, OutputInterface $output): int { try { diff --git a/src/Domain/Identity/Model/AdminLogin.php b/src/Domain/Identity/Model/AdminLogin.php index b7c30e58..91be3331 100644 --- a/src/Domain/Identity/Model/AdminLogin.php +++ b/src/Domain/Identity/Model/AdminLogin.php @@ -37,7 +37,7 @@ class AdminLogin implements DomainModel, Identity #[ORM\Column(name: 'sessionid', type: 'string', length: 50)] private string $sessionId; - #[ORM\Column(name: 'active', type: 'boolean')] + #[ORM\Column(name: 'active', type: 'boolean', nullable: false)] private bool $active = false; public function __construct( diff --git a/src/Domain/Identity/Model/AdminPasswordRequest.php b/src/Domain/Identity/Model/AdminPasswordRequest.php index c06a45eb..0d761adf 100644 --- a/src/Domain/Identity/Model/AdminPasswordRequest.php +++ b/src/Domain/Identity/Model/AdminPasswordRequest.php @@ -12,7 +12,6 @@ #[ORM\Entity(repositoryClass: AdminPasswordRequestRepository::class)] #[ORM\Table(name: 'phplist_admin_password_request')] -#[ORM\HasLifecycleCallbacks] class AdminPasswordRequest implements DomainModel, Identity { #[ORM\Id] diff --git a/src/Domain/Identity/Model/Administrator.php b/src/Domain/Identity/Model/Administrator.php index c22b4b9f..09ba46e0 100644 --- a/src/Domain/Identity/Model/Administrator.php +++ b/src/Domain/Identity/Model/Administrator.php @@ -23,6 +23,7 @@ */ #[ORM\Entity(repositoryClass: AdministratorRepository::class)] #[ORM\Table(name: 'phplist_admin')] +#[ORM\UniqueConstraint(name: 'phplist_admin_loginnameidx', columns: ['loginname'])] #[ORM\HasLifecycleCallbacks] class Administrator implements DomainModel, Identity, CreationDate, ModificationDate { @@ -31,50 +32,59 @@ class Administrator implements DomainModel, Identity, CreationDate, Modification #[ORM\GeneratedValue] private ?int $id = null; - #[ORM\Column(name: 'created', type: 'datetime')] - protected DateTime $createdAt; + #[ORM\Column(name: 'created', type: 'datetime', nullable: false)] + protected ?DateTime $createdAt = null; - #[ORM\Column(name: 'modified', type: 'datetime')] - private ?DateTime $updatedAt; + #[ORM\Column(name: 'modified', type: 'datetime', nullable: false)] + private DateTime $updatedAt; - #[ORM\Column(name: 'loginname')] + #[ORM\Column(name: 'loginname', type: 'string', length: 66, nullable: false)] private string $loginName; - #[ORM\Column(name: 'namelc', nullable: true)] - private string $namelc; + #[ORM\Column(name: 'namelc', type: 'string', length: 255, nullable: true)] + private ?string $namelc = null; - #[ORM\Column(name: 'email')] + #[ORM\Column(name: 'email', type: 'string', length: 255, nullable: false)] private string $email; #[ORM\Column(name: 'modifiedby', type: 'string', length: 66, nullable: true)] - private ?string $modifiedBy; + private ?string $modifiedBy = null; - #[ORM\Column(name: 'password')] - private string $passwordHash; + #[ORM\Column(name: 'password', type: 'string', length: 255, nullable: true)] + private ?string $passwordHash = null; #[ORM\Column(name: 'passwordchanged', type: 'date', nullable: true)] - private ?DateTime $passwordChangeDate; + private ?DateTime $passwordChangeDate = null; - #[ORM\Column(type: 'boolean')] - private bool $disabled; + #[ORM\Column(name: 'disabled', type: 'boolean', nullable: false)] + private bool $disabled = false; - #[ORM\Column(name: 'superuser', type: 'boolean')] - private bool $superUser; + #[ORM\Column(name: 'superuser', type: 'boolean', nullable: false)] + private bool $superUser = false; #[ORM\Column(name: 'privileges', type: 'text', nullable: true)] - private ?string $privileges; + private ?string $privileges = null; public function __construct() { - $this->disabled = false; - $this->superUser = false; - $this->passwordChangeDate = null; - $this->loginName = ''; - $this->passwordHash = ''; $this->createdAt = new DateTime(); - $this->updatedAt = null; + $this->updatedAt = new DateTime(); $this->email = ''; - $this->privileges = null; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getCreatedAt(): ?DateTime + { + return $this->createdAt; + } + + public function getUpdatedAt(): DateTime + { + return $this->updatedAt; } public function getLoginName(): string @@ -85,7 +95,6 @@ public function getLoginName(): string public function setLoginName(string $loginName): self { $this->loginName = $loginName; - return $this; } @@ -97,20 +106,29 @@ public function getEmail(): string public function setEmail(string $email): self { $this->email = $email; + return $this; + } + public function getNameLc(): ?string + { + return $this->namelc; + } + + public function setNameLc(?string $nameLc): self + { + $this->namelc = $nameLc; return $this; } - public function getPasswordHash(): string + public function getPasswordHash(): ?string { return $this->passwordHash; } - public function setPasswordHash(string $passwordHash): self + public function setPasswordHash(?string $passwordHash): self { $this->passwordHash = $passwordHash; - $this->passwordChangeDate = new DateTime(); - + $this->passwordChangeDate = $passwordHash !== null ? new DateTime() : null; return $this; } @@ -127,7 +145,6 @@ public function isDisabled(): bool public function setDisabled(bool $disabled): self { $this->disabled = $disabled; - return $this; } @@ -139,32 +156,19 @@ public function isSuperUser(): bool public function setSuperUser(bool $superUser): self { $this->superUser = $superUser; - return $this; } - public function setNameLc(string $nameLc): self - { - $this->namelc = $nameLc; - - return $this; - } - - public function getNameLc(): string - { - return $this->namelc; - } - public function setPrivileges(Privileges $privileges): self { $this->privileges = $privileges->toSerialized(); - return $this; } /** - * @SuppressWarnings(PHPMD.StaticAccess) * @throws InvalidArgumentException + * + * @SuppressWarnings(PHPMD.StaticAccess) */ public function setPrivilegesFromArray(array $privilegesData): void { @@ -172,46 +176,19 @@ public function setPrivilegesFromArray(array $privilegesData): void foreach ($privilegesData as $key => $value) { $flag = PrivilegeFlag::tryFrom($key); if (!$flag) { - throw new InvalidArgumentException('Unknown privilege key: '. $key); + throw new InvalidArgumentException('Unknown privilege key: ' . $key); } - $privileges = $value ? $privileges->grant($flag) : $privileges->revoke($flag); } $this->setPrivileges($privileges); } - /** - * @SuppressWarnings(PHPMD.StaticAccess) - */ + /** @SuppressWarnings(PHPMD.StaticAccess) */ public function getPrivileges(): Privileges { return Privileges::fromSerialized($this->privileges); } - public function getCreatedAt(): ?DateTime - { - return $this->createdAt; - } - - public function getId(): ?int - { - return $this->id; - } - - public function getUpdatedAt(): ?DateTime - { - return $this->updatedAt; - } - - #[ORM\PrePersist] - #[ORM\PreUpdate] - public function updateUpdatedAt(): DomainModel - { - $this->updatedAt = new DateTime(); - - return $this; - } - public function setModifiedBy(?string $modifiedBy): self { $this->modifiedBy = $modifiedBy; @@ -231,4 +208,10 @@ public function owns(OwnableInterface $resource): bool return $resource->getOwner()->getId() === $this->getId(); } + + #[ORM\PreUpdate] + public function setUpdatedAt(): void + { + $this->updatedAt = new DateTime(); + } } diff --git a/src/Domain/Identity/Model/AdministratorToken.php b/src/Domain/Identity/Model/AdministratorToken.php index 1a6c511f..4e37b2b5 100644 --- a/src/Domain/Identity/Model/AdministratorToken.php +++ b/src/Domain/Identity/Model/AdministratorToken.php @@ -7,7 +7,6 @@ use DateTime; use DateTimeZone; use Doctrine\ORM\Mapping as ORM; -use Doctrine\Persistence\Proxy; use PhpList\Core\Domain\Common\Model\Interfaces\CreationDate; use PhpList\Core\Domain\Common\Model\Interfaces\DomainModel; use PhpList\Core\Domain\Common\Model\Interfaces\Identity; @@ -44,11 +43,13 @@ class AdministratorToken implements DomainModel, Identity, CreationDate #[ORM\ManyToOne(targetEntity: Administrator::class)] #[ORM\JoinColumn(name: 'adminid', referencedColumnName: 'id', onDelete: 'CASCADE')] - private ?Administrator $administrator = null; + private Administrator $administrator; - public function __construct() + public function __construct(Administrator $administrator) { - $this->setExpiry(new DateTime()); + $this->generateExpiry(); + $this->generateKey(); + $this->administrator = $administrator; } public function getId(): ?int @@ -112,14 +113,8 @@ public function generateKey(): self return $this; } - public function getAdministrator(): Administrator|Proxy|null + public function getAdministrator(): Administrator { return $this->administrator; } - - public function setAdministrator(Administrator $administrator): self - { - $this->administrator = $administrator; - return $this; - } } diff --git a/src/Domain/Identity/Service/SessionManager.php b/src/Domain/Identity/Service/SessionManager.php index 658799f7..cfeaa706 100644 --- a/src/Domain/Identity/Service/SessionManager.php +++ b/src/Domain/Identity/Service/SessionManager.php @@ -47,10 +47,7 @@ public function createSession(string $loginName, string $password): Administrato throw new UnauthorizedHttpException('', $message, null, 1500567099); } - $token = new AdministratorToken(); - $token->setAdministrator($administrator); - $token->generateExpiry(); - $token->generateKey(); + $token = new AdministratorToken($administrator); $this->tokenRepository->persist($token); return $token; diff --git a/src/Domain/Messaging/Command/ProcessQueueCommand.php b/src/Domain/Messaging/Command/ProcessQueueCommand.php index 600246cb..ec2d1af8 100644 --- a/src/Domain/Messaging/Command/ProcessQueueCommand.php +++ b/src/Domain/Messaging/Command/ProcessQueueCommand.php @@ -57,9 +57,6 @@ public function __construct( $this->entityManager = $entityManager; } - /** - * @SuppressWarnings("PHPMD.UnusedFormalParameter") - */ protected function execute(InputInterface $input, OutputInterface $output): int { $lock = $this->lockFactory->createLock('queue_processor'); diff --git a/src/Domain/Messaging/Model/Bounce.php b/src/Domain/Messaging/Model/Bounce.php index 8d665d72..dbcb5106 100644 --- a/src/Domain/Messaging/Model/Bounce.php +++ b/src/Domain/Messaging/Model/Bounce.php @@ -12,8 +12,8 @@ #[ORM\Entity(repositoryClass: BounceRepository::class)] #[ORM\Table(name: 'phplist_bounce')] -#[ORM\Index(name: 'dateindex', columns: ['date'])] -#[ORM\Index(name: 'statusidx', columns: ['status'])] +#[ORM\Index(name: 'phplist_bounce_dateindex', columns: ['date'])] +#[ORM\Index(name: 'phplist_bounce_statusidx', columns: ['status'])] class Bounce implements DomainModel, Identity { #[ORM\Id] diff --git a/src/Domain/Messaging/Model/BounceRegex.php b/src/Domain/Messaging/Model/BounceRegex.php index 0401d26b..c54ca7c0 100644 --- a/src/Domain/Messaging/Model/BounceRegex.php +++ b/src/Domain/Messaging/Model/BounceRegex.php @@ -11,7 +11,7 @@ #[ORM\Entity(repositoryClass: BounceRegexRepository::class)] #[ORM\Table(name: 'phplist_bounceregex')] -#[ORM\UniqueConstraint(name: 'regex', columns: ['regexhash'])] +#[ORM\UniqueConstraint(name: 'phplist_bounceregex_regex', columns: ['regexhash'])] class BounceRegex implements DomainModel, Identity { #[ORM\Id] diff --git a/src/Domain/Messaging/Model/ListMessage.php b/src/Domain/Messaging/Model/ListMessage.php index a9751e7f..0a488bdd 100644 --- a/src/Domain/Messaging/Model/ListMessage.php +++ b/src/Domain/Messaging/Model/ListMessage.php @@ -15,8 +15,8 @@ #[ORM\Entity(repositoryClass: ListMessageRepository::class)] #[ORM\Table(name: 'phplist_listmessage')] -#[ORM\UniqueConstraint(name: 'messageid', columns: ['messageid', 'listid'])] -#[ORM\Index(name: 'listmessageidx', columns: ['listid', 'messageid'])] +#[ORM\UniqueConstraint(name: 'phplist_listmessage_messageid', columns: ['messageid', 'listid'])] +#[ORM\Index(name: 'phplist_listmessage_listmessageidx', columns: ['listid', 'messageid'])] #[ORM\HasLifecycleCallbacks] class ListMessage implements DomainModel, Identity, ModificationDate { @@ -39,6 +39,12 @@ class ListMessage implements DomainModel, Identity, ModificationDate #[ORM\Column(name: 'modified', type: 'datetime')] private ?DateTime $updatedAt = null; + public function __construct() + { + $this->updatedAt = new DateTime(); + $this->entered = new DateTime(); + } + public function getId(): ?int { return $this->id; @@ -71,23 +77,14 @@ public function getEntered(): ?DateTimeInterface return $this->entered; } - public function setEntered(?DateTimeInterface $entered): self - { - $this->entered = $entered; - return $this; - } - public function getUpdatedAt(): ?DateTime { return $this->updatedAt; } - #[ORM\PrePersist] #[ORM\PreUpdate] - public function updateUpdatedAt(): DomainModel + public function updateUpdatedAt(): void { $this->updatedAt = new DateTime(); - - return $this; } } diff --git a/src/Domain/Messaging/Model/Message.php b/src/Domain/Messaging/Model/Message.php index 5064c4f1..90f5036c 100644 --- a/src/Domain/Messaging/Model/Message.php +++ b/src/Domain/Messaging/Model/Message.php @@ -5,6 +5,7 @@ namespace PhpList\Core\Domain\Messaging\Model; use DateTime; +use DateTimeImmutable; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; @@ -22,7 +23,7 @@ #[ORM\Entity(repositoryClass: MessageRepository::class)] #[ORM\Table(name: 'phplist_message')] -#[ORM\Index(name: 'uuididx', columns: ['uuid'])] +#[ORM\Index(name: 'phplist_message_uuididx', columns: ['uuid'])] #[ORM\HasLifecycleCallbacks] class Message implements DomainModel, Identity, ModificationDate, OwnableInterface { @@ -31,8 +32,8 @@ class Message implements DomainModel, Identity, ModificationDate, OwnableInterfa #[ORM\GeneratedValue] private ?int $id = null; - #[ORM\Column(name: 'modified', type: 'datetime')] - private ?DateTime $updatedAt = null; + #[ORM\Column(name: 'modified', type: 'datetime', nullable: false)] + private DateTime $updatedAt; #[ORM\Embedded(class: MessageFormat::class, columnPrefix: false)] private MessageFormat $format; @@ -81,6 +82,8 @@ public function __construct( $this->owner = $owner; $this->template = $template; $this->listMessages = new ArrayCollection(); + $this->updatedAt = new DateTime(); + $this->metadata->setEntered(new DateTime()); } public function getId(): ?int @@ -88,18 +91,15 @@ public function getId(): ?int return $this->id; } - public function getUpdatedAt(): ?DateTime + public function getUpdatedAt(): DateTime { return $this->updatedAt; } - #[ORM\PrePersist] #[ORM\PreUpdate] - public function updateUpdatedAt(): DomainModel + public function touchUpdatedTimestamp(): void { - $this->updatedAt = new DateTime(); - - return $this; + $this->updatedAt = new DateTime; } public function getFormat(): MessageFormat diff --git a/src/Domain/Messaging/Model/Message/MessageFormat.php b/src/Domain/Messaging/Model/Message/MessageFormat.php index 00af6df0..5deedefb 100644 --- a/src/Domain/Messaging/Model/Message/MessageFormat.php +++ b/src/Domain/Messaging/Model/Message/MessageFormat.php @@ -11,25 +11,25 @@ #[ORM\Embeddable] class MessageFormat implements EmbeddableInterface { - #[ORM\Column(name: 'htmlformatted', type: 'boolean', options: ['default' => false])] + #[ORM\Column(name: 'htmlformatted', type: 'boolean')] private bool $htmlFormatted = false; #[ORM\Column(name: 'sendformat', type: 'string', length: 20, nullable: true)] private ?string $sendFormat = null; - #[ORM\Column(name: 'astext', type: 'boolean', options: ['default' => false])] + #[ORM\Column(name: 'astext', type: 'boolean')] private bool $asText = false; - #[ORM\Column(name: 'ashtml', type: 'boolean', options: ['default' => false])] + #[ORM\Column(name: 'ashtml', type: 'boolean')] private bool $asHtml = false; - #[ORM\Column(name: 'aspdf', type: 'boolean', options: ['default' => false])] + #[ORM\Column(name: 'aspdf', type: 'boolean')] private bool $asPdf = false; - #[ORM\Column(name: 'astextandhtml', type: 'boolean', options: ['default' => false])] + #[ORM\Column(name: 'astextandhtml', type: 'boolean')] private bool $asTextAndHtml = false; - #[ORM\Column(name: 'astextandpdf', type: 'boolean', options: ['default' => false])] + #[ORM\Column(name: 'astextandpdf', type: 'boolean')] private bool $asTextAndPdf = false; public const FORMAT_TEXT = 'text'; diff --git a/src/Domain/Messaging/Model/Message/MessageMetadata.php b/src/Domain/Messaging/Model/Message/MessageMetadata.php index 156539b2..e2c43c72 100644 --- a/src/Domain/Messaging/Model/Message/MessageMetadata.php +++ b/src/Domain/Messaging/Model/Message/MessageMetadata.php @@ -16,7 +16,7 @@ class MessageMetadata implements EmbeddableInterface private ?string $status = null; #[ORM\Column(type: 'boolean', options: ['unsigned' => true, 'default' => false])] - private bool $processed; + private bool $processed = false; #[ORM\Column(type: 'integer', options: ['default' => 0])] private int $viewed = 0; diff --git a/src/Domain/Messaging/Model/MessageAttachment.php b/src/Domain/Messaging/Model/MessageAttachment.php index 2675790d..e26d0d87 100644 --- a/src/Domain/Messaging/Model/MessageAttachment.php +++ b/src/Domain/Messaging/Model/MessageAttachment.php @@ -10,8 +10,8 @@ #[ORM\Entity(repositoryClass: MessageAttachmentRepository::class)] #[ORM\Table(name: 'phplist_message_attachment')] -#[ORM\Index(name: 'messageattidx', columns: ['messageid', 'attachmentid'])] -#[ORM\Index(name: 'messageidx', columns: ['messageid'])] +#[ORM\Index(name: 'phplist_message_attachment_messageattidx', columns: ['messageid', 'attachmentid'])] +#[ORM\Index(name: 'phplist_message_attachment_messageidx', columns: ['messageid'])] class MessageAttachment implements Identity { #[ORM\Id] diff --git a/src/Domain/Messaging/Model/SendProcess.php b/src/Domain/Messaging/Model/SendProcess.php index 7b2287d4..5faeaf35 100644 --- a/src/Domain/Messaging/Model/SendProcess.php +++ b/src/Domain/Messaging/Model/SendProcess.php @@ -48,11 +48,9 @@ public function getUpdatedAt(): ?DateTime #[ORM\PrePersist] #[ORM\PreUpdate] - public function updateUpdatedAt(): DomainModel + public function updateUpdatedAt(): void { $this->updatedAt = new DateTime(); - - return $this; } public function getStartedDate(): ?DateTime diff --git a/src/Domain/Messaging/Model/Template.php b/src/Domain/Messaging/Model/Template.php index f7e3f5d0..efff0de4 100644 --- a/src/Domain/Messaging/Model/Template.php +++ b/src/Domain/Messaging/Model/Template.php @@ -13,7 +13,7 @@ #[ORM\Entity(repositoryClass: TemplateRepository::class)] #[ORM\Table(name: 'phplist_template')] -#[ORM\UniqueConstraint(name: 'title', columns: ['title'])] +#[ORM\UniqueConstraint(name: 'phplist_template_title', columns: ['title'])] class Template implements DomainModel, Identity { #[ORM\Id] diff --git a/src/Domain/Messaging/Model/TemplateImage.php b/src/Domain/Messaging/Model/TemplateImage.php index 1ef7d7b5..2cc5288f 100644 --- a/src/Domain/Messaging/Model/TemplateImage.php +++ b/src/Domain/Messaging/Model/TemplateImage.php @@ -11,7 +11,7 @@ #[ORM\Entity(repositoryClass: TemplateImageRepository::class)] #[ORM\Table(name: 'phplist_templateimage')] -#[ORM\Index(name: 'templateidx', columns: ['template'])] +#[ORM\Index(name: 'phplist_templateimage_templateidx', columns: ['template'])] class TemplateImage implements DomainModel, Identity { #[ORM\Id] diff --git a/src/Domain/Messaging/Model/UserMessage.php b/src/Domain/Messaging/Model/UserMessage.php index c846fa11..cdb6b7c2 100644 --- a/src/Domain/Messaging/Model/UserMessage.php +++ b/src/Domain/Messaging/Model/UserMessage.php @@ -13,11 +13,11 @@ #[ORM\Entity(repositoryClass: UserMessageRepository::class)] #[ORM\Table(name: 'phplist_usermessage')] -#[ORM\Index(name: 'enteredindex', columns: ['entered'])] -#[ORM\Index(name: 'messageidindex', columns: ['messageid'])] -#[ORM\Index(name: 'statusidx', columns: ['status'])] -#[ORM\Index(name: 'useridindex', columns: ['userid'])] -#[ORM\Index(name: 'viewedidx', columns: ['viewed'])] +#[ORM\Index(name: 'phplist_usermessage_enteredindex', columns: ['entered'])] +#[ORM\Index(name: 'phplist_usermessage_messageidindex', columns: ['messageid'])] +#[ORM\Index(name: 'phplist_usermessage_statusidx', columns: ['status'])] +#[ORM\Index(name: 'phplist_usermessage_useridindex', columns: ['userid'])] +#[ORM\Index(name: 'phplist_usermessage_viewedidx', columns: ['viewed'])] class UserMessage implements DomainModel { #[ORM\Id] diff --git a/src/Domain/Messaging/Model/UserMessageBounce.php b/src/Domain/Messaging/Model/UserMessageBounce.php index 5da0d139..3b58bf47 100644 --- a/src/Domain/Messaging/Model/UserMessageBounce.php +++ b/src/Domain/Messaging/Model/UserMessageBounce.php @@ -12,11 +12,10 @@ #[ORM\Entity(repositoryClass: UserMessageBounceRepository::class)] #[ORM\Table(name: 'phplist_user_message_bounce')] -#[ORM\Index(name: 'bounceidx', columns: ['bounce'])] -#[ORM\Index(name: 'msgidx', columns: ['message'])] -#[ORM\Index(name: 'umbindex', columns: ['user', 'message', 'bounce'])] -#[ORM\Index(name: 'useridx', columns: ['user'])] -#[ORM\HasLifecycleCallbacks] +#[ORM\Index(name: 'phplist_user_message_bounce_bounceidx', columns: ['bounce'])] +#[ORM\Index(name: 'phplist_user_message_bounce_msgidx', columns: ['message'])] +#[ORM\Index(name: 'phplist_user_message_bounce_umbindex', columns: ['user', 'message', 'bounce'])] +#[ORM\Index(name: 'phplist_user_message_bounce_useridx', columns: ['user'])] class UserMessageBounce implements DomainModel, Identity { #[ORM\Id] diff --git a/src/Domain/Messaging/Model/UserMessageForward.php b/src/Domain/Messaging/Model/UserMessageForward.php index 9b2a8ef4..3b920189 100644 --- a/src/Domain/Messaging/Model/UserMessageForward.php +++ b/src/Domain/Messaging/Model/UserMessageForward.php @@ -12,9 +12,9 @@ #[ORM\Entity(repositoryClass: UserMessageForwardRepository::class)] #[ORM\Table(name: 'phplist_user_message_forward')] -#[ORM\Index(name: 'messageidx', columns: ['message'])] -#[ORM\Index(name: 'useridx', columns: ['user'])] -#[ORM\Index(name: 'usermessageidx', columns: ['user', 'message'])] +#[ORM\Index(name: 'phplist_user_message_forward_messageidx', columns: ['message'])] +#[ORM\Index(name: 'phplist_user_message_forward_useridx', columns: ['user'])] +#[ORM\Index(name: 'phplist_user_message_forward_usermessageidx', columns: ['user', 'message'])] class UserMessageForward implements DomainModel, Identity { #[ORM\Id] diff --git a/src/Domain/Messaging/Service/Manager/ListMessageManager.php b/src/Domain/Messaging/Service/Manager/ListMessageManager.php index c481e5f8..bc6a6bfe 100644 --- a/src/Domain/Messaging/Service/Manager/ListMessageManager.php +++ b/src/Domain/Messaging/Service/Manager/ListMessageManager.php @@ -40,7 +40,6 @@ public function associateMessageWithList(Message $message, SubscriberList $subsc $listMessage = new ListMessage(); $listMessage->setMessage($message); $listMessage->setList($subscriberList); - $listMessage->setEntered(new DateTime()); $this->entityManager->persist($listMessage); diff --git a/src/Domain/Subscription/Model/Subscriber.php b/src/Domain/Subscription/Model/Subscriber.php index d48e5730..a0c35d73 100644 --- a/src/Domain/Subscription/Model/Subscriber.php +++ b/src/Domain/Subscription/Model/Subscriber.php @@ -19,13 +19,18 @@ * campaigns for those subscriber lists. * @author Oliver Klee * @author Tatevik Grigoryan + * @SuppressWarnings(TooManyFields) */ #[ORM\Entity(repositoryClass: SubscriberRepository::class)] #[ORM\Table(name: 'phplist_user_user')] -#[ORM\Index(name: 'idxuniqid', columns: ['uniqid'])] -#[ORM\Index(name: 'enteredindex', columns: ['entered'])] -#[ORM\Index(name: 'confidx', columns: ['confirmed'])] -#[ORM\Index(name: 'blidx', columns: ['blacklisted'])] +#[ORM\Index(name: 'phplist_user_user_idxuniqid', columns: ['uniqid'])] +#[ORM\Index(name: 'phplist_user_user_enteredindex', columns: ['entered'])] +#[ORM\Index(name: 'phplist_user_user_confidx', columns: ['confirmed'])] +#[ORM\Index(name: 'phplist_user_user_blidx', columns: ['blacklisted'])] +#[ORM\Index(name: 'phplist_user_user_optidx', columns: ['optedin'])] +#[ORM\Index(name: 'phplist_user_user_uuididx', columns: ['uuid'])] +#[ORM\Index(name: 'phplist_user_user_foreignkey', columns: ['foreignkey'])] +#[ORM\UniqueConstraint(name: 'phplist_user_user_email', columns: ['email'])] #[ORM\HasLifecycleCallbacks] class Subscriber implements DomainModel, Identity, CreationDate, ModificationDate { @@ -37,8 +42,8 @@ class Subscriber implements DomainModel, Identity, CreationDate, ModificationDat #[ORM\Column(name: 'entered', type: 'datetime', nullable: true)] protected ?DateTime $createdAt = null; - #[ORM\Column(name: 'modified', type: 'datetime')] - private ?DateTime $updatedAt = null; + #[ORM\Column(name: 'modified', type: 'datetime', nullable: false)] + private DateTime $updatedAt; #[ORM\Column(unique: true)] private string $email = ''; @@ -52,7 +57,7 @@ class Subscriber implements DomainModel, Identity, CreationDate, ModificationDat #[ORM\Column(name: 'bouncecount', type: 'integer')] private int $bounceCount = 0; - #[ORM\Column(name: 'uniqid', unique: true)] + #[ORM\Column(name: 'uniqid', type: 'string', length: 255, nullable: true)] private string $uniqueId = ''; #[ORM\Column(name: 'htmlemail', type: 'boolean')] @@ -61,8 +66,8 @@ class Subscriber implements DomainModel, Identity, CreationDate, ModificationDat #[ORM\Column(type: 'boolean')] private bool $disabled = false; - #[ORM\Column(name: 'extradata', type: 'text')] - private ?string $extraData; + #[ORM\Column(name: 'extradata', type: 'text', nullable: true)] + private ?string $extraData = null; #[ORM\OneToMany( targetEntity: Subscription::class, @@ -83,12 +88,34 @@ class Subscriber implements DomainModel, Identity, CreationDate, ModificationDat )] private Collection $attributes; + #[ORM\Column(name: 'optedin', type: 'boolean')] + private bool $optedIn = false; + + #[ORM\Column(name: 'uuid', type: 'string', length: 36)] + private string $uuid = ''; + + #[ORM\Column(name: 'subscribepage', type: 'integer', nullable: true)] + private ?int $subscribePage = null; + + #[ORM\Column(name: 'rssfrequency', type: 'string', length: 100, nullable: true)] + private ?string $rssFrequency = null; + + #[ORM\Column(name: 'password', type: 'string', length: 255, nullable: true)] + private ?string $password = null; + + #[ORM\Column(name: 'passwordchanged', type: 'datetime', nullable: true)] + private ?DateTime $passwordChanged = null; + + #[ORM\Column(name: 'foreignkey', type: 'string', length: 100, nullable: true)] + private ?string $foreignKey = null; + public function __construct() { $this->subscriptions = new ArrayCollection(); $this->attributes = new ArrayCollection(); $this->extraData = ''; $this->createdAt = new DateTime(); + $this->updatedAt = new DateTime(); } public function getId(): ?int @@ -101,18 +128,15 @@ public function getCreatedAt(): ?DateTime return $this->createdAt; } - public function getUpdatedAt(): ?DateTime + public function getUpdatedAt(): DateTime { return $this->updatedAt; } - #[ORM\PrePersist] #[ORM\PreUpdate] - public function updateUpdatedAt(): DomainModel + public function updateUpdatedAt(): void { $this->updatedAt = new DateTime(); - - return $this; } public function isConfirmed(): bool @@ -281,4 +305,74 @@ public function removeAttribute(SubscriberAttributeValue $attribute): self $this->attributes->removeElement($attribute); return $this; } + + public function isOptedIn(): bool + { + return $this->optedIn; + } + + public function setOptedIn(bool $optedIn): void + { + $this->optedIn = $optedIn; + } + + public function getUuid(): string + { + return $this->uuid; + } + + public function setUuid(string $uuid): void + { + $this->uuid = $uuid; + } + + public function getSubscribePage(): ?int + { + return $this->subscribePage; + } + + public function setSubscribePage(?int $subscribePage): void + { + $this->subscribePage = $subscribePage; + } + + public function getRssFrequency(): ?string + { + return $this->rssFrequency; + } + + public function setRssFrequency(?string $rssFrequency): void + { + $this->rssFrequency = $rssFrequency; + } + + public function getPassword(): ?string + { + return $this->password; + } + + public function setPassword(?string $password): void + { + $this->password = $password; + } + + public function getPasswordChanged(): ?DateTime + { + return $this->passwordChanged; + } + + public function setPasswordChanged(?DateTime $passwordChanged): void + { + $this->passwordChanged = $passwordChanged; + } + + public function getForeignKey(): ?string + { + return $this->foreignKey; + } + + public function setForeignKey(?string $foreignKey): void + { + $this->foreignKey = $foreignKey; + } } diff --git a/src/Domain/Subscription/Model/SubscriberAttributeDefinition.php b/src/Domain/Subscription/Model/SubscriberAttributeDefinition.php index dc7259d6..7b943b5c 100644 --- a/src/Domain/Subscription/Model/SubscriberAttributeDefinition.php +++ b/src/Domain/Subscription/Model/SubscriberAttributeDefinition.php @@ -11,8 +11,8 @@ #[ORM\Entity(repositoryClass: SubscriberAttributeDefinitionRepository::class)] #[ORM\Table(name: 'phplist_user_attribute')] -#[ORM\Index(name: 'idnameindex', columns: ['id', 'name'])] -#[ORM\Index(name: 'nameindex', columns: ['name'])] +#[ORM\Index(name: 'phplist_user_attribute_idnameindex', columns: ['id', 'name'])] +#[ORM\Index(name: 'phplist_user_attribute_nameindex', columns: ['name'])] class SubscriberAttributeDefinition implements DomainModel, Identity { #[ORM\Id] diff --git a/src/Domain/Subscription/Model/SubscriberAttributeValue.php b/src/Domain/Subscription/Model/SubscriberAttributeValue.php index 05209709..d2144f95 100644 --- a/src/Domain/Subscription/Model/SubscriberAttributeValue.php +++ b/src/Domain/Subscription/Model/SubscriberAttributeValue.php @@ -10,9 +10,9 @@ #[ORM\Entity(repositoryClass: SubscriberAttributeValueRepository::class)] #[ORM\Table(name: 'phplist_user_user_attribute')] -#[ORM\Index(name: 'attindex', columns: ['attributeid'])] -#[ORM\Index(name: 'attuserid', columns: ['userid', 'attributeid'])] -#[ORM\Index(name: 'userindex', columns: ['userid'])] +#[ORM\Index(name: 'phplist_user_user_attribute_attindex', columns: ['attributeid'])] +#[ORM\Index(name: 'phplist_user_user_attribute_attuserid', columns: ['userid', 'attributeid'])] +#[ORM\Index(name: 'phplist_user_user_attribute_userindex', columns: ['userid'])] class SubscriberAttributeValue implements DomainModel { #[ORM\Id] diff --git a/src/Domain/Subscription/Model/SubscriberHistory.php b/src/Domain/Subscription/Model/SubscriberHistory.php index 0eaa3f7a..1799c01b 100644 --- a/src/Domain/Subscription/Model/SubscriberHistory.php +++ b/src/Domain/Subscription/Model/SubscriberHistory.php @@ -12,8 +12,8 @@ #[ORM\Entity(repositoryClass: SubscriberHistoryRepository::class)] #[ORM\Table(name: 'phplist_user_user_history')] -#[ORM\Index(name: 'dateidx', columns: ['date'])] -#[ORM\Index(name: 'userididx', columns: ['userid'])] +#[ORM\Index(name: 'phplist_user_user_history_dateidx', columns: ['date'])] +#[ORM\Index(name: 'phplist_user_user_history_userididx', columns: ['userid'])] class SubscriberHistory implements DomainModel, Identity { #[ORM\Id] diff --git a/src/Domain/Subscription/Model/SubscriberList.php b/src/Domain/Subscription/Model/SubscriberList.php index 32f85f5d..e23e8735 100644 --- a/src/Domain/Subscription/Model/SubscriberList.php +++ b/src/Domain/Subscription/Model/SubscriberList.php @@ -26,8 +26,8 @@ */ #[ORM\Entity(repositoryClass: SubscriberListRepository::class)] #[ORM\Table(name: 'phplist_list')] -#[ORM\Index(name: 'nameidx', columns: ['name'])] -#[ORM\Index(name: 'listorderidx', columns: ['listorder'])] +#[ORM\Index(name: 'phplist_list_nameidx', columns: ['name'])] +#[ORM\Index(name: 'phplist_list_listorderidx', columns: ['listorder'])] #[ORM\HasLifecycleCallbacks] class SubscriberList implements DomainModel, Identity, CreationDate, ModificationDate, OwnableInterface { @@ -39,6 +39,9 @@ class SubscriberList implements DomainModel, Identity, CreationDate, Modificatio #[ORM\Column] private string $name = ''; + #[ORM\Column(name: 'rssfeed', type: 'string', length: 255, nullable: true)] + private ?string $rssFeed = null; + #[ORM\Column] private string $description = ''; @@ -51,7 +54,7 @@ class SubscriberList implements DomainModel, Identity, CreationDate, Modificatio #[ORM\Column(name: 'listorder', type: 'integer', nullable: true)] private ?int $listPosition; - #[ORM\Column(name: 'prefix')] + #[ORM\Column(name: 'prefix', length: 10, nullable: true)] private ?string $subjectPrefix; #[ORM\Column(name: 'active', type: 'boolean')] @@ -92,6 +95,17 @@ public function getId(): ?int return $this->id; } + public function getRssFeed(): ?string + { + return $this->rssFeed; + } + + public function setRssFeed(?string $rssFeed): self + { + $this->rssFeed = $rssFeed; + return $this; + } + public function getName(): string { return $this->name; @@ -103,12 +117,12 @@ public function setName(string $name): self return $this; } - public function getDescription(): string + public function getDescription(): ?string { return $this->description; } - public function setDescription(string $description): self + public function setDescription(?string $description): self { $this->description = $description; @@ -217,10 +231,9 @@ public function getUpdatedAt(): ?DateTime #[ORM\PrePersist] #[ORM\PreUpdate] - public function updateUpdatedAt(): DomainModel + public function updateUpdatedAt(): void { $this->updatedAt = new DateTime(); - return $this; } public function getListMessages(): Collection diff --git a/src/Domain/Subscription/Model/Subscription.php b/src/Domain/Subscription/Model/Subscription.php index 94e79965..fe4b5e2a 100644 --- a/src/Domain/Subscription/Model/Subscription.php +++ b/src/Domain/Subscription/Model/Subscription.php @@ -23,10 +23,10 @@ */ #[ORM\Entity(repositoryClass: SubscriptionRepository::class)] #[ORM\Table(name: 'phplist_listuser')] -#[ORM\Index(name: 'userenteredidx', columns: ['userid', 'entered'])] -#[ORM\Index(name: 'userlistenteredidx', columns: ['userid', 'entered', 'listid'])] -#[ORM\Index(name: 'useridx', columns: ['userid'])] -#[ORM\Index(name: 'listidx', columns: ['listid'])] +#[ORM\Index(name: 'phplist_listuser_userenteredidx', columns: ['userid', 'entered'])] +#[ORM\Index(name: 'phplist_listuser_userlistenteredidx', columns: ['userid', 'entered', 'listid'])] +#[ORM\Index(name: 'phplist_listuser_useridx', columns: ['userid'])] +#[ORM\Index(name: 'phplist_listuser_listidx', columns: ['listid'])] #[ORM\HasLifecycleCallbacks] class Subscription implements DomainModel, CreationDate, ModificationDate { @@ -95,10 +95,8 @@ public function getUpdatedAt(): ?DateTime #[ORM\PrePersist] #[ORM\PreUpdate] - public function updateUpdatedAt(): DomainModel + public function updateUpdatedAt(): void { $this->updatedAt = new DateTime(); - - return $this; } } diff --git a/src/Domain/Subscription/Model/UserBlacklist.php b/src/Domain/Subscription/Model/UserBlacklist.php index eb24ded3..9b150686 100644 --- a/src/Domain/Subscription/Model/UserBlacklist.php +++ b/src/Domain/Subscription/Model/UserBlacklist.php @@ -11,7 +11,7 @@ #[ORM\Entity(repositoryClass: UserBlacklistRepository::class)] #[ORM\Table(name: 'phplist_user_blacklist')] -#[ORM\Index(name: 'emailidx', columns: ['email'])] +#[ORM\Index(name: 'phplist_user_blacklist_emailidx', columns: ['email'])] class UserBlacklist implements DomainModel { #[ORM\Id] @@ -21,9 +21,15 @@ class UserBlacklist implements DomainModel #[ORM\Column(name: 'added', type: 'datetime', nullable: true)] private ?DateTime $added = null; - #[ORM\OneToOne(targetEntity: UserBlacklistData::class, mappedBy: 'email')] + #[ORM\OneToOne(targetEntity: UserBlacklistData::class, mappedBy: 'blacklist', cascade: ['persist', 'remove'])] private ?UserBlacklistData $blacklistData = null; + public function __construct(string $email) + { + $this->email = $email; + $this->added = new DateTime(); + } + public function getEmail(): string { return $this->email; @@ -34,12 +40,6 @@ public function getAdded(): ?DateTime return $this->added; } - public function setEmail(string $email): self - { - $this->email = $email; - return $this; - } - public function setAdded(?DateTime $added): self { $this->added = $added; @@ -50,4 +50,13 @@ public function getBlacklistData(): ?UserBlacklistData { return $this->blacklistData; } + + public function setBlacklistData(?UserBlacklistData $data): self + { + $this->blacklistData = $data; + if ($data && $data->getBlacklist() !== $this) { + $data->setBlacklist($this); + } + return $this; + } } diff --git a/src/Domain/Subscription/Model/UserBlacklistData.php b/src/Domain/Subscription/Model/UserBlacklistData.php index f8d78c59..4ac769e9 100644 --- a/src/Domain/Subscription/Model/UserBlacklistData.php +++ b/src/Domain/Subscription/Model/UserBlacklistData.php @@ -10,13 +10,14 @@ #[ORM\Entity(repositoryClass: UserBlacklistDataRepository::class)] #[ORM\Table(name: 'phplist_user_blacklist_data')] -#[ORM\Index(name: 'emailidx', columns: ['email'])] -#[ORM\Index(name: 'emailnameidx', columns: ['email', 'name'])] +#[ORM\Index(name: 'phplist_user_blacklist_data_emailidx', columns: ['email'])] +#[ORM\Index(name: 'phplist_user_blacklist_data_emailnameidx', columns: ['email', 'name'])] class UserBlacklistData implements DomainModel { #[ORM\Id] - #[ORM\Column(name: 'email', type: 'string', length: 150)] - private string $email; + #[ORM\OneToOne(targetEntity: UserBlacklist::class, inversedBy: 'blacklistData')] + #[ORM\JoinColumn(name: 'email', referencedColumnName: 'email', nullable: false, onDelete: 'CASCADE')] + private UserBlacklist $blacklist; #[ORM\Column(name: 'name', type: 'string', length: 25)] private string $name; @@ -24,9 +25,20 @@ class UserBlacklistData implements DomainModel #[ORM\Column(name: 'data', type: 'text', nullable: true)] private ?string $data = null; + public function getBlacklist(): UserBlacklist + { + return $this->blacklist; + } + + public function setBlacklist(UserBlacklist $blacklist): self + { + $this->blacklist = $blacklist; + return $this; + } + public function getEmail(): string { - return $this->email; + return $this->blacklist->getEmail(); } public function getName(): string @@ -39,12 +51,6 @@ public function getData(): ?string return $this->data; } - public function setEmail(string $email): self - { - $this->email = $email; - return $this; - } - public function setName(string $name): self { $this->name = $name; diff --git a/src/Domain/Subscription/Service/Manager/SubscriberBlacklistManager.php b/src/Domain/Subscription/Service/Manager/SubscriberBlacklistManager.php index 3d124a31..c51d867f 100644 --- a/src/Domain/Subscription/Service/Manager/SubscriberBlacklistManager.php +++ b/src/Domain/Subscription/Service/Manager/SubscriberBlacklistManager.php @@ -39,15 +39,12 @@ public function addEmailToBlacklist(string $email, ?string $reasonData = null): return $this->getBlacklistInfo($email); } - $blacklistEntry = new UserBlacklist(); - $blacklistEntry->setEmail($email); - $blacklistEntry->setAdded(new DateTime()); - + $blacklistEntry = new UserBlacklist($email); $this->entityManager->persist($blacklistEntry); if ($reasonData !== null) { $blacklistData = new UserBlacklistData(); - $blacklistData->setEmail($email); + $blacklistData->setBlacklist($blacklistEntry); $blacklistData->setName('reason'); $blacklistData->setData($reasonData); $this->entityManager->persist($blacklistData); @@ -56,10 +53,10 @@ public function addEmailToBlacklist(string $email, ?string $reasonData = null): return $blacklistEntry; } - public function addBlacklistData(string $email, string $name, string $data): void + public function addBlacklistData(UserBlacklist $userBlacklist, string $name, string $data): void { $blacklistData = new UserBlacklistData(); - $blacklistData->setEmail($email); + $blacklistData->setBlacklist($userBlacklist); $blacklistData->setName($name); $blacklistData->setData($data); $this->entityManager->persist($blacklistData); diff --git a/src/Migrations/.gitkeep b/src/Migrations/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/Migrations/Version20251028092901MySqlInit.php b/src/Migrations/Version20251028092901MySqlInit.php new file mode 100644 index 00000000..7b345dad --- /dev/null +++ b/src/Migrations/Version20251028092901MySqlInit.php @@ -0,0 +1,34 @@ +connection->getDatabasePlatform(); + $this->skipIf( + !$platform instanceof MySQLPlatform, + sprintf( + 'This migration is only applicable for MySQL. Current platform: %s', + get_class($platform) + ) + ); + // this up() migration is auto-generated, please modify it to your needs + $this->addSql(file_get_contents(__DIR__.'/initial_schema.sql')); + } +} diff --git a/src/Migrations/Version20251028092902MySqlUpdate.php b/src/Migrations/Version20251028092902MySqlUpdate.php new file mode 100644 index 00000000..789bc1f0 --- /dev/null +++ b/src/Migrations/Version20251028092902MySqlUpdate.php @@ -0,0 +1,312 @@ +connection->getDatabasePlatform(); + $this->skipIf(!$platform instanceof MySQLPlatform, sprintf( + 'Unsupported platform for this migration: %s', + get_class($platform) + )); + + $this->addSql('ALTER TABLE phplist_admin CHANGE created created DATETIME NOT NULL, CHANGE modified modified DATETIME NOT NULL, CHANGE superuser superuser TINYINT(1) NOT NULL, CHANGE disabled disabled TINYINT(1) NOT NULL, CHANGE privileges privileges LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_admin RENAME INDEX loginnameidx TO phplist_admin_loginnameidx'); + $this->addSql('ALTER TABLE phplist_admin_attribute ADD CONSTRAINT FK_58E07690D3B10C48 FOREIGN KEY (adminattributeid) REFERENCES phplist_adminattribute (id)'); + $this->addSql('ALTER TABLE phplist_admin_attribute ADD CONSTRAINT FK_58E07690B8ED4D93 FOREIGN KEY (adminid) REFERENCES phplist_admin (id)'); + $this->addSql('CREATE INDEX IDX_58E07690D3B10C48 ON phplist_admin_attribute (adminattributeid)'); + $this->addSql('CREATE INDEX IDX_58E07690B8ED4D93 ON phplist_admin_attribute (adminid)'); + $this->addSql('ALTER TABLE phplist_admin_login CHANGE active active TINYINT(1) NOT NULL'); + $this->addSql('ALTER TABLE phplist_admin_login ADD CONSTRAINT FK_5FCE0842B8ED4D93 FOREIGN KEY (adminid) REFERENCES phplist_admin (id)'); + $this->addSql('CREATE INDEX IDX_5FCE0842B8ED4D93 ON phplist_admin_login (adminid)'); + $this->addSql('ALTER TABLE phplist_admin_password_request CHANGE id_key id_key INT UNSIGNED AUTO_INCREMENT NOT NULL'); + $this->addSql('ALTER TABLE phplist_admin_password_request ADD CONSTRAINT FK_DC146F3B880E0D76 FOREIGN KEY (`admin`) REFERENCES phplist_admin (id)'); + $this->addSql('CREATE INDEX IDX_DC146F3B880E0D76 ON phplist_admin_password_request (`admin`)'); + $this->addSql('ALTER TABLE phplist_admintoken CHANGE adminid adminid INT DEFAULT NULL, CHANGE value value VARCHAR(255) NOT NULL'); + $this->addSql('ALTER TABLE phplist_admintoken ADD CONSTRAINT FK_CB15D477B8ED4D93 FOREIGN KEY (adminid) REFERENCES phplist_admin (id) ON DELETE CASCADE'); + $this->addSql('CREATE INDEX IDX_CB15D477B8ED4D93 ON phplist_admintoken (adminid)'); + $this->addSql('ALTER TABLE phplist_attachment CHANGE description description LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_bounce DROP INDEX statusidx, ADD INDEX phplist_bounce_statusidx (status)'); + $this->addSql('ALTER TABLE phplist_bounce CHANGE header header LONGTEXT DEFAULT NULL, CHANGE data data LONGBLOB DEFAULT NULL, CHANGE comment comment LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_bounce RENAME INDEX dateindex TO phplist_bounce_dateindex'); + $this->addSql('ALTER TABLE phplist_bounceregex CHANGE regexhash regexhash VARCHAR(32) DEFAULT NULL, CHANGE comment comment LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_bounceregex RENAME INDEX regex TO phplist_bounceregex_regex'); + $this->addSql('ALTER TABLE phplist_config CHANGE editable editable TINYINT(1) DEFAULT 1 NOT NULL'); + $this->addSql('ALTER TABLE phplist_eventlog CHANGE entry entry LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_eventlog RENAME INDEX enteredidx TO phplist_eventlog_enteredidx'); + $this->addSql('ALTER TABLE phplist_eventlog RENAME INDEX pageidx TO phplist_eventlog_pageidx'); + $this->addSql('ALTER TABLE phplist_linktrack CHANGE latestclick latestclick DATETIME NOT NULL'); + $this->addSql('ALTER TABLE phplist_linktrack RENAME INDEX midindex TO phplist_linktrack_midindex'); + $this->addSql('ALTER TABLE phplist_linktrack RENAME INDEX miduidindex TO phplist_linktrack_miduidindex'); + $this->addSql('ALTER TABLE phplist_linktrack RENAME INDEX uidindex TO phplist_linktrack_uidindex'); + $this->addSql('ALTER TABLE phplist_linktrack RENAME INDEX urlindex TO phplist_linktrack_urlindex'); + $this->addSql('ALTER TABLE phplist_linktrack RENAME INDEX miduidurlindex TO phplist_linktrack_miduidurlindex'); + $this->addSql('ALTER TABLE phplist_linktrack_forward RENAME INDEX urlindex TO phplist_linktrack_forward_urlindex;'); + $this->addSql('ALTER TABLE phplist_linktrack_forward CHANGE urlhash urlhash VARCHAR(32) DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_linktrack_forward RENAME INDEX uuididx TO phplist_linktrack_forward_uuididx'); + $this->addSql('ALTER TABLE phplist_linktrack_forward RENAME INDEX urlunique TO phplist_linktrack_forward_urlunique'); + $this->addSql('ALTER TABLE phplist_linktrack_ml RENAME INDEX fwdindex TO phplist_linktrack_ml_fwdindex'); + $this->addSql('ALTER TABLE phplist_linktrack_ml RENAME INDEX midindex TO phplist_linktrack_ml_midindex'); + $this->addSql('ALTER TABLE phplist_linktrack_uml_click RENAME INDEX midindex TO phplist_linktrack_uml_click_midindex'); + $this->addSql('ALTER TABLE phplist_linktrack_uml_click RENAME INDEX miduidindex TO phplist_linktrack_uml_click_miduidindex'); + $this->addSql('ALTER TABLE phplist_linktrack_uml_click RENAME INDEX uidindex TO phplist_linktrack_uml_click_uidindex'); + $this->addSql('ALTER TABLE phplist_linktrack_uml_click RENAME INDEX miduidfwdid TO phplist_linktrack_uml_click_miduidfwdid'); + $this->addSql('ALTER TABLE phplist_linktrack_userclick CHANGE data data LONGTEXT DEFAULT NULL, ADD PRIMARY KEY (linkid, userid, messageid)'); + $this->addSql('ALTER TABLE phplist_linktrack_userclick RENAME INDEX linkindex TO phplist_linktrack_userclick_linkindex'); + $this->addSql('ALTER TABLE phplist_linktrack_userclick RENAME INDEX linkuserindex TO phplist_linktrack_userclick_linkuserindex'); + $this->addSql('ALTER TABLE phplist_linktrack_userclick RENAME INDEX linkusermessageindex TO phplist_linktrack_userclick_linkusermessageindex'); + $this->addSql('ALTER TABLE phplist_linktrack_userclick RENAME INDEX midindex TO phplist_linktrack_userclick_midindex'); + $this->addSql('ALTER TABLE phplist_linktrack_userclick RENAME INDEX uidindex TO phplist_linktrack_userclick_uidindex'); + $this->addSql('ALTER TABLE phplist_list CHANGE description description VARCHAR(255) NOT NULL, CHANGE modified modified DATETIME NOT NULL, CHANGE active active TINYINT(1) NOT NULL, CHANGE category category VARCHAR(255) NOT NULL'); + $this->addSql('ALTER TABLE phplist_list ADD CONSTRAINT FK_A4CE8621CF60E67C FOREIGN KEY (owner) REFERENCES phplist_admin (id)'); + $this->addSql('CREATE INDEX IDX_A4CE8621CF60E67C ON phplist_list (owner)'); + $this->addSql('ALTER TABLE phplist_list RENAME INDEX nameidx TO phplist_list_nameidx'); + $this->addSql('ALTER TABLE phplist_list RENAME INDEX listorderidx TO phplist_list_listorderidx'); + $this->addSql('ALTER TABLE phplist_listmessage CHANGE modified modified DATETIME NOT NULL'); + $this->addSql('ALTER TABLE phplist_listmessage ADD CONSTRAINT FK_83B22D7A31478478 FOREIGN KEY (messageid) REFERENCES phplist_message (id)'); + $this->addSql('ALTER TABLE phplist_listmessage ADD CONSTRAINT FK_83B22D7A8E44C1EF FOREIGN KEY (listid) REFERENCES phplist_list (id)'); + $this->addSql('CREATE INDEX IDX_83B22D7A31478478 ON phplist_listmessage (messageid)'); + $this->addSql('CREATE INDEX IDX_83B22D7A8E44C1EF ON phplist_listmessage (listid)'); + $this->addSql('ALTER TABLE phplist_listmessage RENAME INDEX listmessageidx TO phplist_listmessage_listmessageidx'); + $this->addSql('ALTER TABLE phplist_listmessage RENAME INDEX messageid TO phplist_listmessage_messageid'); + $this->addSql('DROP INDEX userlistenteredidx ON phplist_listuser'); + $this->addSql('ALTER TABLE phplist_listuser CHANGE modified modified DATETIME NOT NULL'); + $this->addSql('ALTER TABLE phplist_listuser ADD CONSTRAINT FK_F467E411F132696E FOREIGN KEY (userid) REFERENCES phplist_user_user (id)'); + $this->addSql('ALTER TABLE phplist_listuser ADD CONSTRAINT FK_F467E4118E44C1EF FOREIGN KEY (listid) REFERENCES phplist_list (id) ON DELETE CASCADE'); + $this->addSql('CREATE INDEX phplist_listuser_userlistenteredidx ON phplist_listuser (userid, entered, listid)'); + $this->addSql('ALTER TABLE phplist_listuser RENAME INDEX userenteredidx TO phplist_listuser_userenteredidx'); + $this->addSql('ALTER TABLE phplist_listuser RENAME INDEX useridx TO phplist_listuser_useridx'); + $this->addSql('ALTER TABLE phplist_listuser RENAME INDEX listidx TO phplist_listuser_listidx'); + $this->addSql('ALTER TABLE phplist_message CHANGE footer footer LONGTEXT DEFAULT NULL, CHANGE modified modified DATETIME NOT NULL, CHANGE userselection userselection LONGTEXT DEFAULT NULL, CHANGE htmlformatted htmlformatted TINYINT(1) NOT NULL, CHANGE processed processed TINYINT(1) DEFAULT 0 NOT NULL, CHANGE astext astext TINYINT(1) NOT NULL, CHANGE ashtml ashtml TINYINT(1) NOT NULL, CHANGE astextandhtml astextandhtml TINYINT(1) NOT NULL, CHANGE aspdf aspdf TINYINT(1) NOT NULL, CHANGE astextandpdf astextandpdf TINYINT(1) NOT NULL, CHANGE viewed viewed INT DEFAULT 0 NOT NULL, CHANGE bouncecount bouncecount INT DEFAULT 0 NOT NULL'); + $this->addSql('ALTER TABLE phplist_message ADD CONSTRAINT FK_C5D81FCDCF60E67C FOREIGN KEY (owner) REFERENCES phplist_admin (id)'); + $this->addSql('ALTER TABLE phplist_message ADD CONSTRAINT FK_C5D81FCD97601F83 FOREIGN KEY (template) REFERENCES phplist_template (id) ON DELETE SET NULL'); + $this->addSql('CREATE INDEX IDX_C5D81FCDCF60E67C ON phplist_message (owner)'); + $this->addSql('CREATE INDEX IDX_C5D81FCD97601F83 ON phplist_message (template)'); + $this->addSql('ALTER TABLE phplist_message RENAME INDEX uuididx TO phplist_message_uuididx'); + $this->addSql('ALTER TABLE phplist_message_attachment RENAME INDEX messageattidx TO phplist_message_attachment_messageattidx'); + $this->addSql('ALTER TABLE phplist_message_attachment RENAME INDEX messageidx TO phplist_message_attachment_messageidx'); + $this->addSql('ALTER TABLE phplist_messagedata CHANGE data data LONGTEXT CHARACTER SET utf8mb4 DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_sendprocess CHANGE modified modified DATETIME NOT NULL'); + $this->addSql('ALTER TABLE phplist_subscribepage CHANGE active active TINYINT(1) DEFAULT 0 NOT NULL'); + $this->addSql('ALTER TABLE phplist_subscribepage ADD CONSTRAINT FK_5BAC7737CF60E67C FOREIGN KEY (owner) REFERENCES phplist_admin (id)'); + $this->addSql('CREATE INDEX IDX_5BAC7737CF60E67C ON phplist_subscribepage (owner)'); + $this->addSql('ALTER TABLE phplist_subscribepage_data CHANGE data data LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_template RENAME INDEX title TO phplist_template_title'); + $this->addSql('ALTER TABLE phplist_templateimage CHANGE template template INT NOT NULL'); + $this->addSql('ALTER TABLE phplist_templateimage ADD CONSTRAINT FK_30A85BA97601F83 FOREIGN KEY (template) REFERENCES phplist_template (id)'); + $this->addSql('ALTER TABLE phplist_templateimage RENAME INDEX templateidx TO phplist_templateimage_templateidx'); + $this->addSql('ALTER TABLE phplist_urlcache RENAME INDEX urlindex TO phplist_urlcache_urlindex'); + $this->addSql('ALTER TABLE phplist_user_attribute RENAME INDEX idnameindex TO phplist_user_attribute_idnameindex'); + $this->addSql('ALTER TABLE phplist_user_attribute RENAME INDEX nameindex TO phplist_user_attribute_nameindex'); + $this->addSql('DROP INDEX email ON phplist_user_blacklist'); + $this->addSql('ALTER TABLE phplist_user_blacklist ADD PRIMARY KEY (email)'); + $this->addSql('ALTER TABLE phplist_user_blacklist RENAME INDEX emailidx TO phplist_user_blacklist_emailidx'); + $this->addSql('DROP INDEX email ON phplist_user_blacklist_data'); + $this->addSql('ALTER TABLE phplist_user_blacklist_data CHANGE email email VARCHAR(255) NOT NULL, CHANGE data data LONGTEXT DEFAULT NULL, ADD PRIMARY KEY (email)'); + $this->addSql('ALTER TABLE phplist_user_blacklist_data ADD CONSTRAINT FK_6D67150CE7927C74 FOREIGN KEY (email) REFERENCES phplist_user_blacklist (email) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE phplist_user_blacklist_data RENAME INDEX emailidx TO phplist_user_blacklist_data_emailidx'); + $this->addSql('ALTER TABLE phplist_user_blacklist_data RENAME INDEX emailnameidx TO phplist_user_blacklist_data_emailnameidx'); + $this->addSql('ALTER TABLE phplist_user_message_bounce RENAME INDEX bounceidx TO phplist_user_message_bounce_bounceidx'); + $this->addSql('ALTER TABLE phplist_user_message_bounce RENAME INDEX msgidx TO phplist_user_message_bounce_msgidx'); + $this->addSql('ALTER TABLE phplist_user_message_bounce RENAME INDEX umbindex TO phplist_user_message_bounce_umbindex'); + $this->addSql('ALTER TABLE phplist_user_message_bounce RENAME INDEX useridx TO phplist_user_message_bounce_useridx'); + $this->addSql('ALTER TABLE phplist_user_message_forward RENAME INDEX messageidx TO phplist_user_message_forward_messageidx'); + $this->addSql('ALTER TABLE phplist_user_message_forward RENAME INDEX useridx TO phplist_user_message_forward_useridx'); + $this->addSql('ALTER TABLE phplist_user_message_forward RENAME INDEX usermessageidx TO phplist_user_message_forward_usermessageidx'); + $this->addSql('ALTER TABLE phplist_user_message_view RENAME INDEX msgidx TO phplist_user_message_view_msgidx'); + $this->addSql('ALTER TABLE phplist_user_message_view RENAME INDEX useridx TO phplist_user_message_view_useridx'); + $this->addSql('ALTER TABLE phplist_user_message_view RENAME INDEX usermsgidx TO phplist_user_message_view_usermsgidx'); + $this->addSql('ALTER TABLE phplist_user_user CHANGE confirmed confirmed TINYINT(1) NOT NULL, CHANGE blacklisted blacklisted TINYINT(1) NOT NULL, CHANGE optedin optedin TINYINT(1) NOT NULL, CHANGE bouncecount bouncecount INT NOT NULL, CHANGE modified modified DATETIME NOT NULL, CHANGE uuid uuid VARCHAR(36) NOT NULL, CHANGE htmlemail htmlemail TINYINT(1) NOT NULL, CHANGE passwordchanged passwordchanged DATETIME DEFAULT NULL, CHANGE disabled disabled TINYINT(1) NOT NULL, CHANGE extradata extradata LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX idxuniqid TO phplist_user_user_idxuniqid'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX enteredindex TO phplist_user_user_enteredindex'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX confidx TO phplist_user_user_confidx'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX blidx TO phplist_user_user_blidx'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX optidx TO phplist_user_user_optidx'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX uuididx TO phplist_user_user_uuididx'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX foreignkey TO phplist_user_user_foreignkey'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX email TO phplist_user_user_email'); + $this->addSql('ALTER TABLE phplist_user_user_attribute CHANGE value value LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_user_user_attribute ADD CONSTRAINT FK_E24E310878C45AB5 FOREIGN KEY (attributeid) REFERENCES phplist_user_attribute (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE phplist_user_user_attribute ADD CONSTRAINT FK_E24E3108F132696E FOREIGN KEY (userid) REFERENCES phplist_user_user (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE phplist_user_user_attribute RENAME INDEX attindex TO phplist_user_user_attribute_attindex'); + $this->addSql('ALTER TABLE phplist_user_user_attribute RENAME INDEX attuserid TO phplist_user_user_attribute_attuserid'); + $this->addSql('ALTER TABLE phplist_user_user_attribute RENAME INDEX userindex TO phplist_user_user_attribute_userindex'); + $this->addSql('ALTER TABLE phplist_user_user_history CHANGE detail detail LONGTEXT DEFAULT NULL, CHANGE systeminfo systeminfo LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_user_user_history ADD CONSTRAINT FK_6DBB605CF132696E FOREIGN KEY (userid) REFERENCES phplist_user_user (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE phplist_user_user_history RENAME INDEX dateidx TO phplist_user_user_history_dateidx'); + $this->addSql('ALTER TABLE phplist_user_user_history RENAME INDEX userididx TO phplist_user_user_history_userididx'); + $this->addSql('ALTER TABLE phplist_usermessage ADD CONSTRAINT FK_7F30F469F132696E FOREIGN KEY (userid) REFERENCES phplist_user_user (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE phplist_usermessage ADD CONSTRAINT FK_7F30F46931478478 FOREIGN KEY (messageid) REFERENCES phplist_message (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE phplist_usermessage RENAME INDEX enteredindex TO phplist_usermessage_enteredindex'); + $this->addSql('ALTER TABLE phplist_usermessage RENAME INDEX messageidindex TO phplist_usermessage_messageidindex'); + $this->addSql('ALTER TABLE phplist_usermessage RENAME INDEX statusidx TO phplist_usermessage_statusidx'); + $this->addSql('ALTER TABLE phplist_usermessage RENAME INDEX useridindex TO phplist_usermessage_useridindex'); + $this->addSql('ALTER TABLE phplist_usermessage RENAME INDEX viewedidx TO phplist_usermessage_viewedidx'); + $this->addSql('ALTER TABLE phplist_userstats RENAME INDEX dateindex TO phplist_userstats_dateindex'); + $this->addSql('ALTER TABLE phplist_userstats RENAME INDEX itemindex TO phplist_userstats_itemindex'); + $this->addSql('ALTER TABLE phplist_userstats RENAME INDEX listdateindex TO phplist_userstats_listdateindex'); + $this->addSql('ALTER TABLE phplist_userstats RENAME INDEX listindex TO phplist_userstats_listindex'); + $this->addSql('ALTER TABLE phplist_userstats RENAME INDEX entry TO phplist_userstats_entry'); + } + + public function down(Schema $schema): void + { + $platform = $this->connection->getDatabasePlatform(); + $this->skipIf(!$platform instanceof MySQLPlatform, sprintf( + 'Unsupported platform for this migration: %s', + get_class($platform) + )); + + $this->addSql('ALTER TABLE phplist_admin CHANGE created created DATETIME DEFAULT NULL, CHANGE modified modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, CHANGE disabled disabled TINYINT(1) DEFAULT 0, CHANGE superuser superuser TINYINT(1) DEFAULT 0, CHANGE privileges privileges TEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_admin RENAME INDEX phplist_admin_loginnameidx TO loginnameidx'); + $this->addSql('ALTER TABLE phplist_admin_attribute DROP FOREIGN KEY FK_58E07690D3B10C48'); + $this->addSql('ALTER TABLE phplist_admin_attribute DROP FOREIGN KEY FK_58E07690B8ED4D93'); + $this->addSql('DROP INDEX IDX_58E07690D3B10C48 ON phplist_admin_attribute'); + $this->addSql('DROP INDEX IDX_58E07690B8ED4D93 ON phplist_admin_attribute'); + $this->addSql('ALTER TABLE phplist_admin_login DROP FOREIGN KEY FK_5FCE0842B8ED4D93'); + $this->addSql('DROP INDEX IDX_5FCE0842B8ED4D93 ON phplist_admin_login'); + $this->addSql('ALTER TABLE phplist_admin_login CHANGE active active TINYINT(1) DEFAULT 0 NOT NULL'); + $this->addSql('ALTER TABLE phplist_admin_password_request DROP FOREIGN KEY FK_DC146F3B880E0D76'); + $this->addSql('DROP INDEX IDX_DC146F3B880E0D76 ON phplist_admin_password_request'); + $this->addSql('ALTER TABLE phplist_admin_password_request CHANGE id_key id_key INT AUTO_INCREMENT NOT NULL'); + $this->addSql('ALTER TABLE phplist_admintoken DROP FOREIGN KEY FK_CB15D477B8ED4D93'); + $this->addSql('DROP INDEX IDX_CB15D477B8ED4D93 ON phplist_admintoken'); + $this->addSql('ALTER TABLE phplist_admintoken CHANGE adminid adminid INT NOT NULL, CHANGE value value VARCHAR(255) DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_attachment CHANGE description description TEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_bounce DROP INDEX phplist_bounce_statusidx, ADD INDEX statusidx (status(20))'); + $this->addSql('ALTER TABLE phplist_bounce CHANGE header header TEXT DEFAULT NULL, CHANGE data data MEDIUMBLOB DEFAULT NULL, CHANGE comment comment TEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_bounce RENAME INDEX phplist_bounce_dateindex TO dateindex'); + $this->addSql('ALTER TABLE phplist_bounceregex CHANGE regexhash regexhash CHAR(32) DEFAULT NULL, CHANGE comment comment TEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_bounceregex RENAME INDEX phplist_bounceregex_regex TO regex'); + $this->addSql('ALTER TABLE phplist_config CHANGE editable editable TINYINT(1) DEFAULT 1'); + $this->addSql('ALTER TABLE phplist_eventlog CHANGE entry entry TEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_eventlog RENAME INDEX phplist_eventlog_enteredidx TO enteredidx'); + $this->addSql('ALTER TABLE phplist_eventlog RENAME INDEX phplist_eventlog_pageidx TO pageidx'); + $this->addSql('ALTER TABLE phplist_linktrack CHANGE latestclick latestclick DATETIME DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_linktrack RENAME INDEX phplist_linktrack_miduidurlindex TO miduidurlindex'); + $this->addSql('ALTER TABLE phplist_linktrack RENAME INDEX phplist_linktrack_midindex TO midindex'); + $this->addSql('ALTER TABLE phplist_linktrack RENAME INDEX phplist_linktrack_uidindex TO uidindex'); + $this->addSql('ALTER TABLE phplist_linktrack RENAME INDEX phplist_linktrack_urlindex TO urlindex'); + $this->addSql('ALTER TABLE phplist_linktrack RENAME INDEX phplist_linktrack_miduidindex TO miduidindex'); + $this->addSql('ALTER TABLE phplist_linktrack_forward DROP INDEX phplist_linktrack_forward_urlindex, ADD INDEX urlindex (url(255))'); + $this->addSql('ALTER TABLE phplist_linktrack_forward CHANGE urlhash urlhash CHAR(32) DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_linktrack_forward RENAME INDEX phplist_linktrack_forward_urlunique TO urlunique'); + $this->addSql('ALTER TABLE phplist_linktrack_forward RENAME INDEX phplist_linktrack_forward_uuididx TO uuididx'); + $this->addSql('ALTER TABLE phplist_linktrack_ml RENAME INDEX phplist_linktrack_ml_midindex TO midindex'); + $this->addSql('ALTER TABLE phplist_linktrack_ml RENAME INDEX phplist_linktrack_ml_fwdindex TO fwdindex'); + $this->addSql('ALTER TABLE phplist_linktrack_uml_click RENAME INDEX phplist_linktrack_uml_click_miduidfwdid TO miduidfwdid'); + $this->addSql('ALTER TABLE phplist_linktrack_uml_click RENAME INDEX phplist_linktrack_uml_click_midindex TO midindex'); + $this->addSql('ALTER TABLE phplist_linktrack_uml_click RENAME INDEX phplist_linktrack_uml_click_uidindex TO uidindex'); + $this->addSql('ALTER TABLE phplist_linktrack_uml_click RENAME INDEX phplist_linktrack_uml_click_miduidindex TO miduidindex'); + $this->addSql('DROP INDEX `primary` ON phplist_linktrack_userclick'); + $this->addSql('ALTER TABLE phplist_linktrack_userclick CHANGE data data TEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_linktrack_userclick RENAME INDEX phplist_linktrack_userclick_linkindex TO linkindex'); + $this->addSql('ALTER TABLE phplist_linktrack_userclick RENAME INDEX phplist_linktrack_userclick_uidindex TO uidindex'); + $this->addSql('ALTER TABLE phplist_linktrack_userclick RENAME INDEX phplist_linktrack_userclick_midindex TO midindex'); + $this->addSql('ALTER TABLE phplist_linktrack_userclick RENAME INDEX phplist_linktrack_userclick_linkuserindex TO linkuserindex'); + $this->addSql('ALTER TABLE phplist_linktrack_userclick RENAME INDEX phplist_linktrack_userclick_linkusermessageindex TO linkusermessageindex'); + $this->addSql('ALTER TABLE phplist_list DROP FOREIGN KEY FK_A4CE8621CF60E67C'); + $this->addSql('DROP INDEX IDX_A4CE8621CF60E67C ON phplist_list'); + $this->addSql('ALTER TABLE phplist_list CHANGE description description TEXT DEFAULT NULL, CHANGE modified modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, CHANGE active active TINYINT(1) DEFAULT NULL, CHANGE category category VARCHAR(255) DEFAULT \'\''); + $this->addSql('ALTER TABLE phplist_list RENAME INDEX phplist_list_nameidx TO nameidx'); + $this->addSql('ALTER TABLE phplist_list RENAME INDEX phplist_list_listorderidx TO listorderidx'); + $this->addSql('ALTER TABLE phplist_listmessage DROP FOREIGN KEY FK_83B22D7A31478478'); + $this->addSql('ALTER TABLE phplist_listmessage DROP FOREIGN KEY FK_83B22D7A8E44C1EF'); + $this->addSql('DROP INDEX IDX_83B22D7A31478478 ON phplist_listmessage'); + $this->addSql('DROP INDEX IDX_83B22D7A8E44C1EF ON phplist_listmessage'); + $this->addSql('ALTER TABLE phplist_listmessage CHANGE modified modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL'); + $this->addSql('ALTER TABLE phplist_listmessage RENAME INDEX phplist_listmessage_messageid TO messageid'); + $this->addSql('ALTER TABLE phplist_listmessage RENAME INDEX phplist_listmessage_listmessageidx TO listmessageidx'); + $this->addSql('ALTER TABLE phplist_listuser DROP FOREIGN KEY FK_F467E411F132696E'); + $this->addSql('ALTER TABLE phplist_listuser DROP FOREIGN KEY FK_F467E4118E44C1EF'); + $this->addSql('DROP INDEX phplist_listuser_userlistenteredidx ON phplist_listuser'); + $this->addSql('ALTER TABLE phplist_listuser CHANGE modified modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL'); + $this->addSql('CREATE INDEX userlistenteredidx ON phplist_listuser (userid, listid, entered)'); + $this->addSql('ALTER TABLE phplist_listuser RENAME INDEX phplist_listuser_userenteredidx TO userenteredidx'); + $this->addSql('ALTER TABLE phplist_listuser RENAME INDEX phplist_listuser_useridx TO useridx'); + $this->addSql('ALTER TABLE phplist_listuser RENAME INDEX phplist_listuser_listidx TO listidx'); + $this->addSql('ALTER TABLE phplist_message DROP FOREIGN KEY FK_C5D81FCDCF60E67C'); + $this->addSql('ALTER TABLE phplist_message DROP FOREIGN KEY FK_C5D81FCD97601F83'); + $this->addSql('DROP INDEX IDX_C5D81FCDCF60E67C ON phplist_message'); + $this->addSql('DROP INDEX IDX_C5D81FCD97601F83 ON phplist_message'); + $this->addSql('ALTER TABLE phplist_message CHANGE modified modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, CHANGE htmlformatted htmlformatted TINYINT(1) DEFAULT 0, CHANGE astext astext INT DEFAULT 0, CHANGE ashtml ashtml INT DEFAULT 0, CHANGE aspdf aspdf INT DEFAULT 0, CHANGE astextandhtml astextandhtml INT DEFAULT 0, CHANGE astextandpdf astextandpdf INT DEFAULT 0, CHANGE processed processed INT UNSIGNED DEFAULT 0, CHANGE viewed viewed INT DEFAULT 0, CHANGE bouncecount bouncecount INT DEFAULT 0, CHANGE footer footer TEXT DEFAULT NULL, CHANGE userselection userselection TEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_message RENAME INDEX phplist_message_uuididx TO uuididx'); + $this->addSql('ALTER TABLE phplist_message_attachment RENAME INDEX phplist_message_attachment_messageidx TO messageidx'); + $this->addSql('ALTER TABLE phplist_message_attachment RENAME INDEX phplist_message_attachment_messageattidx TO messageattidx'); + $this->addSql('ALTER TABLE phplist_messagedata CHANGE data data LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_sendprocess CHANGE modified modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL'); + $this->addSql('ALTER TABLE phplist_subscribepage DROP FOREIGN KEY FK_5BAC7737CF60E67C'); + $this->addSql('DROP INDEX IDX_5BAC7737CF60E67C ON phplist_subscribepage'); + $this->addSql('ALTER TABLE phplist_subscribepage CHANGE active active TINYINT(1) DEFAULT 0'); + $this->addSql('ALTER TABLE phplist_subscribepage_data CHANGE data data TEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_template RENAME INDEX phplist_template_title TO title'); + $this->addSql('ALTER TABLE phplist_templateimage DROP FOREIGN KEY FK_30A85BA97601F83'); + $this->addSql('ALTER TABLE phplist_templateimage CHANGE template template INT DEFAULT 0 NOT NULL'); + $this->addSql('ALTER TABLE phplist_templateimage RENAME INDEX phplist_templateimage_templateidx TO templateidx'); + $this->addSql('ALTER TABLE phplist_urlcache DROP INDEX phplist_urlcache_urlindex, ADD INDEX urlindex (url(255))'); + $this->addSql('ALTER TABLE phplist_user_attribute RENAME INDEX phplist_user_attribute_nameindex TO nameindex'); + $this->addSql('ALTER TABLE phplist_user_attribute RENAME INDEX phplist_user_attribute_idnameindex TO idnameindex'); + $this->addSql('ALTER TABLE phplist_user_blacklist DROP INDEX `primary`, ADD UNIQUE INDEX email (email)'); + $this->addSql('ALTER TABLE phplist_user_blacklist RENAME INDEX phplist_user_blacklist_emailidx TO emailidx'); + $this->addSql('ALTER TABLE phplist_user_blacklist_data DROP INDEX `primary`, ADD UNIQUE INDEX email (email)'); + $this->addSql('ALTER TABLE phplist_user_blacklist_data DROP FOREIGN KEY FK_6D67150CE7927C74'); + $this->addSql('ALTER TABLE phplist_user_blacklist_data CHANGE email email VARCHAR(150) NOT NULL, CHANGE data data TEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_user_blacklist_data RENAME INDEX phplist_user_blacklist_data_emailidx TO emailidx'); + $this->addSql('ALTER TABLE phplist_user_blacklist_data RENAME INDEX phplist_user_blacklist_data_emailnameidx TO emailnameidx'); + $this->addSql('ALTER TABLE phplist_user_message_bounce RENAME INDEX phplist_user_message_bounce_umbindex TO umbindex'); + $this->addSql('ALTER TABLE phplist_user_message_bounce RENAME INDEX phplist_user_message_bounce_useridx TO useridx'); + $this->addSql('ALTER TABLE phplist_user_message_bounce RENAME INDEX phplist_user_message_bounce_msgidx TO msgidx'); + $this->addSql('ALTER TABLE phplist_user_message_bounce RENAME INDEX phplist_user_message_bounce_bounceidx TO bounceidx'); + $this->addSql('ALTER TABLE phplist_user_message_forward RENAME INDEX phplist_user_message_forward_usermessageidx TO usermessageidx'); + $this->addSql('ALTER TABLE phplist_user_message_forward RENAME INDEX phplist_user_message_forward_useridx TO useridx'); + $this->addSql('ALTER TABLE phplist_user_message_forward RENAME INDEX phplist_user_message_forward_messageidx TO messageidx'); + $this->addSql('ALTER TABLE phplist_user_message_view RENAME INDEX phplist_user_message_view_usermsgidx TO usermsgidx'); + $this->addSql('ALTER TABLE phplist_user_message_view RENAME INDEX phplist_user_message_view_msgidx TO msgidx'); + $this->addSql('ALTER TABLE phplist_user_message_view RENAME INDEX phplist_user_message_view_useridx TO useridx'); + $this->addSql('ALTER TABLE phplist_user_user CHANGE modified modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, CHANGE confirmed confirmed TINYINT(1) DEFAULT 0, CHANGE blacklisted blacklisted TINYINT(1) DEFAULT 0, CHANGE bouncecount bouncecount INT DEFAULT 0, CHANGE htmlemail htmlemail TINYINT(1) DEFAULT 0, CHANGE disabled disabled TINYINT(1) DEFAULT 0, CHANGE extradata extradata TEXT DEFAULT NULL, CHANGE optedin optedin TINYINT(1) DEFAULT 0, CHANGE uuid uuid VARCHAR(36) DEFAULT \'\', CHANGE passwordchanged passwordchanged DATE DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX phplist_user_user_email TO email'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX phplist_user_user_foreignkey TO foreignkey'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX phplist_user_user_idxuniqid TO idxuniqid'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX phplist_user_user_enteredindex TO enteredindex'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX phplist_user_user_confidx TO confidx'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX phplist_user_user_blidx TO blidx'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX phplist_user_user_optidx TO optidx'); + $this->addSql('ALTER TABLE phplist_user_user RENAME INDEX phplist_user_user_uuididx TO uuididx'); + $this->addSql('ALTER TABLE phplist_user_user_attribute DROP FOREIGN KEY FK_E24E310878C45AB5'); + $this->addSql('ALTER TABLE phplist_user_user_attribute DROP FOREIGN KEY FK_E24E3108F132696E'); + $this->addSql('ALTER TABLE phplist_user_user_attribute CHANGE value value TEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_user_user_attribute RENAME INDEX phplist_user_user_attribute_userindex TO userindex'); + $this->addSql('ALTER TABLE phplist_user_user_attribute RENAME INDEX phplist_user_user_attribute_attindex TO attindex'); + $this->addSql('ALTER TABLE phplist_user_user_attribute RENAME INDEX phplist_user_user_attribute_attuserid TO attuserid'); + $this->addSql('ALTER TABLE phplist_user_user_history DROP FOREIGN KEY FK_6DBB605CF132696E'); + $this->addSql('ALTER TABLE phplist_user_user_history CHANGE detail detail TEXT DEFAULT NULL, CHANGE systeminfo systeminfo TEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE phplist_user_user_history RENAME INDEX phplist_user_user_history_userididx TO userididx'); + $this->addSql('ALTER TABLE phplist_user_user_history RENAME INDEX phplist_user_user_history_dateidx TO dateidx'); + $this->addSql('ALTER TABLE phplist_usermessage DROP FOREIGN KEY FK_7F30F469F132696E'); + $this->addSql('ALTER TABLE phplist_usermessage DROP FOREIGN KEY FK_7F30F46931478478'); + $this->addSql('ALTER TABLE phplist_usermessage RENAME INDEX phplist_usermessage_messageidindex TO messageidindex'); + $this->addSql('ALTER TABLE phplist_usermessage RENAME INDEX phplist_usermessage_useridindex TO useridindex'); + $this->addSql('ALTER TABLE phplist_usermessage RENAME INDEX phplist_usermessage_enteredindex TO enteredindex'); + $this->addSql('ALTER TABLE phplist_usermessage RENAME INDEX phplist_usermessage_statusidx TO statusidx'); + $this->addSql('ALTER TABLE phplist_usermessage RENAME INDEX phplist_usermessage_viewedidx TO viewedidx'); + $this->addSql('ALTER TABLE phplist_userstats RENAME INDEX phplist_userstats_entry TO entry'); + $this->addSql('ALTER TABLE phplist_userstats RENAME INDEX phplist_userstats_dateindex TO dateindex'); + $this->addSql('ALTER TABLE phplist_userstats RENAME INDEX phplist_userstats_itemindex TO itemindex'); + $this->addSql('ALTER TABLE phplist_userstats RENAME INDEX phplist_userstats_listindex TO listindex'); + $this->addSql('ALTER TABLE phplist_userstats RENAME INDEX phplist_userstats_listdateindex TO listdateindex'); + } +} diff --git a/src/Migrations/Version20251031072945PostGreInit.php b/src/Migrations/Version20251031072945PostGreInit.php new file mode 100644 index 00000000..206ec175 --- /dev/null +++ b/src/Migrations/Version20251031072945PostGreInit.php @@ -0,0 +1,311 @@ +connection->getDatabasePlatform(); + $this->skipIf(!$platform instanceof PostgreSQLPlatform, sprintf( + 'Unsupported platform for this migration: %s', + get_class($platform) + )); + + $this->addSql('CREATE SEQUENCE phplist_admin_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_admin_login_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_admin_password_request_id_key_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_adminattribute_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_admintoken_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_attachment_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_bounce_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_bounceregex_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_eventlog_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_linktrack_linkid_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_linktrack_forward_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_linktrack_uml_click_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_list_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_listmessage_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_message_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_message_attachment_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_sendprocess_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_subscribepage_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_template_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_templateimage_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_urlcache_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_user_attribute_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_user_message_bounce_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_user_message_forward_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_user_message_view_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_user_user_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_user_user_history_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE phplist_userstats_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE TABLE phplist_admin (id INT NOT NULL, created TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, modified TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, loginname VARCHAR(66) NOT NULL, namelc VARCHAR(255) DEFAULT NULL, email VARCHAR(255) NOT NULL, modifiedby VARCHAR(66) DEFAULT NULL, password VARCHAR(255) DEFAULT NULL, passwordchanged DATE DEFAULT NULL, disabled BOOLEAN NOT NULL, superuser BOOLEAN NOT NULL, privileges TEXT DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE UNIQUE INDEX phplist_admin_loginnameidx ON phplist_admin (loginname)'); + $this->addSql('CREATE TABLE phplist_admin_attribute (adminattributeid INT NOT NULL, adminid INT NOT NULL, value VARCHAR(255) DEFAULT NULL, PRIMARY KEY(adminattributeid, adminid))'); + $this->addSql('CREATE INDEX IDX_58E07690D3B10C48 ON phplist_admin_attribute (adminattributeid)'); + $this->addSql('CREATE INDEX IDX_58E07690B8ED4D93 ON phplist_admin_attribute (adminid)'); + $this->addSql('CREATE TABLE phplist_admin_login (id INT NOT NULL, adminid INT NOT NULL, moment BIGINT NOT NULL, remote_ip4 VARCHAR(32) NOT NULL, remote_ip6 VARCHAR(50) NOT NULL, sessionid VARCHAR(50) NOT NULL, active BOOLEAN NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_5FCE0842B8ED4D93 ON phplist_admin_login (adminid)'); + $this->addSql('CREATE TABLE phplist_admin_password_request (id_key INT NOT NULL, admin INT DEFAULT NULL, date TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, key_value VARCHAR(32) NOT NULL, PRIMARY KEY(id_key))'); + $this->addSql('CREATE INDEX IDX_DC146F3B880E0D76 ON phplist_admin_password_request (admin)'); + $this->addSql('CREATE TABLE phplist_adminattribute (id INT NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(30) DEFAULT NULL, listorder INT DEFAULT NULL, default_value VARCHAR(255) DEFAULT NULL, required BOOLEAN DEFAULT NULL, tablename VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE phplist_admintoken (id INT NOT NULL, adminid INT DEFAULT NULL, entered INT NOT NULL, expires TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, value VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_CB15D477B8ED4D93 ON phplist_admintoken (adminid)'); + $this->addSql('CREATE TABLE phplist_attachment (id INT NOT NULL, filename VARCHAR(255) DEFAULT NULL, remotefile VARCHAR(255) DEFAULT NULL, mimetype VARCHAR(255) DEFAULT NULL, description TEXT DEFAULT NULL, size INT DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE phplist_bounce (id INT NOT NULL, date TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, header TEXT DEFAULT NULL, data BYTEA DEFAULT NULL, status VARCHAR(255) DEFAULT NULL, comment TEXT DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_bounce_dateindex ON phplist_bounce (date)'); + $this->addSql('CREATE INDEX phplist_bounce_statusidx ON phplist_bounce (status)'); + $this->addSql('CREATE TABLE phplist_bounceregex (id INT NOT NULL, regex VARCHAR(2083) DEFAULT NULL, regexhash VARCHAR(32) DEFAULT NULL, action VARCHAR(255) DEFAULT NULL, listorder INT DEFAULT 0, admin INT DEFAULT NULL, comment TEXT DEFAULT NULL, status VARCHAR(255) DEFAULT NULL, count INT DEFAULT 0, PRIMARY KEY(id))'); + $this->addSql('CREATE UNIQUE INDEX phplist_bounceregex_regex ON phplist_bounceregex (regexhash)'); + $this->addSql('CREATE TABLE phplist_bounceregex_bounce (regex INT NOT NULL, bounce INT NOT NULL, PRIMARY KEY(regex, bounce))'); + $this->addSql('CREATE TABLE phplist_config (item VARCHAR(35) NOT NULL, value TEXT DEFAULT NULL, editable BOOLEAN DEFAULT true NOT NULL, type VARCHAR(25) DEFAULT NULL, PRIMARY KEY(item))'); + $this->addSql('CREATE TABLE phplist_eventlog (id INT NOT NULL, entered TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, page VARCHAR(100) DEFAULT NULL, entry TEXT DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_eventlog_enteredidx ON phplist_eventlog (entered)'); + $this->addSql('CREATE INDEX phplist_eventlog_pageidx ON phplist_eventlog (page)'); + $this->addSql('CREATE TABLE phplist_i18n (lan VARCHAR(10) NOT NULL, original VARCHAR(255) NOT NULL, translation TEXT NOT NULL, PRIMARY KEY(lan, original))'); + $this->addSql('CREATE UNIQUE INDEX phplist_i18n_lanorigunq ON phplist_i18n (lan, original)'); + $this->addSql('CREATE TABLE phplist_linktrack (linkid INT NOT NULL, messageid INT NOT NULL, userid INT NOT NULL, url VARCHAR(255) DEFAULT NULL, forward VARCHAR(255) DEFAULT NULL, firstclick TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, latestclick TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, clicked INT DEFAULT 0, PRIMARY KEY(linkid))'); + $this->addSql('CREATE INDEX phplist_linktrack_midindex ON phplist_linktrack (messageid)'); + $this->addSql('CREATE INDEX phplist_linktrack_miduidindex ON phplist_linktrack (messageid, userid)'); + $this->addSql('CREATE INDEX phplist_linktrack_uidindex ON phplist_linktrack (userid)'); + $this->addSql('CREATE INDEX phplist_linktrack_urlindex ON phplist_linktrack (url)'); + $this->addSql('CREATE UNIQUE INDEX phplist_linktrack_miduidurlindex ON phplist_linktrack (messageid, userid, url)'); + $this->addSql('CREATE TABLE phplist_linktrack_forward (id INT NOT NULL, url VARCHAR(2083) DEFAULT NULL, urlhash VARCHAR(32) DEFAULT NULL, uuid VARCHAR(36) DEFAULT \'\', personalise BOOLEAN DEFAULT false, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_linktrack_forward_urlindex ON phplist_linktrack_forward (url)'); + $this->addSql('CREATE INDEX phplist_linktrack_forward_uuididx ON phplist_linktrack_forward (uuid)'); + $this->addSql('CREATE UNIQUE INDEX phplist_linktrack_forward_urlunique ON phplist_linktrack_forward (urlhash)'); + $this->addSql('CREATE TABLE phplist_linktrack_ml (messageid INT NOT NULL, forwardid INT NOT NULL, firstclick TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, latestclick TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, total INT DEFAULT 0, clicked INT DEFAULT 0, htmlclicked INT DEFAULT 0, textclicked INT DEFAULT 0, PRIMARY KEY(messageid, forwardid))'); + $this->addSql('CREATE INDEX phplist_linktrack_ml_fwdindex ON phplist_linktrack_ml (forwardid)'); + $this->addSql('CREATE INDEX phplist_linktrack_ml_midindex ON phplist_linktrack_ml (messageid)'); + $this->addSql('CREATE TABLE phplist_linktrack_uml_click (id INT NOT NULL, messageid INT NOT NULL, userid INT NOT NULL, forwardid INT DEFAULT NULL, firstclick TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, latestclick TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, clicked INT DEFAULT 0, htmlclicked INT DEFAULT 0, textclicked INT DEFAULT 0, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_linktrack_uml_click_midindex ON phplist_linktrack_uml_click (messageid)'); + $this->addSql('CREATE INDEX phplist_linktrack_uml_click_miduidindex ON phplist_linktrack_uml_click (messageid, userid)'); + $this->addSql('CREATE INDEX phplist_linktrack_uml_click_uidindex ON phplist_linktrack_uml_click (userid)'); + $this->addSql('CREATE UNIQUE INDEX phplist_linktrack_uml_click_miduidfwdid ON phplist_linktrack_uml_click (messageid, userid, forwardid)'); + $this->addSql('CREATE TABLE phplist_linktrack_userclick (linkid INT NOT NULL, userid INT NOT NULL, messageid INT NOT NULL, name VARCHAR(255) DEFAULT NULL, data TEXT DEFAULT NULL, date TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, PRIMARY KEY(linkid, userid, messageid))'); + $this->addSql('CREATE INDEX phplist_linktrack_userclick_linkindex ON phplist_linktrack_userclick (linkid)'); + $this->addSql('CREATE INDEX phplist_linktrack_userclick_linkuserindex ON phplist_linktrack_userclick (linkid, userid)'); + $this->addSql('CREATE INDEX phplist_linktrack_userclick_linkusermessageindex ON phplist_linktrack_userclick (linkid, userid, messageid)'); + $this->addSql('CREATE INDEX phplist_linktrack_userclick_midindex ON phplist_linktrack_userclick (messageid)'); + $this->addSql('CREATE INDEX phplist_linktrack_userclick_uidindex ON phplist_linktrack_userclick (userid)'); + $this->addSql('CREATE TABLE phplist_list (id INT NOT NULL, owner INT DEFAULT NULL, name VARCHAR(255) NOT NULL, rssfeed VARCHAR(255) DEFAULT NULL, description VARCHAR(255) NOT NULL, entered TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, modified TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, listorder INT DEFAULT NULL, prefix VARCHAR(10) DEFAULT NULL, active BOOLEAN NOT NULL, category VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_A4CE8621CF60E67C ON phplist_list (owner)'); + $this->addSql('CREATE INDEX phplist_list_nameidx ON phplist_list (name)'); + $this->addSql('CREATE INDEX phplist_list_listorderidx ON phplist_list (listorder)'); + $this->addSql('CREATE TABLE phplist_listmessage (id INT NOT NULL, messageid INT NOT NULL, listid INT NOT NULL, entered TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, modified TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_83B22D7A31478478 ON phplist_listmessage (messageid)'); + $this->addSql('CREATE INDEX IDX_83B22D7A8E44C1EF ON phplist_listmessage (listid)'); + $this->addSql('CREATE INDEX phplist_listmessage_listmessageidx ON phplist_listmessage (listid, messageid)'); + $this->addSql('CREATE UNIQUE INDEX phplist_listmessage_messageid ON phplist_listmessage (messageid, listid)'); + $this->addSql('CREATE TABLE phplist_listuser (userid INT NOT NULL, listid INT NOT NULL, entered TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, modified TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(userid, listid))'); + $this->addSql('CREATE INDEX phplist_listuser_userenteredidx ON phplist_listuser (userid, entered)'); + $this->addSql('CREATE INDEX phplist_listuser_userlistenteredidx ON phplist_listuser (userid, entered, listid)'); + $this->addSql('CREATE INDEX phplist_listuser_useridx ON phplist_listuser (userid)'); + $this->addSql('CREATE INDEX phplist_listuser_listidx ON phplist_listuser (listid)'); + $this->addSql('CREATE TABLE phplist_message (id INT NOT NULL, owner INT DEFAULT NULL, template INT DEFAULT NULL, modified TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, uuid VARCHAR(36) DEFAULT \'\', htmlformatted BOOLEAN NOT NULL, sendformat VARCHAR(20) DEFAULT NULL, astext BOOLEAN NOT NULL, ashtml BOOLEAN NOT NULL, aspdf BOOLEAN NOT NULL, astextandhtml BOOLEAN NOT NULL, astextandpdf BOOLEAN NOT NULL, repeatinterval INT DEFAULT 0, repeatuntil TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, requeueinterval INT DEFAULT 0, requeueuntil TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, embargo TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, status VARCHAR(255) DEFAULT NULL, processed BOOLEAN DEFAULT false NOT NULL, viewed INT DEFAULT 0 NOT NULL, bouncecount INT DEFAULT 0 NOT NULL, entered TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, sent TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, sendstart TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, subject VARCHAR(255) DEFAULT \'(no subject)\' NOT NULL, message TEXT DEFAULT NULL, textmessage TEXT DEFAULT NULL, footer TEXT DEFAULT NULL, fromfield VARCHAR(255) DEFAULT \'\' NOT NULL, tofield VARCHAR(255) DEFAULT \'\' NOT NULL, replyto VARCHAR(255) DEFAULT \'\' NOT NULL, userselection TEXT DEFAULT NULL, rsstemplate VARCHAR(100) DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_C5D81FCDCF60E67C ON phplist_message (owner)'); + $this->addSql('CREATE INDEX IDX_C5D81FCD97601F83 ON phplist_message (template)'); + $this->addSql('CREATE INDEX phplist_message_uuididx ON phplist_message (uuid)'); + $this->addSql('CREATE TABLE phplist_message_attachment (id INT NOT NULL, messageid INT NOT NULL, attachmentid INT NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_message_attachment_messageattidx ON phplist_message_attachment (messageid, attachmentid)'); + $this->addSql('CREATE INDEX phplist_message_attachment_messageidx ON phplist_message_attachment (messageid)'); + $this->addSql('CREATE TABLE phplist_messagedata (name VARCHAR(100) NOT NULL, id INT NOT NULL, data TEXT DEFAULT NULL, PRIMARY KEY(name, id))'); + $this->addSql('CREATE TABLE phplist_sendprocess (id INT NOT NULL, modified TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, started TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, alive INT DEFAULT 1, ipaddress VARCHAR(50) DEFAULT NULL, page VARCHAR(100) DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE phplist_subscribepage (id INT NOT NULL, owner INT DEFAULT NULL, title VARCHAR(255) NOT NULL, active BOOLEAN DEFAULT false NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_5BAC7737CF60E67C ON phplist_subscribepage (owner)'); + $this->addSql('CREATE TABLE phplist_subscribepage_data (id INT NOT NULL, name VARCHAR(100) NOT NULL, data TEXT DEFAULT NULL, PRIMARY KEY(id, name))'); + $this->addSql('CREATE TABLE phplist_template (id INT NOT NULL, title VARCHAR(255) NOT NULL, template BYTEA DEFAULT NULL, template_text BYTEA DEFAULT NULL, listorder INT DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE UNIQUE INDEX phplist_template_title ON phplist_template (title)'); + $this->addSql('CREATE TABLE phplist_templateimage (id INT NOT NULL, template INT NOT NULL, mimetype VARCHAR(100) DEFAULT NULL, filename VARCHAR(100) DEFAULT NULL, data BYTEA DEFAULT NULL, width INT DEFAULT NULL, height INT DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_templateimage_templateidx ON phplist_templateimage (template)'); + $this->addSql('CREATE TABLE phplist_urlcache (id INT NOT NULL, url VARCHAR(2083) NOT NULL, lastmodified INT DEFAULT NULL, added TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, content BYTEA DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_urlcache_urlindex ON phplist_urlcache (url)'); + $this->addSql('CREATE TABLE phplist_user_attribute (id INT NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(30) DEFAULT NULL, listorder INT DEFAULT NULL, default_value VARCHAR(255) DEFAULT NULL, required BOOLEAN DEFAULT NULL, tablename VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_user_attribute_idnameindex ON phplist_user_attribute (id, name)'); + $this->addSql('CREATE INDEX phplist_user_attribute_nameindex ON phplist_user_attribute (name)'); + $this->addSql('CREATE TABLE phplist_user_blacklist (email VARCHAR(255) NOT NULL, added TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, PRIMARY KEY(email))'); + $this->addSql('CREATE INDEX phplist_user_blacklist_emailidx ON phplist_user_blacklist (email)'); + $this->addSql('CREATE TABLE phplist_user_blacklist_data (email VARCHAR(255) NOT NULL, name VARCHAR(25) NOT NULL, data TEXT DEFAULT NULL, PRIMARY KEY(email))'); + $this->addSql('CREATE INDEX phplist_user_blacklist_data_emailidx ON phplist_user_blacklist_data (email)'); + $this->addSql('CREATE INDEX phplist_user_blacklist_data_emailnameidx ON phplist_user_blacklist_data (email, name)'); + $this->addSql('CREATE TABLE phplist_user_message_bounce (id INT NOT NULL, "user" INT NOT NULL, message INT NOT NULL, bounce INT NOT NULL, time TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_user_message_bounce_bounceidx ON phplist_user_message_bounce (bounce)'); + $this->addSql('CREATE INDEX phplist_user_message_bounce_msgidx ON phplist_user_message_bounce (message)'); + $this->addSql('CREATE INDEX phplist_user_message_bounce_umbindex ON phplist_user_message_bounce ("user", message, bounce)'); + $this->addSql('CREATE INDEX phplist_user_message_bounce_useridx ON phplist_user_message_bounce ("user")'); + $this->addSql('CREATE TABLE phplist_user_message_forward (id INT NOT NULL, "user" INT NOT NULL, message INT NOT NULL, forward VARCHAR(255) DEFAULT NULL, status VARCHAR(255) DEFAULT NULL, time TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_user_message_forward_messageidx ON phplist_user_message_forward (message)'); + $this->addSql('CREATE INDEX phplist_user_message_forward_useridx ON phplist_user_message_forward ("user")'); + $this->addSql('CREATE INDEX phplist_user_message_forward_usermessageidx ON phplist_user_message_forward ("user", message)'); + $this->addSql('CREATE TABLE phplist_user_message_view (id INT NOT NULL, messageid INT NOT NULL, userid INT NOT NULL, viewed TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, ip VARCHAR(255) DEFAULT NULL, data TEXT DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_user_message_view_msgidx ON phplist_user_message_view (messageid)'); + $this->addSql('CREATE INDEX phplist_user_message_view_useridx ON phplist_user_message_view (userid)'); + $this->addSql('CREATE INDEX phplist_user_message_view_usermsgidx ON phplist_user_message_view (userid, messageid)'); + $this->addSql('CREATE TABLE phplist_user_user (id INT NOT NULL, entered TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, modified TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, email VARCHAR(255) NOT NULL, confirmed BOOLEAN NOT NULL, blacklisted BOOLEAN NOT NULL, bouncecount INT NOT NULL, uniqid VARCHAR(255) DEFAULT NULL, htmlemail BOOLEAN NOT NULL, disabled BOOLEAN NOT NULL, extradata TEXT DEFAULT NULL, optedin BOOLEAN NOT NULL, uuid VARCHAR(36) NOT NULL, subscribepage INT DEFAULT NULL, rssfrequency VARCHAR(100) DEFAULT NULL, password VARCHAR(255) DEFAULT NULL, passwordchanged TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, foreignkey VARCHAR(100) DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_user_user_idxuniqid ON phplist_user_user (uniqid)'); + $this->addSql('CREATE INDEX phplist_user_user_enteredindex ON phplist_user_user (entered)'); + $this->addSql('CREATE INDEX phplist_user_user_confidx ON phplist_user_user (confirmed)'); + $this->addSql('CREATE INDEX phplist_user_user_blidx ON phplist_user_user (blacklisted)'); + $this->addSql('CREATE INDEX phplist_user_user_optidx ON phplist_user_user (optedin)'); + $this->addSql('CREATE INDEX phplist_user_user_uuididx ON phplist_user_user (uuid)'); + $this->addSql('CREATE INDEX phplist_user_user_foreignkey ON phplist_user_user (foreignkey)'); + $this->addSql('CREATE UNIQUE INDEX phplist_user_user_email ON phplist_user_user (email)'); + $this->addSql('CREATE TABLE phplist_user_user_attribute (attributeid INT NOT NULL, userid INT NOT NULL, value TEXT DEFAULT NULL, PRIMARY KEY(attributeid, userid))'); + $this->addSql('CREATE INDEX phplist_user_user_attribute_attindex ON phplist_user_user_attribute (attributeid)'); + $this->addSql('CREATE INDEX phplist_user_user_attribute_attuserid ON phplist_user_user_attribute (userid, attributeid)'); + $this->addSql('CREATE INDEX phplist_user_user_attribute_userindex ON phplist_user_user_attribute (userid)'); + $this->addSql('CREATE TABLE phplist_user_user_history (id INT NOT NULL, userid INT NOT NULL, ip VARCHAR(255) DEFAULT NULL, date TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, summary VARCHAR(255) DEFAULT NULL, detail TEXT DEFAULT NULL, systeminfo TEXT DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_user_user_history_dateidx ON phplist_user_user_history (date)'); + $this->addSql('CREATE INDEX phplist_user_user_history_userididx ON phplist_user_user_history (userid)'); + $this->addSql('CREATE TABLE phplist_usermessage (userid INT NOT NULL, messageid INT NOT NULL, entered TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, viewed TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, status VARCHAR(255) DEFAULT NULL, PRIMARY KEY(userid, messageid))'); + $this->addSql('CREATE INDEX phplist_usermessage_enteredindex ON phplist_usermessage (entered)'); + $this->addSql('CREATE INDEX phplist_usermessage_messageidindex ON phplist_usermessage (messageid)'); + $this->addSql('CREATE INDEX phplist_usermessage_statusidx ON phplist_usermessage (status)'); + $this->addSql('CREATE INDEX phplist_usermessage_useridindex ON phplist_usermessage (userid)'); + $this->addSql('CREATE INDEX phplist_usermessage_viewedidx ON phplist_usermessage (viewed)'); + $this->addSql('CREATE TABLE phplist_userstats (id INT NOT NULL, unixdate INT DEFAULT NULL, item VARCHAR(255) DEFAULT NULL, listid INT DEFAULT 0, value INT DEFAULT 0, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX phplist_userstats_dateindex ON phplist_userstats (unixdate)'); + $this->addSql('CREATE INDEX phplist_userstats_itemindex ON phplist_userstats (item)'); + $this->addSql('CREATE INDEX phplist_userstats_listdateindex ON phplist_userstats (listid, unixdate)'); + $this->addSql('CREATE INDEX phplist_userstats_listindex ON phplist_userstats (listid)'); + $this->addSql('CREATE UNIQUE INDEX phplist_userstats_entry ON phplist_userstats (unixdate, item, listid)'); + $this->addSql('ALTER TABLE phplist_admin_attribute ADD CONSTRAINT FK_58E07690D3B10C48 FOREIGN KEY (adminattributeid) REFERENCES phplist_adminattribute (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_admin_attribute ADD CONSTRAINT FK_58E07690B8ED4D93 FOREIGN KEY (adminid) REFERENCES phplist_admin (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_admin_login ADD CONSTRAINT FK_5FCE0842B8ED4D93 FOREIGN KEY (adminid) REFERENCES phplist_admin (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_admin_password_request ADD CONSTRAINT FK_DC146F3B880E0D76 FOREIGN KEY (admin) REFERENCES phplist_admin (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_admintoken ADD CONSTRAINT FK_CB15D477B8ED4D93 FOREIGN KEY (adminid) REFERENCES phplist_admin (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_list ADD CONSTRAINT FK_A4CE8621CF60E67C FOREIGN KEY (owner) REFERENCES phplist_admin (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_listmessage ADD CONSTRAINT FK_83B22D7A31478478 FOREIGN KEY (messageid) REFERENCES phplist_message (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_listmessage ADD CONSTRAINT FK_83B22D7A8E44C1EF FOREIGN KEY (listid) REFERENCES phplist_list (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_listuser ADD CONSTRAINT FK_F467E411F132696E FOREIGN KEY (userid) REFERENCES phplist_user_user (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_listuser ADD CONSTRAINT FK_F467E4118E44C1EF FOREIGN KEY (listid) REFERENCES phplist_list (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_message ADD CONSTRAINT FK_C5D81FCDCF60E67C FOREIGN KEY (owner) REFERENCES phplist_admin (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_message ADD CONSTRAINT FK_C5D81FCD97601F83 FOREIGN KEY (template) REFERENCES phplist_template (id) ON DELETE SET NULL NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_subscribepage ADD CONSTRAINT FK_5BAC7737CF60E67C FOREIGN KEY (owner) REFERENCES phplist_admin (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_templateimage ADD CONSTRAINT FK_30A85BA97601F83 FOREIGN KEY (template) REFERENCES phplist_template (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_user_blacklist_data ADD CONSTRAINT FK_6D67150CE7927C74 FOREIGN KEY (email) REFERENCES phplist_user_blacklist (email) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_user_user_attribute ADD CONSTRAINT FK_E24E310878C45AB5 FOREIGN KEY (attributeid) REFERENCES phplist_user_attribute (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_user_user_attribute ADD CONSTRAINT FK_E24E3108F132696E FOREIGN KEY (userid) REFERENCES phplist_user_user (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_user_user_history ADD CONSTRAINT FK_6DBB605CF132696E FOREIGN KEY (userid) REFERENCES phplist_user_user (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_usermessage ADD CONSTRAINT FK_7F30F469F132696E FOREIGN KEY (userid) REFERENCES phplist_user_user (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE phplist_usermessage ADD CONSTRAINT FK_7F30F46931478478 FOREIGN KEY (messageid) REFERENCES phplist_message (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + } + + public function down(Schema $schema): void + { + $platform = $this->connection->getDatabasePlatform(); + $this->skipIf(!$platform instanceof PostgreSQLPlatform, sprintf( + 'Unsupported platform for this migration: %s', + get_class($platform) + )); + + $this->addSql('DROP SEQUENCE phplist_admin_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_admin_login_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_admin_password_request_id_key_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_adminattribute_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_admintoken_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_attachment_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_bounce_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_bounceregex_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_eventlog_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_linktrack_linkid_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_linktrack_forward_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_linktrack_uml_click_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_list_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_listmessage_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_message_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_message_attachment_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_sendprocess_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_subscribepage_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_template_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_templateimage_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_urlcache_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_user_attribute_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_user_message_bounce_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_user_message_forward_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_user_message_view_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_user_user_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_user_user_history_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE phplist_userstats_id_seq CASCADE'); + $this->addSql('ALTER TABLE phplist_admin_attribute DROP CONSTRAINT FK_58E07690D3B10C48'); + $this->addSql('ALTER TABLE phplist_admin_attribute DROP CONSTRAINT FK_58E07690B8ED4D93'); + $this->addSql('ALTER TABLE phplist_admin_login DROP CONSTRAINT FK_5FCE0842B8ED4D93'); + $this->addSql('ALTER TABLE phplist_admin_password_request DROP CONSTRAINT FK_DC146F3B880E0D76'); + $this->addSql('ALTER TABLE phplist_admintoken DROP CONSTRAINT FK_CB15D477B8ED4D93'); + $this->addSql('ALTER TABLE phplist_list DROP CONSTRAINT FK_A4CE8621CF60E67C'); + $this->addSql('ALTER TABLE phplist_listmessage DROP CONSTRAINT FK_83B22D7A31478478'); + $this->addSql('ALTER TABLE phplist_listmessage DROP CONSTRAINT FK_83B22D7A8E44C1EF'); + $this->addSql('ALTER TABLE phplist_listuser DROP CONSTRAINT FK_F467E411F132696E'); + $this->addSql('ALTER TABLE phplist_listuser DROP CONSTRAINT FK_F467E4118E44C1EF'); + $this->addSql('ALTER TABLE phplist_message DROP CONSTRAINT FK_C5D81FCDCF60E67C'); + $this->addSql('ALTER TABLE phplist_message DROP CONSTRAINT FK_C5D81FCD97601F83'); + $this->addSql('ALTER TABLE phplist_subscribepage DROP CONSTRAINT FK_5BAC7737CF60E67C'); + $this->addSql('ALTER TABLE phplist_templateimage DROP CONSTRAINT FK_30A85BA97601F83'); + $this->addSql('ALTER TABLE phplist_user_blacklist_data DROP CONSTRAINT FK_6D67150CE7927C74'); + $this->addSql('ALTER TABLE phplist_user_user_attribute DROP CONSTRAINT FK_E24E310878C45AB5'); + $this->addSql('ALTER TABLE phplist_user_user_attribute DROP CONSTRAINT FK_E24E3108F132696E'); + $this->addSql('ALTER TABLE phplist_user_user_history DROP CONSTRAINT FK_6DBB605CF132696E'); + $this->addSql('ALTER TABLE phplist_usermessage DROP CONSTRAINT FK_7F30F469F132696E'); + $this->addSql('ALTER TABLE phplist_usermessage DROP CONSTRAINT FK_7F30F46931478478'); + $this->addSql('DROP TABLE phplist_admin'); + $this->addSql('DROP TABLE phplist_admin_attribute'); + $this->addSql('DROP TABLE phplist_admin_login'); + $this->addSql('DROP TABLE phplist_admin_password_request'); + $this->addSql('DROP TABLE phplist_adminattribute'); + $this->addSql('DROP TABLE phplist_admintoken'); + $this->addSql('DROP TABLE phplist_attachment'); + $this->addSql('DROP TABLE phplist_bounce'); + $this->addSql('DROP TABLE phplist_bounceregex'); + $this->addSql('DROP TABLE phplist_bounceregex_bounce'); + $this->addSql('DROP TABLE phplist_config'); + $this->addSql('DROP TABLE phplist_eventlog'); + $this->addSql('DROP TABLE phplist_i18n'); + $this->addSql('DROP TABLE phplist_linktrack'); + $this->addSql('DROP TABLE phplist_linktrack_forward'); + $this->addSql('DROP TABLE phplist_linktrack_ml'); + $this->addSql('DROP TABLE phplist_linktrack_uml_click'); + $this->addSql('DROP TABLE phplist_linktrack_userclick'); + $this->addSql('DROP TABLE phplist_list'); + $this->addSql('DROP TABLE phplist_listmessage'); + $this->addSql('DROP TABLE phplist_listuser'); + $this->addSql('DROP TABLE phplist_message'); + $this->addSql('DROP TABLE phplist_message_attachment'); + $this->addSql('DROP TABLE phplist_messagedata'); + $this->addSql('DROP TABLE phplist_sendprocess'); + $this->addSql('DROP TABLE phplist_subscribepage'); + $this->addSql('DROP TABLE phplist_subscribepage_data'); + $this->addSql('DROP TABLE phplist_template'); + $this->addSql('DROP TABLE phplist_templateimage'); + $this->addSql('DROP TABLE phplist_urlcache'); + $this->addSql('DROP TABLE phplist_user_attribute'); + $this->addSql('DROP TABLE phplist_user_blacklist'); + $this->addSql('DROP TABLE phplist_user_blacklist_data'); + $this->addSql('DROP TABLE phplist_user_message_bounce'); + $this->addSql('DROP TABLE phplist_user_message_forward'); + $this->addSql('DROP TABLE phplist_user_message_view'); + $this->addSql('DROP TABLE phplist_user_user'); + $this->addSql('DROP TABLE phplist_user_user_attribute'); + $this->addSql('DROP TABLE phplist_user_user_history'); + $this->addSql('DROP TABLE phplist_usermessage'); + $this->addSql('DROP TABLE phplist_userstats'); + } +} diff --git a/src/Migrations/_template_migration.php.tpl b/src/Migrations/_template_migration.php.tpl new file mode 100644 index 00000000..72561549 --- /dev/null +++ b/src/Migrations/_template_migration.php.tpl @@ -0,0 +1,47 @@ +; + +use Doctrine\DBAL\Platforms\PostgreSQLPlatform; +use Doctrine\DBAL\Platforms\MySQLPlatform; +use Doctrine\Migrations\AbstractMigration; +use Doctrine\DBAL\Schema\Schema; + +/** +* ⚠️ Wizard warning: +* Doctrine will `helpfully` remove url(255) prefixes and add collations 5.7 can’t read. +* Review the SQL unless you enjoy debugging key length errors at 2 AM. +* +* Ex: phplist_linktrack_forward phplist_linktrack_forward_urlindex (but there are more) +*/ +final class extends AbstractMigration +{ + public function getDescription(): string + { + return ''; + } + + public function up(Schema $schema): void + { + $platform = $this->connection->getDatabasePlatform(); + $this->skipIf(!$platform instanceof , sprintf( + 'Unsupported platform for this migration: %s', + get_class($platform) + )); + + + } + + public function down(Schema $schema): void + { + $platform = $this->connection->getDatabasePlatform(); + $this->skipIf(!$platform instanceof , sprintf( + 'Unsupported platform for this migration: %s', + get_class($platform) + )); + + + } +} diff --git a/src/Migrations/initial_schema.sql b/src/Migrations/initial_schema.sql new file mode 100644 index 00000000..7f9cf70a --- /dev/null +++ b/src/Migrations/initial_schema.sql @@ -0,0 +1,879 @@ +-- MySQL dump 10.13 Distrib 8.0.43, for Linux (x86_64) +-- +-- Host: localhost Database: phplistdb +-- ------------------------------------------------------ +-- Server version 8.0.43-0ubuntu0.20.04.1+esm1 + +/*!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 */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `phplist_admin` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_admin` ( + `id` int NOT NULL AUTO_INCREMENT, + `loginname` varchar(66) NOT NULL, + `namelc` varchar(255) DEFAULT NULL, + `email` varchar(255) NOT NULL, + `created` datetime DEFAULT NULL, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `modifiedby` varchar(66) DEFAULT NULL, + `password` varchar(255) DEFAULT NULL, + `passwordchanged` date DEFAULT NULL, + `superuser` tinyint DEFAULT '0', + `disabled` tinyint DEFAULT '0', + `privileges` text, + PRIMARY KEY (`id`), + UNIQUE KEY `loginnameidx` (`loginname`) +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_admin_attribute` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_admin_attribute` ( + `adminattributeid` int NOT NULL, + `adminid` int NOT NULL, + `value` varchar(255) DEFAULT NULL, + PRIMARY KEY (`adminattributeid`,`adminid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_admin_login` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_admin_login` ( + `id` int NOT NULL AUTO_INCREMENT, + `moment` bigint NOT NULL, + `adminid` int NOT NULL, + `remote_ip4` varchar(32) NOT NULL, + `remote_ip6` varchar(50) NOT NULL, + `sessionid` varchar(50) NOT NULL, + `active` tinyint NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=414 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_admin_password_request` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_admin_password_request` ( + `id_key` int NOT NULL AUTO_INCREMENT, + `date` datetime DEFAULT NULL, + `admin` int DEFAULT NULL, + `key_value` varchar(32) NOT NULL, + PRIMARY KEY (`id_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_adminattribute` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_adminattribute` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(30) DEFAULT NULL, + `listorder` int DEFAULT NULL, + `default_value` varchar(255) DEFAULT NULL, + `required` tinyint DEFAULT NULL, + `tablename` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_admintoken` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_admintoken` ( + `id` int NOT NULL AUTO_INCREMENT, + `adminid` int NOT NULL, + `value` varchar(255) DEFAULT NULL, + `entered` int NOT NULL, + `expires` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3670 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_attachment` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_attachment` ( + `id` int NOT NULL AUTO_INCREMENT, + `filename` varchar(255) DEFAULT NULL, + `remotefile` varchar(255) DEFAULT NULL, + `mimetype` varchar(255) DEFAULT NULL, + `description` text, + `size` int DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_bounce` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_bounce` ( + `id` int NOT NULL AUTO_INCREMENT, + `date` datetime DEFAULT NULL, + `header` text, + `data` mediumblob, + `status` varchar(255) DEFAULT NULL, + `comment` text, + PRIMARY KEY (`id`), + KEY `dateindex` (`date`), + KEY `statusidx` (`status`(20)) +) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_bounceregex` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_bounceregex` ( + `id` int NOT NULL AUTO_INCREMENT, + `regex` varchar(2083) DEFAULT NULL, + `regexhash` char(32) DEFAULT NULL, + `action` varchar(255) DEFAULT NULL, + `listorder` int DEFAULT '0', + `admin` int DEFAULT NULL, + `comment` text, + `status` varchar(255) DEFAULT NULL, + `count` int DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `regex` (`regexhash`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_bounceregex_bounce` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_bounceregex_bounce` ( + `regex` int NOT NULL, + `bounce` int NOT NULL, + PRIMARY KEY (`regex`,`bounce`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_config` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_config` ( + `item` varchar(35) NOT NULL, + `value` longtext, + `editable` tinyint DEFAULT '1', + `type` varchar(25) DEFAULT NULL, + PRIMARY KEY (`item`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_eventlog` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_eventlog` ( + `id` int NOT NULL AUTO_INCREMENT, + `entered` datetime DEFAULT NULL, + `page` varchar(100) DEFAULT NULL, + `entry` text, + PRIMARY KEY (`id`), + KEY `enteredidx` (`entered`), + KEY `pageidx` (`page`) +) ENGINE=InnoDB AUTO_INCREMENT=343 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_i18n` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_i18n` ( + `lan` varchar(10) NOT NULL, + `original` text NOT NULL, + `translation` text NOT NULL, + UNIQUE KEY `lanorigunq` (`lan`,`original`(200)), + KEY `lanorigidx` (`lan`,`original`(200)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_linktrack` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_linktrack` ( + `linkid` int NOT NULL AUTO_INCREMENT, + `messageid` int NOT NULL, + `userid` int NOT NULL, + `url` varchar(255) DEFAULT NULL, + `forward` varchar(255) DEFAULT NULL, + `firstclick` datetime DEFAULT NULL, + `latestclick` timestamp NULL DEFAULT NULL, + `clicked` int DEFAULT '0', + PRIMARY KEY (`linkid`), + UNIQUE KEY `miduidurlindex` (`messageid`,`userid`,`url`), + KEY `midindex` (`messageid`), + KEY `uidindex` (`userid`), + KEY `urlindex` (`url`), + KEY `miduidindex` (`messageid`,`userid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_linktrack_forward` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_linktrack_forward` ( + `id` int NOT NULL AUTO_INCREMENT, + `url` varchar(2083) DEFAULT NULL, + `urlhash` char(32) DEFAULT NULL, + `uuid` varchar(36) DEFAULT '', + `personalise` tinyint DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `urlunique` (`urlhash`), + KEY `urlindex` (`url`(255)), + KEY `uuididx` (`uuid`) +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_linktrack_ml` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_linktrack_ml` ( + `messageid` int NOT NULL, + `forwardid` int NOT NULL, + `firstclick` datetime DEFAULT NULL, + `latestclick` datetime DEFAULT NULL, + `total` int DEFAULT '0', + `clicked` int DEFAULT '0', + `htmlclicked` int DEFAULT '0', + `textclicked` int DEFAULT '0', + PRIMARY KEY (`messageid`,`forwardid`), + KEY `midindex` (`messageid`), + KEY `fwdindex` (`forwardid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_linktrack_uml_click` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_linktrack_uml_click` ( + `id` int NOT NULL AUTO_INCREMENT, + `messageid` int NOT NULL, + `userid` int NOT NULL, + `forwardid` int DEFAULT NULL, + `firstclick` datetime DEFAULT NULL, + `latestclick` datetime DEFAULT NULL, + `clicked` int DEFAULT '0', + `htmlclicked` int DEFAULT '0', + `textclicked` int DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `miduidfwdid` (`messageid`,`userid`,`forwardid`), + KEY `midindex` (`messageid`), + KEY `uidindex` (`userid`), + KEY `miduidindex` (`messageid`,`userid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_linktrack_userclick` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_linktrack_userclick` ( + `linkid` int NOT NULL, + `userid` int NOT NULL, + `messageid` int NOT NULL, + `name` varchar(255) DEFAULT NULL, + `data` text, + `date` datetime DEFAULT NULL, + KEY `linkindex` (`linkid`), + KEY `uidindex` (`userid`), + KEY `midindex` (`messageid`), + KEY `linkuserindex` (`linkid`,`userid`), + KEY `linkusermessageindex` (`linkid`,`userid`,`messageid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_list` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_list` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `description` text, + `entered` datetime DEFAULT NULL, + `listorder` int DEFAULT NULL, + `prefix` varchar(10) DEFAULT NULL, + `rssfeed` varchar(255) DEFAULT NULL, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `active` tinyint DEFAULT NULL, + `owner` int DEFAULT NULL, + `category` varchar(255) DEFAULT '', + PRIMARY KEY (`id`), + KEY `nameidx` (`name`), + KEY `listorderidx` (`listorder`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_listattr_becities` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_listattr_becities` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `listorder` int DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`(150)) +) ENGINE=InnoDB AUTO_INCREMENT=2680 DEFAULT CHARSET=utf8mb4; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_listattr_termsofservice` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_listattr_termsofservice` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `listorder` int DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`(150)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_listattr_ukcounties` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_listattr_ukcounties` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `listorder` int DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`(150)) +) ENGINE=InnoDB AUTO_INCREMENT=184 DEFAULT CHARSET=utf8mb4; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_listattr_ukcounties1` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_listattr_ukcounties1` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `listorder` int DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`(150)) +) ENGINE=InnoDB AUTO_INCREMENT=184 DEFAULT CHARSET=utf8mb4; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_listmessage` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_listmessage` ( + `id` int NOT NULL AUTO_INCREMENT, + `messageid` int NOT NULL, + `listid` int NOT NULL, + `entered` datetime DEFAULT NULL, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `messageid` (`messageid`,`listid`), + KEY `listmessageidx` (`listid`,`messageid`) +) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_listuser` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_listuser` ( + `userid` int NOT NULL, + `listid` int NOT NULL, + `entered` datetime DEFAULT NULL, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`userid`,`listid`), + KEY `userenteredidx` (`userid`,`entered`), + KEY `userlistenteredidx` (`userid`,`listid`,`entered`), + KEY `useridx` (`userid`), + KEY `listidx` (`listid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_message` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_message` ( + `id` int NOT NULL AUTO_INCREMENT, + `uuid` varchar(36) DEFAULT '', + `subject` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '(no subject)', + `fromfield` varchar(255) NOT NULL DEFAULT '', + `tofield` varchar(255) NOT NULL DEFAULT '', + `replyto` varchar(255) NOT NULL DEFAULT '', + `message` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci, + `textmessage` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci, + `footer` text, + `entered` datetime DEFAULT NULL, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `embargo` datetime DEFAULT NULL, + `repeatinterval` int DEFAULT '0', + `repeatuntil` datetime DEFAULT NULL, + `requeueinterval` int DEFAULT '0', + `requeueuntil` datetime DEFAULT NULL, + `status` varchar(255) DEFAULT NULL, + `userselection` text, + `sent` datetime DEFAULT NULL, + `htmlformatted` tinyint DEFAULT '0', + `sendformat` varchar(20) DEFAULT NULL, + `template` int DEFAULT NULL, + `processed` int unsigned DEFAULT '0', + `astext` int DEFAULT '0', + `ashtml` int DEFAULT '0', + `astextandhtml` int DEFAULT '0', + `aspdf` int DEFAULT '0', + `astextandpdf` int DEFAULT '0', + `viewed` int DEFAULT '0', + `bouncecount` int DEFAULT '0', + `sendstart` datetime DEFAULT NULL, + `rsstemplate` varchar(100) DEFAULT NULL, + `owner` int DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `uuididx` (`uuid`) +) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_message_attachment` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_message_attachment` ( + `id` int NOT NULL AUTO_INCREMENT, + `messageid` int NOT NULL, + `attachmentid` int NOT NULL, + PRIMARY KEY (`id`), + KEY `messageidx` (`messageid`), + KEY `messageattidx` (`messageid`,`attachmentid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_messagedata` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_messagedata` ( + `name` varchar(100) NOT NULL, + `id` int NOT NULL, + `data` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci, + PRIMARY KEY (`name`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_sendprocess` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_sendprocess` ( + `id` int NOT NULL AUTO_INCREMENT, + `started` datetime DEFAULT NULL, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `alive` int DEFAULT '1', + `ipaddress` varchar(50) DEFAULT NULL, + `page` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_subscribepage` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_subscribepage` ( + `id` int NOT NULL AUTO_INCREMENT, + `title` varchar(255) NOT NULL, + `active` tinyint DEFAULT '0', + `owner` int DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_subscribepage_data` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_subscribepage_data` ( + `id` int NOT NULL, + `name` varchar(100) NOT NULL, + `data` text, + PRIMARY KEY (`id`,`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_template` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_template` ( + `id` int NOT NULL AUTO_INCREMENT, + `title` varchar(255) NOT NULL, + `template` longblob, + `template_text` longblob, + `listorder` int DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `title` (`title`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_templateimage` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_templateimage` ( + `id` int NOT NULL AUTO_INCREMENT, + `template` int NOT NULL DEFAULT '0', + `mimetype` varchar(100) DEFAULT NULL, + `filename` varchar(100) DEFAULT NULL, + `data` longblob, + `width` int DEFAULT NULL, + `height` int DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `templateidx` (`template`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_urlcache` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_urlcache` ( + `id` int NOT NULL AUTO_INCREMENT, + `url` varchar(2083) NOT NULL, + `lastmodified` int DEFAULT NULL, + `added` datetime DEFAULT NULL, + `content` longblob, + PRIMARY KEY (`id`), + KEY `urlindex` (`url`(255)) +) ENGINE=InnoDB AUTO_INCREMENT=207 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_attribute` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_user_attribute` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(30) DEFAULT NULL, + `listorder` int DEFAULT NULL, + `default_value` varchar(255) DEFAULT NULL, + `required` tinyint DEFAULT NULL, + `tablename` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `nameindex` (`name`), + KEY `idnameindex` (`id`,`name`) +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_blacklist` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_user_blacklist` ( + `email` varchar(255) NOT NULL, + `added` datetime DEFAULT NULL, + UNIQUE KEY `email` (`email`), + KEY `emailidx` (`email`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_blacklist_data` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_user_blacklist_data` ( + `email` varchar(150) NOT NULL, + `name` varchar(25) NOT NULL, + `data` text, + UNIQUE KEY `email` (`email`), + KEY `emailidx` (`email`), + KEY `emailnameidx` (`email`,`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_message_bounce` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_user_message_bounce` ( + `id` int NOT NULL AUTO_INCREMENT, + `user` int NOT NULL, + `message` int NOT NULL, + `bounce` int NOT NULL, + `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `umbindex` (`user`,`message`,`bounce`), + KEY `useridx` (`user`), + KEY `msgidx` (`message`), + KEY `bounceidx` (`bounce`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_message_forward` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_user_message_forward` ( + `id` int NOT NULL AUTO_INCREMENT, + `user` int NOT NULL, + `message` int NOT NULL, + `forward` varchar(255) DEFAULT NULL, + `status` varchar(255) DEFAULT NULL, + `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `usermessageidx` (`user`,`message`), + KEY `useridx` (`user`), + KEY `messageidx` (`message`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_message_view` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_user_message_view` ( + `id` int NOT NULL AUTO_INCREMENT, + `messageid` int NOT NULL, + `userid` int NOT NULL, + `viewed` datetime DEFAULT NULL, + `ip` varchar(255) DEFAULT NULL, + `data` longtext, + PRIMARY KEY (`id`), + KEY `usermsgidx` (`userid`,`messageid`), + KEY `msgidx` (`messageid`), + KEY `useridx` (`userid`) +) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_user` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_user_user` ( + `id` int NOT NULL AUTO_INCREMENT, + `email` varchar(255) NOT NULL, + `confirmed` tinyint DEFAULT '0', + `blacklisted` tinyint DEFAULT '0', + `optedin` tinyint DEFAULT '0', + `bouncecount` int DEFAULT '0', + `entered` datetime DEFAULT NULL, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `uniqid` varchar(255) DEFAULT NULL, + `uuid` varchar(36) DEFAULT '', + `htmlemail` tinyint DEFAULT '0', + `subscribepage` int DEFAULT NULL, + `rssfrequency` varchar(100) DEFAULT NULL, + `password` varchar(255) DEFAULT NULL, + `passwordchanged` date DEFAULT NULL, + `disabled` tinyint DEFAULT '0', + `extradata` text, + `foreignkey` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `email` (`email`), + KEY `foreignkey` (`foreignkey`), + KEY `idxuniqid` (`uniqid`), + KEY `enteredindex` (`entered`), + KEY `confidx` (`confirmed`), + KEY `blidx` (`blacklisted`), + KEY `optidx` (`optedin`), + KEY `uuididx` (`uuid`) +) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_user_attribute` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_user_user_attribute` ( + `attributeid` int NOT NULL, + `userid` int NOT NULL, + `value` text, + PRIMARY KEY (`attributeid`,`userid`), + KEY `userindex` (`userid`), + KEY `attindex` (`attributeid`), + KEY `attuserid` (`userid`,`attributeid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_user_user_history` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_user_user_history` ( + `id` int NOT NULL AUTO_INCREMENT, + `userid` int NOT NULL, + `ip` varchar(255) DEFAULT NULL, + `date` datetime DEFAULT NULL, + `summary` varchar(255) DEFAULT NULL, + `detail` text, + `systeminfo` text, + PRIMARY KEY (`id`), + KEY `userididx` (`userid`), + KEY `dateidx` (`date`) +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_usermessage` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_usermessage` ( + `messageid` int NOT NULL, + `userid` int NOT NULL, + `entered` datetime NOT NULL, + `viewed` datetime DEFAULT NULL, + `status` varchar(255) DEFAULT NULL, + PRIMARY KEY (`userid`,`messageid`), + KEY `messageidindex` (`messageid`), + KEY `useridindex` (`userid`), + KEY `enteredindex` (`entered`), + KEY `statusidx` (`status`), + KEY `viewedidx` (`viewed`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `phplist_userstats` +-- + +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `phplist_userstats` ( + `id` int NOT NULL AUTO_INCREMENT, + `unixdate` int DEFAULT NULL, + `item` varchar(255) DEFAULT NULL, + `listid` int DEFAULT '0', + `value` int DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `entry` (`unixdate`,`item`,`listid`), + KEY `dateindex` (`unixdate`), + KEY `itemindex` (`item`), + KEY `listindex` (`listid`), + KEY `listdateindex` (`listid`,`unixdate`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!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 */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2025-10-28 14:22:41 diff --git a/src/Routing/ExtraLoader.php b/src/Routing/ExtraLoader.php index 39853031..d5f40ec1 100644 --- a/src/Routing/ExtraLoader.php +++ b/src/Routing/ExtraLoader.php @@ -43,8 +43,6 @@ public function __construct(ApplicationStructure $applicationStructure) /** * Loads a resource. * - * @SuppressWarnings("PHPMD.UnusedFormalParameter") - * * @param mixed $resource the resource (unused) * @param string|null $type the resource type or null if unknown (unused) * @@ -69,8 +67,6 @@ public function load($resource, string $type = null): RouteCollection /** * Checks whether this class supports the given resource. * - * @SuppressWarnings("PHPMD.UnusedFormalParameter") - * * @param mixed $resource a resource (unused) * @param string|null $type The resource type or null if unknown * diff --git a/tests/Integration/Domain/Identity/Fixtures/AdministratorTokenWithAdministratorFixture.php b/tests/Integration/Domain/Identity/Fixtures/AdministratorTokenWithAdministratorFixture.php index e382a4c7..18bbc08b 100644 --- a/tests/Integration/Domain/Identity/Fixtures/AdministratorTokenWithAdministratorFixture.php +++ b/tests/Integration/Domain/Identity/Fixtures/AdministratorTokenWithAdministratorFixture.php @@ -40,17 +40,16 @@ public function load(ObjectManager $manager): void $admin = $adminRepository->find($row['adminid']); if ($admin === null) { - $admin = new Administrator(); + $admin = (new Administrator())->setLoginName($row['id']); $this->setSubjectId($admin, (int)$row['adminid']); $manager->persist($admin); } - $adminToken = new AdministratorToken(); + $adminToken = new AdministratorToken($admin); $this->setSubjectId($adminToken, (int)$row['id']); $adminToken->setKey($row['value']); $this->setSubjectProperty($adminToken, 'expiry', new DateTime($row['expires'])); $this->setSubjectProperty($adminToken, 'createdAt', (bool) $row['entered']); - $adminToken->setAdministrator($admin); $manager->persist($adminToken); } while (true); diff --git a/tests/Integration/Domain/Identity/Fixtures/DetachedAdministratorTokenFixture.php b/tests/Integration/Domain/Identity/Fixtures/DetachedAdministratorTokenFixture.php index a3d16ea7..4468f131 100644 --- a/tests/Integration/Domain/Identity/Fixtures/DetachedAdministratorTokenFixture.php +++ b/tests/Integration/Domain/Identity/Fixtures/DetachedAdministratorTokenFixture.php @@ -7,6 +7,7 @@ use DateTime; use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Persistence\ObjectManager; +use PhpList\Core\Domain\Identity\Model\Administrator; use PhpList\Core\Domain\Identity\Model\AdministratorToken; use PhpList\Core\TestingSupport\Traits\ModelTestTrait; use RuntimeException; @@ -28,6 +29,9 @@ public function load(ObjectManager $manager): void } $headers = fgetcsv($handle); + $admin = (new Administrator())->setLoginName('admin'); + $this->setSubjectId($admin, 1); + $manager->persist($admin); do { $data = fgetcsv($handle); @@ -36,7 +40,7 @@ public function load(ObjectManager $manager): void } $row = array_combine($headers, $data); - $adminToken = new AdministratorToken(); + $adminToken = new AdministratorToken($admin); $this->setSubjectId($adminToken, (int)$row['id']); $adminToken->setKey($row['value']); diff --git a/tests/Integration/Domain/Identity/Repository/AdministratorRepositoryTest.php b/tests/Integration/Domain/Identity/Repository/AdministratorRepositoryTest.php index a5215789..a69a751b 100644 --- a/tests/Integration/Domain/Identity/Repository/AdministratorRepositoryTest.php +++ b/tests/Integration/Domain/Identity/Repository/AdministratorRepositoryTest.php @@ -93,7 +93,7 @@ public function testModificationDateOfExistingModelGetsUpdatedOnUpdate(): void public function testCreationDateOfNewModelIsSetToNowOnPersist() { - $model = new Administrator(); + $model = (new Administrator())->setLoginName('ta'); $this->entityManager->persist($model); $this->entityManager->flush(); @@ -104,7 +104,7 @@ public function testCreationDateOfNewModelIsSetToNowOnPersist() public function testModificationDateOfNewModelIsSetToNowOnPersist() { - $model = new Administrator(); + $model = (new Administrator())->setLoginName('tat'); $this->entityManager->persist($model); $this->entityManager->flush(); @@ -165,7 +165,7 @@ public function testFindOneByLoginCredentialsIgnoresNonSuperUser() public function testSavePersistsAndFlushesModel(): void { - $model = new Administrator(); + $model = (new Administrator())->setLoginName('t'); $this->repository->save($model); $this->assertSame($model, $this->repository->find($model->getId())); diff --git a/tests/Integration/Domain/Identity/Repository/AdministratorTokenRepositoryTest.php b/tests/Integration/Domain/Identity/Repository/AdministratorTokenRepositoryTest.php index ff750a63..015061d0 100644 --- a/tests/Integration/Domain/Identity/Repository/AdministratorTokenRepositoryTest.php +++ b/tests/Integration/Domain/Identity/Repository/AdministratorTokenRepositoryTest.php @@ -130,8 +130,7 @@ public function testSavePersistsAndFlushesModel() /** @var Administrator $administrator */ $administrator = $administratorRepository->find(1); - $model = new AdministratorToken(); - $model->setAdministrator($administrator); + $model = new AdministratorToken($administrator); $this->repository->save($model); self::assertSame($model, $this->repository->find($model->getId())); diff --git a/tests/Integration/Domain/Messaging/Repository/MessageRepositoryTest.php b/tests/Integration/Domain/Messaging/Repository/MessageRepositoryTest.php index 1bd98735..388fa391 100644 --- a/tests/Integration/Domain/Messaging/Repository/MessageRepositoryTest.php +++ b/tests/Integration/Domain/Messaging/Repository/MessageRepositoryTest.php @@ -42,7 +42,7 @@ protected function tearDown(): void public function testMessageIsPersistedAndFetchedCorrectly(): void { - $admin = new Administrator(); + $admin = (new Administrator())->setLoginName('t'); $this->entityManager->persist($admin); $message = new Message( @@ -68,8 +68,8 @@ public function testMessageIsPersistedAndFetchedCorrectly(): void public function testGetByOwnerIdReturnsOnlyOwnedMessages(): void { - $admin1 = new Administrator(); - $admin2 = new Administrator(); + $admin1 = (new Administrator())->setLoginName('1'); + $admin2 = (new Administrator())->setLoginName('2'); $this->entityManager->persist($admin1); $this->entityManager->persist($admin2); diff --git a/tests/Integration/Domain/Subscription/Fixtures/SubscriberListFixture.php b/tests/Integration/Domain/Subscription/Fixtures/SubscriberListFixture.php index 133d2248..57345573 100644 --- a/tests/Integration/Domain/Subscription/Fixtures/SubscriberListFixture.php +++ b/tests/Integration/Domain/Subscription/Fixtures/SubscriberListFixture.php @@ -41,7 +41,8 @@ public function load(ObjectManager $manager): void $admin = $adminRepository->find($row['owner']); if ($admin === null) { - $admin = new Administrator(); + $admin = (new Administrator()) + ->setLoginName($row['name']); $this->setSubjectId($admin, (int)$row['owner']); $manager->persist($admin); } diff --git a/tests/Integration/Domain/Subscription/Service/SubscriberDeletionServiceTest.php b/tests/Integration/Domain/Subscription/Service/SubscriberDeletionServiceTest.php index 9019fd30..8fb8e31c 100644 --- a/tests/Integration/Domain/Subscription/Service/SubscriberDeletionServiceTest.php +++ b/tests/Integration/Domain/Subscription/Service/SubscriberDeletionServiceTest.php @@ -52,7 +52,7 @@ protected function tearDown(): void public function testDeleteSubscriberWithRelatedDataDoesNotThrowDoctrineError(): void { - $admin = new Administrator(); + $admin = (new Administrator())->setLoginName('ta'); $this->entityManager->persist($admin); $msg = new Message( diff --git a/tests/Unit/Domain/Identity/Model/AdministratorTest.php b/tests/Unit/Domain/Identity/Model/AdministratorTest.php index f721f58b..cf90e0c9 100644 --- a/tests/Unit/Domain/Identity/Model/AdministratorTest.php +++ b/tests/Unit/Domain/Identity/Model/AdministratorTest.php @@ -27,7 +27,7 @@ class AdministratorTest extends TestCase protected function setUp(): void { - $this->subject = new Administrator(); + $this->subject = (new Administrator())->setLoginName(''); } public function testIsDomainModel(): void @@ -69,21 +69,21 @@ public function testSetEmailAddressSetsEmailAddress(): void self::assertSame($value, $this->subject->getEmail()); } - public function testGetUpdatedAtInitiallyReturnsNull(): void + public function testGetUpdatedAtInitiallyReturnsNotNull(): void { - self::assertNull($this->subject->getUpdatedAt()); + self::assertNotNull($this->subject->getUpdatedAt()); } public function testUpdateModificationDateSetsModificationDateToNow(): void { - $this->subject->updateUpdatedAt(); + $this->subject->setEmail('update@email.com'); self::assertSimilarDates(new DateTime(), $this->subject->getUpdatedAt()); } - public function testGetPasswordHashInitiallyReturnsEmptyString(): void + public function testGetPasswordHashInitiallyReturnsNull(): void { - self::assertSame('', $this->subject->getPasswordHash()); + self::assertNull($this->subject->getPasswordHash()); } public function testSetPasswordHashSetsPasswordHash(): void diff --git a/tests/Unit/Domain/Identity/Model/AdministratorTokenTest.php b/tests/Unit/Domain/Identity/Model/AdministratorTokenTest.php index da824845..84a98df7 100644 --- a/tests/Unit/Domain/Identity/Model/AdministratorTokenTest.php +++ b/tests/Unit/Domain/Identity/Model/AdministratorTokenTest.php @@ -26,7 +26,7 @@ class AdministratorTokenTest extends TestCase protected function setUp(): void { - $this->subject = new AdministratorToken(); + $this->subject = new AdministratorToken((new Administrator())->setLoginName('admin')); } public function testIsDomainModel(): void @@ -54,11 +54,6 @@ public function testUpdateCreationDateSetsCreationDateToNow(): void self::assertSimilarDates(new DateTime(), $this->subject->getCreatedAt()); } - public function testGetKeyInitiallyReturnsEmptyString(): void - { - self::assertSame('', $this->subject->getKey()); - } - public function testSetKeySetsKey(): void { $value = 'Club-Mate'; @@ -74,8 +69,6 @@ public function testGetExpiryInitiallyReturnsDateTime(): void public function testGenerateExpirySetsExpiryOneHourInTheFuture(): void { - $this->subject->generateExpiry(); - self::assertSimilarDates(new DateTime('+1 hour'), $this->subject->getExpiry()); } @@ -97,16 +90,8 @@ public function testGenerateKeyCreatesDifferentKeysForEachCall(): void self::assertNotSame($firstKey, $secondKey); } - public function testGetAdministratorInitiallyReturnsNull(): void + public function testGetAdministratorReturnsConstructorProvidedAdministrator(): void { - self::assertNull($this->subject->getAdministrator()); - } - - public function testSetAdministratorSetsAdministrator(): void - { - $model = new Administrator(); - $this->subject->setAdministrator($model); - - self::assertSame($model, $this->subject->getAdministrator()); + self::assertNotNull($this->subject->getAdministrator()); } } diff --git a/tests/Unit/Domain/Subscription/Model/SubscriberTest.php b/tests/Unit/Domain/Subscription/Model/SubscriberTest.php index 5a60c5de..0827f7fd 100644 --- a/tests/Unit/Domain/Subscription/Model/SubscriberTest.php +++ b/tests/Unit/Domain/Subscription/Model/SubscriberTest.php @@ -56,9 +56,9 @@ public function testUpdateCreationDateSetsCreationDateToNow(): void self::assertSimilarDates(new \DateTime(), $this->subscriber->getCreatedAt()); } - public function testgetUpdatedAtInitiallyReturnsNull(): void + public function testGetUpdatedAtInitiallyReturnsNotNull(): void { - self::assertNull($this->subscriber->getUpdatedAt()); + self::assertNotNull($this->subscriber->getUpdatedAt()); } public function testUpdateModificationDateSetsModificationDateToNow(): void diff --git a/tests/Unit/Security/AuthenticationTest.php b/tests/Unit/Security/AuthenticationTest.php index 0dad0bec..58f75f61 100644 --- a/tests/Unit/Security/AuthenticationTest.php +++ b/tests/Unit/Security/AuthenticationTest.php @@ -34,10 +34,9 @@ public function testAuthenticateByApiKeyWithValidApiKeyInBasicAuthReturnsMatchin $request = new Request(); $request->headers->add(['php-auth-pw' => $apiKey]); - $token = new AdministratorToken(); $administrator = new Administrator(); $administrator->setSuperUser(true); - $token->setAdministrator($administrator); + $token = new AdministratorToken($administrator); $this->tokenRepository ->expects($this->any()) @@ -54,7 +53,7 @@ public function testAuthenticateByApiKeyWithValidApiKeyInBasicAuthWithoutAdminis $request = new Request(); $request->headers->add(['php-auth-pw' => $apiKey]); - $token = new AdministratorToken(); + $token = $this->createMock(AdministratorToken::class); $this->tokenRepository ->expects($this->any())