ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ilDclRecordEditGUI Class Reference
+ Collaboration diagram for ilDclRecordEditGUI:

Public Member Functions

 __construct (ilObjDataCollectionGUI $parent_obj, int $table_id, int $tableview_id)
 
 executeCommand ()
 
 getRecord ()
 
 create ()
 Create new record gui. More...
 
 edit ()
 Record edit gui. More...
 
 confirmDelete ()
 Delete confirmation. More...
 
 cancelDelete ()
 Cancel deletion. More...
 
 delete ()
 Remove record. More...
 
 getRecordData (int $record_id=0)
 Return All fields and values from a record ID. More...
 
 initForm ()
 init Form @move move parts to RecordRepresentationGUI More...
 
 setFormValues ()
 Set values from object to form. More...
 
 cancelUpdate ()
 Cancel Update. More...
 
 cancelSave ()
 Cancel Save. More...
 
 save ()
 Save record. More...
 
 searchObjects ()
 This function is only used by the ajax request if searching for ILIAS references. More...
 
 getForm ()
 

Data Fields

const REDIRECT_RECORD_LIST = 1
 Possible redirects after saving/updating a record - use GET['redirect'] to set constants. More...
 
const REDIRECT_DETAIL = 2
 

Protected Member Functions

 rebuildUploadsForFileHash (bool $has_ilfilehash)
 
 checkAndPerformRedirect (bool $force_redirect=false)
 Checks to what view (table or detail) should be redirected and performs redirect. More...
 
 accessDenied ()
 
 sendFailure (string $message)
 
 parseSearchResults (array $a_res)
 Parse search results. More...
 
 cleanupTempFiles ()
 Cleanup temp-files. More...
 

Protected Attributes

int $tableview_id = null
 
int $record_id = null
 
int $table_id = 1
 
ilDclTable $table
 
ilObjDataCollectionGUI $parent_obj
 
ilDclBaseRecordModel $record
 
ilCtrl $ctrl
 
ilGlobalPageTemplate $tpl
 
ilLanguage $lng
 
ilObjUser $user
 
ilDclPropertyFormGUI $form
 
ilDclTableView $tableview
 
ILIAS HTTP Services $http
 
ILIAS Refinery Factory $refinery
 

Detailed Description

Definition at line 21 of file class.ilDclRecordEditGUI.php.

Constructor & Destructor Documentation

◆ __construct()

ilDclRecordEditGUI::__construct ( ilObjDataCollectionGUI  $parent_obj,
int  $table_id,
int  $tableview_id 
)

Definition at line 44 of file class.ilDclRecordEditGUI.php.

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 }
ilObjDataCollectionGUI $parent_obj
static findOrGetInstance($primary_key, array $add_constructor_args=[])
static http()
Fetches the global http state from ILIAS.
global $DIC
Definition: shib_login.php:26

References $DIC, $parent_obj, $table_id, $tableview_id, ILIAS\Repository\ctrl(), ilDclTableView\findOrGetInstance(), ILIAS\FileDelivery\http(), ILIAS\Repository\lng(), ILIAS\Repository\refinery(), and ILIAS\Repository\user().

+ Here is the call graph for this function:

Member Function Documentation

◆ accessDenied()

ilDclRecordEditGUI::accessDenied ( )
protected

Definition at line 718 of file class.ilDclRecordEditGUI.php.

718 : void
719 {
720 if (!$this->ctrl->isAsynch()) {
721 $this->tpl->setOnScreenMessage('failure', $this->lng->txt('dcl_msg_no_perm_edit'), true);
722 $this->ctrl->redirectByClass(ilDclRecordListGUI::class, 'listRecords');
723 } else {
724 echo $this->lng->txt('dcl_msg_no_perm_edit');
725 exit();
726 }
727 }
exit

References ILIAS\Repository\ctrl(), exit, and ILIAS\Repository\lng().

Referenced by delete(), getRecord(), and save().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cancelDelete()

