Skip to content

Commit 12910b4

Browse files
Merge pull request #28 from xima-media/v11
TYPO3 v11 support
2 parents 57d5909 + 77bdd7a commit 12910b4

File tree

16 files changed

+366
-119
lines changed

16 files changed

+366
-119
lines changed

.ddev/commands/web/init-typo3

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ readonly dbName="db"
1313
readonly dbCredentials="-h${dbHost} -u${dbUser} -p${dbPassword}"
1414
readonly fixturePath="/var/www/html/Tests/Acceptance/Fixtures"
1515
readonly typo3Binary="/var/www/html/vendor/bin/typo3"
16+
readonly typo3cmsBinary="/var/www/html/vendor/bin/typo3cms"
1617

1718
function _progress() {
1819
printf "%s... " "$1"
@@ -42,9 +43,28 @@ export TYPO3_SETUP_ADMIN_PASSWORD=Passw0rd!
4243
export TYPO3_SERVER_TYPE=other
4344
export TYPO3_PROJECT_NAME="EXT:xm_formcycle"
4445

46+
export TYPO3_INSTALL_DB_DRIVER=mysqli
47+
export TYPO3_INSTALL_DB_USER="$dbUser"
48+
export TYPO3_INSTALL_DB_PASSWORD="$dbPassword"
49+
export TYPO3_INSTALL_DB_PORT=3306
50+
export TYPO3_INSTALL_DB_HOST="$dbHost"
51+
export TYPO3_INSTALL_DB_DBNAME="$dbName"
52+
export TYPO3_INSTALL_ADMIN_USER=admin
53+
export TYPO3_INSTALL_ADMIN_PASSWORD=Passw0rd!
54+
export TYPO3_INSTALL_SITE_SETUP_TYPE="no"
55+
export TYPO3_INSTALL_WEB_SERVER_CONFIG="apache"
56+
export TYPO3_INSTALL_SITE_NAME="EXT:xm_formcycle"
57+
export TYPO3_INSTALL_DB_UNIX_SOCKET=""
58+
4559
# Set up environment
4660
_progress "Setting up TYPO3 installation"
47-
"$typo3Binary" setup --no-interaction --force --quiet
61+
# TYPO3 v11
62+
if [ -f "$typo3cmsBinary" ]; then
63+
"$typo3cmsBinary" install:setup --force --use-existing-database
64+
"$typo3cmsBinary" configuration:set SYS/trustedHostsPattern ".*"
65+
else
66+
"$typo3Binary" setup --no-interaction --force --quiet
67+
fi
4868
_done
4969

5070
# Import DB fixtures

.ddev/config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ nodejs_version: "20"
1919
disable_settings_management: true
2020
web_environment:
2121
- TESTING_DOMAIN=$DDEV_HOSTNAME
22-
- XDEBUG_MODE=coverage
22+
- XDEBUG_MODE=debug,coverage
2323
- TYPO3_CONTEXT=Development/DDEV
2424
- typo3DatabaseHost=db
2525
- typo3DatabaseUsername=root

Classes/DataProcessing/AbstractProcessor.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Xima\XmFormcycle\DataProcessing;
44

55
use TYPO3\CMS\Core\Service\FlexFormService;
6+
use TYPO3\CMS\Core\Utility\GeneralUtility;
67
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
78
use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface;
89
use Xima\XmFormcycle\Dto\ElementSettings;
@@ -13,23 +14,24 @@ abstract class AbstractProcessor implements DataProcessorInterface
1314
{
1415
protected ElementSettings $settings;
1516

16-
public function __construct(
17-
protected readonly FormcycleService $formcycleService,
18-
private readonly FlexFormService $flexFormService
19-
) {
20-
}
17+
protected FormcycleService $formcycleService;
2118

2219
public function process(
2320
ContentObjectRenderer $cObj,
2421
array $contentObjectConfiguration,
2522
array $processorConfiguration,
2623
array $processedData
2724
) {
25+
// construct element settings
26+
$flexFormService = GeneralUtility::makeInstance(FlexFormService::class);
2827
$this->settings = ElementSettings::createFromContentElement(
29-
$this->flexFormService,
28+
$flexFormService,
3029
$cObj,
3130
);
3231

32+
$this->formcycleService = GeneralUtility::makeInstance(FormcycleService::class);
33+
34+
// check if concrete processor should be used
3335
$currentIntegrationMode = $this->settings->integrationMode ?? $this->formcycleService->getDefaultIntegrationMode();
3436
if ($currentIntegrationMode->forDataProcessing() !== $this->getIntegrationMode()) {
3537
return $processedData;

Classes/Form/Element/FormcycleSelection.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Xima\XmFormcycle\Form\Element;
44

55
use TYPO3\CMS\Backend\Form\Element\AbstractFormElement;
6+
use TYPO3\CMS\Core\Information\Typo3Version;
67
use TYPO3\CMS\Core\Page\JavaScriptModuleInstruction;
78
use TYPO3\CMS\Core\Utility\GeneralUtility;
89
use TYPO3\CMS\Fluid\View\StandaloneView;
@@ -57,8 +58,15 @@ public function render()
5758
$resultArray['html'] = '<div class="formengine-field-item t3js-formengine-field-item">' . $hiddenInput . '</div><div id="xm-formcycle-forms" class="open">' . $view->render() . '</div>';
5859
$resultArray['stylesheetFiles'][] = 'EXT:xm_formcycle/Resources/Public/Css/Backend/FormcycleSelection.css';
5960

60-
$resultArray['javaScriptModules'][] = JavaScriptModuleInstruction::create('@xima/xm-formcycle/FormcycleSelectionElement.js')
61-
->instance($this->data['parameterArray']['itemFormElID']);
61+
$versionInformation = GeneralUtility::makeInstance(Typo3Version::class);
62+
if ($versionInformation->getMajorVersion() < 12) {
63+
$resultArray['requireJsModules'][] = JavaScriptModuleInstruction::forRequireJS(
64+
'TYPO3/CMS/XmFormcycle/Backend/FormcycleSelectionElementV11'
65+
)->instance($this->data['parameterArray']['itemFormElID']);
66+
} else {
67+
$resultArray['javaScriptModules'][] = JavaScriptModuleInstruction::create('@xima/xm-formcycle/FormcycleSelectionElement.js')
68+
->instance($this->data['parameterArray']['itemFormElID']);
69+
}
6270

6371
return $resultArray;
6472
}

Classes/Upgrades/ElementUpgradeWizard.php

Lines changed: 0 additions & 51 deletions
This file was deleted.
Lines changed: 63 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,95 @@
1-
temp.formcycle =< lib.contentElement
2-
temp.formcycle {
3-
templateRootPaths.1 = EXT:xm_formcycle/Resources/Private/Templates/
4-
templateRootPaths.2 = {$plugin.tx_xmformcycle.view.templateRootPath}
5-
partialRootPaths.1 = EXT:xm_formcycle/Resources/Private/Partials/
6-
partialRootPaths.2 = {$plugin.tx_xmformcycle.view.partialRootPath}
7-
layoutRootPaths.1 = EXT:xm_formcycle/Resources/Private/Layouts/
8-
layoutRootPaths.2 = {$plugin.tx_xmformcycle.view.layoutRootPath}
9-
10-
templateName = Formcycle
11-
}
12-
131
tt_content.formcycle = COA
142
tt_content.formcycle {
153

164
10 = COA_INT
175
10.stdWrap.if.equals = default
186
10.stdWrap.if.value.data = flexform : pi_flexform:settings.xf.integrationMode
19-
10.1 =< temp.formcycle
20-
10.1.dataProcessing {
21-
1709129505 = formcycle-ajax
22-
1709129509 = formcycle-iframe
23-
1709129512 = formcycle-integrated
7+
10.1 =< lib.contentElement
8+
10.1 {
9+
templateRootPaths.1 = EXT:xm_formcycle/Resources/Private/Templates/
10+
templateRootPaths.2 = {$plugin.tx_xmformcycle.view.templateRootPath}
11+
partialRootPaths.1 = EXT:xm_formcycle/Resources/Private/Partials/
12+
partialRootPaths.2 = {$plugin.tx_xmformcycle.view.partialRootPath}
13+
layoutRootPaths.1 = EXT:xm_formcycle/Resources/Private/Layouts/
14+
layoutRootPaths.2 = {$plugin.tx_xmformcycle.view.layoutRootPath}
15+
templateName = Formcycle
16+
dataProcessing {
17+
1709129505 = Xima\XmFormcycle\DataProcessing\AjaxProcessor
18+
1709129509 = Xima\XmFormcycle\DataProcessing\iFrameProcessor
19+
1709129512 = Xima\XmFormcycle\DataProcessing\IntegratedProcessor
20+
}
2421
}
2522

2623
20 = COA_INT
2724
20.stdWrap.if.equals = integrated
2825
20.stdWrap.if.value.data = flexform : pi_flexform:settings.xf.integrationMode
29-
20.1 =< temp.formcycle
30-
20.1.dataProcessing {
31-
1709129512 = formcycle-integrated
26+
20.1 =< lib.contentElement
27+
20.1 {
28+
templateRootPaths.1 = EXT:xm_formcycle/Resources/Private/Templates/
29+
templateRootPaths.2 = {$plugin.tx_xmformcycle.view.templateRootPath}
30+
partialRootPaths.1 = EXT:xm_formcycle/Resources/Private/Partials/
31+
partialRootPaths.2 = {$plugin.tx_xmformcycle.view.partialRootPath}
32+
layoutRootPaths.1 = EXT:xm_formcycle/Resources/Private/Layouts/
33+
layoutRootPaths.2 = {$plugin.tx_xmformcycle.view.layoutRootPath}
34+
templateName = Formcycle
35+
dataProcessing {
36+
1709129512 = Xima\XmFormcycle\DataProcessing\IntegratedProcessor
37+
}
3238
}
3339

3440
30 = COA
3541
30.stdWrap.if.equals = AJAX (TYPO3)
3642
30.stdWrap.if.value.data = flexform : pi_flexform:settings.xf.integrationMode
37-
30.1 =< temp.formcycle
38-
30.1.dataProcessing {
39-
1709129505 = formcycle-ajax
43+
30.1 =< lib.contentElement
44+
30.1 {
45+
templateRootPaths.1 = EXT:xm_formcycle/Resources/Private/Templates/
46+
templateRootPaths.2 = {$plugin.tx_xmformcycle.view.templateRootPath}
47+
partialRootPaths.1 = EXT:xm_formcycle/Resources/Private/Partials/
48+
partialRootPaths.2 = {$plugin.tx_xmformcycle.view.partialRootPath}
49+
layoutRootPaths.1 = EXT:xm_formcycle/Resources/Private/Layouts/
50+
layoutRootPaths.2 = {$plugin.tx_xmformcycle.view.layoutRootPath}
51+
templateName = Formcycle
52+
dataProcessing {
53+
1709129505 = Xima\XmFormcycle\DataProcessing\AjaxProcessor
54+
}
4055
}
4156

4257
40 = COA
4358
40.stdWrap.if.equals = AJAX (FORMCYCLE)
4459
40.stdWrap.if.value.data = flexform : pi_flexform:settings.xf.integrationMode
45-
40.1 =< temp.formcycle
46-
40.1.dataProcessing {
47-
1709129505 = formcycle-ajax
60+
40.1 =< lib.contentElement
61+
40.1 {
62+
templateRootPaths.1 = EXT:xm_formcycle/Resources/Private/Templates/
63+
templateRootPaths.2 = {$plugin.tx_xmformcycle.view.templateRootPath}
64+
partialRootPaths.1 = EXT:xm_formcycle/Resources/Private/Partials/
65+
partialRootPaths.2 = {$plugin.tx_xmformcycle.view.partialRootPath}
66+
layoutRootPaths.1 = EXT:xm_formcycle/Resources/Private/Layouts/
67+
layoutRootPaths.2 = {$plugin.tx_xmformcycle.view.layoutRootPath}
68+
templateName = Formcycle
69+
dataProcessing {
70+
1709129505 = Xima\XmFormcycle\DataProcessing\AjaxProcessor
71+
}
4872
}
4973

5074
50 = COA
5175
50.stdWrap.if.equals = iFrame
5276
50.stdWrap.if.value.data = flexform : pi_flexform:settings.xf.integrationMode
53-
50.1 =< temp.formcycle
54-
50.1.dataProcessing {
55-
1709129509 = formcycle-iframe
77+
50.1 =< lib.contentElement
78+
50.1 {
79+
templateRootPaths.1 = EXT:xm_formcycle/Resources/Private/Templates/
80+
templateRootPaths.2 = {$plugin.tx_xmformcycle.view.templateRootPath}
81+
partialRootPaths.1 = EXT:xm_formcycle/Resources/Private/Partials/
82+
partialRootPaths.2 = {$plugin.tx_xmformcycle.view.partialRootPath}
83+
layoutRootPaths.1 = EXT:xm_formcycle/Resources/Private/Layouts/
84+
layoutRootPaths.2 = {$plugin.tx_xmformcycle.view.layoutRootPath}
85+
templateName = Formcycle
86+
dataProcessing {
87+
1709129509 = Xima\XmFormcycle\DataProcessing\iFrameProcessor
88+
}
5689
}
5790

5891
}
5992

93+
6094
formcycle_ajax = PAGE
6195
formcycle_ajax.typeNum = 1464705954

Resources/Private/Templates/Backend/FormcycleSelection.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,22 @@
77
<f:if condition="!{loading} && !{errorCode}">
88
<div class="mb-4 btn-group">
99
<button id="xm-reload-available-forms" class="btn btn-default">
10-
<core:icon title="Refresh forms" identifier="actions-refresh" />
10+
<core:icon identifier="actions-cog" />
1111
{f:translate(key: 'button.reload', extensionName:'XmFormcycle')}
1212
</button>
1313
<button class="btn btn-default" id="xm-settings">
14-
<core:icon title="Opens settings" identifier="actions-cog" />
14+
<core:icon identifier="actions-cog" />
1515
{f:translate(key: 'button.settings', extensionName:'XmFormcycle')}
1616
</button>
1717
<a href="{adminUrl}" class="btn btn-default" target="_blank">
18-
<core:icon title="Open Formcycle admin in new window" identifier="actions-window-open" />
18+
<core:icon identifier="actions-window-open" />
1919
{f:translate(key: 'button.admin', extensionName:'XmFormcycle')}
2020
</a>
2121
</div>
2222
</f:if>
2323

2424
<div class="py-3 text-center {f:if(condition: loading, else: 'hidden')}" id="xm-loading-spinner">
25-
<core:icon identifier="spinner-circle" size="medium" />
25+
<core:icon identifier="spinner-circle" size="small" />
2626
</div>
2727

2828
<f:if condition="{forms} && !{errorCode}">
@@ -36,7 +36,7 @@ <h4>
3636
<hr />
3737
<div class="d-flex flex-wrap gap-3">
3838
<f:for each="{group}" as="form">
39-
<a href="#" class="card btn btn-primary {f:if(condition: '{itemFormElValue}=={form.id}', then: 'active')}" style="width: 14rem;" data-form-id="{form.id}">
39+
<a href="#" class="card btn btn-primary {f:if(condition: '{itemFormElValue}=={form.id}', then: 'active')}" style="width: 14rem; --bs-btn-color:inherit;" data-form-id="{form.id}">
4040
<div style="background: #ededed">
4141
<img src="{form.thumbnail}" class="card-img-top" alt="Preview {form.title}">
4242
</div>

0 commit comments

Comments
 (0)