ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
class.ilDclRecordEditGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 {
26  public const REDIRECT_RECORD_LIST = 1;
27  public const REDIRECT_DETAIL = 2;
28 
29  protected ?int $tableview_id = null;
30  protected ?int $record_id = null;
31  protected int $table_id = 1;
32  protected ilDclTable $table;
35  protected ilCtrl $ctrl;
37  protected ilLanguage $lng;
38  protected ilObjUser $user;
43 
44  public function __construct(ilObjDataCollectionGUI $parent_obj, int $table_id, int $tableview_id)
45  {
46  global $DIC;
47 
48  $this->http = $DIC->http();
49  $this->refinery = $DIC->refinery();
50 
51  $this->ctrl = $DIC['ilCtrl'];
52  $this->tpl = $DIC['tpl'];
53  $this->lng = $DIC['lng'];
54  $this->user = $DIC['ilUser'];
55  $this->parent_obj = $parent_obj;
56  $this->http = $DIC->http();
57  $this->refinery = $DIC->refinery();
58  $this->tableview_id = $tableview_id;
59  $this->table_id = $table_id;
60 
61  if ($this->http->wrapper()->query()->has('record_id')) {
62  $this->record_id = $this->http->wrapper()->query()->retrieve(
63  'record_id',
64  $this->refinery->kindlyTo()->int()
65  );
66  }
67  if ($this->http->wrapper()->post()->has('record_id')) {
68  $this->record_id = $this->http->wrapper()->post()->retrieve(
69  'record_id',
70  $this->refinery->kindlyTo()->int()
71  );
72  }
73  $this->tableview = ilDclTableView::findOrGetInstance($this->tableview_id);
74  }
75 
76  protected function rebuildUploadsForFileHash(bool $has_ilfilehash): string
77  {
78  $hash = "";
79  if ($has_ilfilehash) {
80  // temporary store fileuploads (reuse code from ilPropertyFormGUI)
81  $hash = $this->http->wrapper()->post()->retrieve(
82  'ilfilehash',
83  $this->refinery->kindlyTo()->string()
84  );
85  foreach ($_FILES as $field => $data) {
86  if (is_array($data["tmp_name"])) {
87  foreach ($data["tmp_name"] as $idx => $upload) {
88  if (is_array($upload)) {
89  foreach ($upload as $idx2 => $file) {
90  if ($file && is_uploaded_file($file)) {
91  $file_name = $data["name"][$idx][$idx2];
92  $file_type = $data["type"][$idx][$idx2];
93  $this->form->keepTempFileUpload(
94  $hash,
95  $field,
96  $file,
97  $file_name,
98  $file_type,
99  $idx,
100  $idx2
101  );
102  }
103  }
104  } else {
105  if ($upload && is_uploaded_file($upload)) {
106  $file_name = $data["name"][$idx];
107  $file_type = $data["type"][$idx];
108  $this->form->keepTempFileUpload(
109  $hash,
110  $field,
111  $upload,
112  $file_name,
113  $file_type,
114  $idx
115  );
116  }
117  }
118  }
119  } else {
120  $this->form->keepTempFileUpload(
121  $hash,
122  $field,
123  $data["tmp_name"],
124  $data["name"],
125  $data["type"]
126  );
127  }
128  }
129  }
130  return $hash;
131  }
132 
133  public function executeCommand(): void
134  {
135  $this->getRecord();
136 
137  $cmd = $this->ctrl->getCmd();
138  $this->$cmd();
139  }
140 
141  public function getRecord(): void
142  {
143  $hasMode = $this->http->wrapper()->query()->has('mode');
144  if ($hasMode) {
145  $mode = $this->http->wrapper()->query()->retrieve('mode', $this->refinery->kindlyTo()->string());
146 
147  $this->ctrl->saveParameter($this, 'mode');
148  $this->ctrl->setParameterByClass(ilDclRecordListGUI::class, "mode", $mode);
149  }
150  $this->ctrl->setParameterByClass(ilDclRecordListGUI::class, 'tableview_id', $this->tableview_id);
151  $this->ctrl->saveParameter($this, 'redirect');
152  if ($this->record_id) {
153  $this->record = ilDclCache::getRecordCache($this->record_id);
154  if (!($this->record->hasPermissionToEdit($this->parent_obj->getRefId()) and $this->record->hasPermissionToView($this->parent_obj->getRefId())) && !$this->record->hasPermissionToDelete($this->parent_obj->getRefId())) {
155  $this->accessDenied();
156  }
157  $this->table = $this->record->getTable();
158  $this->table_id = $this->table->getId();
159  } else {
160  $this->table = ilDclCache::getTableCache($this->table_id);
161  $ref_id = $this->http->wrapper()->query()->retrieve('ref_id', $this->refinery->kindlyTo()->int());
163  $this->accessDenied();
164  }
165  }
166  }
167 
171  public function create(): void
172  {
173  global $DIC;
174  $DIC->help()->setSubScreenId('create');
175  $this->initForm();
176  $this->tpl->setContent($this->form->getHTML());
177  }
178 
182  public function edit(): void
183  {
184  $this->initForm();
185  $this->cleanupTempFiles();
186 
187  $this->setFormValues();
188  $this->tpl->setContent($this->form->getHTML());
189  }
190 
195  public function confirmDelete(): void
196  {
197  $conf = new ilConfirmationGUI();
198  $conf->setFormAction($this->ctrl->getFormAction($this));
199  $conf->setHeaderText($this->lng->txt('dcl_confirm_delete_record'));
200  $record = ilDclCache::getRecordCache($this->record_id);
201 
202  $all_fields = $this->table->getRecordFields();
203  $record_data = "";
204  foreach ($all_fields as $field) {
205  $field_record = ilDclCache::getRecordFieldCache($record, $field);
206 
207  $record_representation = ilDclCache::getRecordRepresentation($field_record);
208  if ($record_representation->getConfirmationHTML() != false) {
209  $record_data .= $field->getTitle() . ": " . $record_representation->getConfirmationHTML() . "<br />";
210  }
211  }
212  $conf->addItem('record_id', (string) $record->getId(), $record_data);
213  $conf->addHiddenItem('table_id', (string) $this->table_id);
214  $conf->addHiddenItem('tableview_id', (string) $this->tableview_id);
215  $conf->setConfirm($this->lng->txt('delete'), 'delete');
216  $conf->setCancel($this->lng->txt('cancel'), 'cancelDelete');
217  $this->tpl->setContent($conf->getHTML());
218  }
219 
223  public function cancelDelete(): void
224  {
225  $this->ctrl->redirectByClass(ilDclRecordListGUI::class, "listRecords");
226  }
227 
231  public function delete(): void
232  {
233  $record = ilDclCache::getRecordCache($this->record_id);
234 
235  if (!$this->table->hasPermissionToDeleteRecord($this->parent_obj->getRefId(), $record)) {
236  $this->accessDenied();
237 
238  return;
239  }
240 
241  $record->doDelete();
242  $this->tpl->setOnScreenMessage('success', $this->lng->txt("dcl_record_deleted"), true);
243  $this->ctrl->redirectByClass(ilDclRecordListGUI::class, "listRecords");
244  }
245 
252  public function getRecordData(int $record_id = 0): array
253  {
254  $get_record_id = $this->http->wrapper()->query()->retrieve('record_id', $this->refinery->kindlyTo()->int());
255 
256  $record_id = ($record_id) ?: $get_record_id;
257  $return = [];
258  if ($record_id) {
259  $record = ilDclCache::getRecordCache($record_id);
260  $return = $record->getRecordFieldValues();
261  }
262  if ($this->ctrl->isAsynch()) {
263  echo json_encode($return);
264  exit();
265  }
266 
267  return $return;
268  }
269 
274  public function initForm(): void
275  {
276  $this->form = new ilDclPropertyFormGUI();
277  $prefix = ($this->ctrl->isAsynch()) ? 'dclajax' : 'dcl'; // Used by datacolleciton.js to select input elements
278  $this->form->setId($prefix . $this->table_id . $this->record_id);
279 
280  $hidden_prop = new ilHiddenInputGUI("table_id");
281  $hidden_prop->setValue((string) $this->table_id);
282  $this->form->addItem($hidden_prop);
283  $hidden_prop = new ilHiddenInputGUI("tableview_id");
284  $hidden_prop->setValue((string) $this->tableview_id);
285  $this->form->addItem($hidden_prop);
286  if ($this->record_id) {
287  $hidden_prop = new ilHiddenInputGUI("record_id");
288  $hidden_prop->setValue((string) $this->record_id);
289  $this->form->addItem($hidden_prop);
290  }
291 
292  $this->ctrl->setParameter($this, "record_id", $this->record_id);
293  $this->form->setFormAction($this->ctrl->getFormAction($this));
294  $allFields = $this->table->getRecordFields();
295  $inline_css = '';
296  foreach ($allFields as $field) {
297  $field_setting = $field->getViewSetting($this->tableview_id);
298  if ($field_setting->isVisibleInForm(!$this->record_id)) {
299  $item = ilDclCache::getFieldRepresentation($field)->getInputField($this->form, $this->record_id);
300  if ($item === null) {
301  continue; // Fields calculating values at runtime, e.g. ilDclFormulaFieldModel do not have input
302  }
303 
304  if (!ilObjDataCollectionAccess::hasWriteAccess($this->parent_obj->getRefId()) && $field_setting->isLocked(!$this->record_id)) {
305  $item->setDisabled(true);
306  }
307 
308  $item->setRequired($field_setting->isRequired(!$this->record_id));
309  $default_value = null;
310 
311  // If creation mode
312  if (!$this->record_id) {
313  $default_value = ilDclTableViewBaseDefaultValue::findSingle(
314  $field_setting->getFieldObject()->getDatatypeId(),
315  $field_setting->getId()
316  );
317 
318  if ($default_value !== null) {
319  if ($item instanceof ilDclCheckboxInputGUI) {
320  $item->setChecked((bool) $default_value->getValue());
321  } else {
322  $item->setValue((string) $default_value->getValue());
323  }
324  } else {
325  if ($item instanceof ilDclTextInputGUI) {
326  $item->setValue("");
327  }
328  }
329  }
330  $this->form->addItem($item);
331  }
332  }
333 
334  $this->tpl->addInlineCss($inline_css);
335 
336  // Add possibility to change the owner in edit mode
337  if ($this->record_id) {
338  $field_setting = $this->tableview->getFieldSetting('owner');
339  if ($field_setting->isVisibleEdit()) {
340  $ownerField = $this->table->getField('owner');
341  $inputfield = ilDclCache::getFieldRepresentation($ownerField)->getInputField($this->form);
342 
343  if (!ilObjDataCollectionAccess::hasWriteAccess($this->parent_obj->getRefId()) && $field_setting->isLockedEdit()) {
344  $inputfield->setDisabled(true);
345  } else {
346  $inputfield->setRequired(true);
347  }
348 
349  $this->form->addItem($inputfield);
350  }
351  }
352 
353  // save and cancel commands
354  if ($this->record_id) {
355  $this->form->setTitle($this->lng->txt("dcl_update_record"));
356  $this->form->addCommandButton("save", $this->lng->txt("dcl_update_record"));
357  if (!$this->ctrl->isAsynch()) {
358  $this->form->addCommandButton("cancelUpdate", $this->lng->txt("cancel"));
359  }
360  } else {
361  $this->form->setTitle($this->lng->txt("dcl_add_new_record"));
362  $this->form->addCommandButton("save", $this->lng->txt("save"));
363  if (!$this->ctrl->isAsynch()) {
364  $this->form->addCommandButton("cancelSave", $this->lng->txt("cancel"));
365  }
366  }
367  $this->ctrl->setParameter($this, "tableview_id", $this->tableview_id);
368  $this->ctrl->setParameter($this, "table_id", $this->table_id);
369  $this->ctrl->setParameter($this, "record_id", $this->record_id);
370  }
371 
375  public function setFormValues(): bool
376  {
377  //Get Record-Values
378  $record_obj = ilDclCache::getRecordCache($this->record_id);
379  if ($record_obj->getId()) {
380  //Get Table Field Definitions
381  $allFields = $this->table->getFields();
382  foreach ($allFields as $field) {
383  if ($field->getDatatypeId() !== ilDclDatatype::INPUTFORMAT_NONE &&
384  $field->getViewSetting($this->tableview_id)->isVisibleEdit()) {
385  $record_obj->fillRecordFieldFormInput($field->getId(), $this->form);
386  }
387  }
388  } else {
389  $this->form->setValuesByPost();
390  }
391 
392  return true;
393  }
394 
398  public function cancelUpdate(): void
399  {
400  $this->checkAndPerformRedirect(true);
401  }
402 
406  public function cancelSave(): void
407  {
408  $this->cancelUpdate();
409  }
410 
416  public function saveConfirmation(ilDclBaseRecordModel $record_obj, string $filehash): void
417  {
418  $permission = ilObjDataCollectionAccess::hasWriteAccess($this->parent_obj->getRefId());
419  if ($permission) {
420  $all_fields = $this->table->getRecordFields();
421  } else {
422  $all_fields = $this->table->getEditableFields(!$this->record_id);
423  }
424 
425  $date_obj = new ilDateTime(time(), IL_CAL_UNIX);
426  $record_obj->setTableId($this->table_id);
427  $record_obj->setLastUpdate($date_obj);
428  $record_obj->setLastEditBy($this->user->getId());
429 
430  $confirmation = new ilConfirmationGUI();
431  $confirmation->setFormAction($this->ctrl->getFormAction($this));
432  $header_text = $this->lng->txt('dcl_confirm_storing_records');
433  if (!$permission && !ilObjDataCollectionAccess::hasEditAccess($this->parent_obj->getRefId())
434  && !$this->table->getEditByOwner()
435  && !$this->table->getEditPerm()
436  ) {
437  $header_text .= " " . $this->lng->txt('dcl_confirm_storing_records_no_permission');
438  }
439  $confirmation->setHeaderText($header_text);
440 
441  $confirmation->setCancel($this->lng->txt('dcl_edit_record'), 'edit');
442  $confirmation->setConfirm($this->lng->txt('dcl_save_record'), 'save');
443 
444  $record_data = "";
445 
446  $empty_fileuploads = [];
447  foreach ($all_fields as $field) {
448  $record_field = $record_obj->getRecordField((int) $field->getId());
450  $record_field->addHiddenItemsToConfirmation($confirmation);
451 
452  if ($record_field instanceof ilDclFileRecordFieldModel && $record_field->getValue() == null) {
453  $empty_fileuploads['field_' . $field->getId()] = [
454  "name" => "",
455  "type" => "",
456  "tmp_name" => "",
457  "error" => 4,
458  "size" => 0
459  ];
460  }
461  $record_representation = ilDclFieldFactory::getRecordRepresentationInstance($record_field);
462 
463  if ($record_representation->getConfirmationHTML() !== '') {
464  $record_data .= $field->getTitle() . ": " . $record_representation->getConfirmationHTML() . "<br />";
465  }
466  }
467 
468  $confirmation->addHiddenItem('ilfilehash', $filehash);
469  $confirmation->addHiddenItem('empty_fileuploads', htmlspecialchars(json_encode($empty_fileuploads)));
470  $confirmation->addHiddenItem('table_id', (string) $this->table_id);
471  $confirmation->addHiddenItem('tableview_id', (string) $this->tableview_id);
472  $confirmation->addItem('save_confirmed', "1", $record_data);
473 
474  if ($this->ctrl->isAsynch()) {
475  echo $confirmation->getHTML();
476  exit();
477  } else {
478  $this->tpl->setContent($confirmation->getHTML());
479  }
480  }
481 
485  public function save(): void
486  {
487  global $DIC;
488  $ilAppEventHandler = $DIC['ilAppEventHandler'];
489 
490  $this->initForm();
491 
492  // if save confirmation is enabled: Temporary file-uploads need to be handled
493  $has_save_confirmed = $this->http->wrapper()->post()->has('save_confirmed');
494  $has_ilfilehash = $this->http->wrapper()->post()->has('ilfilehash');
495  $has_record_id = isset($this->record_id);
496  $table_has_save_confirmation = $this->table->getSaveConfirmation();
497 
498  $ilfilehash = $has_ilfilehash ? $this->http->wrapper()->post()->retrieve(
499  'ilfilehash',
500  $this->refinery->kindlyTo()->string()
501  ) : '';
503 
504 
505  if ($table_has_save_confirmation
506  && $has_save_confirmed
507  && $has_ilfilehash
508  && !$has_record_id
509  && !$this->ctrl->isAsynch()
510  ) {
511  $has_empty_fileuploads = $this->http->wrapper()->post()->has('empty_fileuploads');
512 
513  //handle empty fileuploads, since $_FILES has to have an entry for each fileuploadGUI
514  if ($has_empty_fileuploads) {
515  $empty_fileuploads = $this->http->wrapper()->post()->retrieve(
516  'empty_fileuploads',
517  $this->refinery->kindlyTo()->string()
518  );
519  if (json_decode($empty_fileuploads)) {
520  $_FILES = $_FILES + json_decode($empty_fileuploads, true);
521  }
522  }
523  }
524 
525  $valid = $this->form->checkInput();
526 
527  $create_mode = ($this->record_id == null);
528  $date_obj = new ilDateTime(time(), IL_CAL_UNIX);
529 
530  $record_obj = ilDclCache::getRecordCache($this->record_id);
531  $unchanged_obj = $record_obj;
532  $record_obj->setTableId($this->table_id);
533  $record_obj->setLastUpdate($date_obj);
534  $record_obj->setLastEditBy($this->user->getId());
535 
536  if (ilObjDataCollectionAccess::hasWriteAccess($this->parent_obj->getRefId()) || $create_mode) {
537  $all_fields = $this->table->getRecordFields();
538  } else {
539  $all_fields = $this->table->getEditableFields(!$this->record_id);
540  }
541 
542  // Check if we can create this record.
543  if ($valid) {
544  foreach ($all_fields as $field) {
545  try {
546  $field->checkValidityFromForm($this->form, $this->record_id);
547  } catch (ilDclInputException $e) {
548  $valid = false;
549  $item = $this->form->getItemByPostVar('field_' . $field->getId());
550  $item->setAlert($e->getMessage());
551  }
552  }
553  }
554 
555  if (!$valid) {
556  // Form not valid...
557  //TODO: URL title flushes on invalid form
559  $this->form->setValuesByPost();
560  $this->tpl->setContent($this->form->getHTML());
561  $this->sendFailure($this->lng->txt('form_input_not_valid'));
562 
563  return;
564  }
565 
566  if ($create_mode) {
568  $this->parent_obj->getRefId(),
570  ))) {
571  $this->accessDenied();
572 
573  return;
574  }
575 
576  // when save_confirmation is enabled, not yet confirmed and we have not an async-request => prepare for displaying confirmation
577  if ($table_has_save_confirmation && $this->form->getInput('save_confirmed') == null && !$this->ctrl->isAsynch()) {
578  $hash = $this->rebuildUploadsForFileHash($has_ilfilehash);
579 
580  //edit values, they are valid we already checked them above
581  foreach ($all_fields as $field) {
582  $record_obj->setRecordFieldValueFromForm((int) $field->getId(), $this->form);
583  }
584 
585  $this->saveConfirmation($record_obj, $hash);
586 
587  return;
588  }
589 
590  $record_obj->setOwner($this->user->getId());
591  $record_obj->setCreateDate($date_obj);
592  $record_obj->setTableId($this->table_id);
593  $record_obj->doCreate();
594 
595  $this->record_id = $record_obj->getId();
596  } else {
597  if (!$record_obj->hasPermissionToEdit($this->parent_obj->getRefId())) {
598  $this->accessDenied();
599 
600  return;
601  }
602  }
603 
604  //edit values, they are valid we already checked them above
605  foreach ($all_fields as $field) {
606  $field_setting = $field->getViewSetting($this->tableview_id);
607 
608  if ($field_setting->isVisibleInForm($create_mode) &&
609  (!$field_setting->isLocked($create_mode) || ilObjDataCollectionAccess::hasWriteAccess($this->parent_obj->getRefId()))) {
610  // set all visible fields
611  $record_obj->setRecordFieldValueFromForm((int) $field->getId(), $this->form);
612  } elseif ($create_mode) {
613  // set default values when creating
614  $default_value = ilDclTableViewBaseDefaultValue::findSingle(
615  $field_setting->getFieldObject()->getDatatypeId(),
616  $field_setting->getId()
617  );
618  if ($default_value !== null) {
619  $record_obj->setRecordFieldValue($field->getId(), $default_value->getValue());
620  }
621  }
622  }
623 
624  // Do we need to set a new owner for this record?
625  if (!$create_mode && $this->tableview->getFieldSetting('owner')->isVisibleEdit()) {
626  if ($this->http->wrapper()->post()->has('field_owner')) {
627  $field_owner = $this->http->wrapper()->post()->retrieve(
628  'field_owner',
629  $this->refinery->kindlyTo()->string()
630  );
631  $owner_id = ilObjUser::_lookupId($field_owner);
632  if (!$owner_id) {
633  $this->sendFailure($this->lng->txt('user_not_known'));
634 
635  return;
636  }
637  $record_obj->setOwner($owner_id);
638  }
639  }
640 
641  $dispatchEvent = "update";
642 
643  $dispatchEventData = [
644  'dcl' => $this->parent_obj->getDataCollectionObject(),
645  'table_id' => $this->table_id,
646  'record_id' => $record_obj->getId(),
647  'record' => $record_obj,
648  ];
649 
650  if ($create_mode) {
651  $dispatchEvent = "create";
652  $ref_id = $this->http->wrapper()->query()->retrieve('ref_id', $this->refinery->kindlyTo()->int());
653  $objDataCollection = new ilObjDataCollection($ref_id);
654  $objDataCollection->sendRecordNotification(ilDataCollectionMailNotification::TYPE_RECORD_CREATE, $record_obj);
655  } else {
656  $dispatchEventData['prev_record'] = $unchanged_obj;
657  }
658 
659  $record_obj->doUpdate($create_mode);
660 
661  $ilAppEventHandler->raise(
662  'components/ILIAS/DataCollection',
663  $dispatchEvent . 'Record',
664  $dispatchEventData
665  );
666 
667  $this->ctrl->setParameter($this, "table_id", $this->table_id);
668  $this->ctrl->setParameter($this, "tableview_id", $this->tableview_id);
669  $this->ctrl->setParameter($this, "record_id", $this->record_id);
670 
671  if (!$this->ctrl->isAsynch()) {
672  $this->tpl->setOnScreenMessage('success', $this->lng->txt("msg_obj_modified"), true);
673  }
674 
675  $this->checkAndPerformRedirect();
676  if ($this->ctrl->isAsynch()) {
677  // If ajax request, return the form in edit mode again
678  $this->record_id = $record_obj->getId();
679  $this->initForm();
680  $this->setFormValues();
682  $this->lng->txt('msg_obj_modified'),
683  'success'
684  ) . $this->form->getHTML();
685  exit();
686  } else {
687  $this->ctrl->redirectByClass(ilDclRecordListGUI::class, "listRecords");
688  }
689  }
690 
694  protected function checkAndPerformRedirect(bool $force_redirect = false): void
695  {
696  $hasRedirect = $this->http->wrapper()->query()->has('redirect');
697 
698  if ($force_redirect || ($hasRedirect && !$this->ctrl->isAsynch())) {
699  if ($hasRedirect) {
700  $redirect = $this->http->wrapper()->query()->retrieve('redirect', $this->refinery->kindlyTo()->int());
701  switch ($redirect) {
702  case self::REDIRECT_DETAIL:
703  $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'record_id', $this->record_id);
704  $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'table_id', $this->table_id);
705  $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'tableview_id', $this->tableview_id);
706  $this->ctrl->redirectByClass(ilDclDetailedViewGUI::class, "renderRecord");
707  break;
708  case self::REDIRECT_RECORD_LIST:
709  $this->ctrl->redirectByClass(ilDclRecordListGUI::class, "listRecords");
710  break;
711  }
712  }
713  $this->ctrl->redirectByClass(ilDclRecordListGUI::class, "listRecords");
714  }
715  }
716 
717  protected function accessDenied(): void
718  {
719  if (!$this->ctrl->isAsynch()) {
720  $this->tpl->setOnScreenMessage('failure', $this->lng->txt('dcl_msg_no_perm_edit'), true);
721  $this->ctrl->redirectByClass(ilDclRecordListGUI::class, 'listRecords');
722  } else {
723  echo $this->lng->txt('dcl_msg_no_perm_edit');
724  exit();
725  }
726  }
727 
728  protected function sendFailure(string $message): void
729  {
730  $keep = !$this->ctrl->isAsynch();
731  $this->form->setValuesByPost();
732  if ($this->ctrl->isAsynch()) {
733  echo ilUtil::getSystemMessageHTML($message, 'failure') . $this->form->getHTML();
734  exit();
735  } else {
736  $this->tpl->setOnScreenMessage('failure', $message, $keep);
737 
738  // Fill locked fields on edit mode - otherwise they are empty (workaround)
739  if (isset($this->record_id) && $this->record_id) {
740  $record_obj = ilDclCache::getRecordCache($this->record_id);
741  if ($record_obj->getId()) {
742  //Get Table Field Definitions
743  $allFields = $this->table->getFields();
744  foreach ($allFields as $field) {
745  $field_setting = $field->getViewSetting($this->tableview_id);
746  if (
747  $field_setting->isLockedEdit() &&
748  $field_setting->isVisibleEdit()
749  ) {
750  $record_obj->fillRecordFieldFormInput($field->getId(), $this->form);
751  }
752  }
753  }
754  }
755  $this->tpl->setContent($this->form->getHTML());
756  }
757  }
758 
762  public function searchObjects(): void
763  {
764  $search = $this->http->wrapper()->post()->retrieve('search_for', $this->refinery->kindlyTo()->string());
765  $dest = $this->http->wrapper()->post()->retrieve('dest', $this->refinery->kindlyTo()->string());
766  $html = "";
767  $query_parser = new ilQueryParser($search);
768  $query_parser->setMinWordLength(1);
769  $query_parser->setCombination(ilQueryParser::QP_COMBINATION_AND);
770  $query_parser->parse();
771  if (!$query_parser->validate()) {
772  $html .= $query_parser->getMessage() . "<br />";
773  }
774 
775  // only like search since fulltext does not support search with less than 3 characters
776  $object_search = new ilLikeObjectSearch($query_parser);
777  $res = $object_search->performSearch();
778  //$res->setRequiredPermission('copy');
779  $res->filter(ROOT_FOLDER_ID, true);
780 
781  if (!count($results = $res->getResultsByObjId())) {
782  $html .= $this->lng->txt('dcl_no_search_results_found_for') . ' ' . $search . "<br />";
783  }
785 
786  foreach ($results as $entry) {
787  $tpl = new ilTemplate("tpl.dcl_tree.html", true, true, "components/ILIAS/DataCollection");
788  foreach ((array) $entry['refs'] as $reference) {
789  $path = new ilPathGUI();
790  $tpl->setCurrentBlock('result');
791  $tpl->setVariable(
792  'RESULT_PATH',
793  $path->getPath(ROOT_FOLDER_ID, (int) $reference) . " ยป " . $entry['title']
794  );
795  $tpl->setVariable('RESULT_REF', $reference);
796  $tpl->setVariable('FIELD_ID', $dest);
797  $tpl->parseCurrentBlock();
798  }
799  $html .= $tpl->get();
800  }
801 
802  echo $html;
803  exit;
804  }
805 
806 
812  protected function parseSearchResults(array $a_res): array
813  {
814  $rows = [];
815  foreach ($a_res as $obj_id => $references) {
816  $r = [];
817  $r['title'] = ilObject::_lookupTitle($obj_id);
818  $r['desc'] = ilObject::_lookupDescription($obj_id);
819  $r['obj_id'] = $obj_id;
820  $r['refs'] = $references;
821  $rows[] = $r;
822  }
823 
824  return $rows;
825  }
826 
830  protected function cleanupTempFiles(): void
831  {
832  $has_ilfilehash = $this->http->wrapper()->post()->has('ilfilehash');
833  if ($has_ilfilehash) {
834  $ilfilehash = $this->http->wrapper()->post()->retrieve('ilfilehash', $this->refinery->kindlyTo()->string());
835  $this->form->cleanupTempFiles($ilfilehash);
836  }
837  }
838 
839  public function getForm(): ilDclPropertyFormGUI
840  {
841  return $this->form;
842  }
843 }
setFormValues()
Set values from object to form.
$res
Definition: ltiservices.php:69
Class ilDclPropertyFormGUI ilDclPropertyFormGUI: ilFormPropertyDispatchGUI.
static getSystemMessageHTML(string $a_txt, string $a_type="info")
Get HTML for a system message.
cleanupTempFiles()
Cleanup temp-files.
setCurrentBlock(string $blockname=self::DEFAULT_BLOCK)
Sets the template to the given block.
static findOrGetInstance($primary_key, array $add_constructor_args=[])
const ROOT_FOLDER_ID
Definition: constants.php:32
__construct(ilObjDataCollectionGUI $parent_obj, int $table_id, int $tableview_id)
static hasAddRecordAccess(int $ref, ?int $user_id=0)
$valid
doUpdate(bool $omit_notification=false)
parseCurrentBlock(string $blockname=self::DEFAULT_BLOCK)
Parses the given block.
ilDclBaseRecordModel $record
static _lookupId($a_user_str)
ilGlobalPageTemplate $tpl
ILIAS Refinery Factory $refinery
static rebuildTempFileByHash(string $hash)
create()
Create new record gui.
setRecordFieldValue($field_id, $value)
const IL_CAL_UNIX
$path
Definition: ltiservices.php:30
static getFieldRepresentation(ilDclBaseFieldModel $field)
setRecordFieldValueFromForm(int $field_id, ilPropertyFormGUI $form)
Set a field value.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
ilObjDataCollectionGUI: ilInfoScreenGUI, ilNoteGUI, ilCommonActionDispatcherGUI ilObjDataCollectionG...
$ref_id
Definition: ltiauth.php:66
static http()
Fetches the global http state from ILIAS.
get(string $part=self::DEFAULT_BLOCK)
Renders the given block and returns the html string.
static _lookupTitle(int $obj_id)
static getTableCache(int $table_id=null)
ILIAS HTTP Services $http
searchObjects()
This function is only used by the ajax request if searching for ILIAS references. ...
rebuildUploadsForFileHash(bool $has_ilfilehash)
initForm()
init Form move parts to RecordRepresentationGUI
const REDIRECT_RECORD_LIST
Possible redirects after saving/updating a record - use GET[&#39;redirect&#39;] to set constants.
global $DIC
Definition: shib_login.php:25
confirmDelete()
Delete confirmation.
static getRecordRepresentation(ilDclBaseRecordFieldModel $record_field)
Returns a record representation.
$results
static hasWriteAccess(int $ref, ?int $user_id=0)
static _lookupDescription(int $obj_id)
ilDclPropertyFormGUI $form
cancelDelete()
Cancel deletion.
getRecordData(int $record_id=0)
Return All fields and values from a record ID.
static getRecordRepresentationInstance(ilDclBaseRecordFieldModel $record_field)
Get RecordRepresentation from RecordFieldModel.
static getRecordCache(?int $record_id)
setCreateDate(ilDateTime $a_datetime)
form( $class_path, string $cmd, string $submit_caption="")
parseSearchResults(array $a_res)
Parse search results.
setLastUpdate(ilDateTime $a_datetime)
static hasPermissionToAddRecord(int $ref_id, int $table_id)
static getRecordFieldCache(object $record, object $field)
checkAndPerformRedirect(bool $force_redirect=false)
Checks to what view (table or detail) should be redirected and performs redirect. ...
static hasEditAccess(int $ref, ?int $user_id=0)
doDelete(bool $omit_notification=false)
fillRecordFieldFormInput($field_id, ilPropertyFormGUI $form)
setVariable(string $variable, $value='')
Sets the given variable to the given value.
ilObjDataCollectionGUI $parent_obj
$r