Commit 1ca93d77 authored by Thomas Löffler's avatar Thomas Löffler
Browse files

Merge branch 'develop-v10' into 'develop'

Upgrade to v10

See merge request t3o/typo3.org!353
parents 60163abf 54f25a64
Pipeline #8864 passed with stages
in 7 minutes and 14 seconds
...@@ -4,20 +4,20 @@ ...@@ -4,20 +4,20 @@
/commands/*/*.example /commands/*/*.example
/commands/*/README.txt /commands/*/README.txt
/commands/host/launch /commands/host/launch
/commands/web/xdebug
/commands/db/mysql /commands/db/mysql
/homeadditions/*.example /homeadditions/*.example
/homeadditions/README.txt /homeadditions/README.txt
/.gitignore /.gitignore
/import.yaml /import.yaml
/docker-compose.yaml /.ddev-docker-compose-base.yaml
/.ddev-docker-compose-full.yaml
/db_snapshots /db_snapshots
/sequelpro.spf /sequelpro.spf
/import-db /import-db
/.bgsync*
/config.*.y*ml /config.*.y*ml
/.webimageBuild /.webimageBuild
/.dbimageBuild /.dbimageBuild
/.bgsyncimageBuild
/.sshimageBuild /.sshimageBuild
/.webimageExtra /.webimageExtra
/.dbimageExtra /.dbimageExtra
......
#!/bin/bash
## Description: Runs the npm process to build frontend assets
## Usage: build-frontend
## Example: "ddev build-frontend"
npm --prefix private/typo3conf/ext/t3olayout/Build install
npm --prefix private/typo3conf/ext/t3olayout/Build run-script build
rm -Rf private/typo3conf/ext/t3olayout/Build/node_modules
#!/bin/bash
## Description: Uses typo3_console in ddev container
## Usage: console
## Example: "ddev console cache:flush"
vendor/bin/typo3cms $1
APIVersion: v1.12.0
name: typo3.org name: typo3.org
type: typo3 type: typo3
docroot: public docroot: public
php_version: "7.2" php_version: "7.4"
webserver_type: nginx-fpm webserver_type: nginx-fpm
router_http_port: "80" router_http_port: "80"
router_https_port: "443" router_https_port: "443"
xdebug_enabled: false xdebug_enabled: false
additional_hostnames: [] additional_hostnames: []
additional_fqdns: [] additional_fqdns: []
mariadb_version: "10.1" mariadb_version: "10.3"
nfs_mount_enabled: false
provider: default provider: default
hooks: hooks:
post-import-db: post-import-db:
- exec: ./vendor/bin/typo3cms database:updateschema - exec: ./vendor/bin/typo3cms database:updateschema
post-start: post-start:
- exec: cp private/typo3conf/AdditionalConfiguration.ddev.php private/typo3conf/AdditionalConfiguration.php - exec: cp private/typo3conf/AdditionalConfiguration.ddev.php private/typo3conf/AdditionalConfiguration.php
- exec: composer install --ignore-platform-reqs -d /var/www/html - exec: composer install
- exec: npm --prefix private/typo3conf/ext/t3olayout/Build install
- exec: npm --prefix private/typo3conf/ext/t3olayout/Build run-script build
- exec: ./vendor/bin/typo3cms install:generatepackagestates - exec: ./vendor/bin/typo3cms install:generatepackagestates
- exec: ./vendor/bin/typo3cms install:extensionsetupifpossible - exec: ./vendor/bin/typo3cms install:extensionsetupifpossible
webimage_extra_packages: [php7.2-ldap] webimage_extra_packages: [php7.4-ldap]
use_dns_when_possible: true use_dns_when_possible: true
timezone: Europe/Berlin timezone: Europe/Berlin
# This config.yaml was created with ddev version v1.12.0 # This config.yaml was created with ddev version v1.14.1
# webimage: drud/ddev-webserver:v1.12.1 # webimage: drud/ddev-webserver:v1.14.1
# dbimage: drud/ddev-dbserver-mariadb-10.2:v1.12.0 # dbimage: drud/ddev-dbserver-mariadb-10.2:v1.14.1
# dbaimage: drud/phpmyadmin:v1.12.0 # dbaimage: phpmyadmin/phpmyadmin:5
# bgsyncimage: drud/ddev-bgsync:v1.12.0
# However we do not recommend explicitly wiring these images into the # However we do not recommend explicitly wiring these images into the
# config.yaml as they may break future versions of ddev. # config.yaml as they may break future versions of ddev.
# You can update this config.yaml using 'ddev config'. # You can update this config.yaml using 'ddev config'.
...@@ -45,7 +40,7 @@ timezone: Europe/Berlin ...@@ -45,7 +40,7 @@ timezone: Europe/Berlin
# docroot: <relative_path> # Relative path to the directory containing index.php. # docroot: <relative_path> # Relative path to the directory containing index.php.
# php_version: "7.2" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4" # php_version: "7.3" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4"
# You can explicitly specify the webimage, dbimage, dbaimage lines but this # You can explicitly specify the webimage, dbimage, dbaimage lines but this
# is not recommended, as the images are often closely tied to ddev's' behavior, # is not recommended, as the images are often closely tied to ddev's' behavior,
...@@ -54,7 +49,6 @@ timezone: Europe/Berlin ...@@ -54,7 +49,6 @@ timezone: Europe/Berlin
# webimage: <docker_image> # nginx/php docker image. # webimage: <docker_image> # nginx/php docker image.
# dbimage: <docker_image> # mariadb docker image. # dbimage: <docker_image> # mariadb docker image.
# dbaimage: <docker_image> # dbaimage: <docker_image>
# bgsyncimage: <docker_image>
# mariadb_version and mysql_version # mariadb_version and mysql_version
# ddev can use many versions of mariadb and mysql # ddev can use many versions of mariadb and mysql
...@@ -100,20 +94,16 @@ timezone: Europe/Berlin ...@@ -100,20 +94,16 @@ timezone: Europe/Berlin
# These values specify the destination directory for ddev ssh and the # These values specify the destination directory for ddev ssh and the
# directory in which commands passed into ddev exec are run. # directory in which commands passed into ddev exec are run.
# omit_containers: ["dba", "ddev-ssh-agent"] # omit_containers: ["db", dba", "ddev-ssh-agent"]
# would omit the dba (phpMyAdmin) and ddev-ssh-agent containers. Currently # Currently only these containers are supported. Some containers can also be
# only those two containers can be omitted here. # omitted globally in the ~/.ddev/global_config.yaml. Note that if you omit
# Note that these containers can also be omitted globally in the # the "db" container, several standard features of ddev that access the
# ~/.ddev/global_config.yaml or with the "ddev config global" command. # database container will be unusable.
# nfs_mount_enabled: false # nfs_mount_enabled: false
# Great performance improvement but requires host configuration first. # Great performance improvement but requires host configuration first.
# See https://ddev.readthedocs.io/en/stable/users/performance/#using-nfs-to-mount-the-project-into-the-container # See https://ddev.readthedocs.io/en/stable/users/performance/#using-nfs-to-mount-the-project-into-the-container
# webcache_enabled: false (deprecated)
# Was only for macOS, but now deprecated.
# See https://ddev.readthedocs.io/en/stable/users/performance/#webcache
# host_https_port: "59002" # host_https_port: "59002"
# The host port binding for https can be explicitly specified. It is # The host port binding for https can be explicitly specified. It is
# dynamic unless otherwise specified. # dynamic unless otherwise specified.
...@@ -130,11 +120,13 @@ timezone: Europe/Berlin ...@@ -130,11 +120,13 @@ timezone: Europe/Berlin
# The host port binding for the ddev-dbserver can be explicitly specified. It is dynamic # The host port binding for the ddev-dbserver can be explicitly specified. It is dynamic
# unless explicitly specified. # unless explicitly specified.
# phpmyadmin_port: "1000" # phpmyadmin_port: "8036"
# The PHPMyAdmin port can be changed from the default 8036 # phpmyadmin_https_port: "8037"
# The PHPMyAdmin ports can be changed from the default 8036 and 8037
# mailhog_port: "1001" # mailhog_port: "8025"
# The MailHog port can be changed from the default 8025 # mailhog_https_port: "8026"
# The MailHog ports can be changed from the default 8025 and 8026
# webimage_extra_packages: [php-yaml, php7.3-ldap] # webimage_extra_packages: [php-yaml, php7.3-ldap]
# Extra Debian packages that are needed in the webimage can be added here # Extra Debian packages that are needed in the webimage can be added here
...@@ -158,6 +150,17 @@ timezone: Europe/Berlin ...@@ -158,6 +150,17 @@ timezone: Europe/Berlin
# Provide extra flags to the "ngrok http" command, see # Provide extra flags to the "ngrok http" command, see
# https://ngrok.com/docs#http or run "ngrok http -h" # https://ngrok.com/docs#http or run "ngrok http -h"
# disable_settings_management: false
# If true, ddev will not create CMS-specific settings files like
# Drupal's settings.php/settings.ddev.php or TYPO3's AdditionalSettings.php
# In this case the user must provide all such settings.
# no_project_mount: false
# (Experimental) If true, ddev will not mount the project into the web container;
# the user is responsible for mounting it manually or via a script.
# This is to enable experimentation with alternate file mounting strategies.
# For advanced users only!
# provider: default # Currently either "default" or "pantheon" # provider: default # Currently either "default" or "pantheon"
# #
# Many ddev commands can be extended to run tasks before or after the # Many ddev commands can be extended to run tasks before or after the
......
...@@ -4,3 +4,7 @@ services: ...@@ -4,3 +4,7 @@ services:
web: web:
environment: environment:
- TYPO3_CONTEXT=Development - TYPO3_CONTEXT=Development
- DB_NAME=db
- DB_HOST=db
- DB_USERNAME=db
- DB_PASSWORD=db
...@@ -3,47 +3,15 @@ include: ...@@ -3,47 +3,15 @@ include:
ref: master ref: master
file: '/Configuration/GitLab/t3o-builds.yml' file: '/Configuration/GitLab/t3o-builds.yml'
stages:
- maintenance
- dump
- test
- build
- layout
- deploy
variables: variables:
GIT_STRATEGY: "none" GIT_STRATEGY: "none"
GIT_SSL_NO_VERIFY: "true" GIT_SSL_NO_VERIFY: "true"
STAGE_PORT: 22200 STAGE_PORT: 22200
STAGE_HOST: "stage.typo3.org" STAGE_HOST: "typo3.dev"
PRODUCTION_PORT: 22201 PRODUCTION_PORT: 22201
PRODUCTION_HOST: "typo3.org" PRODUCTION_HOST: "typo3.org"
STAGE_USER: "tthreeorgstage" DUMP_USER: "t3o-stage"
STAGE_USER: "t3o-stage"
DUMP_EXCLUDE_TABLES_LIST: "be_groups,be_sessions,be_users,cf_cache_hash,cf_cache_hash_tags,cf_cache_imagesizes,cf_cache_imagesizes_tags,cf_cache_news_category,cf_cache_news_category_tags,cf_cache_pages,cf_cache_pages_tags,cf_cache_pagesection,cf_cache_pagesection_tags,cf_cache_rootline,cf_cache_rootline_tags,cf_extbase_datamapfactory_datamap,cf_extbase_datamapfactory_datamap_tags,cf_extbase_object,cf_extbase_object_tags,cf_extbase_reflection,cf_extbase_reflection_tags,cf_tx_solr,cf_tx_solr_configuration,cf_tx_solr_configuration_tags,cf_tx_solr_tags,fe_groups,fe_sessions,fe_users,sys_domain,sys_log,tx_solr_cache,tx_solr_cache_tags" DUMP_EXCLUDE_TABLES_LIST: "be_groups,be_sessions,be_users,cf_cache_hash,cf_cache_hash_tags,cf_cache_imagesizes,cf_cache_imagesizes_tags,cf_cache_news_category,cf_cache_news_category_tags,cf_cache_pages,cf_cache_pages_tags,cf_cache_pagesection,cf_cache_pagesection_tags,cf_cache_rootline,cf_cache_rootline_tags,cf_extbase_datamapfactory_datamap,cf_extbase_datamapfactory_datamap_tags,cf_extbase_object,cf_extbase_object_tags,cf_extbase_reflection,cf_extbase_reflection_tags,cf_tx_solr,cf_tx_solr_configuration,cf_tx_solr_configuration_tags,cf_tx_solr_tags,fe_groups,fe_sessions,fe_users,sys_domain,sys_log,tx_solr_cache,tx_solr_cache_tags"
PHP_EXECUTABLE: "PHP_INI_SCAN_DIR=:/etc/php72/user/${STAGE_USER}/:/home/${STAGE_USER}/cnf/ /opt/php/php72/bin/php" PHP_EXECUTABLE: "/opt/php/php72/bin/php"
ADDITIONAL_TABLE_EXCLUDES: "-e 'tx_certifications_*' -e 'tx_t3odonation_domain_model_donation' -e 'tx_t3omembership_domain_model_member' -e 'tx_randombanners_domain_model_banner'"
.maintenance: &maintenance_template
variables:
GIT_STRATEGY: none
stage: maintenance
when: manual
image:
name: composer:1
entrypoint: ["/bin/sh", "-c"]
before_script:
- apk add rsync --update
- mkdir -p /root/.ssh/
- eval $(ssh-agent -s)
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY_STAGE" | ssh-add -
- ssh-keyscan -p ${STAGE_PORT} ${STAGE_HOST} >> /root/.ssh/known_hosts
Get dump for local environment:
<<: *maintenance_template
script:
- mkdir dump
- ssh -p ${STAGE_PORT} ${STAGE_USER}@${STAGE_HOST} "${PHP_EXECUTABLE} ./ci/current/vendor/bin/typo3cms database:export -c Default -e 'cf_*' -e 'cache_*' -e '[bf]e_sessions' -e '[bf]e_users' -e 'sys_log' -e 'sys_history' -e 'tx_solr_*' -e 'tx_igldapssoauth_config' | gzip -9 -c" > ./dump/dump.sql.gz
artifacts:
paths:
- ./dump/
expire_in: 1d
...@@ -8,14 +8,16 @@ require_once '/tmp/vendor/deployer/recipes/recipe/rsync.php'; ...@@ -8,14 +8,16 @@ require_once '/tmp/vendor/deployer/recipes/recipe/rsync.php';
$sharedDirectories = [ $sharedDirectories = [
'private/fileadmin', 'private/fileadmin',
'private/uploads', 'private/uploads',
'public/.well-known' 'public/.well-known',
'var'
]; ];
set('shared_dirs', $sharedDirectories); set('shared_dirs', $sharedDirectories);
$sharedFiles = [ $sharedFiles = [
'private/typo3conf/AdditionalConfiguration.php', 'private/typo3conf/AdditionalConfiguration.php',
'.cachetool.yml', '.cachetool.yml',
'public/services/api-keys.php' 'public/services/api-keys.php',
'private/typo3conf/ext/t3olayout/Configuration/TypoScript/Deployment/Secret.typoscript'
]; ];
set('shared_files', $sharedFiles); set('shared_files', $sharedFiles);
...@@ -53,7 +55,7 @@ set('rsync', [ ...@@ -53,7 +55,7 @@ set('rsync', [
]); ]);
set('rsync_src', './'); set('rsync_src', './');
inventory('./.gitlab-ci/deployer/servers.yml'); inventory('./.gitlab-ci/deployer/servers.yml');
set('php', '/opt/php/php72/bin/php'); set('php', 'php');
set('bin_folder', 'vendor/bin/'); set('bin_folder', 'vendor/bin/');
task('solr_host', function () { task('solr_host', function () {
...@@ -61,7 +63,11 @@ task('solr_host', function () { ...@@ -61,7 +63,11 @@ task('solr_host', function () {
}); });
task('typo3', function () { task('typo3', function () {
if (get('stage') === 'production') {
set('php', '/opt/php/php72/bin/php');
}
run('cd {{release_path}} && {{php}} {{bin_folder}}typo3cms install:generatepackagestates'); run('cd {{release_path}} && {{php}} {{bin_folder}}typo3cms install:generatepackagestates');
run('cd {{release_path}} && {{php}} {{bin_folder}}typo3cms database:updateschema');
run('cd {{release_path}} && {{php}} {{bin_folder}}typo3cms install:extensionsetupifpossible'); run('cd {{release_path}} && {{php}} {{bin_folder}}typo3cms install:extensionsetupifpossible');
}); });
...@@ -76,9 +82,9 @@ task('deploy', [ ...@@ -76,9 +82,9 @@ task('deploy', [
'rsync', 'rsync',
'deploy:shared', 'deploy:shared',
'deploy:writable', 'deploy:writable',
'solr_host',
'typo3', 'typo3',
'deploy:symlink', 'deploy:symlink',
'solr_host',
'cache', 'cache',
'cleanup' 'cleanup'
]); ]);
master: master:
stage: production stage: master
hostname: typo3.org hostname: t3o03.typo3server.ch
port: 22201 user: t3o-prod
user: tthreeorg
writable_mode: chmod writable_mode: chmod
forward_agent: true forward_agent: true
deploy_path: ~/ci deploy_path: ~/ci
keep_releases: 2 keep_releases: 2
develop: develop:
stage: stage stage: develop
hostname: stage-v9.typo3.org hostname: typo3.dev
port: 22200 user: t3o-stage
user: tthreeorgstage
writable_mode: chmod writable_mode: chmod
forward_agent: true forward_agent: true
deploy_path: ~/ci deploy_path: ~/ci
......
{ {
"name": "t3o/typo3.org", "name": "t3o/typo3.org",
"description": "Website for TYPO3.org", "description": "Website for TYPO3.org",
"minimum-stability": "dev",
"prefer-stable": true,
"authors": [ "authors": [
{ {
"name": "t3o team", "name": "t3o team",
...@@ -46,34 +48,31 @@ ...@@ -46,34 +48,31 @@
} }
], ],
"require": { "require": {
"apache-solr-for-typo3/solr": "^10.0", "apache-solr-for-typo3/solr": "dev-master",
"clickstorm/cs_seo": "^4.2",
"cweagans/composer-patches": "^1.6", "cweagans/composer-patches": "^1.6",
"derhansen/sf_event_mgt": "^4.0", "derhansen/sf_event_mgt": "^5.0",
"georgringer/news": "^7.0", "georgringer/news": "^8.0",
"gordalina/cachetool": "^4.0", "gordalina/cachetool": "^4.0",
"nitsan/ns-youtube": "^1.1", "reelworx/rx-shariff": "^13.0",
"reelworx/rx-shariff": "^12.2", "t3g/hubspot-forms": "^1.1",
"t3g/hubspot-forms": "dev-develop", "t3o/certifications": "^3.0",
"t3o/certifications": "^2.2", "t3o/randombanners": "^2.0",
"t3o/randombanners": "^1.0", "t3o/t3o_donation": "^1.0",
"t3o/t3o_donation": "@dev", "t3o/t3o_membership": "^3.0",
"t3o/t3o_membership": "^2.1", "t3o/t3olayout": "^5.0",
"t3o/t3olayout": "^4.0",
"t3o/t3org_layout": "@dev", "t3o/t3org_layout": "@dev",
"t3o/typo3_roadmap": "^2.2", "t3o/typo3_roadmap": "^4.0",
"typo3/cms-linkvalidator": "^9.5", "typo3/cms-dashboard": "^10.4",
"typo3/cms-redirects": "^9.5", "typo3/cms-linkvalidator": "^10.4",
"typo3/cms-seo": "^9.5", "typo3/cms-redirects": "^10.4",
"typo3/cms-sys-note": "^9.5" "typo3/cms-seo": "^10.4",
}, "typo3/cms-sys-note": "^10.4",
"require-dev": { "yoast-seo-for-typo3/yoast_seo": "^6.0"
"ichhabrecht/filefill": "^2.0"
}, },
"config": { "config": {
"sort-packages": true, "sort-packages": true,
"platform": { "platform": {
"php": "7.2.13" "php": "7.4.4"
} }
}, },
"extra": { "extra": {
......
This diff is collapsed.
...@@ -4,7 +4,7 @@ baseVariants: ...@@ -4,7 +4,7 @@ baseVariants:
base: 'https://typo3.org.ddev.site' base: 'https://typo3.org.ddev.site'
condition: 'applicationContext == "Development"' condition: 'applicationContext == "Development"'
- -
base: 'https://stage.typo3.org' base: 'https://typo3.dev'
condition: 'applicationContext == "Testing"' condition: 'applicationContext == "Testing"'
- -
base: 'https://typo3.org' base: 'https://typo3.org'
......
<?php <?php
declare(strict_types = 1);
namespace T3o\T3oDonation\Controller; namespace T3o\T3oDonation\Controller;
use TYPO3\CMS\Core\Messaging\FlashMessage; use TYPO3\CMS\Core\Messaging\FlashMessage;
...@@ -35,7 +36,7 @@ class DonationController extends ActionController ...@@ -35,7 +36,7 @@ class DonationController extends ActionController
* @TYPO3\CMS\Extbase\Annotation\Inject * @TYPO3\CMS\Extbase\Annotation\Inject
* @TYPO3\CMS\Extbase\Annotation\ORM\Lazy * @TYPO3\CMS\Extbase\Annotation\ORM\Lazy
*/ */
protected $configurationUtility = null; protected ?\TYPO3\CMS\Core\Configuration\ExtensionConfiguration $configurationUtility = null;
/** /**
* accountRepository * accountRepository
...@@ -44,7 +45,7 @@ class DonationController extends ActionController ...@@ -44,7 +45,7 @@ class DonationController extends ActionController
* @TYPO3\CMS\Extbase\Annotation\Inject * @TYPO3\CMS\Extbase\Annotation\Inject
* @TYPO3\CMS\Extbase\Annotation\ORM\Lazy * @TYPO3\CMS\Extbase\Annotation\ORM\Lazy
*/ */
protected $accountRepository = null; protected ?\T3o\T3oDonation\Domain\Repository\AccountRepository $accountRepository = null;
/** /**
* donationRepository * donationRepository
...@@ -53,7 +54,7 @@ class DonationController extends ActionController ...@@ -53,7 +54,7 @@ class DonationController extends ActionController
* @TYPO3\CMS\Extbase\Annotation\Inject * @TYPO3\CMS\Extbase\Annotation\Inject
* @TYPO3\CMS\Extbase\Annotation\ORM\Lazy * @TYPO3\CMS\Extbase\Annotation\ORM\Lazy
*/ */
protected $donationRepository; protected \T3o\T3oDonation\Domain\Repository\DonationRepository $donationRepository;
/** /**
* ipnService * ipnService
...@@ -62,7 +63,7 @@ class DonationController extends ActionController ...@@ -62,7 +63,7 @@ class DonationController extends ActionController
* @TYPO3\CMS\Extbase\Annotation\Inject * @TYPO3\CMS\Extbase\Annotation\Inject
* @TYPO3\CMS\Extbase\Annotation\ORM\Lazy * @TYPO3\CMS\Extbase\Annotation\ORM\Lazy
*/ */
protected $ipnService; protected \T3o\T3oDonation\Service\PayPalIpn $ipnService;
/** /**
* mailService * mailService
...@@ -71,7 +72,7 @@ class DonationController extends ActionController ...@@ -71,7 +72,7 @@ class DonationController extends ActionController
* @TYPO3\CMS\Extbase\Annotation\Inject * @TYPO3\CMS\Extbase\Annotation\Inject
* @TYPO3\CMS\Extbase\Annotation\ORM\Lazy * @TYPO3\CMS\Extbase\Annotation\ORM\Lazy
*/ */
protected $mailService; protected \T3o\T3oDonation\Service\Mail $mailService;
/** /**
* Adds custom JS to page. * Adds custom JS to page.
......
<?php <?php
declare(strict_types = 1);
namespace T3o\T3oDonation\Domain\Model; namespace T3o\T3oDonation\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity; use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
...@@ -27,21 +27,21 @@ class Account extends AbstractEntity ...@@ -27,21 +27,21 @@ class Account extends AbstractEntity
* @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty") * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
* @var string * @var string
*/ */
protected $name; protected string $name = '';
/** /**
* @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty") * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
* @TYPO3\CMS\Extbase\Annotation\Validate("EmailAddress") * @TYPO3\CMS\Extbase\Annotation\Validate("EmailAddress")
* @var string * @var string
*/ */
protected $emailNotification; protected string $emailNotification = '';
/** /**
* @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty") * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
* @TYPO3\CMS\Extbase\Annotation\Validate("EmailAddress") * @TYPO3\CMS\Extbase\Annotation\Validate("EmailAddress")
* @var string * @var string
*/ */
protected $emailPaypal; protected string $emailPaypal;
/** /**
* @return string