ILIAS  trunk Revision v11.0_alpha-1831-g8615d53dadb
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
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 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.

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().

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  }
static findOrGetInstance($primary_key, array $add_constructor_args=[])
static http()
Fetches the global http state from ILIAS.
global $DIC
Definition: shib_login.php:22
ilObjDataCollectionGUI $parent_obj
+ Here is the call graph for this function:

Member Function Documentation

◆ accessDenied()

ilDclRecordEditGUI::accessDenied ( )
protected

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

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

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

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
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
+ 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.

References ILIAS\Repository\ctrl().

223  : void
224  {
225  $this->ctrl->redirectByClass(ilDclRecordListGUI::class, "listRecords");
226  }
+ Here is the call graph for this function:

◆ cancelSave()

◆ cancelUpdate()

ilDclRecordEditGUI::cancelUpdate ( )

Cancel Update.

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

References checkAndPerformRedirect().

Referenced by cancelSave().

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. ...
+ 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.

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

Referenced by cancelUpdate(), and save().

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) {
703  case self::REDIRECT_DETAIL:
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;
709  case self::REDIRECT_RECORD_LIST:
710  $this->ctrl->redirectByClass(ilDclRecordListGUI::class, "listRecords");
711  break;
712  }
713  }
714  $this->ctrl->redirectByClass(ilDclRecordListGUI::class, "listRecords");
715  }
716  }
static http()
Fetches the global http state from ILIAS.
+ 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.

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

Referenced by edit().

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  }
static http()
Fetches the global http state from ILIAS.
form( $class_path, string $cmd, string $submit_caption="")
+ 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.

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

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  }
ilDclBaseRecordModel $record
static getRecordRepresentation(ilDclBaseRecordFieldModel $record_field)
Returns a record representation.
static getRecordCache(?int $record_id)
static getRecordFieldCache(object $record, object $field)
+ Here is the call graph for this function:

◆ create()

ilDclRecordEditGUI::create ( )

Create new record gui.

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

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

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 parts to RecordRepresentationGUI
global $DIC
Definition: shib_login.php:22
form( $class_path, string $cmd, string $submit_caption="")
+ Here is the call graph for this function:

◆ delete()

ilDclRecordEditGUI::delete ( )

Remove record.

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

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

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  }
ilDclBaseRecordModel $record
static getRecordCache(?int $record_id)
doDelete(bool $omit_notification=false)
+ Here is the call graph for this function:

◆ edit()

ilDclRecordEditGUI::edit ( )

Record edit gui.

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

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

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.
initForm()
init Form move parts to RecordRepresentationGUI
form( $class_path, string $cmd, string $submit_caption="")
+ Here is the call graph for this function:

◆ executeCommand()

ilDclRecordEditGUI::executeCommand ( )

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

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

133  : void
134  {
135  $this->getRecord();
136 
137  $cmd = $this->ctrl->getCmd();
138  $this->$cmd();
139  }
+ Here is the call graph for this function:

◆ getForm()

ilDclRecordEditGUI::getForm ( )

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

References $form.

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

◆ getRecord()

ilDclRecordEditGUI::getRecord ( )

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

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

Referenced by executeCommand().

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 hasAddRecordAccess(int $ref, ?int $user_id=0)
$ref_id
Definition: ltiauth.php:65
static http()
Fetches the global http state from ILIAS.
static getTableCache(?int $table_id=null)
static getRecordCache(?int $record_id)
+ 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.

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

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  }
ilDclBaseRecordModel $record
static http()
Fetches the global http state from ILIAS.
static getRecordCache(?int $record_id)
exit
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
+ Here is the call graph for this function:

◆ initForm()

ilDclRecordEditGUI::initForm ( )

init Form move parts to RecordRepresentationGUI

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

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

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

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  }
Class ilDclPropertyFormGUI ilDclPropertyFormGUI: ilFormPropertyDispatchGUI.
static getFieldRepresentation(ilDclBaseFieldModel $field)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
This class represents a hidden form property in a property form.
static hasWriteAccess(int $ref, ?int $user_id=0)
form( $class_path, string $cmd, string $submit_caption="")
+ 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.

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

Referenced by searchObjects().

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)
$r
+ 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.

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

Referenced by save().

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  }
static http()
Fetches the global http state from ILIAS.
form( $class_path, string $cmd, string $submit_caption="")
+ 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.

References $DIC, Vendor\Package\$e, $form, $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(), null, 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().

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(),
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->sendNotification("new_record", $this->table_id, $record_obj->getId());
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 
676  $this->checkAndPerformRedirect();
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  }
setFormValues()
Set values from object to form.
static getSystemMessageHTML(string $a_txt, string $a_type="info")
Get HTML for a system message.
$valid
static _lookupId($a_user_str)
static rebuildTempFileByHash(string $hash)
const IL_CAL_UNIX
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
$ref_id
Definition: ltiauth.php:65
static http()
Fetches the global http state from ILIAS.
rebuildUploadsForFileHash(bool $has_ilfilehash)
initForm()
init Form move parts to RecordRepresentationGUI
global $DIC
Definition: shib_login.php:22
static hasWriteAccess(int $ref, ?int $user_id=0)
ilDclPropertyFormGUI $form
static getRecordCache(?int $record_id)
form( $class_path, string $cmd, string $submit_caption="")
static hasPermissionToAddRecord(int $ref_id, int $table_id)
checkAndPerformRedirect(bool $force_redirect=false)
Checks to what view (table or detail) should be redirected and performs redirect. ...
exit
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
+ 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.

References $path, $res, $results, 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().

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');
792  $tpl->setVariable(
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  }
$res
Definition: ltiservices.php:66
setCurrentBlock(string $blockname=self::DEFAULT_BLOCK)
Sets the template to the given block.
const ROOT_FOLDER_ID
Definition: constants.php:32
parseCurrentBlock(string $blockname=self::DEFAULT_BLOCK)
Parses the given block.
ilGlobalPageTemplate $tpl
$path
Definition: ltiservices.php:29
static http()
Fetches the global http state from ILIAS.
get(string $part=self::DEFAULT_BLOCK)
Renders the given block and returns the html string.
$results
parseSearchResults(array $a_res)
Parse search results.
exit
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setVariable(string $variable, $value='')
Sets the given variable to the given value.
+ Here is the call graph for this function:

◆ sendFailure()

ilDclRecordEditGUI::sendFailure ( string  $message)
protected

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

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

Referenced by save().

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  }
static getSystemMessageHTML(string $a_txt, string $a_type="info")
Get HTML for a system message.
ilDclPropertyFormGUI $form
static getRecordCache(?int $record_id)
form( $class_path, string $cmd, string $submit_caption="")
$message
Definition: xapiexit.php:31
exit
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
+ 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.

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

Referenced by edit(), and save().

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  }
ilDclPropertyFormGUI $form
static getRecordCache(?int $record_id)
form( $class_path, string $cmd, string $submit_caption="")
+ 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(), save(), sendFailure(), and setFormValues().

◆ $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 delete().

◆ $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.

◆ $user

ilObjUser ilDclRecordEditGUI::$user
protected

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

◆ REDIRECT_DETAIL

const ilDclRecordEditGUI::REDIRECT_DETAIL = 2

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

Referenced by ilDclDetailedViewGUI\renderRecord().

◆ 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.


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