ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilPCDataTableGUI.php
Go to the documentation of this file.
1<?php
2
25{
26 protected \ILIAS\HTTP\Services $http;
28
29 public function __construct(
30 ilPageObject $a_pg_obj,
31 ?ilPageContent $a_content_obj,
32 string $a_hier_id,
33 string $a_pc_id = ""
34 ) {
35 global $DIC;
36
37 $this->main_tpl = $DIC->ui()->mainTemplate();
38 $this->lng = $DIC->language();
39 $this->ctrl = $DIC->ctrl();
40 $this->tabs = $DIC->tabs();
41 parent::__construct($a_pg_obj, $a_content_obj, $a_hier_id, $a_pc_id);
42 $this->setCharacteristics(array("StandardTable" => $this->lng->txt("cont_StandardTable")));
43 $this->tool_context = $DIC->globalScreen()->tool()->context();
44 $this->http = $DIC->http();
45 }
46
47 protected function getFormTitle(string $a_mode = "edit"): string
48 {
49 if ($a_mode === "create") {
50 return $this->lng->txt("cont_ed_insert_dtab");
51 }
52 return $this->lng->txt("cont_table_properties");
53 }
54
59 public function executeCommand()
60 {
61 $this->getCharacteristicsOfCurrentStyle(["table"]); // scorm-2004
62
63 // get next class that processes or forwards current command
64 $next_class = $this->ctrl->getNextClass($this);
65
66 // get current command
67 $cmd = $this->ctrl->getCmd();
68
69 switch ($next_class) {
70 default:
71 $ret = $this->$cmd();
72 break;
73 }
74
75 return $ret;
76 }
77
78
82
86 public function update(bool $a_redirect = true): void
87 {
89
90 // handle input data
91 $data = array();
92 $cell = $this->request->getArrayArray("cell");
93 if (is_array($cell)) {
94 foreach ($cell as $i => $row) {
95 if (is_array($row)) {
96 foreach ($row as $j => $cell) {
97 $data[$i][$j] =
99 $cell,
100 $this->content_obj->getLanguage()
101 );
102 }
103 }
104 }
105 }
106
107 $this->updated = $this->content_obj->setData($data);
108
109 if ($this->updated !== true) {
110 $this->editData();
111 return;
112 }
113
114 $this->updated = $this->pg_obj->update();
115
116 if ($a_redirect) {
117 $this->main_tpl->setOnScreenMessage('success', $lng->txt("msg_obj_modified"), true);
118 $this->ctrl->redirect($this, "editData");
119 }
120 }
121
125 public function updateJS(): void
126 {
128 $ilCtrl = $this->ctrl;
129
130 if ($this->request->getString("cancel_update") != "") {
131 // $this->ctrl->redirect($this, "editData");
132 $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
133 }
134
135 // handle input data
136 $data = array();
137 $post = $this->http->request()->getParsedBody();
138 foreach ($post as $k => $content) {
139 if (substr($k, 0, 5) != "cell_") {
140 continue;
141 }
142
143 // determine cell content
144 $div = ilUtil::stripSlashes($content, false);
145 $p1 = strpos($div, '>');
146 $div = substr($div, $p1 + 1);
147 $div = "<div class='ilc_text_block_TableContent'>" . $div;
149 if ($text === false) {
150 $ilCtrl->returnToParent($this, "jump" . $this->hier_id);
151 }
152 $text = $text["text"];
153
155 $text,
156 $this->content_obj->getLanguage(),
157 true,
158 false
159 );
161
162 // set content in data array
163 $id = explode("_", $k);
164 $data[(int) $id[1]][(int) $id[2]] = $text;
165 }
166
167 // update data
168 $this->updated = $this->content_obj->setData($data);
169
170 if ($this->updated !== true) {
171 $this->editData();
172 return;
173 }
174
175 $this->updated = $this->pg_obj->update();
176
177 $tab_cmd_id = $this->request->getInt("tab_cmd_id");
178 $tab_cmd_type = $this->request->getString("tab_cmd_type");
179 $tab_cmd = $this->request->getString("tab_cmd");
180
181 // perform table action? (move...?)
182 //$this->update(false);
183 $this->pg_obj->addHierIDs();
184 $failed = false;
185 if ($tab_cmd != "") {
186 $cell_hier_id = ($tab_cmd_type == "col")
187 ? $this->hier_id . "_1_" . ($tab_cmd_id + 1)
188 : $this->hier_id . "_" . ($tab_cmd_id + 1) . "_1";
189 $cell_obj = $this->pg_obj->getContentObject($cell_hier_id);
190 if (is_object($cell_obj)) {
191 $cell_obj->$tab_cmd();
192 $ret = $this->pg_obj->update();
193 if ($ret !== true) {
194 $this->main_tpl->setOnScreenMessage('failure', $ret[0][1], true);
195 $failed = true;
196 }
197 }
198 }
199
200 if (!$failed) {
201 $this->main_tpl->setOnScreenMessage('success', $lng->txt("msg_obj_modified"), true);
202 }
203 if ($this->request->getString("save_return") != "") {
204 $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
205 } else {
206 $this->ctrl->redirect($this, "editData");
207 }
208 }
209
210
215 {
216 return new ilPCDataTable($this->getPage());
217 }
218
222 public function afterCreation(): void
223 {
224 $ilCtrl = $this->ctrl;
225
226 $this->pg_obj->stripHierIDs();
227 $this->pg_obj->addHierIDs();
228 $ilCtrl->setParameter($this, "hier_id", $this->content_obj->readHierId());
229 $ilCtrl->setParameter($this, "pc_id", $this->content_obj->readPCId());
230 $ilCtrl->redirect($this, "editData");
231 }
232
236 public function tableAction(): void
237 {
238 $ilCtrl = $this->ctrl;
239
240 $this->update(false);
241 $this->pg_obj->addHierIDs();
242
243 $type = $this->request->getString("type");
244 $action = $this->request->getString("action");
245 $id = $this->request->getInt("id");
246
247 $cell_hier_id = ($type == "col")
248 ? $this->hier_id . "_1_" . ($id + 1)
249 : $this->hier_id . "_" . ($id + 1) . "_1";
250 $cell_obj = $this->pg_obj->getContentObject($cell_hier_id);
251 if (is_object($cell_obj)) {
252 $cell_obj->$action();
253 $this->edit_repo->setPageError($this->pg_obj->update());
254 }
255 $ilCtrl->redirect($this, "editData");
256 }
257
261 public function setTabs(string $data_tab_txt_key = ""): void
262 {
263 parent::setTabs("cont_ed_edit_data");
264 }
265
266 protected function getCellContent(int $i, int $j): string
267 {
268 $cmd = $this->ctrl->getCmd();
269 if ($cmd == "update") {
270 $s_text = ilUtil::stripSlashes("cell_" . $i . "_" . $j, false);
271 } else {
273 $this->content_obj->getCellText($i, $j),
274 true,
275 false
276 );
278 $s_text,
279 "TableContent",
280 $this->content_obj->readPCId() . "_" . $i . "_" . $j
281 );
282 }
283
284 // #20628
285 $s_text = str_replace("{", "&#123;", $s_text);
286 $s_text = str_replace("}", "&#125;", $s_text);
287 return $s_text;
288 }
289
290 public function initCreationForm(
292
293 $a_seleted_value = "";
294 $ilCtrl = $this->ctrl;
296 $ilUser = $this->user;
297
298 $form = new ilPropertyFormGUI();
299 $form->setFormAction($ilCtrl->getFormAction($this));
300 $form->setShowTopButtons(false);
301 $form->setTitle($this->getFormTitle("create"));
302
303 $nr = array();
304 for ($i = 1; $i <= 20; $i++) {
305 $nr[$i] = $i;
306 }
307
308 // cols
309 $cols = new ilSelectInputGUI($this->lng->txt("cont_nr_cols"), "nr_cols");
310 $cols->setOptions($nr);
311 $cols->setValue(2);
312 $form->addItem($cols);
313
314 // rows
315 $rows = new ilSelectInputGUI($this->lng->txt("cont_nr_rows"), "nr_rows");
316 $rows->setOptions($nr);
317 $rows->setValue(2);
318 $form->addItem($rows);
319
320 // table templates and table classes
321 $char_prop = new ilSelectInputGUI(
322 $this->lng->txt("cont_table_style"),
323 "characteristic"
324 );
325 $chars = $this->getCharacteristics();
326 $templates = $this->getTemplateOptions();
327 $chars = array_merge($templates, $chars);
328 if (is_object($this->content_obj)) {
329 if (($chars[$a_seleted_value] ?? "") == "" && ($this->content_obj->getClass() != "")) {
330 $chars = array_merge(
331 array($this->content_obj->getClass() => $this->content_obj->getClass()),
332 $chars
333 );
334 }
335 }
336 $options = [];
337 foreach ($chars as $k => $char) {
338 if (strpos($k, ":") > 0) {
339 $t = explode(":", $k);
340 $html = $this->style->lookupTemplatePreview($t[1]) . '<div style="clear:both;" class="small">' . $char . "</div>";
341 } else {
342 $html = '<table class="ilc_table_' . $k . '"><tr><td class="small">' .
343 $char . '</td></tr></table>';
344 }
345 //$char_prop->addOption($k, $char, $html);
346 $options[$k] = $char;
347 }
348 if (count($chars) > 1) {
349 $char_prop->setOptions($options);
350 $char_prop->setValue("StandardTable");
351 $form->addItem($char_prop);
352 }
353
354 // row header
355 $cb = new ilCheckboxInputGUI($lng->txt("cont_has_row_header"), "has_row_header");
356 $form->addItem($cb);
357
358 $form->addCommandButton("create", $lng->txt("save"));
359 $form->addCommandButton("cancelCreate", $lng->txt("cancel"));
360
361 return $form;
362 }
363
364 public function initEditingForm(
366
367 $a_seleted_value = "";
368 $ilCtrl = $this->ctrl;
370 $ilUser = $this->user;
371
372 $form = new ilPropertyFormGUI();
373 $form->setFormAction($ilCtrl->getFormAction($this));
374 $form->setShowTopButtons(false);
375 $form->setTitle($this->getFormTitle("edit"));
376
377 // table templates and table classes
378 $char_prop = new ilSelectInputGUI(
379 $this->lng->txt("cont_table_style"),
380 "characteristic"
381 );
382 $chars = $this->getCharacteristics();
383 $templates = $this->getTemplateOptions();
384 $chars = array_merge($templates, $chars);
385 if (is_object($this->content_obj)) {
386 if (($chars[$a_seleted_value] ?? "") == "" && ($this->content_obj->getClass() != "")) {
387 $chars = array_merge(
388 array($this->content_obj->getClass() => $this->content_obj->getClass()),
389 $chars
390 );
391 }
392 }
393 $options = [];
394 foreach ($chars as $k => $char) {
395 if (strpos($k, ":") > 0) {
396 $t = explode(":", $k);
397 $html = $this->style->lookupTemplatePreview($t[1]) . '<div style="clear:both;" class="small">' . $char . "</div>";
398 } else {
399 $html = '<table class="ilc_table_' . $k . '"><tr><td class="small">' .
400 $char . '</td></tr></table>';
401 }
402 //$char_prop->addOption($k, $char, $html);
403 $options[$k] = $char;
404 }
405 $char_prop->setOptions($options);
406 if (count($chars) > 1) {
407 if ($this->content_obj->getTemplate() !== "") {
408 $val = "t:" .
409 ilObjStyleSheet::_lookupTemplateIdByName($this->getStyleId(), $this->content_obj->getTemplate()) . ":" .
410 $this->content_obj->getTemplate();
411 } else {
412 $val = $this->content_obj->getClass();
413 }
414 $char_prop->setValue($val);
415 $form->addItem($char_prop);
416 }
417
418 // row header
419 $cb = new ilCheckboxInputGUI($lng->txt("cont_has_row_header"), "has_row_header");
420 if ($this->content_obj->getHeaderRows() > 0) {
421 $cb->setChecked(true);
422 }
423 $form->addItem($cb);
424
425 return $form;
426 }
427
428 public function initImportForm(
430
431 $a_seleted_value = "";
432 $ilCtrl = $this->ctrl;
434 $ilUser = $this->user;
435
436 $form = new ilPropertyFormGUI();
437 $form->setFormAction($ilCtrl->getFormAction($this));
438 $form->setShowTopButtons(false);
439 $form->setTitle($this->getFormTitle("create"));
440
441 $hi = new ilHiddenInputGUI("import");
442 $hi->setValue("1");
443 $form->addItem($hi);
444
445 $import_data = new ilTextAreaInputGUI("", "import_table");
446 $import_data->setInfo($this->lng->txt("cont_table_import_info"));
447 $import_data->setRows(8);
448 $import_data->setCols(50);
449 $form->addItem($import_data);
450
451 // table templates and table classes
452 $char_prop = new ilSelectInputGUI(
453 $this->lng->txt("cont_table_style"),
454 "import_characteristic"
455 );
456 $chars = $this->getCharacteristics();
457 $templates = $this->getTemplateOptions();
458 $chars = array_merge($templates, $chars);
459 if (is_object($this->content_obj)) {
460 if (($chars[$a_seleted_value] ?? "") == "" && ($this->content_obj->getClass() != "")) {
461 $chars = array_merge(
462 array($this->content_obj->getClass() => $this->content_obj->getClass()),
463 $chars
464 );
465 }
466 }
467 $options = [];
468 foreach ($chars as $k => $char) {
469 if (strpos($k, ":") > 0) {
470 $t = explode(":", $k);
471 $html = $this->style->lookupTemplatePreview($t[1]) . '<div style="clear:both;" class="small">' . $char . "</div>";
472 } else {
473 $html = '<table class="ilc_table_' . $k . '"><tr><td class="small">' .
474 $char . '</td></tr></table>';
475 }
476 //$char_prop->addOption($k, $char, $html);
477 $options[$k] = $char;
478 }
479 if (count($chars) > 1) {
480 $char_prop->setOptions($options);
481 $char_prop->setValue("StandardTable");
482 $form->addItem($char_prop);
483 }
484
485 // row header
486 $cb = new ilCheckboxInputGUI($lng->txt("cont_has_row_header"), "has_row_header");
487 $form->addItem($cb);
488
489
490 $form->addCommandButton("create", $lng->txt("save"));
491 $form->addCommandButton("cancelCreate", $lng->txt("cancel"));
492
493 return $form;
494 }
495
496 public function initCellPropertiesForm(
498
499 $ilCtrl = $this->ctrl;
501 $ilUser = $this->user;
502
503 $form = new ilPropertyFormGUI();
504 $form->setFormAction($ilCtrl->getFormAction($this));
505 $form->setShowTopButtons(false);
506 $form->setTitle($this->lng->txt("cont_cell_properties"));
507
508 $style_cb = new ilCheckboxInputGUI($lng->txt("cont_change_style"), "style_cb");
509
510 $style = new ilSelectInputGUI(
511 $this->lng->txt("cont_style"),
512 "style"
513 );
514 //$style->setPullRight(false);
515 $this->setBasicTableCellStyles();
516 $this->getCharacteristicsOfCurrentStyle(["table_cell"]); // scorm-2004
517 $chars = $this->getCharacteristics(); // scorm-2004
518 $options = array_merge(array("" => $this->lng->txt("none")), $chars); // scorm-2004
519 foreach ($options as $k => $option) {
520 $html = '<table border="0" cellspacing="0" cellpadding="0"><tr><td class="ilc_table_cell_' . $k . '">' .
521 $option . '</td></tr></table>';
522 //$style->addOption($k, $option, $html);
523 }
524
525 if (count($options) > 1) {
526 $style->setOptions($options);
527 $style_cb->addSubItem($style);
528 $form->addItem($style_cb);
529 }
530
531 $width_cb = new ilCheckboxInputGUI($lng->txt("cont_change_width"), "width_cb");
532 $ti = new ilTextInputGUI($lng->txt("cont_width"), "width");
533 $ti->setMaxLength(20);
534 $ti->setSize(7);
535 $width_cb->addSubItem($ti);
536 $form->addItem($width_cb);
537
538 // alignment
539 $al_cb = new ilCheckboxInputGUI($lng->txt("cont_change_alignment"), "al_cb");
540 $options = array(
541 "" => $lng->txt("default"),
542 "Left" => $lng->txt("cont_left"),
543 "Center" => $lng->txt("cont_center"),
544 "Right" => $lng->txt("cont_right")
545 );
546 $si = new ilSelectInputGUI($lng->txt("cont_alignment"), "alignment");
547 $si->setOptions($options);
548 $al_cb->addSubItem($si);
549 $form->addItem($al_cb);
550
551 return $form;
552 }
553
554}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
This class represents a checkbox property in a property form.
setParameter(object $a_gui_obj, string $a_parameter, $a_value)
@inheritDoc
setFormAction(string $a_formaction)
This class represents a hidden form property in a property form.
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
static _lookupTemplateIdByName(int $a_style_id, string $a_name)
Lookup table template preview.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getCellContent(int $i, int $j)
ILIAS HTTP Services $http
getNewTableObject()
Get new table object.
afterCreation()
After creation processing.
tableAction()
Perform operation on table (adding, moving, deleting rows/cols)
__construct(ilPageObject $a_pg_obj, ?ilPageContent $a_content_obj, string $a_hier_id, string $a_pc_id="")
update(bool $a_redirect=true)
Update table data in dom and update page in db.
getFormTitle(string $a_mode="edit")
setTabs(string $data_tab_txt_key="")
Set tabs.
ilGlobalTemplateInterface $main_tpl
updateJS()
Update via JavaScript.
executeCommand()
execute command
Class ilPCDataTable.
static xml2outputJS(string $s_text)
Prepare content for js output.
static xml2output(string $a_text, bool $a_wysiwyg=false, bool $a_replace_lists=true, bool $unmask=true)
Converts xml from DB to output in edit textarea.
static handleAjaxContentPost(string $text)
Post input2xml handling of ajax content.
static _input2xml(string $a_text, string $a_lang, bool $a_wysiwyg=false, bool $a_handle_lists=true)
Converts user input to xml User input comes as bb code information, e.g.
static handleAjaxContent(string $a_content)
Handle ajax content.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getTemplateOptions(string $a_type="")
Get table templates.
editData()
Edit data of table.
ilPropertyFormGUI $form
getCharacteristicsOfCurrentStyle(array $a_type)
Get characteristics of current style and call setCharacteristics, if style is given.
setCharacteristics(array $a_chars)
Content object of ilPageObject (see ILIAS DTD).
Class ilPageObject Handles PageObjects of ILIAS Learning Modules (see ILIAS DTD)
This class represents a property form user interface.
addCommandButton(string $a_cmd, string $a_text, string $a_id="")
This class represents a selection list property in a property form.
This class represents a text area property in a property form.
This class represents a text property in a property form.
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
$post
Definition: ltitoken.php:46
static http()
Fetches the global http state from ILIAS.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
global $lng
Definition: privfeed.php:31
global $DIC
Definition: shib_login.php:26