ilDclRecordEditGUI::cancelDelete ( )

Cancel deletion.

Definition at line 223 of file class.ilDclRecordEditGUI.php.

223 : void
224 {
225 $this->ctrl->redirectByClass(ilDclRecordListGUI::class, "listRecords");
226 }

References ILIAS\Repository\ctrl().

+ Here is the call graph for this function:

◆ cancelSave()

ilDclRecordEditGUI::cancelSave ( )

Cancel Save.

Definition at line 406 of file class.ilDclRecordEditGUI.php.

406 : void
407 {
408 $this->cancelUpdate();
409 }

References cancelUpdate().

+ Here is the call graph for this function:

◆ cancelUpdate()

ilDclRecordEditGUI::cancelUpdate ( )

Cancel Update.

Definition at line 398 of file class.ilDclRecordEditGUI.php.

398 : void
399 {
400 $this->checkAndPerformRedirect(true);
401 }
checkAndPerformRedirect(bool $force_redirect=false)
Checks to what view (table or detail) should be redirected and performs redirect.

References checkAndPerformRedirect().

Referenced by cancelSave().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ checkAndPerformRedirect()

ilDclRecordEditGUI::checkAndPerformRedirect ( bool  $force_redirect = false)
protected

Checks to what view (table or detail) should be redirected and performs redirect.

Definition at line 695 of file class.ilDclRecordEditGUI.php.

695 : void
696 {
697 $hasRedirect = $this->http->wrapper()->query()->has('redirect');
698
699 if ($force_redirect || ($hasRedirect && !$this->ctrl->isAsynch())) {
700 if ($hasRedirect) {
701 $redirect = $this->http->wrapper()->query()->retrieve('redirect', $this->refinery->kindlyTo()->int());
702 switch ($redirect) {
704 $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'record_id', $this->record_id);
705 $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'table_id', $this->table_id);
706 $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'tableview_id', $this->tableview_id);
707 $this->ctrl->redirectByClass(ilDclDetailedViewGUI::class, "renderRecord");
708 break;
710 $this->ctrl->redirectByClass(ilDclRecordListGUI::class, "listRecords");
711 break;
712 }
713 }
714 $this->ctrl->redirectByClass(ilDclRecordListGUI::class, "listRecords");
715 }
716 }
const REDIRECT_RECORD_LIST
Possible redirects after saving/updating a record - use GET['redirect'] to set constants.

References ILIAS\Repository\ctrl(), ILIAS\FileDelivery\http(), REDIRECT_DETAIL, REDIRECT_RECORD_LIST, and ILIAS\Repository\refinery().

Referenced by cancelUpdate(), and save().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cleanupTempFiles()

ilDclRecordEditGUI::cleanupTempFiles ( )
protected

Cleanup temp-files.

Definition at line 831 of file class.ilDclRecordEditGUI.php.

831 : void
832 {
833 $has_ilfilehash = $this->http->wrapper()->post()->has('ilfilehash');
834 if ($has_ilfilehash) {
835 $ilfilehash = $this->http->wrapper()->post()->retrieve('ilfilehash', $this->refinery->kindlyTo()->string());
836 $this->form->cleanupTempFiles($ilfilehash);
837 }
838 }
form( $class_path, string $cmd, string $submit_caption="")

References ILIAS\Repository\form(), ILIAS\FileDelivery\http(), and ILIAS\Repository\refinery().

Referenced by edit().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ confirmDelete()

ilDclRecordEditGUI::confirmDelete ( )

Delete confirmation.

Exceptions
ilDclException

Definition at line 195 of file class.ilDclRecordEditGUI.php.

195 : 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 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getRecordCache(?int $record_id)
static getRecordFieldCache(object $record, object $field)
static getRecordRepresentation(ilDclBaseRecordFieldModel $record_field)
Returns a record representation.
ilDclBaseRecordModel $record

