diff --git a/.Build/composer.json b/.Build/composer.json
new file mode 100644
index 0000000..02502bf
--- /dev/null
+++ b/.Build/composer.json
@@ -0,0 +1,48 @@
+{
+ "name": "derhansen/plain-faq_build",
+ "description": "composer.json for builds",
+ "repositories": [
+ {
+ "type": "path",
+ "url": "../"
+ }
+ ],
+ "require": {
+ "derhansen/plain-faq": "@dev",
+ "typo3/cms-core": "^12.4",
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "typo3/cms-composer-installers": "^5.0",
+ "typo3/cms-backend": "^12.4",
+ "typo3/cms-frontend": "^12.4",
+ "typo3/cms-extbase": "^12.4",
+ "typo3/cms-felogin": "^12.4",
+ "typo3/cms-fluid-styled-content": "^12.4",
+ "typo3/cms-fluid": "^12.4",
+ "typo3/cms-tstemplate": "^12.4",
+ "typo3/cms-install": "^12.4",
+ "typo3/cms-extensionmanager": "^12.4",
+ "typo3/testing-framework": "^8.0",
+ "friendsofphp/php-cs-fixer": "^3.12.0",
+ "saschaegerer/phpstan-typo3": "^1.8.3",
+ "phpstan/extension-installer": "^1.1"
+ },
+ "config": {
+ "allow-plugins": {
+ "typo3/class-alias-loader": true,
+ "typo3/cms-composer-installers": true,
+ "phpstan/extension-installer": true
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Derhansen\\PlainFaq\\": "Classes"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Derhansen\\PlainFaq\\Tests\\": "Tests"
+ }
+ }
+}
diff --git a/.Build/php-cs-fixer/.php-cs-fixer.php b/.Build/php-cs-fixer/.php-cs-fixer.php
new file mode 100644
index 0000000..e157a2d
--- /dev/null
+++ b/.Build/php-cs-fixer/.php-cs-fixer.php
@@ -0,0 +1,70 @@
+
+
+For the full copyright and license information, please view the LICENSE
+file that was distributed with this source code.
+EOF;
+
+return (new \PhpCsFixer\Config())
+ ->setRiskyAllowed(true)
+ ->setRules([
+ '@DoctrineAnnotation' => true,
+ '@PER' => true,
+ 'array_syntax' => ['syntax' => 'short'],
+ 'cast_spaces' => ['space' => 'none'],
+ 'concat_space' => ['spacing' => 'one'],
+ 'declare_equal_normalize' => ['space' => 'none'],
+ 'declare_parentheses' => true,
+ 'dir_constant' => true,
+ 'function_to_constant' => ['functions' => ['get_called_class', 'get_class', 'get_class_this', 'php_sapi_name', 'phpversion', 'pi']],
+ 'list_syntax' => ['syntax' => 'short'],
+ 'type_declaration_spaces' => true,
+ 'modernize_strpos' => true,
+ 'modernize_types_casting' => true,
+ 'native_function_casing' => true,
+ 'no_alias_functions' => true,
+ 'no_blank_lines_after_phpdoc' => true,
+ 'no_empty_phpdoc' => true,
+ 'no_empty_statement' => true,
+ 'no_extra_blank_lines' => true,
+ 'no_leading_namespace_whitespace' => true,
+ 'no_null_property_initialization' => true,
+ 'no_short_bool_cast' => true,
+ 'no_singleline_whitespace_before_semicolons' => true,
+ 'no_superfluous_elseif' => true,
+ 'no_trailing_comma_in_singleline' => true,
+ 'no_unneeded_control_parentheses' => true,
+ 'no_unused_imports' => true,
+ 'no_useless_else' => true,
+ 'no_useless_nullsafe_operator' => true,
+ 'ordered_imports' => ['imports_order' => ['class', 'function', 'const'], 'sort_algorithm' => 'alpha'],
+ 'php_unit_construct' => ['assertions' => ['assertEquals', 'assertSame', 'assertNotEquals', 'assertNotSame']],
+ 'php_unit_mock_short_will_return' => true,
+ 'php_unit_test_case_static_method_calls' => ['call_type' => 'self'],
+ 'phpdoc_no_access' => true,
+ 'phpdoc_no_empty_return' => true,
+ 'phpdoc_no_package' => true,
+ 'phpdoc_scalar' => true,
+ 'phpdoc_trim' => true,
+ 'phpdoc_types' => true,
+ 'phpdoc_types_order' => ['null_adjustment' => 'always_last', 'sort_algorithm' => 'none'],
+ 'return_type_declaration' => ['space_before' => 'none'],
+ 'single_quote' => true,
+ 'single_space_around_construct' => true,
+ 'single_line_comment_style' => ['comment_types' => ['hash']],
+ 'trailing_comma_in_multiline' => ['elements' => ['arrays']],
+ 'single_line_empty_body' => false,
+ 'whitespace_after_comma_in_array' => ['ensure_single_space' => true],
+ 'yoda_style' => ['equal' => false, 'identical' => false, 'less_and_greater' => false],
+ ])
+ ->setFinder(
+ PhpCsFixer\Finder::create()
+ ->in(dirname(__DIR__ . '/../../../'))
+ ->exclude(['.Build', 'Documentation', 'Resources'])
+ ->notName('ext_emconf.php')
+ );
diff --git a/.Build/phpstan/phpstan-baseline.neon b/.Build/phpstan/phpstan-baseline.neon
new file mode 100644
index 0000000..e69de29
diff --git a/.Build/phpstan/phpstan.neon b/.Build/phpstan/phpstan.neon
new file mode 100644
index 0000000..68d0201
--- /dev/null
+++ b/.Build/phpstan/phpstan.neon
@@ -0,0 +1,12 @@
+includes:
+ - phpstan-baseline.neon
+
+parameters:
+ level: 5
+ paths:
+ - ../../Classes/
+ - ../../Configuration/
+
+ checkMissingIterableValueType: false
+ reportUnmatchedIgnoredErrors: true
+ checkGenericClassInNonGenericObjectType: false
diff --git a/.Build/phpunit/FunctionalTests.xml b/.Build/phpunit/FunctionalTests.xml
new file mode 100644
index 0000000..56618c7
--- /dev/null
+++ b/.Build/phpunit/FunctionalTests.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+ ../../Tests/Functional/
+
+
+
+
diff --git a/.Build/phpunit/UnitTests.xml b/.Build/phpunit/UnitTests.xml
new file mode 100644
index 0000000..bc59252
--- /dev/null
+++ b/.Build/phpunit/UnitTests.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+ ../../Tests/Unit/
+
+
+
+
diff --git a/.gitignore b/.gitignore
index 1660d24..cdd625f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,8 @@
-.idea/
-.DS_Store
-.Build/
+# PHP Storm, other java IDE's
+.idea
+.Build/public
+.Build/vendor
+.Build/var/
composer.lock
.php-cs-fixer.cache
-/var/
-/Tests/Build/.phpunit.result.cache
-/Tests/Build/.phpunit.cache
+.phpunit.cache