diff --git a/extension/Classes/Core/AbstractBuildForm.php b/extension/Classes/Core/AbstractBuildForm.php index 5f3c673efbe58a8a7f4d9cb90bfcec54a9d1f8fe..1dd508fdf2de52a7178fb1707616c97924864b07 100644 --- a/extension/Classes/Core/AbstractBuildForm.php +++ b/extension/Classes/Core/AbstractBuildForm.php @@ -170,6 +170,11 @@ abstract class AbstractBuildForm { ]; $this->symbol[SYMBOL_DELETE] = "<span class='glyphicon " . GLYPH_ICON_DELETE . "'></span>"; + + $this->ttContentUid = $this->store->getVar(TYPO3_TT_CONTENT_UID, STORE_TYPO3); + $this->formId = $this->formSpec[F_ID] ?? 0; + $this->recordId = $this->store->getVar(CLIENT_RECORD_ID, STORE_SIP . STORE_RECORD . STORE_TYPO3 . STORE_ZERO); + } abstract public function fillWrap(); @@ -620,7 +625,7 @@ abstract class AbstractBuildForm { */ public function getFormTagAttributes() { - $attribute['id'] = $this->getFormId(); + $attribute['id'] = $this->getFormId($this->ttContentUid, $this->formId, $this->recordId); $attribute['method'] = 'post'; $attribute['action'] = $this->getActionUrl(); $attribute['target'] = '_top'; @@ -638,14 +643,14 @@ abstract class AbstractBuildForm { * * @return string */ - public function getFormId() { - if ($this->formId === null) { -// $this->formId = uniqid('qfq-form-'); - $this->formId = 'qfq-form-' . $this->store->getVar(TYPO3_TT_CONTENT_UID, STORE_TYPO3) . '-' - . $this->formSpec[F_ID] . '-' . $this->store->getVar(CLIENT_RECORD_ID, STORE_TYPO3 . STORE_SIP . STORE_RECORD . STORE_ZERO); - } + public static function getFormId(string $ttContentUid, string $formId, string $recordId) { + // $this->formId = uniqid('qfq-form-'); +// $this->formId = 'qfq-form-' . $this->store->getVar(TYPO3_TT_CONTENT_UID, STORE_TYPO3) . '-' +// . $this->formSpec[F_ID] . '-' . $this->store->getVar(CLIENT_RECORD_ID, STORE_SIP . STORE_RECORD . STORE_TYPO3 . STORE_ZERO); + - return $this->formId; + //return $this->formId; + return 'qfq-form-' . $ttContentUid . '-' . $formId . '-' . $recordId; } /** @@ -906,9 +911,7 @@ abstract class AbstractBuildForm { // Typically: $htmlElementNameIdZero = true // After Saving a record, staying on the form, the FormElements on the Client are still known as '<feName>:0'. $htmlFormElementName = HelperFormElement::buildFormElementName($formElement, ($htmlElementNameIdZero) ? 0 : $recordId); - $formElement[FE_HTML_ID] = HelperFormElement::buildFormElementId($this->getFormId(), $formElement[FE_ID], - ($htmlElementNameIdZero) ? 0 : $recordId, - $formElement[FE_TG_INDEX]); + $formElement[FE_HTML_ID] = HelperFormElement::buildFormElementId($this->getFormId($this->ttContentUid, $this->formId, $this->recordId), $formElement[FE_ID], $formElement[FE_TG_INDEX]); $jsonElement = array(); $elementExtra = ''; diff --git a/extension/Classes/Core/BuildFormBootstrap.php b/extension/Classes/Core/BuildFormBootstrap.php index feb071a61f86b31cc1379483c3711adb38386918..dcd11ac46078ce15d14ea67f0ff45163680fbe11 100644 --- a/extension/Classes/Core/BuildFormBootstrap.php +++ b/extension/Classes/Core/BuildFormBootstrap.php @@ -448,7 +448,7 @@ class BuildFormBootstrap extends AbstractBuildForm { $class = Support::doAttribute('class', $class); $dataClassOnChange = Support::doAttribute('data-class-on-change', $buttonOnChangeClass); $tooltip = Support::doAttribute('title', $tooltip); - $formId = $this->getFormId(); + $formId = $this->getFormId($this->ttContentUid, $this->formSpec[F_ID], $this->recordId); return "<button id='$buttonHtmlId-$formId' type='button' $class $dataClassOnChange $tooltip $disabled>$element</button>"; } @@ -628,7 +628,7 @@ class BuildFormBootstrap extends AbstractBuildForm { $actionDelete = FILE_ACTION . '=' . FILE_ACTION_DELETE; # Replacing the attributes set via tail / javascript - $attribute["data-form-id"] = $this->getFormId(); + $attribute["data-form-id"] = $this->getFormId($this->ttContentUid, $this->formSpec[F_ID], $this->recordId); $attribute["data-tabs-id"] = $this->getTabId(); if (0 < ($recordId = $this->store->getVar(SIP_RECORD_ID, STORE_SIP))) { $attribute["data-delete-url"] = $this->createDeleteUrl($this->formSpec[F_FINAL_DELETE_FORM], $recordId); diff --git a/extension/Classes/Core/Helper/HelperFormElement.php b/extension/Classes/Core/Helper/HelperFormElement.php index bdd88c9ee2015bd350449e71bfcf46b740379b06..0806d09e0daa744bbbfedff081d3989871dfc7a2 100644 --- a/extension/Classes/Core/Helper/HelperFormElement.php +++ b/extension/Classes/Core/Helper/HelperFormElement.php @@ -8,6 +8,7 @@ namespace IMATHUZH\Qfq\Core\Helper; +use IMATHUZH\Qfq\Core\AbstractBuildForm; use IMATHUZH\Qfq\Core\Evaluate; use IMATHUZH\Qfq\Core\Store\Store; @@ -180,8 +181,8 @@ class HelperFormElement { * * @return string */ - public static function buildFormElementId($formId, $formElementId, $recordId, $formElementCopy) { - return "$formId" . HTML_DELIMITER_ID . "$formElementId" . HTML_DELIMITER_ID . "$recordId" . HTML_DELIMITER_ID . "$formElementCopy"; + public static function buildFormElementId($formId, $formElementId, $formElementCopy) { + return "$formId" . HTML_DELIMITER_ID . "$formElementId" . HTML_DELIMITER_ID . "$formElementCopy"; } @@ -200,7 +201,9 @@ class HelperFormElement { switch ($fe[FE_CLASS]) { case FE_CLASS_CONTAINER: - $feSpecNative[$key][FE_HTML_ID] = self::buildFormElementId($formId, $fe[FE_ID], $recordId, $formElementCopy); + self::$store = Store::getInstance(); + $ttContentUid = self::$store->getVar(TYPO3_TT_CONTENT_UID, STORE_TYPO3); + $feSpecNative[$key][FE_HTML_ID] = self::buildFormElementId(AbstractBuildForm::getFormId($ttContentUid, $formId, $recordId), $fe[FE_ID], $formElementCopy); break; default: break; diff --git a/extension/Classes/Core/QuickFormQuery.php b/extension/Classes/Core/QuickFormQuery.php index 23dfb9cf438294fcd224f07a9af4bb6068c28010..faa84b184846623f21813a4b6304aeb335cd7e72 100644 --- a/extension/Classes/Core/QuickFormQuery.php +++ b/extension/Classes/Core/QuickFormQuery.php @@ -385,7 +385,9 @@ class QuickFormQuery { } if ($this->store->getVar(TYPO3_DEBUG_SHOW_BODY_TEXT, STORE_TYPO3) === 'yes') { - $htmlId = HelperFormElement::buildFormElementId($this->formSpec[F_ID], 0, 0, 0); + $ttContentUid = $this->store->getVar(TYPO3_TT_CONTENT_UID, STORE_TYPO3); + + $htmlId = HelperFormElement::buildFormElementId($ttContentUid, 0, 0); $html .= Support::doTooltip($htmlId . HTML_ID_EXTENSION_TOOLTIP, $this->t3data[T3DATA_BODYTEXT]); } diff --git a/extension/Tests/Unit/Core/BuildFormPlainTest.php b/extension/Tests/Unit/Core/BuildFormPlainTest.php index c9733c71eb9ff035a61f1418bf3ae3162307faf3..7d717bc9ae4c4c2ead08e41f642c76b9f7ccf4df 100644 --- a/extension/Tests/Unit/Core/BuildFormPlainTest.php +++ b/extension/Tests/Unit/Core/BuildFormPlainTest.php @@ -38,11 +38,11 @@ class BuildFormPlainTest extends AbstractDatabaseTest { */ public function testGetFormId() { $build = new BuildFormPlain([F_DB_INDEX => DB_INDEX_DEFAULT], array(), array(), $this->dbArray); - - $formId1 = $build->getFormId(); + $formId = 0; + $formId1 = $build->getFormId($build->ttContentUid, $formId, $build->recordId); $this->assertMatchesRegularExpression('/qfq-form-[0-9]*-[0-9]*-[0-9]*/', $formId1); - $formId2 = $build->getFormId(); + $formId2 = $build->getFormId($build->ttContentUid, $formId, $build->recordId); $this->assertEquals($formId1, $formId2); /*