References $record, ILIAS\Repository\ctrl(), ilDclBaseRecordModel\getId(), ilDclCache\getRecordCache(), ilDclCache\getRecordFieldCache(), ilDclCache\getRecordRepresentation(), and ILIAS\Repository\lng().

+ Here is the call graph for this function:

◆ create()

ilDclRecordEditGUI::create ( )

Create new record gui.

Definition at line 171 of file class.ilDclRecordEditGUI.php.

171 : void
172 {
173 global $DIC;
174 $DIC->help()->setSubScreenId('create');
175 $this->initForm();
176 $this->tpl->setContent($this->form->getHTML());
177 }
initForm()
init Form @move move parts to RecordRepresentationGUI

References $DIC, ILIAS\Repository\form(), and initForm().

+ Here is the call graph for this function:

◆ delete()

ilDclRecordEditGUI::delete ( )

Remove record.

Definition at line 231 of file class.ilDclRecordEditGUI.php.

231 : 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 }
doDelete(bool $omit_notification=false)

References $record, accessDenied(), ILIAS\Repository\ctrl(), ilDclBaseRecordModel\doDelete(), ilDclCache\getRecordCache(), and ILIAS\Repository\lng().

+ Here is the call graph for this function:

◆ edit()

ilDclRecordEditGUI::edit ( )

Record edit gui.

Definition at line 182 of file class.ilDclRecordEditGUI.php.

182 : void
183 {
184 $this->initForm();
185 $this->cleanupTempFiles();
186
187 $this->setFormValues();
188 $this->tpl->setContent($this->form->getHTML());
189 }
setFormValues()
Set values from object to form.
cleanupTempFiles()
Cleanup temp-files.

References cleanupTempFiles(), ILIAS\Repository\form(), initForm(), and setFormValues().

+ Here is the call graph for this function:

◆ executeCommand()

ilDclRecordEditGUI::executeCommand ( )

Definition at line 133 of file class.ilDclRecordEditGUI.php.

133 : void
134 {
135 $this->getRecord();
136
137 $cmd = $this->ctrl->getCmd();
138 $this->$cmd();
139 }

References ILIAS\Repository\ctrl(), and getRecord().

+ Here is the call graph for this function:

◆ getForm()

ilDclRecordEditGUI::getForm ( )

Definition at line 840 of file class.ilDclRecordEditGUI.php.

841 {
842 return $this->form;
843 }
Class ilDclPropertyFormGUI @ilCtrl_Calls ilDclPropertyFormGUI: ilFormPropertyDispatchGUI.
ilDclPropertyFormGUI $form

References $form.

◆ getRecord()

ilDclRecordEditGUI::getRecord ( )

Definition at line 141 of file class.ilDclRecordEditGUI.php.

141 : 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 }
static getTableCache(?int $table_id=null)
static hasAddRecordAccess(int $ref, ?int $user_id=0)
$ref_id
Definition: ltiauth.php:66

References $ref_id, accessDenied(), ILIAS\Repository\ctrl(), ilDclCache\getRecordCache(), ilDclCache\getTableCache(), ilObjDataCollectionAccess\hasAddRecordAccess(), ILIAS\FileDelivery\http(), and ILIAS\Repository\refinery().

Referenced by executeCommand().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getRecordData()

ilDclRecordEditGUI::getRecordData ( int  $record_id = 0)

Return All fields and values from a record ID.

If this method is requested over AJAX, data is returned in JSON format

Parameters
int$record_id
Returns
array

Definition at line 252 of file class.ilDclRecordEditGUI.php.

252 : 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) {
260 $return = $record->getRecordFieldValues();
261 }
262 if ($this->ctrl->isAsynch()) {
263 echo json_encode($return);
264 exit();
265 }
266
267 return $return;
268 }

References $record, $record_id, ILIAS\Repository\ctrl(), exit, ilDclCache\getRecordCache(), ilDclBaseRecordModel\getRecordFieldValues(), ILIAS\FileDelivery\http(), and ILIAS\Repository\refinery().

+ Here is the call graph for this function:

