field = $field; $this->data = $data; } public function getId(): string { return $this->getMultiselect()->getId(); } public function getLabel(): ?CLabel { $label = parent::getLabel(); if ($label !== null) { $label->setFor($this->getId().'_ms'); } return $label; } public function getView(): CMultiSelect { return $this->getMultiselect(); } private function getMultiselect(): CMultiSelect { if ($this->multiselect === null) { $multiselect_name = $this->field->getName().($this->field->isMultiple() ? '[]' : ''); $options = [ 'name' => $multiselect_name, 'object_name' => $this->getObjectName(), 'multiple' => $this->field->isMultiple(), 'data' => $this->data, 'add_post_js' => false ]; if ($this->custom_select) { $options['custom_select'] = true; } else { $options['popup'] = [ 'parameters' => [ 'dstfrm' => $this->form_name, 'dstfld1' => zbx_formatDomId($multiselect_name) ] + $this->getPopupParameters() ]; if ($this->filter_preselect) { $options['popup']['filter_preselect'] = $this->filter_preselect; } } $this->multiselect = (new CMultiSelect($options)) ->setWidth(ZBX_TEXTAREA_STANDARD_WIDTH) ->setAriaRequired($this->isRequired()); } return $this->multiselect; } public function getJavaScript(): string { return $this->getView()->getPostJS(); } public function setFilterPreselect(array $filter_preselect): self { $this->filter_preselect = $filter_preselect; return $this; } public function setPopupParameter(string $name, $value): self { $this->popup_parameters[$name] = $value; return $this; } protected function getPopupParameters(): array { return $this->popup_parameters; } protected function getObjectName(): string { return ''; } }