ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilADTGroupFormBridge.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22{
23 protected array $elements = [];
24
25 protected function isValidADT(ilADT $a_adt): bool
26 {
27 return ($a_adt instanceof ilADTGroup);
28 }
29
30 protected function prepareElements(): void
31 {
32 if (count($this->elements)) {
33 return;
34 }
35
36 $this->elements = array();
37 $factory = ilADTFactory::getInstance();
38
39 // convert ADTs to form bridges
40
41 foreach ($this->getADT()->getElements() as $name => $element) {
42 $this->elements[$name] = $factory->getFormBridgeForInstance($element);
43 $this->elements[$name]->setForm($this->getForm());
44 $this->elements[$name]->setElementId((string) $name);
45 }
46 }
47
48 public function getElements(): array
49 {
50 $this->prepareElements();
51 return $this->elements;
52 }
53
54 public function getElement(string $a_name): ?ilADTFormBridge
55 {
56 $this->prepareElements();
57 if (array_key_exists($a_name, $this->elements)) {
58 return $this->elements[$a_name];
59 }
60 return null;
61 }
62
63 public function addToForm(): void
64 {
65 if ($this->getTitle()) {
66 $section = new ilFormSectionHeaderGUI();
67 $section->setTitle($this->getTitle());
68
69 if ($this->getInfo()) {
70 $section->setInfo($this->getInfo());
71 }
72
73 $this->getForm()->addItem($section);
74 }
75
76 $this->prepareElements();
77 foreach ($this->elements as $element) {
78 $element->addToForm();
79 }
80 }
81
82 public function addJS(ilGlobalTemplateInterface $a_tpl): void
83 {
84 $this->prepareElements();
85 foreach ($this->elements as $element) {
86 $element->addJS($a_tpl);
87 }
88 }
89
90 public function importFromPost(): void
91 {
92 $this->prepareElements();
93 foreach ($this->elements as $element) {
94 // parse parent element
95 $parent = $element->getParentElement();
96 if ($parent) {
97 if (is_array($parent)) {
98 $parent = $parent[0];
99 }
100 $parent = $adt_forms[$parent] ?? null;
101 }
102 if ($element->shouldBeImportedFromPost($parent)) {
103 $element->importFromPost();
104 }
105 }
106 }
107
108 public function validate(): bool
109 {
110 $valid = true;
111
112 // ilADTFormBridge->isRequired() != ilADT->allowNull()
113 foreach ($this->getElements() as $element_id => $element) {
114 if ($element->isRequired() && $element->getADT()->isNull()) {
115 $field = $this->getForm()->getItemByPostVar($element_id);
116 $field->setAlert($this->lng->txt("msg_input_is_required"));
117 $valid = false;
118 } // #17232 - date time input GUI special case
119 elseif (!$element->validate()) {
120 $valid = false;
121 }
122 }
123
124 if (!$this->getADT()->isValid()) {
125 $tmp = array();
126
127 // map errors to elements
128
129 $mess = $this->getADT()->getValidationErrorsByElements();
130 foreach ($mess as $error_code => $element_id) {
131 $tmp[$element_id][] = $this->getADT()->translateErrorCode($error_code);
132 }
133
134 foreach ($tmp as $element_id => $errors) {
135 $field = $this->getForm()->getItemByPostVar((string) $element_id);
136 $field->setAlert(implode("<br />", $errors));
137 }
138
139 $valid = false;
140 }
141
142 return $valid;
143 }
144}
ADT form bridge base class.
importFromPost()
Import values from form request POST data.
addJS(ilGlobalTemplateInterface $a_tpl)
Add ADT-specific JS-files to template.
addToForm()
Add ADT-specific fields to form.
ADT base class.
Definition: class.ilADT.php:26
This class represents a section header in a property form.
$valid