Skip to content
Snippets Groups Projects
Commit 01bd13a8 authored by Paul Ilea's avatar Paul Ilea
Browse files

[TASK] Form template registration fix

parent 20337e91
No related branches found
No related tags found
No related merge requests found
......@@ -28,6 +28,7 @@ namespace SGalinski\SgMail\Finisher\Forms;
***************************************************************/
use SGalinski\SgMail\Service\MailTemplateService;
use SGalinski\SgMail\Service\RegisterService;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Object\ObjectManager;
use TYPO3\CMS\Form\Domain\Finishers\AbstractFinisher;
......@@ -87,10 +88,8 @@ class FormsFinisher extends AbstractFinisher {
} else {
$markerName = $identifier;
}
$markerName = preg_replace('/[^a-zA-Z0-9]/', '', $markerName);
if (!isset($markers[$markerName])) {
$markers[$markerName] = $value;
}
$markerName = RegisterService::normalizeFormFieldMarkerName($markerName);
$markers[$markerName] = $value;
}
$templateName = trim((string) $this->parseOption('template'));
......
......@@ -284,4 +284,14 @@ class RegisterService implements \TYPO3\CMS\Core\SingletonInterface {
return $registerFile;
}
/**
* Trims non-allowed characters from the form field marker name
*
* @param string $markerName
* @return string
*/
public static function normalizeFormFieldMarkerName($markerName = '') {
return \preg_replace('/[^a-z0-9\-_]/i', '', $markerName);
}
}
......@@ -46,7 +46,7 @@ class FormEditorController extends \TYPO3\CMS\Form\Controller\FormEditorControll
* @var array
*/
const IGNORE_FIELDS = [
'StaticText', 'Hidden', 'GridRow'
'StaticText', 'Hidden', 'GridRow', 'Fieldset', 'Page'
];
/**
......@@ -121,27 +121,7 @@ class FormEditorController extends \TYPO3\CMS\Form\Controller\FormEditorControll
$parsedYaml = Yaml::parse(file_get_contents($absoluteFilePath));
$renderables = [];
foreach ($parsedYaml['renderables'] as $formPage) {
if (\is_array($formPage['renderables'])) {
foreach ($formPage['renderables'] as $row) {
if (!\is_array($row) || !$row['type']) {
continue;
}
if ($row['type'] === 'GridRow') {
foreach ($row['renderables'] as $renderableInsideGridrow) {
$renderables[] = $renderableInsideGridrow;
}
} elseif (!\in_array($row['type'], self::IGNORE_FIELDS, TRUE)) {
$renderables[] = $row;
}
}
} else {
return;
}
}
$renderables = self::getFormFieldsRecursive([0 => $parsedYaml]);
// write the new Register.php file and add it to the registrationFiles array in the RegisterService
$this->writeRegisterFile($renderables, $extensionKey, $templateKey);
......@@ -166,27 +146,34 @@ class FormEditorController extends \TYPO3\CMS\Form\Controller\FormEditorControll
// if markerName is explicitly set, override the registered identifier
$markerName = $element['identifier'];
if (isset($element['properties']['markerName']) && $element['properties']['markerName'] !== '') {
$markerName = $element['properties']['markerName'];
}
$markerName = preg_replace('/[^a-zA-Z0-9]/', '', $markerName);
$duplicateMarker = FALSE;
foreach ($markers as $marker) {
if ($marker['identifier'] === $markerName) {
$duplicateMarker = TRUE;
break;
}
}
if (!$duplicateMarker) {
$markers[] = [
'identifier' => $markerName,
'type' => MailTemplateService::MARKER_TYPE_STRING,
'value' => $element['label'],
'description' => $element['label']
];
$markerName = trim($element['properties']['markerName']);
}
$markerName = RegisterService::normalizeFormFieldMarkerName($markerName);
$markers[$markerName] = [
'identifier' => $markerName,
'type' => MailTemplateService::MARKER_TYPE_STRING,
'value' => $element['label'],
'description' => $element['label']
];
}
$registrationService = $this->objectManager->get(RegisterService::class);
return $registrationService->writeRegisterFile($templateKey, $extensionKey, $markers, $templateKey);
}
/**
* @param array $formData
* @return array
*/
private static function getFormFieldsRecursive($formData = []) {
$out = [];
foreach ($formData as $formElement) {
if (isset($formElement['renderables'])) {
$out = \array_merge($out, self::getFormFieldsRecursive($formElement['renderables']));
} elseif (!\in_array($formElement['type'], self::IGNORE_FIELDS, TRUE)) {
$out[] = $formElement;
}
}
return $out;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment