diff --git a/.composer-require-checker.json b/.composer-require-checker.json
new file mode 100644
index 0000000..d7ca5d8
--- /dev/null
+++ b/.composer-require-checker.json
@@ -0,0 +1,15 @@
+{
+ "symbol-whitelist": [
+ "Contao\\ManagerBundle\\ContaoManagerBundle",
+ "Contao\\ManagerPlugin\\Bundle\\BundlePluginInterface",
+ "Contao\\ManagerPlugin\\Bundle\\Config\\BundleConfig",
+ "Contao\\ManagerPlugin\\Bundle\\Parser\\ParserInterface",
+ "Symfony\\Component\\Config\\FileLocator",
+ "Symfony\\Component\\Console\\Application",
+ "Symfony\\Component\\DependencyInjection\\ContainerBuilder",
+ "Symfony\\Component\\DependencyInjection\\Loader\\YamlFileLoader",
+ "Symfony\\Component\\HttpFoundation\\Response",
+ "Symfony\\Component\\HttpKernel\\Bundle\\Bundle",
+ "Symfony\\Component\\HttpKernel\\DependencyInjection\\ConfigurableExtension"
+ ]
+}
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..1915777
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,5 @@
+.gitattributes export-ignore
+.gitignore export-ignore
+phpunit.xml.dist export-ignore
+/.github export-ignore
+/tests export-ignore
diff --git a/.phpcq.lock b/.phpcq.lock
new file mode 100644
index 0000000..f92f2d8
--- /dev/null
+++ b/.phpcq.lock
@@ -0,0 +1 @@
+{"plugins":{"phpunit":{"api-version":"1.0.0","version":"1.0.0.0","type":"php-file","url":"https://phpcq.github.io/repository/plugin/phpunit/phpunit-1.0.0.0.php","signature":null,"requirements":{"php":{"php":"^7.3 || ^8.0"},"tool":{"phpunit":"^6.0 || ^7.0 || ^8.0 || ^9.0"}},"checksum":{"type":"sha-512","value":"c73f15658e3ba62665f09492ec91c3a6a715760bfaa88473a987538439fff442540148e086e46a6aa18ce55a3ea2fbf76caaa581384cb84a38859fcc609ae7e4"},"tools":{"phpunit":{"version":"9.6.16","url":"https://phar.phpunit.de/phpunit-9.6.16.phar","requirements":{"php":{"php":">=7.3","ext-dom":"*","ext-json":"*","ext-libxml":"*","ext-mbstring":"*","ext-xml":"*","ext-xmlwriter":"*"}},"checksum":{"type":"sha-256","value":"891d46f06284db3695498aff5dfd6a944f835e07db2981295db2c2bcf6cfd338"},"signature":"https://phar.phpunit.de/phpunit-9.6.16.phar.asc"}},"composerLock":null},"psalm":{"api-version":"1.0.0","version":"1.2.0.0","type":"php-file","url":"https://phpcq.github.io/repository/plugin/psalm/psalm-1.2.0.0.php","signature":null,"requirements":{"php":{"php":"^7.4 || ^8.0","ext-dom":"*"},"tool":{"psalm":"^3.0 || ^4.0 || ^5.0"}},"checksum":{"type":"sha-512","value":"4a550c9226d7bca582d7c10bd87cce01190c96398936b1613421640c83df62ed1c6e0d44c1b39635414ea8cf4a892a6458d27590793238add24e7cb5547e6ffd"},"tools":{"psalm":{"version":"5.20.0","url":"https://github.com/vimeo/psalm/releases/download/5.20.0/psalm.phar","requirements":{"php":{"php":"^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0","ext-SimpleXML":"*","ext-ctype":"*","ext-dom":"*","ext-json":"*","ext-libxml":"*","ext-mbstring":"*","ext-tokenizer":"*"}},"checksum":null,"signature":"https://github.com/vimeo/psalm/releases/download/5.20.0/psalm.phar.asc"}},"composerLock":null},"composer-require-checker":{"api-version":"1.0.0","version":"1.1.1.0","type":"php-file","url":"https://phpcq.github.io/repository/plugin/composer-require-checker/composer-require-checker-1.1.1.0.php","signature":null,"requirements":{"php":{"php":"^7.4 || ^8.0"},"tool":{"composer-require-checker":"^3.8 || ^4.0"}},"checksum":{"type":"sha-512","value":"d5415bddfe024c5749d894034583882aee4e5c3e1087815d9fdd81cb5e71630f631a0e35de0ff84b97fbbf738c16ece5f83bd8c00695913eb846aa6f04577dc2"},"tools":{"composer-require-checker":{"version":"4.7.1","url":"https://github.com/maglnet/ComposerRequireChecker/releases/download/4.7.1/composer-require-checker.phar","requirements":{"php":{"php":"~8.1.0 || ~8.2.0 || ~8.3.0","ext-phar":"*"}},"checksum":null,"signature":"https://github.com/maglnet/ComposerRequireChecker/releases/download/4.7.1/composer-require-checker.phar.asc"}},"composerLock":null},"phpmd":{"api-version":"1.0.0","version":"1.0.2.0","type":"php-file","url":"https://phpcq.github.io/repository/plugin/phpmd/phpmd-1.0.2.0.php","signature":null,"requirements":{"php":{"php":"^7.3 || ^8.0","ext-dom":"*"},"tool":{"phpmd":"^2.6.1"}},"checksum":{"type":"sha-512","value":"f22280a6dec8dbdd2ec1d83b294f23237fe32c34f4a298e52038e0a7a0074d541635b2b488b1a6098a42d8418a6cd8eb804406ea82b91e362be2b5d11a0915b0"},"tools":{"phpmd":{"version":"2.15.0","url":"https://github.com/phpmd/phpmd/releases/download/2.15.0/phpmd.phar","requirements":{"php":{"php":">=5.3.9","ext-xml":"*"}},"checksum":null,"signature":"https://github.com/phpmd/phpmd/releases/download/2.15.0/phpmd.phar.asc"}},"composerLock":null},"phpcpd":{"api-version":"1.0.0","version":"1.1.1.0","type":"php-file","url":"https://phpcq.github.io/repository/plugin/phpcpd/phpcpd-1.1.1.0.php","signature":null,"requirements":{"php":{"php":"^7.3 || ^8.0","ext-dom":"*"},"tool":{"phpcpd":"^6.0"}},"checksum":{"type":"sha-512","value":"1189ce0bf3fade4cb4241f1d96f915ef8fc7651f4450dc79fdf464ee3d6be3009316f0d423ce2d4af9d76ad50807b7fdf4d77bfa6d9ee2c91d6eda32ea214433"},"tools":{"phpcpd":{"version":"6.0.3","url":"https://phar.phpunit.de/phpcpd-6.0.3.phar","requirements":{"php":{"php":">=7.3","ext-dom":"*"}},"checksum":{"type":"sha-256","value":"2cbaea7cfda1bb4299d863eb075e977c3f49055dd16d88529fae5150d48a84cb"},"signature":"https://phar.phpunit.de/phpcpd-6.0.3.phar.asc"}},"composerLock":null},"phploc":{"api-version":"1.0.0","version":"1.0.0.0","type":"php-file","url":"https://phpcq.github.io/repository/plugin/phploc/phploc-1.0.0.0.php","signature":null,"requirements":{"php":{"php":"^7.3 || ^8.0","ext-dom":"*","ext-json":"*"},"tool":{"phploc":"^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0"}},"checksum":{"type":"sha-512","value":"f67b02d494796adf553cb3dd13ec06c1cb8e53c799954061749424251379541637538199afb3afa3c7a01cabd1cb6f1c53eb621f015dff9644c6c7cbf10c56d1"},"tools":{"phploc":{"version":"7.0.2","url":"https://phar.phpunit.de/phploc-7.0.2.phar","requirements":{"php":{"php":">=7.3","ext-dom":"*","ext-json":"*"}},"checksum":{"type":"sha-256","value":"3d59778ec86faf25fd00e3a329b2f9ad4a3c751ca91601ea7dab70f887b0bf46"},"signature":"https://phar.phpunit.de/phploc-7.0.2.phar.asc"}},"composerLock":null},"phpcs":{"api-version":"1.0.0","version":"1.1.1.0","type":"php-file","url":"https://phpcq.github.io/repository/plugin/phpcs/phpcs-1.1.1.0.php","signature":null,"requirements":{"php":{"php":"^7.3 || ^8.0","ext-dom":"*"},"tool":{"phpcs":"^3.0 || ^2.0","phpcbf":"^3.0 || ^2.0"}},"checksum":{"type":"sha-512","value":"2737022369da1318cc4e0ea194e8a81019f7b079080d869aab878b7486052fdbe68fee3f28131f35573226def1aabd4bd005e038ee7b767c137b1107c1492a83"},"tools":{"phpcs":{"version":"3.8.1","url":"https://github.com/PHPCSStandards/PHP_CodeSniffer/releases/download/3.8.1/phpcs.phar","requirements":{"php":{"php":">=5.4.0","ext-simplexml":"*","ext-tokenizer":"*","ext-xmlwriter":"*"}},"checksum":null,"signature":"https://github.com/PHPCSStandards/PHP_CodeSniffer/releases/download/3.8.1/phpcs.phar.asc"},"phpcbf":{"version":"3.8.1","url":"https://github.com/PHPCSStandards/PHP_CodeSniffer/releases/download/3.8.1/phpcbf.phar","requirements":{"php":{"php":">=5.4.0","ext-simplexml":"*","ext-tokenizer":"*","ext-xmlwriter":"*"}},"checksum":null,"signature":"https://github.com/PHPCSStandards/PHP_CodeSniffer/releases/download/3.8.1/phpcbf.phar.asc"}},"composerLock":null},"composer-normalize":{"api-version":"1.0.0","version":"1.1.0.0","type":"php-file","url":"https://phpcq.github.io/repository/plugin/composer-normalize/composer-normalize-1.1.0.0.php","signature":null,"requirements":{"php":{"php":"^7.3 || ^8.0","ext-json":"*"},"tool":{"composer-normalize":"^2.1"}},"checksum":{"type":"sha-512","value":"d59d3557cb20630734878a9115df5dd32d5aff815e5b15be36f6fb5d6e9d83dd36efd84215ab6529edcc924f600946f739a0d9e67723deff95c88346ab502498"},"tools":{"composer-normalize":{"version":"2.41.1","url":"https://github.com/ergebnis/composer-normalize/releases/download/2.41.1/composer-normalize.phar","requirements":{"php":{"php":"~8.1.0 || ~8.2.0 || ~8.3.0","ext-json":"*"}},"checksum":null,"signature":"https://github.com/ergebnis/composer-normalize/releases/download/2.41.1/composer-normalize.phar.asc"}},"composerLock":null}},"tools":[]}
\ No newline at end of file
diff --git a/.phpcq.yaml.dist b/.phpcq.yaml.dist
new file mode 100644
index 0000000..04eee1d
--- /dev/null
+++ b/.phpcq.yaml.dist
@@ -0,0 +1,112 @@
+phpcq:
+ repositories:
+ - https://phpcq.github.io/repository/repository.json
+ directories:
+ - src
+ - tests
+ artifact: .phpcq/build
+ composer:
+ autodiscover: false
+
+ plugins:
+ phpunit:
+ version: ^1.0
+ signed: false
+ psalm:
+ version: ^1.0
+ signed: false
+ composer-require-checker:
+ version: ^1.0
+ signed: false
+ phpmd:
+ version: ^1.0
+ signed: false
+ phpcpd:
+ version: ^1.1
+ signed: false
+ phploc:
+ version: ^1.0
+ signed: false
+ phpcs:
+ version: ^1.0
+ signed: false
+ composer-normalize:
+ version: ^1.0
+ signed: false
+ trusted-keys:
+ # composer-require-checker
+ - 033E5F8D801A2F8D
+ # sb@sebastian-bergmann.de
+ - 4AA394086372C20A
+ # psalm
+ - 8A03EA3B385DBAA1
+ - 12CE0F1D262429A5
+ # magl@magll.net
+ - D2CCAC42F6295E7D
+ # PHP_CodeSniffer
+ - 31C7E470E2138192
+ # Composer normalize
+ - C00543248C87FB13
+ # phpmd
+ - A4E55EA12C7C085C
+ - 9093F8B32E4815AA
+
+tasks:
+ fix:
+ - composer-normalize-fix
+ - phpcbf
+
+ verify:
+ - composer-require-checker
+ - composer-normalize
+
+ analyze:
+ - phploc
+ - phpcpd
+ - phpmd
+ - phpcs
+ - psalm
+ - phpunit
+
+ default:
+ - verify
+ - analyze
+
+ phpcpd:
+ plugin: phpcpd
+ config:
+ exclude:
+ - tests
+ - src/CoreBundle/EventListener/DcGeneral/DefinitionBuilder
+ - src/CoreBundle/Resources/contao/dca
+
+ phpmd:
+ plugin: phpmd
+ config:
+ ruleset:
+ - ./.phpmd.xml
+
+ composer-require-checker:
+ plugin: composer-require-checker
+ config:
+ config_file: '.composer-require-checker.json'
+
+ phpcs:
+ plugin: phpcs
+ config: &phpcs-config
+ standard: PSR12
+ excluded:
+ - '*/Resources/contao/dca/*'
+ - '*/Resources/contao/languages/*'
+ - '*/Resources/public/*'
+
+ phpcbf:
+ plugin: phpcs
+ config:
+ <<: *phpcs-config
+ fix: true
+
+ composer-normalize-fix:
+ plugin: composer-normalize
+ config:
+ dry_run: false
diff --git a/.phpmd.xml b/.phpmd.xml
new file mode 100644
index 0000000..78eb716
--- /dev/null
+++ b/.phpmd.xml
@@ -0,0 +1,37 @@
+
+
+
+ PHPMD rule set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.phpunit.result.cache b/.phpunit.result.cache
new file mode 100644
index 0000000..7c54cf4
--- /dev/null
+++ b/.phpunit.result.cache
@@ -0,0 +1 @@
+{"version":1,"defects":{"MetaModels\\Test\\Filter\\FilterUrlBuilderTest::testGenerate with data set \"test stay on page\"":3,"MetaModels\\Test\\Filter\\FilterUrlBuilderTest::testGeneratesNonStandardPorts":3,"MetaModels\\Test\\Information\\MetaModelCollectionTest::testInstantiation":5,"MetaModels\\Test\\MetaModelsTest::testRetrieveSystemColumns":5,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testPlain":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testTableName":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testInsertTags":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testSecureInsertTags":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestGetWithEmptyParameter":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestGetWithEmptyParameterAndInsertTag":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestGetParameter":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestPostParameter":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestCookie":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testValueFromSession":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testValueFromSessionAggregated":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testValueFromSessionEmpty":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testValueFromFilterUrl":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestParameterAggregated":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestParameterAggregatedSet":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testWithEmptyStringValue":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testWithZeroValue":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testWithNullValue":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testWithNullValueAndDefault":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #0":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #1":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #2":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #3":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #4":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #5":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #6":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #7":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #8":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #9":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #10":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #11":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #12":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495NoteDmolineus1448085843":4,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495NoteDmolineus1448085843WithParameters":4,"MetaModels\\AttributeTextBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"required tables not exist\"":4,"MetaModels\\AttributeTextBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"attribute select not configured\"":4,"MetaModels\\AttributeTextBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"attribute select is configured\"":4,"MetaModels\\AttributeTextBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"columns migrated\"":4,"MetaModels\\AttributeTextBundle\\Test\\Schema\\DoctrineSchemaGeneratorTest::testGenerate":5,"MetaModels\\AttributeAliasBundle\\Test\\DependencyInjection\\MetaModelsAttributeAliasExtensionTest::testRegistersServices":4,"MetaModels\\AttributeAliasBundle\\Test\\DependencyInjection\\MetaModelsAttributeAliasExtensionTest::testEventListenersAreRegistered":4,"MetaModels\\AttributeAliasBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"required tables not exist\"":3,"MetaModels\\AttributeAliasBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"attribute select not configured\"":3,"MetaModels\\AttributeAliasBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"attribute select is configured\"":3,"MetaModels\\AttributeAliasBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"columns migrated\"":3,"MetaModels\\AttributeAliasBundle\\Test\\Schema\\DoctrineSchemaGeneratorTest::testGenerate":5},"times":{"MetaModels\\Test\\Attribute\\AttributeFactoryTest::testCreateFactoryFiresEvent":0.002,"MetaModels\\Test\\Attribute\\AttributeFactoryTest::testAddTypeFactoryAndGetTypeFactory":0,"MetaModels\\Test\\Attribute\\AttributeFactoryTest::testAttributeTypeMatchesFlags":0,"MetaModels\\Test\\Attribute\\AttributeFactoryTest::testGetTypeNames":0,"MetaModels\\Test\\Attribute\\AttributeFactoryTest::testGetTypeIcon":0,"MetaModels\\Test\\Attribute\\BaseSimpleTest::testInstantiation":0.005,"MetaModels\\Test\\Attribute\\BaseTest::testCreation":0.001,"MetaModels\\Test\\Attribute\\BaseTest::testDoesNotAcceptArbitraryConfiguration":0,"MetaModels\\Test\\Attribute\\BaseTest::testGetFieldDefinition":0,"MetaModels\\Test\\CoreBundle\\DependencyInjection\\CompilerPass\\CollectDoctrineSchemaGeneratorsPassTest::testProcess":0.004,"MetaModels\\Test\\CoreBundle\\DependencyInjection\\CompilerPass\\CollectSchemaGeneratorsPassTest::testProcess":0,"MetaModels\\Test\\CoreBundle\\DependencyInjection\\CompilerPass\\CollectSchemaManagersPassTest::testProcess":0,"MetaModels\\Test\\CoreBundle\\Formatter\\SelectAttributeOptionLabelFormatterTest::testFormatLabel":0.001,"MetaModels\\Test\\Data\\FilterBuilderSqlTest::testBuilderIsInitiallyEmpty":0,"MetaModels\\Test\\Data\\FilterBuilderSqlTest::testBuild with data set \"equality compare\"":0.001,"MetaModels\\Test\\Data\\FilterBuilderSqlTest::testBuild with data set \"greater than compare\"":0,"MetaModels\\Test\\Data\\FilterBuilderSqlTest::testBuild with data set \"less than compare\"":0,"MetaModels\\Test\\Data\\FilterBuilderSqlTest::testBuild with data set \"IN list\"":0,"MetaModels\\Test\\Data\\FilterBuilderSqlTest::testBuild with data set \"LIKE\"":0,"MetaModels\\Test\\Data\\FilterBuilderSqlTest::testBuildMultiple":0,"MetaModels\\Test\\Data\\FilterBuilderSqlTest::testAddSubProcedure":0,"MetaModels\\Test\\Data\\FilterBuilderTest::testBuildEmpty":0.002,"MetaModels\\Test\\Data\\FilterBuilderTest::testBuildSqlOnly":0,"MetaModels\\Test\\Data\\FilterBuilderTest::testIssue700":0,"MetaModels\\Test\\FactoryTest::testCreateMetaModelFiresEvent":0,"MetaModels\\Test\\FactoryTest::testGetMetaModelNameFromId":0,"MetaModels\\Test\\Filter\\FilterUrlBuilderTest::testGenerate with data set \"test generating\"":0.004,"MetaModels\\Test\\Filter\\FilterUrlBuilderTest::testGenerate with data set \"test stay on page\"":0.001,"MetaModels\\Test\\Filter\\FilterUrlBuilderTest::testGeneratesNonStandardPorts":0.005,"MetaModels\\Test\\Filter\\FilterUrlTest::testInitializesValues":0,"MetaModels\\Test\\Filter\\Rules\\Comparing\\GreaterThanTest::testGreaterThan":0,"MetaModels\\Test\\Filter\\Rules\\Comparing\\GreaterThanTest::testGreaterThanInclusive":0,"MetaModels\\Test\\Filter\\Rules\\Comparing\\LessThanTest::testGreaterThan":0,"MetaModels\\Test\\Filter\\Rules\\Comparing\\LessThanTest::testGreaterThanInclusive":0,"MetaModels\\Test\\Filter\\Rules\\Comparing\\NotEqualTest::testGreaterThan":0,"MetaModels\\Test\\Filter\\Rules\\Comparing\\NotEqualTest::testGreaterThanInclusive":0,"MetaModels\\Test\\Filter\\Rules\\Condition\\ConditionAndTest::testAndCondition with data set #0":0,"MetaModels\\Test\\Filter\\Rules\\Condition\\ConditionAndTest::testAndCondition with data set #1":0,"MetaModels\\Test\\Filter\\Rules\\Condition\\ConditionAndTest::testAndCondition with data set #2":0,"MetaModels\\Test\\Filter\\Rules\\Condition\\ConditionAndTest::testAndCondition with data set #3":0,"MetaModels\\Test\\Filter\\Rules\\Condition\\ConditionAndTest::testAndCondition with data set #4":0,"MetaModels\\Test\\Filter\\Rules\\Condition\\ConditionOrTest::testOrCondition with data set #0":0,"MetaModels\\Test\\Filter\\Rules\\Condition\\ConditionOrTest::testOrCondition with data set #1":0,"MetaModels\\Test\\Filter\\Rules\\Condition\\ConditionOrTest::testOrCondition with data set #2":0,"MetaModels\\Test\\Filter\\Rules\\Condition\\ConditionOrTest::testOrCondition with data set #3":0,"MetaModels\\Test\\Filter\\Rules\\Condition\\ConditionOrTest::testOrCondition with data set #4":0,"MetaModels\\Test\\Filter\\Rules\\SearchAttributeTest::testSearchAttribute":0,"MetaModels\\Test\\Filter\\Rules\\SearchAttributeTest::testSearchTranslatedAttribute":0.001,"MetaModels\\Test\\Filter\\Rules\\SearchAttributeTest::testSearchTranslatedAttributeWithLanguageOverride":0,"MetaModels\\Test\\Filter\\Rules\\SimpleQueryTest::testExecution":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testPlain":0.007,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testTableName":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testInsertTags":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testSecureInsertTags":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestGetWithEmptyParameter":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestGetWithEmptyParameterAndInsertTag":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestGetParameter":0.001,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestPostParameter":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestCookie":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testValueFromSession":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testValueFromSessionAggregated":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testValueFromSessionEmpty":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testValueFromFilterUrl":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestParameterAggregated":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testRequestParameterAggregatedSet":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testWithEmptyStringValue":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testWithZeroValue":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testWithNullValue":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testWithNullValueAndDefault":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #0":0.001,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #1":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #2":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #3":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #4":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #5":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #6":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #7":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #8":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #9":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #10":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #11":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495IfLang with data set #12":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495NoteDmolineus1448085843":0,"MetaModels\\Test\\Filter\\Setting\\CustomSqlTest::testIssue1495NoteDmolineus1448085843WithParameters":0,"MetaModels\\Test\\Filter\\Setting\\SimpleTest::testAddUrlParameter":0.001,"MetaModels\\Test\\Filter\\Setting\\SimpleTest::testBuildFilterUrl":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #0":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #1":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #2":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #3":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #4":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #5":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #6":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #7":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #8":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #9":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #10":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #11":0,"MetaModels\\Test\\Helper\\EmptyTestTest::testEmptyValue with data set #12":0,"MetaModels\\Test\\Helper\\TableManipulatorTest::testInstantiation":0,"MetaModels\\Test\\Helper\\TableManipulatorTest::testReservedWords":0,"MetaModels\\Test\\Helper\\ToolBoxFileTest::testConvertUuidsOrPathsToMetaModelsEmpty":0.001,"MetaModels\\Test\\Information\\AttributeInformationTest::testFunctionality":0,"MetaModels\\Test\\Information\\ConfigurationTraitTest::testFunctionality":0,"MetaModels\\Test\\Information\\ConfigurationTraitTest::testGetConfigurationValueThrowsForUnknown":0,"MetaModels\\Test\\Information\\MetaModelCollectionTest::testInstantiation":0,"MetaModels\\Test\\Information\\MetaModelCollectionTest::testAddMetaModel":0,"MetaModels\\Test\\Information\\MetaModelCollectionTest::testAddThrowsForRegisteredName":0,"MetaModels\\Test\\Information\\MetaModelCollectionTest::testGetThrowsForUnknown":0,"MetaModels\\Test\\Information\\MetaModelInformationTest::testFunctionality":0,"MetaModels\\Test\\Information\\MetaModelInformationTest::testAddAttribute":0,"MetaModels\\Test\\Information\\MetaModelInformationTest::testAddThrowsForRegisteredName":0,"MetaModels\\Test\\Information\\MetaModelInformationTest::testGetAttributeThrowsForUnknown":0,"MetaModels\\Test\\Information\\MetaModelInformationTest::testGetAttributesOfType":0,"MetaModels\\Test\\InformationProvider\\MetaModelInformationCollectorTest::testInstantiation":0,"MetaModels\\Test\\InformationProvider\\MetaModelInformationCollectorTest::testCollectsNamesFromAllProviders":0,"MetaModels\\Test\\InformationProvider\\MetaModelInformationCollectorTest::testCollectsInformationFromAllProviders":0,"MetaModels\\Test\\InformationProvider\\MetaModelInformationCollectorTest::testGetCollection":0,"MetaModels\\Test\\ItemListTest::testGetOutputFormat":0.002,"MetaModels\\Test\\MetaModelsTest::testCreation":0,"MetaModels\\Test\\MetaModelsTest::testBuildDatabaseParameterList":0,"MetaModels\\Test\\MetaModelsTest::testRetrieveSystemColumns":0.003,"MetaModels\\Test\\MetaModelsTest::testGetIdsFromFilterSortedById":0,"MetaModels\\Test\\MetaModelsTest::testGetIdsFromFilterSortedByPid":0,"MetaModels\\Test\\MetaModelsTest::testGetIdsFromFilterSortedByPidWithCache":0,"MetaModels\\Test\\MetaModelsTest::testGetCountForEmptyList":0,"MetaModels\\Test\\MetaModelsTest::testGetCountForNonEmptyList":0,"MetaModels\\Test\\Render\\TemplateTest::testInstantiation":0.001,"MetaModels\\Test\\Render\\TemplateTest::testCacheFoundTemplatePaths":0,"MetaModels\\Test\\Render\\TemplateTest::testCacheForEachFormat":0,"MetaModels\\Test\\Render\\TemplateTest::testCacheOverMultipleInstances":0,"MetaModels\\Test\\Render\\TemplateTest::testCacheForEachCustomPathInstances":0,"MetaModels\\Test\\Render\\TemplateTest::testCacheNotFoundTemplatePaths":0,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaGeneratorTest::testInstantiation":0,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaGeneratorTest::testGenerateAddsSchemaInformationIfNotFound":0.001,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaGeneratorTest::testGenerate":0,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaInformationTest::testInstantiation":0,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaInformationTest::testAddPreProcessors":0,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaInformationTest::testAddPostProcessors":0,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaManagerTest::testInstantiation":0,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaManagerTest::testPreprocess":0.001,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaManagerTest::testPreprocessSkipsIfNothingToDo":0,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaManagerTest::testProcess":0,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaManagerTest::testProcessSkipsIfNothingToDo":0,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaManagerTest::testPostProcess":0,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaManagerTest::testPostprocessSkipsIfNothingToDo":0,"MetaModels\\Test\\Schema\\Doctrine\\DoctrineSchemaManagerTest::testValidate":0,"MetaModels\\Test\\Schema\\Doctrine\\LegacySchemaGeneratorTest::testInstantiation":0,"MetaModels\\Test\\Schema\\Doctrine\\LegacySchemaGeneratorTest::testGenerateAddsSchemaInformationIfNotFound":0,"MetaModels\\Test\\Schema\\Doctrine\\LegacySchemaGeneratorTest::testGenerate":0.002,"MetaModels\\Test\\Schema\\Doctrine\\LegacySchemaInformationTest::testInstantiation":0,"MetaModels\\Test\\Schema\\Doctrine\\LegacySchemaInformationTest::testAddAttributes":0,"MetaModels\\Test\\Schema\\Doctrine\\LegacySchemaManagerTest::testInstantiation":0,"MetaModels\\Test\\Schema\\Doctrine\\LegacySchemaManagerTest::testIgnoresIfNotFound":0,"MetaModels\\Test\\Schema\\Doctrine\\LegacySchemaManagerTest::testProcess":0,"MetaModels\\Test\\Schema\\Doctrine\\LegacySchemaManagerTest::testValidate":0,"MetaModels\\Test\\Schema\\SchemaGeneratorTest::testInstantiation":0,"MetaModels\\Test\\Schema\\SchemaGeneratorTest::testGenerateSchema":0,"MetaModels\\Test\\Schema\\SchemaInformationTest::testInstantiation":0,"MetaModels\\Test\\Schema\\SchemaInformationTest::testAdd":0,"MetaModels\\Test\\Schema\\SchemaInformationTest::testAddThrowsForAlreadyRegistered":0,"MetaModels\\Test\\Schema\\SchemaInformationTest::testGetThrowsForUnregistered":0,"MetaModels\\Test\\Schema\\SchemaInformationTest::testHasForUnknown":0,"MetaModels\\Test\\Schema\\SchemaInformationTest::testGetRegisteredNames":0,"MetaModels\\Test\\Schema\\SchemaManagerTest::testInstantiation":0,"MetaModels\\Test\\Schema\\SchemaManagerTest::testPreprocess":0,"MetaModels\\Test\\Schema\\SchemaManagerTest::testProcess":0,"MetaModels\\Test\\Schema\\SchemaManagerTest::testPostcess":0,"MetaModels\\Test\\Schema\\SchemaManagerTest::testValidate":0,"MetaModels\\AttributeTextBundle\\Test\\Attribute\\TextAttributeTypeFactoryTest::testCreateAttributeInstance":0.007,"MetaModels\\AttributeTextBundle\\Test\\Attribute\\TextTest::testInstantiation":0,"MetaModels\\AttributeTextBundle\\Test\\DeprecatedAutoloaderTest::testDeprecatedClassesAreAliases with data set #0":0,"MetaModels\\AttributeTextBundle\\Test\\DeprecatedAutoloaderTest::testDeprecatedClassesAreAliases with data set #1":0,"MetaModels\\AttributeTextBundle\\Test\\Migration\\AllowNullMigrationTest::testName":0.002,"MetaModels\\AttributeTextBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"required tables not exist\"":0.001,"MetaModels\\AttributeTextBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"attribute select not configured\"":0,"MetaModels\\AttributeTextBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"attribute select is configured\"":0,"MetaModels\\AttributeTextBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"columns migrated\"":0,"MetaModels\\AttributeTextBundle\\Test\\Schema\\DoctrineSchemaGeneratorTest::testGenerate":0.003,"MetaModels\\AttributeAliasBundle\\Test\\Attribute\\AliasAttributeTypeFactoryTest::testCreateSelect":0.007,"MetaModels\\AttributeAliasBundle\\Test\\Attribute\\AliasTest::testInstantiation":0,"MetaModels\\AttributeAliasBundle\\Test\\ContaoManager\\PluginTest::testInstantiation":0,"MetaModels\\AttributeAliasBundle\\Test\\ContaoManager\\PluginTest::testBundleConfig":0,"MetaModels\\AttributeAliasBundle\\Test\\DependencyInjection\\MetaModelsAttributeAliasExtensionTest::testInstantiation":0,"MetaModels\\AttributeAliasBundle\\Test\\DependencyInjection\\MetaModelsAttributeAliasExtensionTest::testRegistersServices":0.005,"MetaModels\\AttributeAliasBundle\\Test\\DependencyInjection\\MetaModelsAttributeAliasExtensionTest::testEventListenersAreRegistered":0,"MetaModels\\AttributeAliasBundle\\Test\\DeprecatedAutoloaderTest::testDeprecatedClassesAreAliased with data set #0":0,"MetaModels\\AttributeAliasBundle\\Test\\DeprecatedAutoloaderTest::testDeprecatedClassesAreAliased with data set #1":0,"MetaModels\\AttributeAliasBundle\\Test\\Migration\\AllowNullMigrationTest::testName":0.003,"MetaModels\\AttributeAliasBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"required tables not exist\"":0.008,"MetaModels\\AttributeAliasBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"attribute select not configured\"":0.003,"MetaModels\\AttributeAliasBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"attribute select is configured\"":0.001,"MetaModels\\AttributeAliasBundle\\Test\\Migration\\AllowNullMigrationTest::testRun with data set \"columns migrated\"":0,"MetaModels\\AttributeAliasBundle\\Test\\Schema\\DoctrineSchemaGeneratorTest::testGenerate":0.003}}
\ No newline at end of file
diff --git a/composer.json b/composer.json
index 5fc5bcd..acbe53e 100644
--- a/composer.json
+++ b/composer.json
@@ -1,7 +1,8 @@
{
"name": "contao-community-alliance/contao-multicolumnwizard-frontend-bundle",
- "type": "contao-bundle",
"description": "Frontend support for the MultiColumnWizard",
+ "license": "LGPL-3.0-or-later",
+ "type": "contao-bundle",
"keywords": [
"contao",
"multicolumnwizard",
@@ -11,8 +12,6 @@
"metamodels",
"cca"
],
- "homepage": "https://c-c-a.org/",
- "license": "LGPL-3.0-or-later",
"authors": [
{
"name": "Richard Henkenjohann",
@@ -20,18 +19,19 @@
"role": "Developer"
}
],
+ "homepage": "https://c-c-a.org/",
"support": {
"issues": "https://github.com/contao-community-alliance/contao-multicolumnwizard-frontend/issues",
"source": "https://github.com/contao-community-alliance/contao-multicolumnwizard-frontend"
},
"require": {
- "php": "^7.4 || ^8.0",
- "contao/core-bundle": "^4.13.0, <5.0",
+ "php": "^8.1",
+ "contao/core-bundle": "^4.13.0 <5.0",
"menatwork/contao-multicolumnwizard-bundle": "^3.4.7"
},
"require-dev": {
- "phpcq/all-tasks": "~1.2",
- "contao/manager-bundle": "^4.13.0, <5.0"
+ "contao/manager-bundle": "^4.13.0 <5.0",
+ "phpcq/runner-bootstrap": "^1.0@dev"
},
"autoload": {
"psr-4": {
@@ -43,10 +43,17 @@
"ContaoCommunityAlliance\\MultiColumnWizardFrontendBundle\\Test\\": "tests/"
}
},
+ "config": {
+ "allow-plugins": {
+ "contao-components/installer": true,
+ "contao/manager-plugin": true,
+ "php-http/discovery": true
+ }
+ },
"extra": {
- "contao-manager-plugin": "ContaoCommunityAlliance\\MultiColumnWizardFrontendBundle\\ContaoManager\\Plugin",
"branch-alias": {
"dev-feature/2.3.0": "2.3.x-dev"
- }
+ },
+ "contao-manager-plugin": "ContaoCommunityAlliance\\MultiColumnWizardFrontendBundle\\ContaoManager\\Plugin"
}
}
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
new file mode 100644
index 0000000..62a0d62
--- /dev/null
+++ b/phpunit.xml.dist
@@ -0,0 +1,25 @@
+
+
+
+
+
+ ./tests
+
+
+
+
+ ./src
+
+
+
diff --git a/psalm.xml b/psalm.xml
new file mode 100644
index 0000000..aa1a5c1
--- /dev/null
+++ b/psalm.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Contao/Widget/FormMultiColumnWizard.php b/src/Contao/Widget/FormMultiColumnWizard.php
index 4737664..fd99205 100644
--- a/src/Contao/Widget/FormMultiColumnWizard.php
+++ b/src/Contao/Widget/FormMultiColumnWizard.php
@@ -3,7 +3,7 @@
/**
* This file is part of contao-community-alliance/contao-multicolumnwizard-frontend-bundle.
*
- * (c) 2022 Contao Community Alliance.
+ * (c) 2020-2024 Contao Community Alliance.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -14,7 +14,7 @@
* @author Richard Henkenjohann
* @author Stefan Heimes
* @author Ingolf Steinhardt
- * @copyright 2022 Contao Community Alliance.
+ * @copyright 2020-2024 Contao Community Alliance.
* @license https://github.com/contao-community-alliance/contao-multicolumnwizard-frontend-bundle/blob/master/LICENSE
* LGPL-3.0-or-later
* @filesource
@@ -36,6 +36,8 @@ class FormMultiColumnWizard extends MultiColumnWizard
* @param array|null $arrAttributes
*
* @noinspection PhpMissingParentConstructorInspection
+ *
+ * @SuppressWarnings(PHPMD.Superglobals)
*/
public function __construct($arrAttributes = null)
{
@@ -44,10 +46,11 @@ public function __construct($arrAttributes = null)
$this->strPrefix = 'widget widget-mcw';
$this->strTemplate = 'form_mcw';
+ $path = 'bundles/multicolumnwizardfrontend/js/';
$GLOBALS['TL_BODY']['mcw_sortable_js'] =
- '';
+ '';
$GLOBALS['TL_BODY']['mcw_fe_js'] =
- '';
+ '';
}
/**
@@ -65,6 +68,8 @@ protected function convertToResponse($str)
/**
* @inheritdoc
+ *
+ * @SuppressWarnings(PHPMD.LongVariable)
*/
public function generate($overwriteRowCurrentRow = null, $onlyRows = false)
{
@@ -73,7 +78,7 @@ public function generate($overwriteRowCurrentRow = null, $onlyRows = false)
$name = Input::post('name');
$maxRowCount = Input::post('maxRowId');
- if ('mcwCreateNewRow' == $action && $name == $this->strName) {
+ if ('mcwCreateNewRow' === $action && $name === $this->strName) {
// Rewrite the values.
$newRowCount = ($maxRowCount + 1);
foreach ($this->columnFields as $strKey => $arrField) {
@@ -94,7 +99,7 @@ public function generate($overwriteRowCurrentRow = null, $onlyRows = false)
protected function initializeWidget(&$arrField, $intRow, $strKey, $varValue)
{
// If null replace it with an empty string.
- if ($varValue == '' && isset($arrField['default']) && $arrField['default'] == null) {
+ if ($varValue === '' && isset($arrField['default']) && $arrField['default'] === null) {
$arrField['default'] = '';
}
@@ -119,12 +124,11 @@ protected function generateScriptBlock($strId, $maxCount, $minCount)
});
SCRIPT;
- return sprintf(
+ return \sprintf(
$script,
- json_encode($strId),
- intval($maxCount),
- intval($minCount)
+ \json_encode($strId) ?? '',
+ (int) $maxCount,
+ (int) $minCount
);
}
-
}
diff --git a/src/MultiColumnWizardFrontendBundle.php b/src/MultiColumnWizardFrontendBundle.php
index 5c7b23f..489456c 100644
--- a/src/MultiColumnWizardFrontendBundle.php
+++ b/src/MultiColumnWizardFrontendBundle.php
@@ -3,7 +3,7 @@
/**
* This file is part of contao-community-alliance/contao-multicolumnwizard-frontend-bundle.
*
- * (c) 2020 Contao Community Alliance.
+ * (c) 2020-2024 Contao Community Alliance.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -14,7 +14,7 @@
* @author Richard Henkenjohann
* @author Stefan Heimes
* @author Ingolf Steinhardt
- * @copyright 2020 Contao Community Alliance.
+ * @copyright 2020-2024 Contao Community Alliance.
* @license https://github.com/contao-community-alliance/contao-multicolumnwizard-frontend-bundle/blob/master/LICENSE
* LGPL-3.0-or-later
* @filesource
@@ -29,8 +29,8 @@
class MultiColumnWizardFrontendBundle extends Bundle
{
- const SCOPE_BACKEND = 'backend';
- const SCOPE_FRONTEND = 'frontend';
+ public const SCOPE_BACKEND = 'backend';
+ public const SCOPE_FRONTEND = 'frontend';
/**
* {@inheritdoc}