ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
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 = !($this->content_obj);
48  $form = $this->initForm($params["insert"] ?? false);
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["validation"] ?? 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(int $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
235  ): ilPropertyFormGUI {
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 ilSelectInputGUI(
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  $options = [];
269  foreach ($chars as $k => $char) {
270  $options[$k] = $char;
271  }
272  $char_prop->setOptions($options);
273 
274  $char_prop->setValue($selected);
275  $form->addItem($char_prop);
276 
277  // link input
278  //
279  $cb = new ilCheckboxInputGUI($lng->txt("cont_link"), "link_cb");
280 
281  $ac = new ilLinkInputGUI($this->lng->txt('cont_target'), 'link');
282  if ($this->getPageConfig()->getEnableInternalLinks()) {
283  $ac->setAllowedLinkTypes(ilLinkInputGUI::BOTH);
284  } else {
285  $ac->setAllowedLinkTypes(ilLinkInputGUI::EXT);
286  }
287  $ac->setRequired(true);
288  $ac->setInfo($this->lng->txt("copg_sec_link_info"));
289  $ac->setInternalLinkDefault(
290  $this->getPageConfig()->getIntLinkHelpDefaultType(),
291  $this->getPageConfig()->getIntLinkHelpDefaultId()
292  );
293  $link_types = array();
294  foreach ($this->getPageConfig()->getIntLinkFilters() as $f) {
295  $link_types[] = $f;
296  }
297  $ac->setInternalLinkFilterTypes($link_types);
298  $ac->setFilterWhiteList(
299  $this->getPageConfig()->getIntLinkFilterWhiteList()
300  );
301 
302  if (!$a_insert) {
303  $l = $this->content_obj->getLink();
304  if ($l["LinkType"] == "IntLink") {
305  $ac->setValueByIntLinkAttributes($l["Type"], $l["Target"], $l["TargetFrame"]);
306  $cb->setChecked(true);
307  } elseif ($l["LinkType"] == "ExtLink") {
308  $ac->setValue($l["Href"]);
309  $cb->setChecked(true);
310  } else {
311  $ac->setValue("https://");
312  }
313  } else {
314  $ac->setValue("https://");
315  }
316  $form->addItem($cb);
317  $ac->setParentForm($form);
318  $cb->addSubItem($ac);
319 
320 
321  // activation
322 
323  // active from
324  $act_cb = new ilCheckboxInputGUI($lng->txt("cont_activation"), "activation");
325  $form->addItem($act_cb);
326  $dt_prop = new ilDateTimeInputGUI($lng->txt("cont_active_from"), "active_from");
327  if (!$a_insert && ($from = $this->content_obj->getActiveFrom()) > 0) {
328  $dt_prop->setDate(new ilDateTime($from, IL_CAL_UNIX));
329  $act_cb->setChecked(true);
330  }
331  $dt_prop->setShowTime(true);
332  $act_cb->addSubItem($dt_prop);
333 
334  // active to
335  $dt_prop = new ilDateTimeInputGUI($lng->txt("cont_active_to"), "active_to");
336  if (!$a_insert && ($to = $this->content_obj->getActiveTo()) > 0) {
337  $dt_prop->setDate(new ilDateTime($to, IL_CAL_UNIX));
338  $act_cb->setChecked(true);
339  }
340  $dt_prop->setShowTime(true);
341  $act_cb->addSubItem($dt_prop);
342 
343  // rep selector
344  if ($this->getPageConfig()->getEnablePermissionChecks()) {
345  $perm_cb = new ilCheckboxInputGUI($lng->txt("cont_permission_handling"), "permission_handling");
346  $form->addItem($perm_cb);
347 
348  $rs = new ilRepositorySelector2InputGUI($lng->txt("cont_permission_object"), "permission_ref_id", false, $form);
349  //$rs->setParent($this);
350  $rs->setParentForm($form);
351  $rs->setRequired(true);
352  $perm_cb->addSubItem($rs);
353 
354  // permission
355  $options = array(
356  "read" => $lng->txt("read"),
357  "write" => $lng->txt("write"),
358  "visible" => $lng->txt("visible"),
359  "no_read" => $lng->txt("cont_no_read")
360  );
361  $si = new ilSelectInputGUI($lng->txt("permission"), "permission");
362  $si->setInfo($lng->txt("cont_permission_object_desc"));
363  $si->setOptions($options);
364  $perm_cb->addSubItem($si);
365 
366  if (!$a_insert) {
367  $si->setValue($this->content_obj->getPermission());
368  $rs->setValue($this->content_obj->getPermissionRefId());
369  if ($this->content_obj->getPermissionRefId() > 0) {
370  $perm_cb->setChecked(true);
371  }
372  }
373  }
374 
375  // protection
376  if ($this->getPageConfig()->getSectionProtection() == ilPageConfig::SEC_PROTECT_EDITABLE) {
377  $cb = new ilCheckboxInputGUI($lng->txt("cont_sec_protected"), "protected");
378  $cb->setInfo($this->getPageConfig()->getSectionProtectionInfo());
379  if (!$a_insert) {
380  $cb->setChecked($this->content_obj->getProtected());
381  }
382  $form->addItem($cb);
383  }
384 
385  // save/cancel buttons
386  if ($a_insert) {
387  $form->addCommandButton("create", $lng->txt("save"));
388  $form->addCommandButton("cancelCreate", $lng->txt("cancel"));
389  } else {
390  $form->addCommandButton("update", $lng->txt("save"));
391  $form->addCommandButton("cancelUpdate", $lng->txt("cancel"));
392  }
393  return $form;
394  }
395 
396  public function create(): void
397  {
398  $form = $this->initForm(true);
399  if ($form->checkInput()) {
400  $this->content_obj = new ilPCSection($this->getPage());
401  $this->content_obj->create($this->pg_obj, $this->hier_id, $this->pc_id);
402 
403  $this->setValuesFromForm($form);
404 
405  $this->updated = $this->pg_obj->update();
406  if ($this->updated === true) {
407  $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
408  }
409  }
410 
411  $this->insert($form);
412  }
413 
414  public function update(): void
415  {
416  $form = $this->initForm(false);
417  if ($form->checkInput()) {
418  $this->setValuesFromForm($form);
419 
420  $this->updated = $this->pg_obj->update();
421  if ($this->updated === true) {
422  $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
423  }
424  }
425 
426  $this->pg_obj->addHierIDs();
427  $this->edit(false, $form);
428  }
429 
430  public function setValuesFromForm(ilPropertyFormGUI $form): void
431  {
432  $this->content_obj->setCharacteristic($form->getInput("characteristic"));
433 
434  $activation = (bool) $form->getInput("activation");
435  $from = $form->getItemByPostVar("active_from")->getDate();
436  if ($activation && $from) {
437  $this->content_obj->setActiveFrom($from->get(IL_CAL_UNIX));
438  } else {
439  $this->content_obj->setActiveFrom(0);
440  }
441 
442  $to = $form->getItemByPostVar("active_to")->getDate();
443  if ($activation && $to) {
444  $this->content_obj->setActiveTo($to->get(IL_CAL_UNIX));
445  } else {
446  $this->content_obj->setActiveTo(0);
447  }
448 
449  if ($this->getPageConfig()->getEnablePermissionChecks()) {
450  $permission_handling = (bool) $form->getInput("permission_handling");
451  if ($permission_handling) {
452  $this->content_obj->setPermissionRefId((int) $form->getInput("permission_ref_id"));
453  $this->content_obj->setPermission($form->getInput("permission"));
454  } else {
455  $this->content_obj->setPermissionRefId(0);
456  $this->content_obj->setPermission("");
457  }
458  }
459 
460  if ($form->getInput("link_cb") !== "") {
461  if ($form->getInput("link_mode") == "ext" && $form->getInput("link") != "") {
462  $this->content_obj->setExtLink($form->getInput("link"));
463  } elseif ($form->getInput("link_mode") == "int" && $form->getInput("link") != "") {
464  $la = $form->getItemByPostVar("link")->getIntLinkAttributes();
465  if (($la["Type"] ?? "") != "") {
466  $this->content_obj->setIntLink($la["Type"], $la["Target"], $la["TargetFrame"]);
467  }
468  } else {
469  $this->content_obj->setNoLink();
470  }
471  } else {
472  $this->content_obj->setNoLink();
473  }
474 
475  if ($this->getPageConfig()->getSectionProtection() == ilPageConfig::SEC_PROTECT_EDITABLE) {
476  $this->content_obj->setProtected($form->getInput("protected"));
477  }
478  }
479 }
initForm(bool $a_insert=false)
getCharacteristicsOfCurrentStyle(array $a_type)
Get characteristics of current style and call setCharacteristics, if style is given.
This class represents a selection list 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...
getItemByPostVar(string $a_post_var)
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
Definition: ltiregstart.php:31
static _getStandardCharacteristics()
setContent(string $a_html)
Sets content for standard template.
setCharacteristics(array $a_chars)
const IL_CAL_UNIX
insert(?ilPropertyFormGUI $a_form=null)
static _getCharacteristics(int $a_style_id)
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-...
Content object of ilPageObject (see ILIAS DTD).
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This class represents a date/time property in a property form.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
__construct(ilPageObject $a_pg_obj, ?ilPageContent $a_content_obj=null, string $a_hier_id="", string $a_pc_id="")
User Interface for Editing of Page Content Objects (Paragraphs, Tables, ...)
setParentForm(ilPropertyFormGUI $a_parentform)
Style Content CharacteristicManager $char_manager
edit(bool $a_insert=false, ?ilPropertyFormGUI $a_form=null)
Class ilPageObject Handles PageObjects of ILIAS Learning Modules (see ILIAS DTD)
global $DIC
Definition: shib_login.php:26
ilGlobalTemplateInterface $tpl
setDate(?ilDateTime $a_date=null)
set date E.g $dt_form->setDate(new ilDateTime(time(),IL_CAL_UTC)); or $dt_form->setDate(new ilDateTim...
checkInput(ilPropertyFormGUI $form)
setRequired(bool $a_required)
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.
getHTML(array $params)
__construct(Container $dic, ilPlugin $plugin)
static _lookupType(int $id, bool $reference=false)
$service
Definition: ltiservices.php:40
This class represents a external and/or internal link in a property form.
setValuesFromForm(ilPropertyFormGUI $form)