Skip to content

Commit b06a5d1

Browse files
authored
Merge pull request #85 from andreaswolf/25-typoscript-support
Add TypoScript support
2 parents 1fa11f5 + a4006bc commit b06a5d1

33 files changed

+896
-14
lines changed

composer.json

+6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"composer-plugin-api": "^2.0",
1717
"ergebnis/json-printer": "^3.5",
1818
"eta-orionis/composer-json-manipulator": "^1.0",
19+
"helmich/typo3-typoscript-parser": "^2.6",
1920
"nette/utils": "^4.0",
2021
"phpstan/phpstan": "^1.10.9",
2122
"sebastian/diff": "^5.0",
@@ -46,6 +47,7 @@
4647
"a9f/fractor-extension-installer": "self.version",
4748
"a9f/fractor-fluid": "self.version",
4849
"a9f/fractor-phpstan-rules": "self.version",
50+
"a9f/fractor-typoscript": "self.version",
4951
"a9f/fractor-xml": "self.version",
5052
"a9f/fractor-yaml": "self.version",
5153
"a9f/typo3-fractor": "self.version"
@@ -62,6 +64,7 @@
6264
"a9f\\FractorFluid\\": "packages/fractor-fluid/src/",
6365
"a9f\\FractorMonorepo\\": "src",
6466
"a9f\\FractorPhpStanRules\\": "packages/fractor-phpstan-rules/src/",
67+
"a9f\\FractorTypoScript\\": "packages/fractor-typoscript/src/",
6568
"a9f\\FractorXml\\": "packages/fractor-xml/src/",
6669
"a9f\\FractorYaml\\": "packages/fractor-yaml/src/",
6770
"a9f\\Fractor\\": "packages/fractor/src/",
@@ -81,6 +84,7 @@
8184
"a9f\\FractorDocGenerator\\Tests\\": "packages/fractor-doc-generator/tests/",
8285
"a9f\\FractorFluid\\Tests\\": "packages/fractor-fluid/tests/",
8386
"a9f\\FractorPhpStanRules\\Tests\\": "packages/fractor-phpstan-rules/tests/",
87+
"a9f\\FractorTypoScript\\Tests\\": "packages/fractor-typoscript/tests/",
8488
"a9f\\FractorXml\\Tests\\": "packages/fractor-xml/tests/",
8589
"a9f\\FractorYaml\\Tests\\": "packages/fractor-yaml/tests/",
8690
"a9f\\Fractor\\Tests\\": "packages/fractor/tests/",
@@ -139,6 +143,7 @@
139143
"@composer normalize --dry-run packages/fractor-composer-json/composer.json",
140144
"@composer normalize --dry-run packages/fractor-doc-generator/composer.json",
141145
"@composer normalize --dry-run packages/fractor-fluid/composer.json",
146+
"@composer normalize --dry-run packages/fractor-typoscript/composer.json",
142147
"@composer normalize --dry-run packages/fractor-xml/composer.json",
143148
"@composer normalize --dry-run packages/fractor-yaml/composer.json",
144149
"@composer normalize --dry-run packages/typo3-fractor/composer.json"
@@ -151,6 +156,7 @@
151156
"@composer normalize --no-check-lock packages/fractor-composer-json/composer.json",
152157
"@composer normalize --no-check-lock packages/fractor-doc-generator/composer.json",
153158
"@composer normalize --no-check-lock packages/fractor-fluid/composer.json",
159+
"@composer normalize --no-check-lock packages/fractor-typoscript/composer.json",
154160
"@composer normalize --no-check-lock packages/fractor-xml/composer.json",
155161
"@composer normalize --no-check-lock packages/fractor-yaml/composer.json",
156162
"@composer normalize --no-check-lock packages/typo3-fractor/composer.json"

e2e/.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/composer.lock
22
/vendor/
33

