ILIAS  trunk Revision v12.0_alpha-1227-g7ff6d300864
MultiSelect.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
24use ILIAS\Data\Factory as DataFactory;
26use Closure;
27
32{
34
38 public function __construct(
39 DataFactory $data_factory,
41 string $label,
42 array $options,
43 ?string $byline
44 ) {
45 parent::__construct($data_factory, $refinery, $label, $byline);
46 $this->options = $options;
47 }
48
52 protected function isClientSideValueOk($value): bool
53 {
54 if (is_null($value)) {
55 return true;
56 }
57 if (is_array($value)) {
58 foreach ($value as $v) {
59 if (!array_key_exists($v, $this->options)) {
60 return false;
61 }
62 }
63 return true;
64 }
65 return false;
66 }
67
72 {
73 if ($this->requirement_constraint !== null) {
74 return $this->requirement_constraint;
75 }
76
77 return $this->refinery->custom()->constraint(
78 fn($value) => is_array($value) && count($value) > 0,
79 "Empty"
80 );
81 }
82
86 public function getUpdateOnLoadCode(): Closure
87 {
88 return static fn($id) => <<<JS
89 (function () {
90 function reduceMultiSelectCheckboxInputs(inputs) {
91 return Array
92 .from(inputs)
93 .filter((input) => input.checked)
94 .map((input) => input.parentElement.querySelector('.c-field-multiselect__label-text')?.textContent ?? '')
95 .join(', ');
96 }
97 const multiSelectField = document.getElementById('$id');
98 const multiSelectCheckboxInputs = multiSelectField.querySelectorAll('.c-field-multiselect input[type="checkbox"]');
99 multiSelectCheckboxInputs.forEach((input) => {
100 input.addEventListener('input', (event) => {
101 il.UI.input.onFieldUpdate(event, '$id', reduceMultiSelectCheckboxInputs(multiSelectCheckboxInputs));
102 });
103 });
104 il.UI.input.onFieldUpdate(undefined, '$id', reduceMultiSelectCheckboxInputs(multiSelectCheckboxInputs));
105 })();
106JS;
107 }
108
112 public function isComplex(): bool
113 {
114 return true;
115 }
116}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
Factory for Date Formats.
Definition: Factory.php:27
Builds data types.
Definition: Factory.php:36
This implements the multi-select input.
Definition: MultiSelect.php:32
getUpdateOnLoadCode()
Get update code.This method has to return JS code that calls il.UI.filter.onFieldUpdate(event,...
Definition: MultiSelect.php:86
__construct(DataFactory $data_factory, \ILIAS\Refinery\Factory $refinery, string $label, array $options, ?string $byline)
Definition: MultiSelect.php:38
A constraint encodes some resrtictions on values.
Definition: Constraint.php:32
This describes inputs that can be used in forms.
Definition: FormInput.php:33
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: Checkbox.php:21
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.