ILIAS  release_8 Revision v8.24
class.ilPCPlaceHolderGUI.php
Go to the documentation of this file.
1<?php
2
26{
27 public const TYPE_TEXT = "Text";
28 public const TYPE_QUESTION = "Question";
29 public const TYPE_MEDIA = "Media";
30 public const TYPE_VERIFICATION = "Verification";
32
33 public function __construct(
34 ilPageObject $a_pg_obj,
35 ?ilPageContent $a_content_obj,
36 string $a_hier_id,
37 string $a_pc_id = ""
38 ) {
39 global $DIC;
40
41 $this->lng = $DIC->language();
42 $this->pg_obj = $a_pg_obj;
43 $this->content_obj = $a_content_obj;
44 $this->hier_id = $a_hier_id;
45 $this->pc_id = $a_pc_id;
46
47 parent::__construct($a_pg_obj, $a_content_obj, $a_hier_id, $a_pc_id);
48 }
49
50 public function executeCommand(): void
51 {
52 // get next class that processes or forwards current command
53 $next_class = $this->ctrl->getNextClass($this);
54 // get current command
55 $cmd = $this->ctrl->getCmd();
56
57 switch ($next_class) {
58 case 'ilpcmediaobjectgui': //special handling
59 $media_gui = new ilPCMediaObjectGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
60 $ret = $this->ctrl->forwardCommand($media_gui);
61 break;
62
63 default:
64 $this->$cmd();
65 break;
66 }
67 }
68
69 protected function insert(): void
70 {
71 $this->propertyGUI("create", self::TYPE_TEXT, "100px", "insert");
72 }
73
74 protected function create(): void
75 {
76 $plach_height = $this->request->getString("plach_height");
77 if ($plach_height == "" ||
78 !preg_match("/[0-9]+/", $plach_height)) {
79 $this->insert();
80 return;
81 }
82
83 $this->content_obj = new ilPCPlaceHolder($this->getPage());
84 $this->content_obj->create($this->pg_obj, $this->hier_id, $this->pc_id);
85 $this->content_obj->setHeight($plach_height . "px");
86 $this->content_obj->setContentClass(
87 $this->request->getString("plach_type")
88 );
89 $this->updated = $this->pg_obj->update();
90 if ($this->updated === true) {
91 $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
92 } else {
93 $this->insert();
94 }
95 }
96
97 public function edit(): void
98 {
99 if ($this->getPageConfig()->getEnablePCType("PlaceHolder")) {
100 $this->edit_object();
101 } else {
102 $this->forward_edit();
103 }
104 }
105
106 public function setStyleId(int $a_styleid): void
107 {
108 $this->styleid = $a_styleid;
109 }
110
111 public function getStyleId(): int
112 {
113 return $this->styleid;
114 }
115
116 protected function edit_object(): void
117 {
118 $this->propertyGUI(
119 "saveProperties",
120 $this->content_obj->getContentClass(),
121 $this->content_obj->getHeight(),
122 "save"
123 );
124 }
125
126 protected function forward_edit(): void
127 {
128 switch ($this->content_obj->getContentClass()) {
129 case self::TYPE_MEDIA:
130 $this->ctrl->setCmdClass("ilpcmediaobjectgui");
131 $this->ctrl->setCmd("insert");
132 $media_gui = new ilPCMediaObjectGUI($this->pg_obj, null, "");
133 $this->ctrl->forwardCommand($media_gui);
134 break;
135
136 case self::TYPE_TEXT:
137 $this->textCOSelectionGUI();
138 break;
139
141 $this->ctrl->setCmdClass("ilpcquestiongui");
142 $this->ctrl->setCmd("insert");
143 $question_gui = new ilPCQuestionGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
144 $question_gui->setSelfAssessmentMode(true);
145 $this->ctrl->forwardCommand($question_gui);
146 break;
147
149 $this->ctrl->setCmdClass("ilpcverificationgui");
150 $this->ctrl->setCmd("insert");
152 $ver = $this->content_obj;
153 $cert_gui = new ilPCVerificationGUI($this->pg_obj, $ver, $this->hier_id, $this->pc_id);
154 $this->ctrl->forwardCommand($cert_gui);
155 break;
156
157 default:
158 break;
159 }
160 }
161
162
166 protected function saveProperties(): void
167 {
168 $plach_height = $this->request->getString("plach_height");
169 if ($plach_height == "" ||
170 !preg_match("/[0-9]+/", $plach_height)) {
171 $this->edit_object();
172 return;
173 }
174
175 $this->content_obj->setContentClass($this->request->getString("plach_type"));
176 $this->content_obj->setHeight($plach_height . "px");
177
178 $this->updated = $this->pg_obj->update();
179 if ($this->updated === true) {
180 $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
181 } else {
182 $this->pg_obj->addHierIDs();
183 $this->edit();
184 }
185 }
186
190 protected function propertyGUI(
191 string $a_action,
192 string $a_type,
193 string $a_height,
194 string $a_mode
195 ): void {
196 $lng = $this->lng;
197
198 $this->form_gui = new ilPropertyFormGUI();
199 $this->form_gui->setFormAction($this->ctrl->getFormAction($this));
200 $this->form_gui->setTitle($lng->txt("cont_ed_plachprop"));
201
202 $ttype_input = new ilRadioGroupInputGUI($lng->txt("type"), "plach_type");
203 $type_captions = $this->getTypeCaptions();
204 foreach ($this->getAvailableTypes($a_type) as $type) {
205 $ttype_input->addOption(new ilRadioOption($type_captions[$type], $type));
206 }
207 $ttype_input->setRequired(true);
208 $this->form_gui->addItem($ttype_input);
209
210 $theight_input = new ilTextInputGUI($lng->txt("height"), "plach_height");
211 $theight_input->setSize(4);
212 $theight_input->setMaxLength(3);
213 $theight_input->setTitle($lng->txt("height") . " (px)");
214 $theight_input->setRequired(true);
215 $this->form_gui->addItem($theight_input);
216
217 $theight_input->setValue(preg_replace("/px/", "", $a_height));
218 $ttype_input->setValue($a_type);
219
220 $this->form_gui->addCommandButton($a_action, $lng->txt($a_mode));
221 $this->form_gui->addCommandButton("cancelCreate", $lng->txt("cancel"));
222 $this->tpl->setContent($this->form_gui->getHTML());
223 }
224
228 protected function textCOSelectionGUI(): void
229 {
231
232 $this->form_gui = new ilPropertyFormGUI();
233 $this->form_gui->setFormAction($this->ctrl->getFormAction($this));
234 $this->form_gui->setTitle($lng->txt("cont_ed_select_pctext"));
235
236 // Select Question Type
237 $ttype_input = new ilRadioGroupInputGUI($lng->txt("cont_ed_textitem"), "pctext_type");
238 $ttype_input->addOption(new ilRadioOption($lng->txt("cont_ed_par"), 0));
239 $ttype_input->addOption(new ilRadioOption($lng->txt("cont_ed_dtable"), 1));
240 $ttype_input->addOption(new ilRadioOption($lng->txt("cont_ed_atable"), 2));
241 $ttype_input->addOption(new ilRadioOption($lng->txt("cont_ed_list"), 3));
242 $ttype_input->addOption(new ilRadioOption($lng->txt("cont_ed_flist"), 4));
243 $ttype_input->addOption(new ilRadioOption($lng->txt("cont_tabs"), 5));
244 $this->form_gui->addItem($ttype_input);
245
246 $this->form_gui->addCommandButton("insertPCText", $lng->txt("insert"));
247 $this->form_gui->addCommandButton("cancelCreate", $lng->txt("cancel"));
248 $this->tpl->setContent($this->form_gui->getHTML());
249 }
250
254 protected function insertPCText(): void
255 {
256 switch ($this->request->getString("pctext_type")) {
257 case 0: //Paragraph / Text
258
259 $ret_class = strtolower(get_class($this->getPage()) . "gui");
260 $this->ctrl->setParameterByClass($ret_class, "pl_hier_id", $this->hier_id);
261 $this->ctrl->setParameterByClass($ret_class, "pl_pc_id", $this->pc_id);
262 $this->ctrl->redirectByClass(
263 $ret_class,
264 "insertJSAtPlaceholder"
265 );
266
267 $this->ctrl->setCmdClass("ilpcparagraphgui");
268 $this->ctrl->setCmd("insert");
269 $paragraph_gui = new ilPCParagraphGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
270 $paragraph_gui->setStyleId($this->getStyleId());
271 $paragraph_gui->setPageConfig($this->getPageConfig());
272 $this->ctrl->forwardCommand($paragraph_gui);
273 break;
274
275 case 1: //DataTable
276 $this->ctrl->setCmdClass("ilpcdatatablegui");
277 $this->ctrl->setCmd("insert");
278 $dtable_gui = new ilPCDataTableGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
279 $this->ctrl->forwardCommand($dtable_gui);
280 break;
281
282 case 2: //Advanced Table
283 $this->ctrl->setCmdClass("ilpctablegui");
284 $this->ctrl->setCmd("insert");
285 $atable_gui = new ilPCTableGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
286 $this->ctrl->forwardCommand($atable_gui);
287 break;
288
289 case 3: //Advanced List
290 $this->ctrl->setCmdClass("ilpclistgui");
291 $this->ctrl->setCmd("insert");
292 $list_gui = new ilPCListGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
293 $this->ctrl->forwardCommand($list_gui);
294 break;
295
296 case 4: //File List
297 $this->ctrl->setCmdClass("ilpcfilelistgui");
298 $this->ctrl->setCmd("insert");
299 $file_list_gui = new ilPCFileListGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
300 $file_list_gui->setStyleId($this->getStyleId());
301 $this->ctrl->forwardCommand($file_list_gui);
302 break;
303
304 case 5: //Tabs
305 $this->ctrl->setCmdClass("ilpctabsgui");
306 $this->ctrl->setCmd("insert");
307 $tabs_gui = new ilPCTabsGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
308 $tabs_gui->setStyleId($this->getStyleId());
309 $this->ctrl->forwardCommand($tabs_gui);
310 break;
311
312 default:
313 break;
314 }
315 }
316
317 public function cancel(): void
318 {
319 $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
320 }
321
322 protected function getAvailableTypes(
323 string $a_selected_type = ""
324 ): array {
325 // custom config?
326 if (method_exists($this->getPageConfig(), "getAvailablePlaceholderTypes")) {
327 $types = $this->getPageConfig()->getAvailablePlaceholderTypes();
328 } else {
329 $types = array(self::TYPE_TEXT, self::TYPE_MEDIA, self::TYPE_QUESTION);
330 }
331
332 $validator = new ilCertificateActiveValidator();
333 if (true === $validator->validate()) {
334 // we remove type verification if certificates are deactivated and this
335 // is not the currently selected value
336 if (($key = array_search(self::TYPE_VERIFICATION, $types)) !== false &&
337 self::TYPE_VERIFICATION != $a_selected_type) {
338 unset($types[$key]);
339 }
340 }
341 return $types;
342 }
343
344 protected function getTypeCaptions(): array
345 {
347
348 return array(
349 self::TYPE_TEXT => $lng->txt("cont_ed_plachtext"),
350 self::TYPE_MEDIA => $lng->txt("cont_ed_plachmedia"),
351 self::TYPE_QUESTION => $lng->txt("cont_ed_plachquestion"),
352 self::TYPE_VERIFICATION => $lng->txt("cont_ed_plachverification")
353 );
354 }
355}
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...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilPCParagraphGUI User Interface for Paragraph Editing.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
propertyGUI(string $a_action, string $a_type, string $a_height, string $a_mode)
Property Form.
insertPCText()
Forwards Text Item Selection to GUI classes.
__construct(ilPageObject $a_pg_obj, ?ilPageContent $a_content_obj, string $a_hier_id, string $a_pc_id="")
saveProperties()
save placeholder properties in db and return to page edit screen
textCOSelectionGUI()
Text Item Selection.
getAvailableTypes(string $a_selected_type="")
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
User Interface for Editing of Page Content Objects (Paragraphs, Tables, ...)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilPageObject Handles PageObjects of ILIAS Learning Modules (see ILIAS DTD)
This class represents a property form user interface.
This class represents a property in a property form.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This class represents a text property in a property form.
if(!file_exists(getcwd() . '/ilias.ini.php'))
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: confirmReg.php:20
global $DIC
Definition: feed.php:28
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
string $key
Consumer key/client ID value.
Definition: System.php:193
$type
$lng