◆ initForm()

ilDclRecordEditGUI::initForm ( )

init Form @move move parts to RecordRepresentationGUI

Definition at line 274 of file class.ilDclRecordEditGUI.php.

274 : 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 }
static getFieldRepresentation(ilDclBaseFieldModel $field)
This class represents a hidden form property in a property form.
static hasWriteAccess(int $ref, ?int $user_id=0)

References ILIAS\Repository\ctrl(), ILIAS\Repository\form(), ilDclCache\getFieldRepresentation(), ilObjDataCollectionAccess\hasWriteAccess(), and ILIAS\Repository\lng().

Referenced by create(), edit(), and save().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parseSearchResults()

ilDclRecordEditGUI::parseSearchResults ( array  $a_res)
protected

Parse search results.

Parameters
ilObject[]$a_res
Returns
array

Definition at line 813 of file class.ilDclRecordEditGUI.php.

813 : array
814 {
815 $rows = [];
816 foreach ($a_res as $obj_id => $references) {
817 $r = [];
818 $r['title'] = ilObject::_lookupTitle($obj_id);
819 $r['desc'] = ilObject::_lookupDescription($obj_id);
820 $r['obj_id'] = $obj_id;
821 $r['refs'] = $references;
822 $rows[] = $r;
823 }
824
825 return $rows;
826 }
static _lookupTitle(int $obj_id)
static _lookupDescription(int $obj_id)

References ilObject\_lookupDescription(), and ilObject\_lookupTitle().

Referenced by searchObjects().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rebuildUploadsForFileHash()

ilDclRecordEditGUI::rebuildUploadsForFileHash ( bool  $has_ilfilehash)
protected

Definition at line 76 of file class.ilDclRecordEditGUI.php.

76 : 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 }

References $data, ILIAS\Repository\form(), ILIAS\FileDelivery\http(), and ILIAS\Repository\refinery().

Referenced by save().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ save()

ilDclRecordEditGUI::save ( )

Save record.

Definition at line 485 of file class.ilDclRecordEditGUI.php.

