[
'renderType' => 'localizationStateSelector',
],
'otherLanguageContent' => [
'renderType' => 'otherLanguageContent',
'after' => [
'localizationStateSelector',
],
],
'defaultLanguageDifferences' => [
'renderType' => 'defaultLanguageDifferences',
'after' => [
'otherLanguageContent',
],
],
];
public function __construct(
private readonly IconFactory $iconFactory,
private readonly IconRegistry $iconRegistry,
) {}
/**
* This will render a checkbox or an array of checkboxes
*
* @return array As defined in initializeResultArray() of AbstractNode
*/
public function render(): array
{
$resultArray = $this->initializeResultArray();
$elementHtml = '';
$disabled = false;
if ($this->data['parameterArray']['fieldConf']['config']['readOnly'] ?? false) {
$disabled = true;
}
// Traversing the array of items
$items = $this->data['parameterArray']['fieldConf']['config']['items'] ?? [];
$numberOfItems = count($items);
if ($numberOfItems === 0) {
$items[] = ['label' => ''];
$numberOfItems = 1;
}
$formElementValue = (int)$this->data['parameterArray']['itemFormElValue'];
$cols = (int)($this->data['parameterArray']['fieldConf']['config']['cols'] ?? 0);
if ($cols > 1) {
$elementHtml .= '
';
// $itemKey is important here, because items could have been removed via TSConfig
foreach ($items as $itemKey => $itemDefinition) {
$label = $itemDefinition['label'];
$elementHtml
.= '
';
if (!$disabled && !empty($fieldWizardHtml)) {
$html[] = '
';
$html[] = $fieldWizardHtml;
$html[] = '
';
}
$html[] = '
';
$html[] = '
';
$resultArray['html'] = $this->wrapWithFieldsetAndLegend(implode(LF, $html));
return $resultArray;
}
/**
* This functions builds the HTML output for the checkbox
*
* @param string $label Label of this item
* @param int $itemCounter Number of this element in the list of all elements
* @param int $formElementValue Value of this element
* @param int $numberOfItems Full number of items
* @param array $additionalInformation Information with additional configuration options.
* @param bool $disabled TRUE if form element is disabled
* @return string Single element HTML
*/
protected function renderSingleCheckboxElement($label, $itemCounter, $formElementValue, $numberOfItems, $additionalInformation, $disabled): string
{
$config = $additionalInformation['fieldConf']['config'];
$inline = !empty($config['cols']) && $config['cols'] === 'inline';
$invert = isset($config['items'][$itemCounter]['invertStateDisplay']) && $config['items'][$itemCounter]['invertStateDisplay'] === true;
$checkboxParameters = $this->checkBoxParams(
$additionalInformation['itemFormElName'],
$formElementValue,
$itemCounter,
$numberOfItems,
$additionalInformation['fieldChangeFunc'] ?? [],
$invert
);
$checkboxId = htmlspecialchars(StringUtility::getUniqueId('formengine-check-') . '-' . $itemCounter);
$iconIdentifierChecked = !empty($config['items'][$itemCounter]['iconIdentifierChecked']) ? $config['items'][$itemCounter]['iconIdentifierChecked'] : 'actions-check';
if (!$this->iconRegistry->isRegistered($iconIdentifierChecked)) {
$iconIdentifierChecked = 'actions-check';
}
$iconIdentifierUnchecked = !empty($config['items'][$itemCounter]['iconIdentifierUnchecked']) ? $config['items'][$itemCounter]['iconIdentifierUnchecked'] : 'empty-empty';
if (!$this->iconRegistry->isRegistered($iconIdentifierUnchecked)) {
$iconIdentifierUnchecked = 'empty-empty';
}
$iconChecked = $this->iconFactory->getIcon($iconIdentifierChecked, IconSize::SMALL)->render('inline');
$iconUnchecked = $this->iconFactory->getIcon($iconIdentifierUnchecked, IconSize::SMALL)->render('inline');
return '