Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 0 additions & 34 deletions Classes/ViewHelpers/Form/RegisterFieldViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,44 +20,10 @@
*/
class RegisterFieldViewHelper extends AbstractFormFieldViewHelper
{
public function initializeArguments(): void
{
$this->registerArgument('name', 'string', 'Name of input tag');
$this->registerArgument('value', 'mixed', 'Value of input tag');
$this->registerArgument(
'property',
'string',
'Name of Object Property. If used in conjunction with <f:form object="...">, "name" and "value" properties will be ignored.'
);
$this->registerArgument('additionalAttributes', 'array', 'Additional tag attributes. They will be added directly to the resulting HTML tag.', false);
$this->registerArgument('checked', 'bool', 'Specifies that the input element should be preselected');
$this->registerArgument('multiple', 'bool', 'Specifies whether this checkbox belongs to a multivalue (is part of a checkbox group)', false, false);
}

public function render(): string
{
$nameAttribute = $this->getName();

$checked = $this->arguments['checked'];
$multiple = $this->arguments['multiple'];

$propertyValue = null;
if ($this->hasMappingErrorOccurred()) {
$propertyValue = $this->getLastSubmittedFormData();
}
if ($checked === null && $propertyValue === null) {
$propertyValue = $this->getPropertyValue();
}

if ($propertyValue instanceof \Traversable) {
$propertyValue = iterator_to_array($propertyValue);
}
if (is_array($propertyValue)) {
$nameAttribute .= '[]';
} elseif ($multiple === true) {
$nameAttribute .= '[]';
}

$this->registerFieldNameForFormTokenGeneration($nameAttribute);

return '';
Expand Down
8 changes: 4 additions & 4 deletions Classes/ViewHelpers/Form/SelectFieldViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ protected function renderOptionTags(array $options): string
$optionTags = [];
foreach ($options as $value => $label) {
$isSelected = $this->isSelectedAlternative($this->getOptionFromOriginalOptionsByValue((string)$value));
$optionTags[] = $this->renderOptionTag((string)$value, (string)$label, $isSelected);
$optionTags[] = json_decode($this->renderOptionTag((string)$value, (string)$label, $isSelected),true);
}
return json_encode($optionTags);
}
Expand All @@ -40,12 +40,12 @@ protected function renderOptionTags(array $options): string
* @param bool $isSelected specifies wether or not to add selected attribute
* @return string the rendered option tag
*/
protected function renderOptionTag($value, $label, $isSelected = false)
protected function renderOptionTag($value, $label, $isSelected = false): string
{
return [
return json_encode([
'value' => $value,
'label' => $label,
'isSelected' => $isSelected,
];
]);
}
}
36 changes: 22 additions & 14 deletions Classes/ViewHelpers/FormViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,13 @@
* The TYPO3 project - inspiring people to share!
*/

use \TYPO3\CMS\Extbase\Mvc\RequestInterface;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject;
use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
use TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy;
use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Extbase\Security\HashScope;

/**
* Form ViewHelper. Generates a :html:`<form>` Tag.
Expand Down Expand Up @@ -124,10 +127,7 @@ protected function setFormActionUri(): void
);
}

/** @var RenderingContext $renderingContext */
$renderingContext = $this->renderingContext;
/** @var RequestInterface $request */
$request = $renderingContext->getRequest();
$request = $this->getRequest();
/** @var UriBuilder $uriBuilder */
$uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
$uriBuilder
Expand All @@ -142,11 +142,6 @@ protected function setFormActionUri(): void
->setArgumentsToBeExcludedFromQueryString(isset($this->arguments['argumentsToBeExcludedFromQueryString']) ? (array)$this->arguments['argumentsToBeExcludedFromQueryString'] : [])
->setFormat($this->arguments['format'] ?? '');

$addQueryStringMethod = $this->arguments['addQueryStringMethod'] ?? null;
if (is_string($addQueryStringMethod)) {
$uriBuilder->setAddQueryStringMethod($addQueryStringMethod);
}

$pageUid = (int)($this->arguments['pageUid'] ?? 0);
if ($pageUid > 0) {
$uriBuilder->setTargetPageUid($pageUid);
Expand Down Expand Up @@ -192,10 +187,7 @@ protected function renderAdditionalIdentityFields(): string
*/
protected function renderHiddenReferrerFields(): string
{
/** @var RenderingContext $renderingContext */
$renderingContext = $this->renderingContext;
/** @var RequestInterface $request */
$request = $renderingContext->getRequest();
$request = $this->getRequest();
$extensionName = $request->getControllerExtensionName();
$controllerName = $request->getControllerName();
$actionName = $request->getControllerActionName();
Expand All @@ -207,7 +199,8 @@ protected function renderHiddenReferrerFields(): string
$this->addHiddenField($this->prefixFieldName('__referrer[@extension]'), $extensionName);
$this->addHiddenField($this->prefixFieldName('__referrer[@controller]'), $controllerName);
$this->addHiddenField($this->prefixFieldName('__referrer[@action]'), $actionName);
$this->addHiddenField($this->prefixFieldName('__referrer[@request]'), $this->hashService->appendHmac(json_encode($actionRequest)));
$this->addHiddenField($this->prefixFieldName('__referrer[arguments]'), $this->hashService->appendHmac(base64_encode(serialize($request->getArguments())),HashScope::ReferringArguments->prefix()));
$this->addHiddenField($this->prefixFieldName('__referrer[@request]'), $this->hashService->appendHmac(json_encode($actionRequest),HashScope::ReferringArguments->prefix()));

return '';
}
Expand Down Expand Up @@ -289,4 +282,19 @@ protected function addHiddenField($name, $value)
$this->data['hiddenFields'][$this->i]['value'] = $value;
$this->i++;
}

