From cd850266d632ef64ac261287e3c0e7566a91b383 Mon Sep 17 00:00:00 2001 From: elvill Date: Sat, 27 Feb 2021 13:58:05 +0100 Subject: [PATCH] Fixes #5444. Typeahead FE value is now prefetched after save. --- extension/Classes/Core/AbstractBuildForm.php | 7 +++++++ extension/Classes/Core/Form/TypeAhead.php | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/extension/Classes/Core/AbstractBuildForm.php b/extension/Classes/Core/AbstractBuildForm.php index 8b032674..af47ea23 100644 --- a/extension/Classes/Core/AbstractBuildForm.php +++ b/extension/Classes/Core/AbstractBuildForm.php @@ -11,6 +11,7 @@ namespace IMATHUZH\Qfq\Core; use IMATHUZH\Qfq\Core\Database\Database; use IMATHUZH\Qfq\Core\Form\Checkbox; use IMATHUZH\Qfq\Core\Form\FormAsFile; +use IMATHUZH\Qfq\Core\Form\TypeAhead; use IMATHUZH\Qfq\Core\Helper\HelperFile; use IMATHUZH\Qfq\Core\Helper\HelperFormElement; use IMATHUZH\Qfq\Core\Helper\KeyValueStringParser; @@ -846,6 +847,12 @@ abstract class AbstractBuildForm { // Retrieve value via FSRVD $sanitizeClass = ($mode == FORM_UPDATE) ? SANITIZE_ALLOW_ALL : $formElement[FE_CHECK_TYPE]; $value = $this->store->getVar($name, $storeUse, $sanitizeClass, $foundInStore); + + // For typeAhead fields: perform prefetch to display description instead of key (#5444) + if ($mode == FORM_SAVE && isset($fe[FE_TYPEAHEAD_SQL_PREFETCH])) { + $config = [FE_TYPEAHEAD_SQL_PREFETCH => $fe[FE_TYPEAHEAD_SQL_PREFETCH]]; + $value = TypeAhead::typeAheadSqlPrefetch($config, $value, $this->dbArray[$this->dbIndexData]); + } } if ($formElement[FE_ENCODE] === FE_ENCODE_SPECIALCHAR) { diff --git a/extension/Classes/Core/Form/TypeAhead.php b/extension/Classes/Core/Form/TypeAhead.php index f21d4c78..9cb40810 100644 --- a/extension/Classes/Core/Form/TypeAhead.php +++ b/extension/Classes/Core/Form/TypeAhead.php @@ -83,7 +83,7 @@ class TypeAhead { if($this->vars[TYPEAHEAD_API_PREFETCH] == '') { $arr = $this->typeAheadSql($sipVars, $this->vars[TYPEAHEAD_API_QUERY]); } else { - $arr = $this->typeAheadSqlPrefetch($sipVars, $this->vars[TYPEAHEAD_API_PREFETCH]); + $arr = $this->typeAheadSqlPrefetch($sipVars, $this->vars[TYPEAHEAD_API_PREFETCH], $this->db); } } elseif (isset($sipVars[FE_LDAP_SERVER])) { $ldap = new Ldap(); @@ -155,7 +155,7 @@ class TypeAhead { * @throws \UserFormException */ - private function typeAheadSqlPrefetch(array $config, $key) { + public static function typeAheadSqlPrefetch(array $config, $key, $db) { $keys = array(); $sql = $config[FE_TYPEAHEAD_SQL_PREFETCH]; @@ -172,7 +172,7 @@ class TypeAhead { $keys[] = $key; } - $arr = $this->db->sql($sql, ROW_REGULAR, $keys); + $arr = $db->sql($sql, ROW_REGULAR, $keys); if ($arr == false || count($arr) == 0) { return array(); } -- GitLab