485 : void
486 {
487 global $DIC;
488 $ilAppEventHandler = $DIC['ilAppEventHandler'];
489
490 $this->initForm();
491 $this->setFormValues();
492
493 // if save confirmation is enabled: Temporary file-uploads need to be handled
494 $has_save_confirmed = $this->http->wrapper()->post()->has('save_confirmed');
495 $has_ilfilehash = $this->http->wrapper()->post()->has('ilfilehash');
496 $has_record_id = isset($this->record_id);
497 $table_has_save_confirmation = $this->table->getSaveConfirmation();
498
499 $ilfilehash = $has_ilfilehash ? $this->http->wrapper()->post()->retrieve(
500 'ilfilehash',
501 $this->refinery->kindlyTo()->string()
502 ) : '';
504
505
506 if ($table_has_save_confirmation
507 && $has_save_confirmed
508 && $has_ilfilehash
509 && !$has_record_id
510 && !$this->ctrl->isAsynch()
511 ) {
512 $has_empty_fileuploads = $this->http->wrapper()->post()->has('empty_fileuploads');
513
514 //handle empty fileuploads, since $_FILES has to have an entry for each fileuploadGUI
515 if ($has_empty_fileuploads) {
516 $empty_fileuploads = $this->http->wrapper()->post()->retrieve(
517 'empty_fileuploads',
518 $this->refinery->kindlyTo()->string()
519 );
520 if (json_decode($empty_fileuploads)) {
521 $_FILES = $_FILES + json_decode($empty_fileuploads, true);
522 }
523 }
524 }
525
526 $valid = $this->form->checkInput();
527
528 $create_mode = ($this->record_id == null);
529 $date_obj = new ilDateTime(time(), IL_CAL_UNIX);
530
531 $record_obj = ilDclCache::getRecordCache($this->record_id);
532 $unchanged_obj = $record_obj;
533 $record_obj->setTableId($this->table_id);
534 $record_obj->setLastUpdate($date_obj);
535 $record_obj->setLastEditBy($this->user->getId());
536
537 if (ilObjDataCollectionAccess::hasWriteAccess($this->parent_obj->getRefId()) || $create_mode) {
538 $all_fields = $this->table->getRecordFields();
539 } else {
540 $all_fields = $this->table->getEditableFields(!$this->record_id);
541 }
542
543 // Check if we can create this record.
544 if ($valid) {
545 foreach ($all_fields as $field) {
546 try {
547 $field->checkValidityFromForm($this->form, $this->record_id);
548 } catch (ilDclInputException $e) {
549 $valid = false;
550 $item = $this->form->getItemByPostVar('field_' . $field->getId());
551 $item->setAlert($e->getMessage());
552 }
553 }
554 }
555
556 if (!$valid) {
557 // Form not valid...
558 //TODO: URL title flushes on invalid form
560 $this->form->setValuesByPost();
561 $this->tpl->setContent($this->form->getHTML());
562 $this->sendFailure($this->lng->txt('form_input_not_valid'));
563
564 return;
565 }
566
567 if ($create_mode) {
569 $this->parent_obj->getRefId(),
570 $this->table_id
571 ))) {
572 $this->accessDenied();
573
574 return;
575 }
576
577 // when save_confirmation is enabled, not yet confirmed and we have not an async-request => prepare for displaying confirmation
578 if ($table_has_save_confirmation && $this->form->getInput('save_confirmed') == null && !$this->ctrl->isAsynch()) {
579 $hash = $this->rebuildUploadsForFileHash($has_ilfilehash);
580
581 //edit values, they are valid we already checked them above
582 foreach ($all_fields as $field) {
583 $record_obj->setRecordFieldValueFromForm((int) $field->getId(), $this->form);
584 }
585
586 $this->saveConfirmation($record_obj, $hash);
587
588 return;
589 }
590
591 $record_obj->setOwner($this->user->getId());
592 $record_obj->setCreateDate($date_obj);
593 $record_obj->setTableId($this->table_id);
594 $record_obj->doCreate();
595
596 $this->record_id = $record_obj->getId();
597 } else {
598 if (!$record_obj->hasPermissionToEdit($this->parent_obj->getRefId())) {
599 $this->accessDenied();
600
601 return;
602 }
603 }
604
605 //edit values, they are valid we already checked them above
606 foreach ($all_fields as $field) {
607 $field_setting = $field->getViewSetting($this->tableview_id);
608
609 if ($field_setting->isVisibleInForm($create_mode) &&
610 (!$field_setting->isLocked($create_mode) || ilObjDataCollectionAccess::hasWriteAccess($this->parent_obj->getRefId()))) {
611 // set all visible fields
612 $record_obj->setRecordFieldValueFromForm((int) $field->getId(), $this->form);
613 } elseif ($create_mode) {
614 // set default values when creating
615 $default_value = ilDclTableViewBaseDefaultValue::findSingle(
616 $field_setting->getFieldObject()->getDatatypeId(),
617 $field_setting->getId()
618 );
619 if ($default_value !== null) {
620 $record_obj->setRecordFieldValue($field->getId(), $default_value->getValue());
621 }
622 }
623 }
624
625 // Do we need to set a new owner for this record?
626 if (!$create_mode && $this->tableview->getFieldSetting('owner')->isVisibleEdit()) {
627 if ($this->http->wrapper()->post()->has('field_owner')) {
628 $field_owner = $this->http->wrapper()->post()->retrieve(
629 'field_owner',
630 $this->refinery->kindlyTo()->string()
631 );
632 $owner_id = ilObjUser::_lookupId($field_owner);
633 if (!$owner_id) {
634 $this->sendFailure($this->lng->txt('user_not_known'));
635
636 return;
637 }
638 $record_obj->setOwner($owner_id);
639 }
640 }
641
642 $dispatchEvent = "update";
643
644 $dispatchEventData = [
645 'dcl' => $this->parent_obj->getDataCollectionObject(),
646 'table_id' => $this->table_id,
647 'record_id' => $record_obj->getId(),
648 'record' => $record_obj,
649 ];
650
651 if ($create_mode) {
652 $dispatchEvent = "create";
653 $ref_id = $this->http->wrapper()->query()->retrieve('ref_id', $this->refinery->kindlyTo()->int());
654 $objDataCollection = new ilObjDataCollection($ref_id);
655 $objDataCollection->sendRecordNotification(ilDclNotificationType::RECORD_CREATE, $record_obj);
656 } else {
657 $dispatchEventData['prev_record'] = $unchanged_obj;
658 }
659
660 $record_obj->doUpdate($create_mode);
661
662 $ilAppEventHandler->raise(
663 'components/ILIAS/DataCollection',
664 $dispatchEvent . 'Record',
665 $dispatchEventData
666 );
667
668 $this->ctrl->setParameter($this, "table_id", $this->table_id);
669 $this->ctrl->setParameter($this, "tableview_id", $this->tableview_id);
670 $this->ctrl->setParameter($this, "record_id", $this->record_id);
671
672 if (!$this->ctrl->isAsynch()) {
673 $this->tpl->setOnScreenMessage('success', $this->lng->txt("msg_obj_modified"), true);
674 }
675
677 if ($this->ctrl->isAsynch()) {
678 // If ajax request, return the form in edit mode again
679 $this->record_id = $record_obj->getId();
680 $this->initForm();
681 $this->setFormValues();
683 $this->lng->txt('msg_obj_modified'),
684 'success'
685 ) . $this->form->getHTML();
686 exit();
687 } else {
688 $this->ctrl->redirectByClass(ilDclRecordListGUI::class, "listRecords");
689 }
690 }
const IL_CAL_UNIX
@classDescription Date and time handling
static rebuildTempFileByHash(string $hash)
rebuildUploadsForFileHash(bool $has_ilfilehash)
static hasPermissionToAddRecord(int $ref_id, int $table_id)
static _lookupId(string|array $a_user_str)
static getSystemMessageHTML(string $a_txt, string $a_type="info")
Get HTML for a system message.
$valid

