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}