4-
/*/output/
4+
/*/output/
5+
/*/output.txt

e2e/run-test.sh

+39-12
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,42 @@ cd $TESTS_BASE_DIR
1010
rm -r composer.lock vendor || true
1111
composer install
1212

13-
TEST_DIR=typo3-yaml
14-
15-
cd $TEST_DIR
16-
17-
[[ -d ./output/ ]] && rm -rf ./output/
18-
cp -r fixtures/ output/
19-
20-
cd $TESTS_BASE_DIR
21-
./vendor/bin/fractor process --quiet -c $TESTS_BASE_DIR/$TEST_DIR/fractor.php
22-
23-
# TODO remove -b once we keep the output format when re-writing the file
24-
diff -rub $TEST_DIR/expected-output/ $TEST_DIR/output/
13+
for TEST_DIR in typo3-yaml typo3-typoscript
14+
do
15+
set +x
16+
echo
17+
echo "############################################################"
18+
echo "#"
19+
echo "# Running test in $TEST_DIR/"
20+
echo "#"
21+
echo "############################################################"
22+
echo
23+
set -x
24+
25+
# remove output from a previous run, if any
26+
[[ -f $TEST_DIR/output.txt ]] && rm $TEST_DIR/output.txt
27+
[[ -d $TEST_DIR/result/ ]] && rm -rf $TEST_DIR/result/
28+
# copy over our fixture to the path that Fractor will run in
29+
cp -r $TEST_DIR/fixtures/ $TEST_DIR/result/
30+
31+
./vendor/bin/fractor process -c $TESTS_BASE_DIR/$TEST_DIR/fractor.php > $TEST_DIR/output.txt
32+
33+
set +x
34+
echo
35+
echo "############################################################"
36+
echo "# Comparing Fractor result against expected result"
37+
echo
38+
set -x
39+
40+
# TODO remove -b once we keep the output format when re-writing the file
41+
diff -rub --color=auto $TEST_DIR/expected-result/ $TEST_DIR/result/
42+
43+
set +x
44+
echo
45+
echo "############################################################"
46+
echo "# Comparing Fractor CLI output against expected output"
47+
echo
48+
set -x
49+
50+
diff -u --color=auto $TEST_DIR/expected-output.txt $TEST_DIR/output.txt
51+
done
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---------- begin diff ----------
2+
@@ @@
3+
page.10.value = Link to page 23
4+
page.10.typolink {
5+
parameter = 23
6+
- useCacheHash = 1
7+
}
8+
9+
page.20 = TEXT
10+
page.20.value = Link to page 42
11+
page.20.typolink.parameter = 42
12+
-page.20.typolink.useCacheHash = 1
13+
----------- end diff -----------
14+
15+
Applied rules:
16+
RemoveUseCacheHashFromTypolinkTypoScriptFractor (https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/10.0/Deprecation-88406-SetCacheHashnoCacheHashOptionsInViewHelpersAndUriBuilder.html)
17+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
page = PAGE
2+
page.10 = TEXT
3+
page.10.value = Link to page 23
4+
page.10.typolink {
5+
parameter = 23
6+
}
7+
8+
page.20 = TEXT
9+
page.20.value = Link to page 42
10+
page.20.typolink.parameter = 42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
page = PAGE
2+
page.10 = TEXT
3+
page.10.value = Link to page 23
4+
page.10.typolink {
5+
parameter = 23
6+
useCacheHash = 1
7+
}
8+
9+
page.20 = TEXT
10+
page.20.value = Link to page 42
11+
page.20.typolink.parameter = 42
12+
page.20.typolink.useCacheHash = 1

e2e/typo3-typoscript/fractor.php

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use a9f\Fractor\Configuration\FractorConfiguration;
6+
use a9f\Typo3Fractor\Set\Typo3LevelSetList;
7+
8+
return FractorConfiguration::configure()
9+
->withPaths([__DIR__ . '/result/'])
10+
->withSets([Typo3LevelSetList::UP_TO_TYPO3_13]);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
page = PAGE
2+
page.10 = TEXT
3+
page.10.value = Link to page 23
4+
page.10.typolink {
5+
parameter = 23
6+
}
7+
8+
page.20 = TEXT
9+
page.20.value = Link to page 42
10+
page.20.typolink.parameter = 42

e2e/typo3-yaml/expected-output.txt

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
---------- begin diff ----------
2+
@@ @@
3+
-
4+
options:
5+
recipients:
6+
7+
8+
9+
subject: 'Kontaktanfrage von Website'
10+
- recipientAddress: [email protected]
11+
- recipientName: Bar
12+
- replyToAddress: [email protected]
13+
senderAddress: '{email}'
14+
senderName: '{lastName}'
15+
- carbonCopyAddress: [email protected]
16+
- blindCarbonCopyAddress: [email protected]
17+
format: html
18+
attachUploads: true
19+
+ replyToRecipients:
20+
21+
+ carbonCopyRecipients:
22+
23+
+ blindCarbonCopyRecipients:
24+
25+
identifier: EmailToReceiver
26+
-
27+
options:
28+
recipients:
29+
30+
31+
32+
subject: 'Kontaktanfrage von Website'
33+
- recipientAddress: [email protected]
34+
- recipientName: Bar
35+
- replyToAddress: [email protected]
36+
senderAddress: '{email}'
37+
senderName: '{lastName}'
38+
- carbonCopyAddress: [email protected]
39+
- blindCarbonCopyAddress: [email protected]
40+
format: html
41+
attachUploads: true
42+
+ replyToRecipients:
43+
44+
+ carbonCopyRecipients:
45+
46+
+ blindCarbonCopyRecipients:
47+
48+
identifier: EmailToSender
49+
variants:
50+
-
51+
@@ @@
52+
identifier: EmailToReceiver
53+
options:
54+
subject: 'Example Subject'
55+
- recipientAddress: [email protected]
56+
- recipientName: 'Example Recipient'
57+
senderAddress: [email protected]
58+
senderName: '{text-2} {text-1}'
59+
- replyToAddress: '{email}'
60+
+ replyToRecipients:
61+
+ - '{email}'
62+
+ recipients:
63+
+ [email protected]: 'Example Recipient'
64+
----------- end diff -----------
65+
66+
Applied rules:
67+
EmailFinisherYamlFractor (https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/10.0/Feature-80420-AllowMultipleRecipientsInEmailFinisher.html)
68+

e2e/typo3-yaml/fractor.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
use a9f\Typo3Fractor\Set\Typo3LevelSetList;
77

88
return FractorConfiguration::configure()
9-
->withPaths([__DIR__ . '/output/'])
9+
->withPaths([__DIR__ . '/result/'])
1010
->withSets([Typo3LevelSetList::UP_TO_TYPO3_13]);
+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
finishers:
2+
-
3+
options:
4+
recipients:
5+
6+
7+
subject: 'Kontaktanfrage von Website'
8+
senderAddress: '{email}'
9+
senderName: '{lastName}'
10+
format: html
11+
attachUploads: true
12+
replyToRecipients:
13+
14+
carbonCopyRecipients:
15+
16+
blindCarbonCopyRecipients:
17+
18+
identifier: EmailToReceiver
19+
-
20+
options:
21+
recipients:
22+
23+
24+
subject: 'Kontaktanfrage von Website'
25+
senderAddress: '{email}'
26+
senderName: '{lastName}'
27+
format: html
28+
attachUploads: true
29+
replyToRecipients:
30+
31+
carbonCopyRecipients:
32+
33+
blindCarbonCopyRecipients:
34+
35+
identifier: EmailToSender
36+
variants:
37+
-
38+
identifier: variant-1
39+
condition: 'formValues["foo"] == "bar"'
40+
finishers:
41+
-
42+
identifier: EmailToReceiver
43+
options:
44+
subject: 'Example Subject'
45+
senderAddress: [email protected]
46+
senderName: '{text-2} {text-1}'
47+
replyToRecipients:
48+
- '{email}'
49+
recipients:
50+
[email protected]: 'Example Recipient'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
tests export-ignore
2+
rules-tests export-ignore
3+
.gitattributes export-ignore
4+
.gitignore export-ignore
5+
phpunit.xml export-ignore
6+
README.md export-ignore
+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/vendor/
2+
/composer.lock
3+
.phpunit.cache

packages/fractor-typoscript/README.md

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Fractor for TypoScript files
2+
3+
FileProcessor for TYPO3 TypoScript files.
4+
5+
## Installation
6+
7+
```bash
8+
composer require a9f/fractor-typoscript --dev
9+
```
+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
"name": "a9f/fractor-typoscript",
3+
"description": "TypoScript extension for the File Read-Analyse-Change Tool. Allows modifying TYPO3 TypoScript configuration files",
4+
"license": "MIT",
5+
"type": "fractor-extension",
6+
"authors": [
7+
{
8+
"name": "Andreas Wolf",
9+
"email": "[email protected]",
10+
"role": "Lead Developer"
11+
}
12+
],
13+
"require": {
14+
"php": "^8.2",
15+
"a9f/fractor": "^0.2",
16+
"a9f/fractor-extension-installer": "^0.2",
17+
"helmich/typo3-typoscript-parser": "^2.6",
18+
"webmozart/assert": "^1.11"
19+
},
20+
"require-dev": {
21+
"ergebnis/composer-normalize": "^2.42",
22+
"phpstan/phpstan": "^1.10.9",
23+
"phpunit/phpunit": "^10.5",
24+
"rector/rector": "^1.0",
25+
"symplify/easy-coding-standard": "^12.1"
26+
},
27+
"repositories": {
28+
"fractor": {
29+
"type": "path",
30+
"url": "../*"
31+
}
32+
},
33+
"autoload": {
34+
"psr-4": {
35+
"a9f\\FractorTypoScript\\": "src/"
36+
}
37+
},
38+
"autoload-dev": {
39+
"psr-4": {
40+
"a9f\\FractorTypoScript\\Tests\\": "tests/"
41+
}
42+
},
43+
"config": {
44+
"allow-plugins": {
45+
"a9f/fractor-extension-installer": true,
46+
"ergebnis/composer-normalize": true
47+
},
48+
"sort-packages": true
49+
},
50+
"extra": {
51+
"branch-alias": {
52+
"dev-main": "0.2-dev"
53+
}
54+
},
55+
"scripts": {
56+
"analyze:php": "phpstan analyze",
57+
"rector": "rector",
58+
"style:php:check": "ecs",
59+
"style:php:fix": "ecs --fix",
60+
"test:php": "phpunit"
61+
}
62+
}

0 commit comments

Comments
 (0)