diff --git a/Documentation/Report.rst b/Documentation/Report.rst index 520f1a4e0f46146954552fa11eaae2c9c01eb8f2..5bcadd94b8c05a710001f2f02ec386685d43111a 100644 --- a/Documentation/Report.rst +++ b/Documentation/Report.rst @@ -1056,6 +1056,16 @@ Text before / after link } +.. _ignoreHistory: + +Ignore/Skip browser history +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To ignore/skip adding a browser history entry when clicking on a link, add the attribute `data-ignore-history`:: + + 'data-ignore-history' + Example: 10.sql = SELECT 'p:{{pageSlug:T}}?form=test_form&r=2&variable1=test|s|b|t:Button|A:data-ignore-history' AS _link + .. _column_pageX: diff --git a/extension/Classes/Core/AbstractBuildForm.php b/extension/Classes/Core/AbstractBuildForm.php index 717d75ad89eb02fb809dd2c202428cb63214f3df..5f3c673efbe58a8a7f4d9cb90bfcec54a9d1f8fe 100644 --- a/extension/Classes/Core/AbstractBuildForm.php +++ b/extension/Classes/Core/AbstractBuildForm.php @@ -1023,6 +1023,7 @@ abstract class AbstractBuildForm { // Log / Debug: Last FormElement has been processed. $this->store->setVar(SYSTEM_FORM_ELEMENT, '', STORE_SYSTEM); + $this->store->setVar(SYSTEM_FORM_ELEMENT_ID, 0, STORE_SYSTEM); return $html; } @@ -4382,6 +4383,9 @@ EOT; } } + $this->store->setVar(SYSTEM_FORM_ELEMENT, '', STORE_SYSTEM); + $this->store->setVar(SYSTEM_FORM_ELEMENT_ID, 0, STORE_SYSTEM); + return $tgMax; } diff --git a/extension/Classes/Core/Database/Database.php b/extension/Classes/Core/Database/Database.php index 6a65c9d065b111d9f5c2401a1af9904f3d15ef04..bf54df5db85b29201f8020007bb61bc422978509 100644 --- a/extension/Classes/Core/Database/Database.php +++ b/extension/Classes/Core/Database/Database.php @@ -462,6 +462,7 @@ class Database { case 'SHOW': case 'DESCRIBE': case 'EXPLAIN': + case 'WITH': if (false === ($result = $this->mysqli_stmt->get_result())) { throw new \DbException( json_encode([ERROR_MESSAGE_TO_USER => 'Error DB execute', ERROR_MESSAGE_TO_DEVELOPER => '[ mysqli: ' . $this->mysqli_stmt->errno . ' ] ' . $this->mysqli_stmt->error . $specificMessage]), @@ -617,11 +618,15 @@ class Database { ['level', SYSTEM_REPORT_FULL_LEVEL, STORE_SYSTEM], ['form', SIP_FORM, STORE_SIP], ['fslId', EXTRA_FORM_SUBMIT_LOG_ID, STORE_EXTRA], + ['feId', SYSTEM_FORM_ELEMENT_ID, STORE_SYSTEM] ]; $t3msg = ''; foreach ($logArr as $logItem) { $value = $this->store->getVar($logItem[1], $logItem[2]); + if($logItem[0] == 'feId' && empty($value)) { + $value='all'; + } if (!empty($value)) { $t3msg .= $logItem[0] . ":" . $value . ","; } diff --git a/extension/Classes/Core/Evaluate.php b/extension/Classes/Core/Evaluate.php index c82ba2f867dec33185f9746467b5a649851b4237..83305b1e5afe4486e4b2c53d19a1da8b21c86fa8 100644 --- a/extension/Classes/Core/Evaluate.php +++ b/extension/Classes/Core/Evaluate.php @@ -51,7 +51,7 @@ class Evaluate { private $startDelimiterLength = 0; private $endDelimiter = ''; private $endDelimiterLength = 0; - private $sqlKeywords = array('SELECT ', 'INSERT ', 'DELETE ', 'UPDATE ', 'SHOW ', 'REPLACE ', 'TRUNCATE ', 'DESCRIBE ', 'EXPLAIN ', 'SET '); + private $sqlKeywords = array('SELECT ', 'INSERT ', 'DELETE ', 'UPDATE ', 'SHOW ', 'REPLACE ', 'TRUNCATE ', 'DESCRIBE ', 'EXPLAIN ', 'SET ', 'WITH '); private $escapeTypeDefault = ''; private $report = null; diff --git a/extension/Classes/Core/Form/FormAction.php b/extension/Classes/Core/Form/FormAction.php index 7fafa677f3baaade12646c314344989843282199..c99ccc28a532334b7f78f00e285e213c1eea37da 100644 --- a/extension/Classes/Core/Form/FormAction.php +++ b/extension/Classes/Core/Form/FormAction.php @@ -230,6 +230,8 @@ class FormAction { break; } } + $this->store->setVar(SYSTEM_FORM_ELEMENT, '', STORE_SYSTEM); + $this->store->setVar(SYSTEM_FORM_ELEMENT_ID, 0, STORE_SYSTEM); return $rc; } diff --git a/extension/Classes/Core/Save.php b/extension/Classes/Core/Save.php index 0d57b363ecd9690a3129d4fcf4c30eeef83f87bf..a47aa3a2d42c39aae87ee01129c4739e5ade90a0 100644 --- a/extension/Classes/Core/Save.php +++ b/extension/Classes/Core/Save.php @@ -644,9 +644,14 @@ class Save { $this->store->setVar(SYSTEM_FORM_ELEMENT, Logger::formatFormElementName($fe), STORE_SYSTEM); $this->store->setVar(SYSTEM_FORM_ELEMENT_ID, $fe[FE_ID], STORE_SYSTEM); + $this->formAction->doSqlBeforeSlaveAfter($fe, $recordId, false); $this->typeAheadDoTagGlue($fe); } + + $this->store->setVar(SYSTEM_FORM_ELEMENT, '', STORE_SYSTEM); + $this->store->setVar(SYSTEM_FORM_ELEMENT_ID, 0, STORE_SYSTEM); + } /** @@ -910,6 +915,10 @@ class Save { } } + $this->store->setVar(SYSTEM_FORM_ELEMENT, '', STORE_SYSTEM); + $this->store->setVar(SYSTEM_FORM_ELEMENT_ID, 0, STORE_SYSTEM); + + // Clean up HelperFile::chdir($cwd); @@ -1112,6 +1121,9 @@ class Save { } } + $this->store->setVar(SYSTEM_FORM_ELEMENT, '', STORE_SYSTEM); + $this->store->setVar(SYSTEM_FORM_ELEMENT_ID, 0, STORE_SYSTEM); + // Save 'allRequiredGiven in STORE_VAR $this->store::setVar(VAR_ALL_REQUIRED_GIVEN, $flagAllRequiredGiven, STORE_VAR, true); } diff --git a/javascript/src/Main.js b/javascript/src/Main.js index 694165c2d6b7c68092a3c1c13126b94e54de4ced..c01bcbe92306fd428521c7dd187a219620484a54 100644 --- a/javascript/src/Main.js +++ b/javascript/src/Main.js @@ -205,8 +205,44 @@ $(document).ready( function () { }); }; + n.initializeIgnoreHistoryBtn = function () { + // Attaching the event listener to the document + document.addEventListener('click', function(event) { + var element = event.target; + + // Traverse up to find the element with 'data-ignore-history' + while (element && !element.hasAttribute('data-ignore-history')) { + element = element.parentNode; + if (element === document) { + return; // Exit if reached the document without finding the target + } + } + + if (element) { + handleIgnoreHistoryClick(event, element); + } + }); + }; + + function handleIgnoreHistoryClick(event, element) { + event.preventDefault(); + let alertButton = document.querySelector('.alert-interactive .btn-group button:first-child'); + let url = element.href; + + if (alertButton) { + alertButton.onclick = function() { + if (url) { + window.location.replace(url); + } + }; + } else { + window.location.replace(url); + } + } + n.initializeQfqClearMe(); n.initializeDatetimepicker(); + n.initializeIgnoreHistoryBtn(); n.Helper.calendar(); FilePond.registerPlugin(FilePondPluginFileValidateSize); diff --git a/less/qfq-bs.css.less b/less/qfq-bs.css.less index 38f736b0e4e93186e3725353299be379b1290fd8..f33c79badb831bf2308272ba241c42a5990c114d 100644 --- a/less/qfq-bs.css.less +++ b/less/qfq-bs.css.less @@ -1424,6 +1424,7 @@ thead.qfq-sticky td { .dropdown-menu { z-index: 991; + min-width: max-content; } // No colorized badges in BS3: make our own