References $DIC, Vendor\Package\$e, $ref_id, $table_id, $valid, ilObjUser\_lookupId(), accessDenied(), checkAndPerformRedirect(), ILIAS\Repository\ctrl(), ilDclBaseRecordModel\doCreate(), ilDclBaseRecordModel\doUpdate(), exit, ILIAS\Repository\form(), ilDclBaseRecordModel\getId(), ilDclCache\getRecordCache(), ilUtil\getSystemMessageHTML(), ilObjDataCollectionAccess\hasPermissionToAddRecord(), ilDclBaseRecordModel\hasPermissionToEdit(), ilObjDataCollectionAccess\hasWriteAccess(), ILIAS\FileDelivery\http(), IL_CAL_UNIX, initForm(), ILIAS\Repository\lng(), ilDclPropertyFormGUI\rebuildTempFileByHash(), rebuildUploadsForFileHash(), ILIAS\Repository\refinery(), sendFailure(), ilDclBaseRecordModel\setCreateDate(), setFormValues(), ilDclBaseRecordModel\setLastEditBy(), ilDclBaseRecordModel\setLastUpdate(), ilDclBaseRecordModel\setOwner(), ilDclBaseRecordModel\setRecordFieldValue(), ilDclBaseRecordModel\setRecordFieldValueFromForm(), ilDclBaseRecordModel\setTableId(), and ILIAS\Repository\user().

+ Here is the call graph for this function:

◆ searchObjects()

ilDclRecordEditGUI::searchObjects ( )

This function is only used by the ajax request if searching for ILIAS references.

It builds the html for the search results.

Definition at line 763 of file class.ilDclRecordEditGUI.php.

