├── .github
└── workflows
│ └── ci.yml
├── Classes
└── Hooks
│ └── DatahandlerHook.php
├── Configuration
├── PageTS
│ └── main.tsconfig
├── Sets
│ └── Doktypemapper
│ │ ├── config.yaml
│ │ └── page.tsconfig
└── TCA
│ └── Overrides
│ └── pages.php
├── README.md
├── Resources
├── Private
│ └── Language
│ │ └── locallang_db.xlf
└── Public
│ └── Icons
│ └── Extension.svg
├── composer.json
├── ext_emconf.php
└── ext_localconf.php
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | pull_request:
6 | schedule:
7 | - cron: '56 5 * * *'
8 |
9 | jobs:
10 |
11 | testsuite:
12 | name: all tests
13 | runs-on: ubuntu-latest
14 | strategy:
15 | matrix:
16 | php: [ '7.4', '8.0', '8.1' ]
17 | TYPO3: [ '11' ]
18 | include:
19 | - TYPO3: '12'
20 | php: '8.1'
21 | - TYPO3: '13'
22 | php: '8.3'
23 | steps:
24 | - name: Checkout
25 | uses: actions/checkout@v2
26 |
27 | - name: Install testing system
28 | run: Build/Scripts/runTests.sh -p ${{ matrix.php }} -t ${{ matrix.TYPO3 }} -s composerInstall
29 |
30 | - name: Composer validate
31 | run: Build/Scripts/runTests.sh -p ${{ matrix.php }} -s composerValidate
32 |
33 | - name: Lint PHP
34 | run: Build/Scripts/runTests.sh -p ${{ matrix.php }} -s lint
35 |
36 | - name: CGL
37 | run: Build/Scripts/runTests.sh -p ${{ matrix.php }} -s cgl -n
38 |
39 | - name: phpstan
40 | run: Build/Scripts/runTests.sh -p ${{ matrix.php }} -t ${{ matrix.TYPO3 }} -s phpstan
41 |
42 | - name: Functional Tests with mariadb
43 | if: matrix.TYPO3 != '10'
44 | run: Build/Scripts/runTests.sh -p ${{ matrix.php }} -t ${{ matrix.TYPO3 }} -s functional
45 |
--------------------------------------------------------------------------------
/Classes/Hooks/DatahandlerHook.php:
--------------------------------------------------------------------------------
1 | "
44 | // we can use the previous backend_layout
45 | if ($this->previousBackendLayout !== null) {
46 | $fieldArray['backend_layout'] = $this->previousBackendLayout;
47 | }
48 | // this can happen on a new root page
49 | return;
50 | }
51 | $backendLayouts = $pageTsConfig['mod.']['web_layout.']['BackendLayouts.'] ?? [];
52 | foreach ($backendLayouts as $identifier => $data) {
53 | if (!empty($data['config.']['backend_layout.']['doktype']) && (int)$data['config.']['backend_layout.']['doktype'] === (int)$fieldArray['doktype']) {
54 | $backendLayout = 'pagets__' . str_replace('.', '', $identifier);
55 | $fieldArray['backend_layout'] = $backendLayout;
56 | $this->previousBackendLayout = $backendLayout;
57 | break;
58 | }
59 | }
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/Configuration/PageTS/main.tsconfig:
--------------------------------------------------------------------------------
1 | @import 'EXT:doktypemapper/Configuration/Sets/Doktypemapper/page.tsconfig'
2 |
--------------------------------------------------------------------------------
/Configuration/Sets/Doktypemapper/config.yaml:
--------------------------------------------------------------------------------
1 | name: b13/doktypemapper
2 | label: Doktypemapper
3 |
--------------------------------------------------------------------------------
/Configuration/Sets/Doktypemapper/page.tsconfig:
--------------------------------------------------------------------------------
1 | mod.web_layout.BackendLayouts {
2 | DefaultLink {
3 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.3.title
4 | config.backend_layout {
5 | doktype = 3
6 | colCount = 0
7 | rowCount = 0
8 | }
9 | }
10 | DefaultShortcut {
11 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.4.title
12 | config.backend_layout {
13 | doktype = 4
14 | colCount = 0
15 | rowCount = 0
16 | }
17 | }
18 | DefaultBackendusersection {
19 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.6.title
20 | config.backend_layout {
21 | doktype = 6
22 | colCount = 0
23 | rowCount = 0
24 | }
25 | }
26 | DefaultMountpoint {
27 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.7.title
28 | config.backend_layout {
29 | doktype = 7
30 | colCount = 0
31 | rowCount = 0
32 | }
33 | }
34 | DefaultSpacer {
35 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.199.title
36 | config.backend_layout {
37 | doktype = 199
38 | colCount = 0
39 | rowCount = 0
40 | }
41 | }
42 | DefaultFolder {
43 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.254.title
44 | config.backend_layout {
45 | doktype = 254
46 | colCount = 0
47 | rowCount = 0
48 | }
49 | }
50 | DefaultRecycler {
51 | title = LLL:EXT:doktypemapper/Resources/Private/Language/locallang_db.xlf:backend_layout.255.title
52 | config.backend_layout {
53 | doktype = 255
54 | colCount = 0
55 | rowCount = 0
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/Configuration/TCA/Overrides/pages.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Language Labels for EXT:doktypemapper
6 | David Steeb
7 | typo3@b13.com
8 |
9 |
10 |
11 | Empty Page (External Link)
12 |
13 |
14 | Empty Page (Shortcut)
15 |
16 |
17 | Empty Page (Backend User Section)
18 |
19 |
20 | Empty Page (Mountpoint)
21 |
22 |
23 | Empty Page (Spacer)
24 |
25 |
26 | Empty Page (Folder)
27 |
28 |
29 | Empty Page (Recycler)
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/Resources/Public/Icons/Extension.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
32 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "b13/doktypemapper",
3 | "type": "typo3-cms-extension",
4 | "description": "Maps your page.doktype to page.backend_layout",
5 | "homepage": "https://b13.com",
6 | "license": ["GPL-2.0-or-later"],
7 | "extra": {
8 | "typo3/cms": {
9 | "extension-key": "doktypemapper",
10 | "cms-package-dir": "{$vendor-dir}/typo3/cms",
11 | "app-dir": ".Build",
12 | "web-dir": ".Build/Web"
13 | }
14 | },
15 | "require": {
16 | "php": "^7.4 || ^8.0",
17 | "typo3/cms-backend": "^11.5 || ^12.4 || ^13.1"
18 | },
19 | "autoload": {
20 | "psr-4": {
21 | "B13\\Doktypemapper\\": "Classes/"
22 | }
23 | },
24 | "require-dev": {
25 | "saschaegerer/phpstan-typo3": "^1.8",
26 | "typo3/coding-standards": "^0.5.5",
27 | "typo3/tailor": "^1.1",
28 | "typo3/testing-framework": "^7.0 || ^8.0"
29 | },
30 | "config": {
31 | "vendor-dir": ".Build/vendor",
32 | "bin-dir": ".Build/bin",
33 | "allow-plugins": {
34 | "typo3/class-alias-loader": true,
35 | "typo3/cms-composer-installers": true
36 | }
37 | },
38 | "autoload-dev": {
39 | "psr-4": {
40 | "B13\\Doktypemapper\\Tests\\": "Tests/"
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/ext_emconf.php:
--------------------------------------------------------------------------------
1 | 'b13/doktypemapper',
5 | 'description' => 'Maps your page.doktype to page.backend_layout',
6 | 'category' => 'be',
7 | 'author' => 'b13 GmbH',
8 | 'author_email' => 'typo3@b13.com',
9 | 'author_company' => 'b13 GmbH',
10 | 'state' => 'stable',
11 | 'uploadfolder' => 0,
12 | 'clearCacheOnLoad' => 1,
13 | 'version' => '2.1.0',
14 | 'constraints' => [
15 | 'depends' => [],
16 | ],
17 | ];
18 |
--------------------------------------------------------------------------------
/ext_localconf.php:
--------------------------------------------------------------------------------
1 |