ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilADTBasedObjectGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
26abstract class ilADTBasedObjectGUI
27{
29 protected ?ilADTBasedObject $object = null;
30
32 protected ilLanguage $lng;
33 protected ilCtrl $ctrl;
34
40 public function __construct(ilObjectGUI $a_parent_gui)
41 {
42 global $DIC;
43 $this->tpl = $DIC->ui()->mainTemplate();
44 $this->lng = $DIC->language();
45 $this->ctrl = $DIC->ctrl();
46
47 $this->gui = $a_parent_gui;
48 $this->object = $this->initObject();
49 }
50
54 abstract protected function initObject(): ilADTBasedObject;
55
56
57 //
58 // VERY BASIC EXAMPLE OF FORM HANDLING
59 //
60
61 public function editAction(?ilADTGroupFormBridge $a_form = null): bool
62 {
63 if (!$a_form) {
64 $a_form = $this->initForm();
65 }
66
67 $this->tpl->setContent($a_form->getForm()->getHTML());
68 return true;
69 }
70
75 abstract protected function prepareFormElements(ilADTGroupFormBridge $a_adt_form): void;
76
81 protected function initForm(): ilADTFormBridge
82 {
83 $form = new ilPropertyFormGUI();
84 $form->setFormAction($this->ctrl->getFormAction($this->gui, "updateAction"));
85
86 $adt_form = ilADTFactory::getInstance()->getFormBridgeForInstance($this->object->getProperties());
87
88 // has to be done BEFORE prepareFormElements() ...
89 $adt_form->setForm($form);
90
92 $this->prepareFormElements($adt_form);
93
94 $adt_form->addToForm();
95 $adt_form->addJS($this->tpl);
96
97 // :TODO:
98 $form->addCommandButton("updateAction", $this->lng->txt("save"));
99
100 return $adt_form;
101 }
102
107 public function updateAction(): bool
108 {
109 $adt_form = $this->initForm();
110 $valid = $adt_form->getForm()->checkInput();
111
112 $old_chksum = $this->object->getProperties()->getCheckSum();
113
114 $adt_form->importFromPost();
115 $valid = $adt_form->validate();
116
117 $changed = ($old_chksum != $this->object->getProperties()->getCheckSum());
118
119 // validation errors have top priority
120 if (!$valid) {
121 $this->tpl->setOnScreenMessage('failure', $this->lng->txt("form_input_not_valid"));
122 return $this->editAction($adt_form);
123 }
124
125 // :TODO: experimental, update only if necessary
126 if ($changed) {
127 if ($this->object->update()) {
128 $this->tpl->setOnScreenMessage('success', $this->lng->txt("settings_saved"), true);
129 } else {
130 // error occured in db-layer (primary/unique)
131 foreach ($this->object->getDBErrors() as $element_id => $codes) {
132 $element = $adt_form->getElement($element_id);
133 if ($element) {
134 $element->setExternalErrors($this->object->translateDBErrorCodes($codes));
135 }
136 }
137
138 $this->tpl->setOnScreenMessage('failure', $this->lng->txt("form_input_not_valid"));
139 return $this->editAction($adt_form);
140 }
141 }
142
143 $this->ctrl->redirect($this->gui, "edit");
144 return true;
145 }
146}
ADT based-object GUI base class.
updateAction()
Parse incoming values and update if valid @noinspection PhpParamsInspection.
initObject()
Init ADT-based object.
editAction(?ilADTGroupFormBridge $a_form=null)
initForm()
Init ADT-based form.
ilGlobalTemplateInterface $tpl
prepareFormElements(ilADTGroupFormBridge $a_adt_form)
Prepare/customize form elements.
__construct(ilObjectGUI $a_parent_gui)
Constructor Parent GUI is just needed for testing (ilCtrl)
ADT based-object base class Currently "mixed" with ActiveRecord-pattern, could be splitted.
ADT form bridge base class.
Class ilCtrl provides processing control methods.
language handling
Class ilObjectGUI Basic methods of all Output classes.
This class represents a property form user interface.
$valid
global $DIC
Definition: shib_login.php:26