763 : void
764 {
765 $search = $this->http->wrapper()->post()->retrieve('search_for', $this->refinery->kindlyTo()->string());
766 $dest = $this->http->wrapper()->post()->retrieve('dest', $this->refinery->kindlyTo()->string());
767 $html = "";
768 $query_parser = new ilQueryParser($search);
769 $query_parser->setMinWordLength(1);
770 $query_parser->setCombination(ilQueryParser::QP_COMBINATION_AND);
771 $query_parser->parse();
772 if (!$query_parser->validate()) {
773 $html .= $query_parser->getMessage() . "<br />";
774 }
775
776 // only like search since fulltext does not support search with less than 3 characters
777 $object_search = new ilLikeObjectSearch($query_parser);
778 $res = $object_search->performSearch();
779 //$res->setRequiredPermission('copy');
780 $res->filter(ROOT_FOLDER_ID, true);
781
782 if (!count($results = $res->getResultsByObjId())) {
783 $html .= $this->lng->txt('dcl_no_search_results_found_for') . ' ' . $search . "<br />";
784 }
786
787 foreach ($results as $entry) {
788 $tpl = new ilTemplate("tpl.dcl_tree.html", true, true, "components/ILIAS/DataCollection");
789 foreach ((array) $entry['refs'] as $reference) {
790 $path = new ilPathGUI();
791 $tpl->setCurrentBlock('result');
793 'RESULT_PATH',
794 $path->getPath(ROOT_FOLDER_ID, (int) $reference) . " ยป " . $entry['title']
795 );
796 $tpl->setVariable('RESULT_REF', $reference);
797 $tpl->setVariable('FIELD_ID', $dest);
799 }
800 $html .= $tpl->get();
801 }
802
803 echo $html;
804 exit;
805 }
ilGlobalPageTemplate $tpl
parseSearchResults(array $a_res)
Parse search results.
setCurrentBlock(string $blockname=self::DEFAULT_BLOCK)
Sets the template to the given block.
get(string $part=self::DEFAULT_BLOCK)
Renders the given block and returns the html string.
setVariable(string $variable, $value='')
Sets the given variable to the given value.
parseCurrentBlock(string $blockname=self::DEFAULT_BLOCK)
Parses the given block.
special template class to simplify handling of ITX/PEAR
const ROOT_FOLDER_ID
Definition: constants.php:32
$path
Definition: ltiservices.php:30
$res
Definition: ltiservices.php:69
$results

References $path, $res, $results, $tpl, exit, ilGlobalPageTemplate\get(), ILIAS\FileDelivery\http(), ILIAS\Repository\lng(), ilGlobalPageTemplate\parseCurrentBlock(), parseSearchResults(), ilQueryParser\QP_COMBINATION_AND, ILIAS\Repository\refinery(), ROOT_FOLDER_ID, ilGlobalPageTemplate\setCurrentBlock(), and ilGlobalPageTemplate\setVariable().

+ Here is the call graph for this function:

◆ sendFailure()

ilDclRecordEditGUI::sendFailure ( string  $message)
protected

Definition at line 729 of file class.ilDclRecordEditGUI.php.

729 : void
730 {
731 $keep = !$this->ctrl->isAsynch();
732 $this->form->setValuesByPost();
733 if ($this->ctrl->isAsynch()) {
734 echo ilUtil::getSystemMessageHTML($message, 'failure') . $this->form->getHTML();
735 exit();
736 } else {
737 $this->tpl->setOnScreenMessage('failure', $message, $keep);
738
739 // Fill locked fields on edit mode - otherwise they are empty (workaround)
740 if (isset($this->record_id) && $this->record_id) {
741 $record_obj = ilDclCache::getRecordCache($this->record_id);
742 if ($record_obj->getId()) {
743 //Get Table Field Definitions
744 $allFields = $this->table->getFields();
745 foreach ($allFields as $field) {
746 $field_setting = $field->getViewSetting($this->tableview_id);
747 if (
748 $field_setting->isLockedEdit() &&
749 $field_setting->isVisibleEdit()
750 ) {
751 $record_obj->fillRecordFieldFormInput($field->getId(), $this->form);
752 }
753 }
754 }
755 }
756 $this->tpl->setContent($this->form->getHTML());
757 }
758 }
$message
Definition: xapiexit.php:31

