diff --git a/extension/Classes/Core/AbstractBuildForm.php b/extension/Classes/Core/AbstractBuildForm.php index 8b032674bea11135326c55d9673c74dec2d5c1b4..af47ea23b9bf2efad711c4a48a6c4d01bc18f498 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 f21d4c7851382ef9c3d195dfb6dae39f325a5f5f..9cb408106a8d6e75448dfe077d02f2a6b854592f 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(); }