ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilPCTableData.php
Go to the documentation of this file.
1<?php
2
24{
25 protected DOMNode $table_pc_node;
26
27 public function init(): void
28 {
29 $this->setType("td");
30 }
31
32 public function newRowAfter(int $cnt = 1): void
33 {
34 $this->initTablePCNode();
35 $td = $this->getDomNode();
36 $parent_tr = $td->parentNode;
37 for ($i = 1; $i <= $cnt; $i++) {
38 $new_tr = $parent_tr->cloneNode(true);
39
40 // remove pc ids
41 if ($new_tr->hasAttribute("PCID")) {
42 $new_tr->removeAttribute("PCID");
43 }
44 if ($next_tr = $parent_tr->nextSibling) {
45 $new_tr = $next_tr->parentNode->insertBefore($new_tr, $next_tr);
46 } else {
47 $parent_table = $parent_tr->parentNode;
48 $new_tr = $parent_table->appendChild($new_tr);
49 }
50
51 // remove td content of new row
52 $this->deleteRowContent($new_tr);
53 }
54 $this->fixHideAndSpans();
55 }
56
57
58 public function newRowBefore(int $cnt = 1): void
59 {
60 $this->initTablePCNode();
61 $td = $this->getDomNode();
62 $parent_tr = $td->parentNode;
63 for ($i = 1; $i <= $cnt; $i++) {
64 $new_tr = $parent_tr->cloneNode(true);
65 $new_tr = $parent_tr->parentNode->insertBefore($new_tr, $parent_tr);
66 if ($new_tr->hasAttribute("PCID")) {
67 $new_tr->removeAttribute("PCID");
68 }
69
70 // remove td content of new row
71 $this->deleteRowContent($new_tr);
72 }
73 $this->fixHideAndSpans();
74 }
75
76
80 public function deleteRowContent(
81 DOMNode $a_row_node
82 ): void {
83 // remove td content of row
84 foreach ($a_row_node->childNodes as $td) {
85 if ($td->hasAttribute("PCID")) {
86 $td->removeAttribute("PCID");
87 }
88 $this->dom_util->deleteAllChilds($td);
89 }
90 }
91
95 public function deleteTDContent(
96 DOMNode $a_td_node
97 ): void {
98 $this->dom_util->deleteAllChilds($a_td_node);
99 }
100
101 public function deleteRow(): void
102 {
103 $this->initTablePCNode();
104 $td = $this->getDomNode();
105 $parent_tr = $td->parentNode;
106 $parent_tr->parentNode->removeChild($parent_tr);
107 $this->fixHideAndSpans();
108 }
109
110 public function newColAfter(int $cnt = 1): void
111 {
112 $this->initTablePCNode();
113 $td = $this->getDomNode();
114
115 // determine current column nr
116 $hier_id = $this->getHierId();
117 $parts = explode("_", $hier_id);
118 $col_nr = array_pop($parts);
119 $col_nr--;
120
121 $parent_tr = $td->parentNode;
122 $parent_table = $parent_tr->parentNode;
123
124 for ($i = 1; $i <= $cnt; $i++) {
125 // iterate all table rows
126 foreach ($parent_table->childNodes as $row) {
127 if ($row->nodeName == "TableRow") {
128 // clone td at $col_nr
129 $tds = $row->childNodes;
130 $old_td = $tds->item($col_nr);
131 $new_td = $old_td->cloneNode(true);
132
133 if ($new_td->hasAttribute("PCID")) {
134 $new_td->removeAttribute("PCID");
135 }
136
137 // insert clone after $col_nr
138 if ($next_td = $old_td->nextSibling) {
139 $new_td = $next_td->parentNode->insertBefore($new_td, $next_td);
140 } else {
141 $new_td = $row->appendChild($new_td);
142 }
143 $this->deleteTDContent($new_td);
144 }
145 }
146 }
147 $this->fixHideAndSpans();
148 }
149
150 public function newColBefore(int $cnt = 1): void
151 {
152 $this->initTablePCNode();
153 $td = $this->getDomNode();
154
155 // determine current column nr
156 $hier_id = $this->getHierId();
157 $parts = explode("_", $hier_id);
158 $col_nr = array_pop($parts);
159 $col_nr--;
160 $parent_tr = $td->parentNode;
161 $parent_table = $parent_tr->parentNode;
162
163 for ($i = 1; $i <= $cnt; $i++) {
164 // iterate all table rows
165 foreach ($parent_table->childNodes as $row) {
166 if ($row->nodeName == "TableRow") {
167 // clone td at $col_nr
168 $tds = $row->childNodes;
169 $old_td = $tds->item($col_nr);
170 $new_td = $old_td->cloneNode(true);
171
172 if ($new_td->hasAttribute("PCID")) {
173 $new_td->removeAttribute("PCID");
174 }
175
176 // insert clone before $col_nr
177 $new_td = $old_td->parentNode->insertBefore($new_td, $old_td);
178 $this->deleteTDContent($new_td);
179 }
180 }
181 }
182 $this->fixHideAndSpans();
183 }
184
185 public function deleteCol(): void
186 {
187 $this->initTablePCNode();
188 $td = $this->getDomNode();
189
190 // determine current column nr
191 $hier_id = $this->getHierId();
192 $parts = explode("_", $hier_id);
193 $col_nr = array_pop($parts);
194 $col_nr--;
195
196 $parent_tr = $td->parentNode;
197 $parent_table = $parent_tr->parentNode;
198
199 // iterate all table rows
200 foreach ($parent_table->childNodes as $row) {
201 if ($row->nodeName == "TableRow") {
202 // unlink td at $col_nr
203 $tds = $row->childNodes;
204 $tds->item($col_nr)->parentNode->removeChild($tds->item($col_nr));
205 }
206 }
207 $this->fixHideAndSpans();
208 }
209
210 public function moveRowDown(): void
211 {
212 $this->initTablePCNode();
213 $td = $this->getDomNode();
214 $tr = $td->parentNode;
215 $next = $tr->nextSibling;
216 $next_copy = $next->cloneNode(true);
217 $next_copy = $tr->parentNode->insertBefore($next_copy, $tr);
218 $next->parentNode->removeChild($next);
219 $this->fixHideAndSpans();
220 }
221
222 public function moveRowUp(): void
223 {
224 $this->initTablePCNode();
225 $td = $this->getDomNode();
226 $tr = $td->parentNode;
227 $prev = $tr->previousSibling;
228 $tr_copy = $tr->cloneNode(true);
229 $tr_copy = $prev->parentNode->insertBefore($tr_copy, $prev);
230 $tr->parentNode->removeChild($tr);
231 $this->fixHideAndSpans();
232 }
233
234 public function moveColRight(): void
235 {
236 $this->initTablePCNode();
237 $td = $this->getDomNode();
238
239 // determine current column nr
240 $hier_id = $this->getHierId();
241 $parts = explode("_", $hier_id);
242 $col_nr = array_pop($parts);
243 $col_nr--;
244
245 $parent_tr = $td->parentNode;
246 $parent_table = $parent_tr->parentNode;
247
248 // iterate all table rows
249 foreach ($parent_table->childNodes as $row) {
250 if ($row->nodeName == "TableRow") {
251 $tds = $row->childNodes;
252 $td = $tds->item($col_nr);
253 $next = $td->nextSibling;
254 $next_copy = $next->cloneNode(true);
255 $next_copy = $td->parentNode->insertBefore($next_copy, $td);
256 $next->parentNode->removeChild($next);
257 }
258 }
259 $this->fixHideAndSpans();
260 }
261
262 public function moveColLeft(): void
263 {
264 $this->initTablePCNode();
265 $td = $this->getDomNode();
266
267 // determine current column nr
268 $hier_id = $this->getHierId();
269 $parts = explode("_", $hier_id);
270 $col_nr = array_pop($parts);
271 $col_nr--;
272
273 $parent_tr = $td->parentNode;
274 $parent_table = $parent_tr->parentNode;
275
276 // iterate all table rows
277 foreach ($parent_table->childNodes as $row) {
278 if ($row->nodeName == "TableRow") {
279 $tds = $row->childNodes;
280 $td = $tds->item($col_nr);
281 $prev = $td->previousSibling;
282 $td_copy = $td->cloneNode(true);
283 $td_copy = $prev->parentNode->insertBefore($td_copy, $prev);
284 $td->parentNode->removeChild($td);
285 }
286 }
287 $this->fixHideAndSpans();
288 }
289
290 public function initTablePCNode(): void
291 {
292 $td = $this->getDomNode();
293 $tr = $td->parentNode;
294 $table = $tr->parentNode;
295 $this->table_pc_node = $table->parentNode;
296 }
297
298 public function fixHideAndSpans(): void
299 {
300 $table_obj = new ilPCTable($this->getPage());
301 $table_obj->setDomNode($this->table_pc_node);
302 $table_obj->readHierId();
303 $table_obj->readPCId();
304 $table_obj->fixHideAndSpans();
305 }
306}
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
deleteRowContent(DOMNode $a_row_node)
delete content of cells of a row (not the cells itself)
newRowAfter(int $cnt=1)
newColAfter(int $cnt=1)
init()
Init object.
newRowBefore(int $cnt=1)
deleteTDContent(DOMNode $a_td_node)
delete content of a cell (not the cell itself)
newColBefore(int $cnt=1)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Content object of ilPageObject (see ILIAS DTD).
setType(string $a_type)
Set Type.
if($clientAssertionType !='urn:ietf:params:oauth:client-assertion-type:jwt-bearer'|| $grantType !='client_credentials') $parts
Definition: ltitoken.php:61