protected function getRequest(): RequestInterface
{
$renderingContext = $this->renderingContext;
if (
method_exists($renderingContext, 'getAttribute') &&
method_exists($renderingContext, 'hasAttribute') &&
$renderingContext->hasAttribute(ServerRequestInterface::class)
) {
$request = $renderingContext->getAttribute(ServerRequestInterface::class);
} else {
$request = $renderingContext->getRequest();
}
return $request;
}
}
4 changes: 1 addition & 3 deletions Resources/Private/Partials/Form/Field/Check.html
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
{namespace vh=In2code\Powermail\ViewHelpers}
<f:spaceless>
<headlesspowermail:form.registerField property="{field.marker}."
value="{setting.value}"
checked="{vh:misc.prefillMultiField(field:field, mail:mail, cycle:iteration.cycle)}"/>
<headlesspowermail:form.registerField property="{field.marker}." />
<f:format.raw>
<f:format.json value="{
field: {
Expand Down
4 changes: 1 addition & 3 deletions Resources/Private/Partials/Form/Field/Country.html
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
{namespace vh=In2code\Powermail\ViewHelpers}
<f:spaceless>
<f:variable name="fieldMarker" value="{field.marker}{f:if(condition:field.multiselect,then:'.')}" />
<headlesspowermail:form.registerField property="{fieldMarker}"
value="{setting.value}"
checked="{vh:misc.prefillMultiField(field:field, mail:mail, cycle:index.cycle)}"/>
<headlesspowermail:form.registerField property="{fieldMarker}" />
<f:format.raw>
<f:format.json value="{
field: {
Expand Down
4 changes: 1 addition & 3 deletions Resources/Private/Partials/Form/Field/Radio.html
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
{namespace vh=In2code\Powermail\ViewHelpers}
<f:spaceless>
<headlesspowermail:form.registerField property="{field.marker}."
value="{setting.value}"
checked="{vh:misc.prefillMultiField(field:field, mail:mail, cycle:iteration.cycle)}"/>
<headlesspowermail:form.registerField property="{field.marker}." />
<f:format.raw>
<f:format.json value="{
field: {
Expand Down
4 changes: 1 addition & 3 deletions Resources/Private/Partials/Form/Field/Select.html
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
{namespace vh=In2code\Powermail\ViewHelpers}
<f:spaceless>
<f:variable name="fieldMarker" value="{field.marker}{f:if(condition:field.multiselect,then:'.')}" />
<headlesspowermail:form.registerField property="{fieldMarker}"
value="{setting.value}"
checked="{vh:misc.prefillMultiField(field:field, mail:mail, cycle:iteration.cycle)}"/>
<headlesspowermail:form.registerField property="{fieldMarker}" />
<f:format.raw>
<f:format.json value="{
field: {
Expand Down
1 change: 1 addition & 0 deletions Resources/Private/Templates/Form/Form.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{namespace vh=In2code\Powermail\ViewHelpers}
{namespace headlesspowermail=FriendsOfTYPO3\HeadlessPowermail\ViewHelpers}
<f:spaceless>
<f:variable name="messages">
<f:alias map="{flashMessageClass:'powermail_message_error'}">
Expand Down
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@
}
],
"require": {
"typo3/cms-core": "^12.4",
"in2code/powermail": "^12.0"
"typo3/cms-core": "^13.4",
"in2code/powermail": "^13.0"
},
"suggest": {
"friendsoftypo3/headless": "^4.0"
Expand Down
6 changes: 3 additions & 3 deletions ext_emconf.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
'author' => 'Oskar Dydo',
'author_email' => 'extensions@macopedia.pl',
'category' => 'fe',
'version' => '3.0.0',
'version' => '4.0.0',
'constraints' => [
'depends' => [
'typo3' => '12.4.0-12.4.99',
'powermail' => '12.0.0-12.99.99',
'typo3' => '13.4.0-13.4.99',
'powermail' => '13.0.0-13.99.99',
],
'conflicts' => [],
'suggests' => [],
Expand Down