*/ protected function getOnFieldChangeItems(array $items): array { if ($items === []) { return []; } return array_map( static function (OnFieldChangeInterface $item): array { return $item->toArray(); }, array_values($items) ); } /** * @param string $event target client event, either `change` or `click` * @param list $items `fieldChangeFunc` items * @return array HTML attrs, not encoded - consumers MUST encode with `htmlspecialchars` */ protected function getOnFieldChangeAttrs(string $event, array $items): array { if ($items === []) { return []; } $onFieldChangeItems = $this->getOnFieldChangeItems($items); return [ 'data-formengine-field-change-event' => $event, 'data-formengine-field-change-items' => GeneralUtility::jsonEncodeForHtmlAttribute($onFieldChangeItems, false), ]; } /** * Forwards URL query params for `LinkBrowserController` * @param list $items `fieldChangeFunc` items * @return array{fieldChangeFunc: array, fieldChangeFuncHash: string} relevant URL query params for `LinkBrowserController` */ protected function forwardOnFieldChangeQueryParams(array $items): array { $func = $this->getOnFieldChangeItems($items); $hashService = GeneralUtility::makeInstance(HashService::class); return [ 'fieldChangeFunc' => $func, 'fieldChangeFuncHash' => $hashService->hmac(serialize($func), 'backend-link-browser'), ]; } }