ILIAS  release_8 Revision v8.24
class.ilPCSectionGUI.php
Go to the documentation of this file.
1<?php
2
25{
26 public function __construct(
27 ilPageObject $a_pg_obj,
28 ?ilPageContent $a_content_obj = null,
29 string $a_hier_id = "",
30 string $a_pc_id = ""
31 ) {
32 global $DIC;
33
34 $this->tpl = $DIC["tpl"];
35 $this->lng = $DIC->language();
36 $this->ctrl = $DIC->ctrl();
37 parent::__construct($a_pg_obj, $a_content_obj, $a_hier_id, $a_pc_id);
38
40 }
41
42 public function getHTML(array $params): string
43 {
44 $this->getCharacteristicsOfCurrentStyle(["section"]);
45
46 if ($params["form"] == true) {
47 $insert = $params["insert"] ?? false;
48 $form = $this->initForm($insert);
49 $form->setShowTopButtons(false);
50
51 $onload_code = [];
52 $char = $form->getItemByPostVar("characteristic");
53 $onload_code = array_merge($onload_code, $char->getOnloadCode());
54
55 $from = $form->getItemByPostVar("active_from");
56 $from->setSideBySide(false);
57 $onload_code = array_merge($onload_code, $from->getOnloadCode());
58
59 $to = $form->getItemByPostVar("active_to");
60 $to->setSideBySide(false);
61 $onload_code = array_merge($onload_code, $to->getOnloadCode());
62
63 $link = $form->getItemByPostVar("link");
64 $onload_code = array_merge($onload_code, $link->getOnloadCode());
65
66 $rep_sel = $form->getItemByPostVar("permission_ref_id");
67 $on_load_code3 = "";
68 $on_load_code4 = [];
69 if ($rep_sel) {
70 $exp = $rep_sel->getExplorerGUI();
71 $this->ctrl->setParameterByClass("ilformpropertydispatchgui", "postvar", "permission_ref_id");
72 $onload_code = array_merge($onload_code, [$exp->getOnloadCode()]);
73
74 $this->ctrl->setParameterByClass("ilformpropertydispatchgui", "postvar", "");
75 $onload_code = array_merge($onload_code, $rep_sel->getOnloadCode());
76 }
77
78 if (($params["update_fail"] ?? false) === true) {
79 $this->checkInput($form);
80 $form->setValuesByPost();
81 }
82
83 $html = $params["ui_wrapper"]->getRenderedForm(
84 $form,
85 $params["buttons"]
86 );
87
88 $html .= "<script>" .
89 implode("\n", $onload_code) .
90 "</script>";
91
92 return $html;
93 }
94 return "";
95 }
96
97 public function checkInput(ilPropertyFormGUI $form) : bool
98 {
99 $ret = $form->checkInput();
100 if ($ret) {
101 $from = $form->getItemByPostVar("active_from")->getDate();
102 $to = $form->getItemByPostVar("active_to")->getDate();
103 if ($from && $to && $from->get(IL_CAL_UNIX) > $to->get(IL_CAL_UNIX)) {
104 $form->getItemByPostVar("active_to")->setAlert(
105 $this->lng->txt("copg_active_to_small")
106 );
107 $ret = false;
108 }
109 }
110 return $ret;
111 }
112
113 public static function _getStandardCharacteristics(): array
114 {
115 global $DIC;
116
117 $lng = $DIC->language();
118
119 return array("Block" => $lng->txt("cont_Block"),
120 "Mnemonic" => $lng->txt("cont_Mnemonic"),
121 "Remark" => $lng->txt("cont_Remark"),
122 "Example" => $lng->txt("cont_Example"),
123 "Additional" => $lng->txt("cont_Additional"),
124 "Special" => $lng->txt("cont_Special"),
125
126 "Attention" => $lng->txt("cont_Attention"),
127 "Background" => $lng->txt("cont_Background"),
128 "Citation" => $lng->txt("cont_Citation"),
129 "Confirmation" => $lng->txt("cont_Confirmation"),
130 "Information" => $lng->txt("cont_Information"),
131 "Interaction" => $lng->txt("cont_Interaction"),
132 "Link" => $lng->txt("cont_Link"),
133 "Literature" => $lng->txt("cont_Literature"),
134 "Separator" => $lng->txt("cont_Separator"),
135 "StandardCenter" => $lng->txt("cont_StandardCenter"),
136
137 "Excursus" => $lng->txt("cont_Excursus"),
138 "AdvancedKnowledge" => $lng->txt("cont_AdvancedKnowledge"));
139 }
140
141 public static function _getCharacteristics(string $a_style_id): array
142 {
143 global $DIC;
144
145 $service = $DIC->contentStyle()->internal();
146 $request = $DIC->copage()->internal()
147 ->gui()
148 ->pc()
149 ->editRequest();
150 $requested_ref_id = $request->getRefId();
151 $access_manager = $service->domain()->access(
153 $DIC->user()->getId()
154 );
155 $char_manager = $service->domain()->characteristic(
156 $a_style_id,
157 $access_manager
158 );
159
161 $chars = $std_chars;
162 if ($a_style_id > 0 &&
163 ilObject::_lookupType($a_style_id) == "sty") {
164 $style = new ilObjStyleSheet($a_style_id);
165 $chars = $style->getCharacteristics("section");
166 $new_chars = array();
167 foreach ($chars as $char) {
168 if ($char_manager->isOutdated("section", $char)) {
169 continue;
170 }
171 if (($std_chars[$char] ?? "") != "") { // keep lang vars for standard chars
172 $new_chars[$char] = $std_chars[$char];
173 } else {
174 $new_chars[$char] = $char;
175 }
176 asort($new_chars);
177 }
178 $chars = $new_chars;
179 }
180 return $chars;
181 }
182
187 public function executeCommand()
188 {
189 $ret = "";
190
191 $this->getCharacteristicsOfCurrentStyle(["section"]); // scorm-2004
192
193 // get next class that processes or forwards current command
194 $next_class = $this->ctrl->getNextClass($this);
195
196 // get current command
197 $cmd = $this->ctrl->getCmd();
198
199 switch ($next_class) {
200 case "ilpropertyformgui":
201 $form = $this->initForm(true);
202 $this->ctrl->forwardCommand($form);
203 break;
204
205 default:
206 $ret = $this->$cmd();
207 break;
208 }
209
210 return $ret;
211 }
212
213 public function insert(ilPropertyFormGUI $a_form = null): void
214 {
215 $this->edit(true, $a_form);
216 }
217
218 public function edit(
219 bool $a_insert = false,
220 ilPropertyFormGUI $a_form = null
221 ): void {
222 $tpl = $this->tpl;
223
224 $this->displayValidationError();
225
226 if (!$a_form) {
227 $a_form = $this->initForm($a_insert);
228 }
229
230 $tpl->setContent($a_form->getHTML());
231 }
232
233 public function initForm(
234 bool $a_insert = false
236 $lng = $this->lng;
237 $ilCtrl = $this->ctrl;
238 $a_seleted_value = "";
239
240 // edit form
241 $form = new ilPropertyFormGUI();
242 $form->setFormAction($ilCtrl->getFormAction($this));
243 if ($a_insert) {
244 $form->setTitle($this->lng->txt("cont_insert_section"));
245 } else {
246 $form->setTitle($this->lng->txt("cont_update_section"));
247 }
248
249 // characteristic selection
250 $char_prop = new ilAdvSelectInputGUI(
251 $this->lng->txt("cont_characteristic"),
252 "characteristic"
253 );
254 $chars = $this->getCharacteristics();
255 if (is_object($this->content_obj)) {
256 if (($chars[$a_seleted_value] ?? "") == "" && ($this->content_obj->getCharacteristic() != "")) {
257 $chars = array_merge(
258 array($this->content_obj->getCharacteristic() => $this->content_obj->getCharacteristic()),
259 $chars
260 );
261 }
262 }
263
264 $selected = ($a_insert)
265 ? "Block"
266 : $this->content_obj->getCharacteristic();
267
268 foreach ($chars as $k => $char) {
269 $html = '<div class="ilCOPgEditStyleSelectionItem"><div class="ilc_section_' . $k . '" style="' . self::$style_selector_reset . '">' .
270 $char . '</div></div>';
271 $char_prop->addOption($k, $char, $html);
272 }
273
274 $char_prop->setValue($selected);
275 $form->addItem($char_prop);
276
277 // link input
278 $ac = new ilLinkInputGUI($this->lng->txt('cont_link'), 'link');
279 if ($this->getPageConfig()->getEnableInternalLinks()) {
280 $ac->setAllowedLinkTypes(ilLinkInputGUI::BOTH);
281 } else {
282 $ac->setAllowedLinkTypes(ilLinkInputGUI::EXT);
283 }
284 $ac->setRequired(false);
285 $ac->setInfo($this->lng->txt("copg_sec_link_info"));
286 $ac->setInternalLinkDefault(
287 $this->getPageConfig()->getIntLinkHelpDefaultType(),
288 $this->getPageConfig()->getIntLinkHelpDefaultId()
289 );
290 $link_types = array();
291 foreach ($this->getPageConfig()->getIntLinkFilters() as $f) {
292 $link_types[] = $f;
293 }
294 $ac->setInternalLinkFilterTypes($link_types);
295 $ac->setFilterWhiteList(
296 $this->getPageConfig()->getIntLinkFilterWhiteList()
297 );
298
299 if (!$a_insert) {
300 $l = $this->content_obj->getLink();
301 if ($l["LinkType"] == "IntLink") {
302 $ac->setValueByIntLinkAttributes($l["Type"], $l["Target"], $l["TargetFrame"]);
303 }
304 if ($l["LinkType"] == "ExtLink") {
305 $ac->setValue($l["Href"]);
306 }
307 }
308 $form->addItem($ac);
309
310 // activation
311
312 // active from
313 $dt_prop = new ilDateTimeInputGUI($lng->txt("cont_active_from"), "active_from");
314 if (!$a_insert && ($from = $this->content_obj->getActiveFrom()) != "") {
315 $dt_prop->setDate(new ilDateTime($from, IL_CAL_UNIX));
316 }
317 $dt_prop->setShowTime(true);
318 $form->addItem($dt_prop);
319
320 // active to
321 $dt_prop = new ilDateTimeInputGUI($lng->txt("cont_active_to"), "active_to");
322 if (!$a_insert && ($to = $this->content_obj->getActiveTo()) != "") {
323 $dt_prop->setDate(new ilDateTime($to, IL_CAL_UNIX));
324 }
325 $dt_prop->setShowTime(true);
326 $form->addItem($dt_prop);
327
328 // rep selector
329 if ($this->getPageConfig()->getEnablePermissionChecks()) {
330 $rs = new ilRepositorySelector2InputGUI($lng->txt("cont_permission_object"), "permission_ref_id", false, $form);
331 //$rs->setParent($this);
332 $rs->setParentForm($form);
333 $form->addItem($rs);
334
335 // permission
336 $options = array(
337 "read" => $lng->txt("read"),
338 "write" => $lng->txt("write"),
339 "visible" => $lng->txt("visible"),
340 "no_read" => $lng->txt("cont_no_read")
341 );
342 $si = new ilSelectInputGUI($lng->txt("permission"), "permission");
343 $si->setInfo($lng->txt("cont_permission_object_desc"));
344 $si->setOptions($options);
345 $form->addItem($si);
346
347 if (!$a_insert) {
348 $si->setValue($this->content_obj->getPermission());
349 $rs->setValue($this->content_obj->getPermissionRefId());
350 }
351 }
352
353 // protection
354 if ($this->getPageConfig()->getSectionProtection() == ilPageConfig::SEC_PROTECT_EDITABLE) {
355 $cb = new ilCheckboxInputGUI($lng->txt("cont_sec_protected"), "protected");
356 $cb->setInfo($this->getPageConfig()->getSectionProtectionInfo());
357 if (!$a_insert) {
358 $cb->setChecked($this->content_obj->getProtected());
359 }
360 $form->addItem($cb);
361 }
362
363 // save/cancel buttons
364 if ($a_insert) {
365 $form->addCommandButton("create_section", $lng->txt("save"));
366 $form->addCommandButton("cancelCreate", $lng->txt("cancel"));
367 } else {
368 $form->addCommandButton("update", $lng->txt("save"));
369 $form->addCommandButton("cancelUpdate", $lng->txt("cancel"));
370 }
371 return $form;
372 }
373
374 public function create(): void
375 {
376 $form = $this->initForm(true);
377 if ($form->checkInput()) {
378 $this->content_obj = new ilPCSection($this->getPage());
379 $this->content_obj->create($this->pg_obj, $this->hier_id, $this->pc_id);
380
381 $this->setValuesFromForm($form);
382
383 $this->updated = $this->pg_obj->update();
384 if ($this->updated === true) {
385 $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
386 }
387 }
388
389 $this->insert($form);
390 }
391
392 public function update(): void
393 {
394 $form = $this->initForm(false);
395 if ($form->checkInput()) {
396 $this->setValuesFromForm($form);
397
398 $this->updated = $this->pg_obj->update();
399 if ($this->updated === true) {
400 $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
401 }
402 }
403
404 $this->pg_obj->addHierIDs();
405 $this->edit(false, $form);
406 }
407
408 public function setValuesFromForm(ilPropertyFormGUI $form): void
409 {
410 $this->content_obj->setCharacteristic($form->getInput("characteristic"));
411
412 $from = $form->getItemByPostVar("active_from")->getDate();
413 if ($from) {
414 $this->content_obj->setActiveFrom($from->get(IL_CAL_UNIX));
415 } else {
416 $this->content_obj->setActiveFrom(0);
417 }
418
419 $to = $form->getItemByPostVar("active_to")->getDate();
420 if ($to) {
421 $this->content_obj->setActiveTo($to->get(IL_CAL_UNIX));
422 } else {
423 $this->content_obj->setActiveTo(0);
424 }
425
426 if ($this->getPageConfig()->getEnablePermissionChecks()) {
427 $this->content_obj->setPermissionRefId((int) $form->getInput("permission_ref_id"));
428 $this->content_obj->setPermission($form->getInput("permission"));
429 }
430
431 if ($form->getInput("link_mode") == "ext" && $form->getInput("link") != "") {
432 $this->content_obj->setExtLink($form->getInput("link"));
433 } elseif ($form->getInput("link_mode") == "int" && $form->getInput("link") != "") {
434 $la = $form->getItemByPostVar("link")->getIntLinkAttributes();
435 if (($la["Type"] ?? "") != "") {
436 $this->content_obj->setIntLink($la["Type"], $la["Target"], $la["TargetFrame"]);
437 }
438 } else {
439 $this->content_obj->setNoLink();
440 }
441
442 if ($this->getPageConfig()->getSectionProtection() == ilPageConfig::SEC_PROTECT_EDITABLE) {
443 $this->content_obj->setProtected($form->getInput("protected"));
444 }
445 }
446}
const IL_CAL_UNIX
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This class represents a checkbox property in a property form.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
@classDescription Date and time handling
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 class represents a external and/or internal link in a property form.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getCharacteristics(string $a_type="", bool $a_no_hidden=false, bool $a_include_core=true)
Get characteristics.
static _lookupType(int $id, bool $reference=false)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
edit(bool $a_insert=false, ilPropertyFormGUI $a_form=null)
setValuesFromForm(ilPropertyFormGUI $form)
initForm(bool $a_insert=false)
static _getCharacteristics(string $a_style_id)
__construct(ilPageObject $a_pg_obj, ?ilPageContent $a_content_obj=null, string $a_hier_id="", string $a_pc_id="")
getHTML(array $params)
checkInput(ilPropertyFormGUI $form)
static _getStandardCharacteristics()
insert(ilPropertyFormGUI $a_form=null)
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, ...)
getCharacteristicsOfCurrentStyle(array $a_type)
Get characteristics of current style and call setCharacteristics, if style is given.
ilGlobalTemplateInterface $tpl
Style Content CharacteristicManager $char_manager
setCharacteristics(array $a_chars)
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.
getInput(string $a_post_var, bool $ensureValidation=true)
Returns the input of an item, if item provides getInput method and as fallback the value of the HTTP-...
getItemByPostVar(string $a_post_var)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This class represents a selection list property in a property form.
global $DIC
Definition: feed.php:28
setContent(string $a_html)
Sets content for standard template.
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
Definition: ltiregstart.php:33
$service
Definition: ltiservices.php:43
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$lng