References $message, ILIAS\Repository\ctrl(), exit, ilDclBaseRecordModel\fillRecordFieldFormInput(), ILIAS\Repository\form(), ilDclBaseRecordModel\getId(), ilDclCache\getRecordCache(), and ilUtil\getSystemMessageHTML().

Referenced by save().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setFormValues()

ilDclRecordEditGUI::setFormValues ( )

Set values from object to form.

Definition at line 375 of file class.ilDclRecordEditGUI.php.

375 : 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 }

References ILIAS\Repository\form(), ilDclCache\getRecordCache(), and ilDclDatatype\INPUTFORMAT_NONE.

Referenced by edit(), and save().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $ctrl

ilCtrl ilDclRecordEditGUI::$ctrl
protected

Definition at line 35 of file class.ilDclRecordEditGUI.php.

◆ $form

ilDclPropertyFormGUI ilDclRecordEditGUI::$form
protected

Definition at line 39 of file class.ilDclRecordEditGUI.php.

Referenced by getForm().

◆ $http

ILIAS HTTP Services ilDclRecordEditGUI::$http
protected

Definition at line 41 of file class.ilDclRecordEditGUI.php.

◆ $lng

ilLanguage ilDclRecordEditGUI::$lng
protected

Definition at line 37 of file class.ilDclRecordEditGUI.php.

◆ $parent_obj

ilObjDataCollectionGUI ilDclRecordEditGUI::$parent_obj
protected

Definition at line 33 of file class.ilDclRecordEditGUI.php.

Referenced by __construct().

◆ $record

ilDclBaseRecordModel ilDclRecordEditGUI::$record
protected

Definition at line 34 of file class.ilDclRecordEditGUI.php.

Referenced by confirmDelete(), delete(), and getRecordData().

◆ $record_id

int ilDclRecordEditGUI::$record_id = null
protected

Definition at line 30 of file class.ilDclRecordEditGUI.php.

Referenced by getRecordData().

◆ $refinery

ILIAS Refinery Factory ilDclRecordEditGUI::$refinery
protected

Definition at line 42 of file class.ilDclRecordEditGUI.php.

◆ $table

ilDclTable ilDclRecordEditGUI::$table
protected

Definition at line 32 of file class.ilDclRecordEditGUI.php.

◆ $table_id

int ilDclRecordEditGUI::$table_id = 1
protected

Definition at line 31 of file class.ilDclRecordEditGUI.php.

Referenced by __construct(), and save().

◆ $tableview

ilDclTableView ilDclRecordEditGUI::$tableview
protected

Definition at line 40 of file class.ilDclRecordEditGUI.php.

◆ $tableview_id

int ilDclRecordEditGUI::$tableview_id = null
protected

Definition at line 29 of file class.ilDclRecordEditGUI.php.

Referenced by __construct().

◆ $tpl

ilGlobalPageTemplate ilDclRecordEditGUI::$tpl
protected

Definition at line 36 of file class.ilDclRecordEditGUI.php.

Referenced by searchObjects().

◆ $user

ilObjUser ilDclRecordEditGUI::$user
protected

Definition at line 38 of file class.ilDclRecordEditGUI.php.

◆ REDIRECT_DETAIL

const ilDclRecordEditGUI::REDIRECT_DETAIL = 2

◆ REDIRECT_RECORD_LIST

const ilDclRecordEditGUI::REDIRECT_RECORD_LIST = 1

Possible redirects after saving/updating a record - use GET['redirect'] to set constants.

Definition at line 26 of file class.ilDclRecordEditGUI.php.

Referenced by checkAndPerformRedirect().


The documentation for this class was generated from the following file: