ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilObjectCustomUserFieldsGUI.php
Go to the documentation of this file.
1 <?php
2 /*
3  +-----------------------------------------------------------------------------+
4  | ILIAS open source |
5  +-----------------------------------------------------------------------------+
6  | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
7  | |
8  | This program is free software; you can redistribute it and/or |
9  | modify it under the terms of the GNU General Public License |
10  | as published by the Free Software Foundation; either version 2 |
11  | of the License, or (at your option) any later version. |
12  | |
13  | This program is distributed in the hope that it will be useful, |
14  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16  | GNU General Public License for more details. |
17  | |
18  | You should have received a copy of the GNU General Public License |
19  | along with this program; if not, write to the Free Software |
20  | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21  +-----------------------------------------------------------------------------+
22 */
23 include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
24 include_once('Services/Membership/classes/class.ilMemberAgreement.php');
25 
36 {
37  const MODE_CREATE = 1;
38  const MODE_UPDATE = 2;
39 
40  private $form = null;
41 
42  private $lng;
43  private $tpl;
44  private $ctrl;
45  private $tabs_gui;
46 
47  private $obj_id;
48  private $ref_id;
49 
50  private $cdf;
51 
59  public function __construct($a_obj_id)
60  {
61  global $lng,$tpl,$ilCtrl,$ilTabs;
62 
63  $this->lng = $lng;
64  $this->lng->loadLanguageModule('ps');
65  $this->lng->loadLanguageModule(ilObject::_lookupType($a_obj_id));
66 
67  $this->tpl = $tpl;
68  $this->ctrl = $ilCtrl;
69  $this->tabs_gui = $ilTabs;
70 
71  $this->obj_id = $a_obj_id;
72 
73  // Currently only supported for container objects
74  $refs = ilObject::_getAllReferences($this->obj_id);
75  $this->ref_id = end($refs);
76  }
77 
84  public function executeCommand()
85  {
86  global $ilErr, $ilAccess, $lng;
87 
88  if(!$ilAccess->checkAccess('write','',$this->ref_id))
89  {
90  $ilErr->raiseError($lng->txt('permission_denied'),$ilErr->WARNING);
91  }
92 
93  $cmd = $this->ctrl->getCmd();
94 
95  switch($next_class = $this->ctrl->getNextClass($this))
96  {
97  default:
98  if(!$cmd)
99  {
100  $cmd = 'show';
101  }
102  $this->$cmd();
103  break;
104  }
105  }
106 
111  public function getObjId()
112  {
113  return $this->obj_id;
114  }
115 
120  protected function show()
121  {
123  {
124  ilUtil::sendInfo($this->lng->txt('ps_cdf_warning_modify'));
125  }
126  $this->listFields();
127  }
128 
133  protected function listFields()
134  {
135  global $ilToolbar;
136 
137  $ilToolbar->addButton(
138  $this->lng->txt('ps_cdf_add_field'),
139  $this->ctrl->getLinkTarget($this,'addField')
140  );
141 
142  include_once './Services/Membership/classes/class.ilObjectCustomUserFieldsTableGUI.php';
143  $table = new ilObjectCustomUserFieldsTableGUI($this,'listFields');
144  $table->parse(ilCourseDefinedFieldDefinition::_getFields($this->getObjId()));
145  $this->tpl->setContent($table->getHTML());
146  }
147 
152  protected function saveFields()
153  {
155  foreach($fields as $field_obj)
156  {
157  $field_obj->enableRequired((bool) isset($_POST['required'][$field_obj->getId()]));
158  $field_obj->update();
159  }
160 
162  ilUtil::sendSuccess($this->lng->txt('settings_saved'));
163  $this->listFields();
164  return true;
165  }
166 
171  protected function confirmDeleteFields()
172  {
173  if(!count($_POST['field_ids']))
174  {
175  ilUtil::sendFailure($this->lng->txt('ps_cdf_select_one'));
176  $this->listFields();
177  return false;
178  }
179  include_once './Services/Utilities/classes/class.ilConfirmationGUI.php';
180  $confirm = new ilConfirmationGUI();
181  $confirm->setFormAction($this->ctrl->getFormAction($this));
182  $confirm->setHeaderText($this->lng->txt('ps_cdf_delete_sure'));
183 
184  foreach($_POST['field_ids'] as $field_id)
185  {
186  $tmp_field = new ilCourseDefinedFieldDefinition($this->getObjId(),$field_id);
187 
188  $confirm->addItem('field_ids[]', $field_id, $tmp_field->getName());
189  }
190 
191  $confirm->setConfirm($this->lng->txt('delete'), 'deleteFields');
192  $confirm->setCancel($this->lng->txt('cancel'), 'listFields');
193  $this->tpl->setContent($confirm->getHTML());
194  }
195 
200  protected function deleteFields()
201  {
202  foreach((array) $_POST['field_ids'] as $field_id)
203  {
204  $tmp_field = new ilCourseDefinedFieldDefinition($this->obj_id,$field_id);
205  $tmp_field->delete();
206  }
207 
208  ilMemberAgreement::_deleteByObjId($this->obj_id);
209 
210  ilUtil::sendSuccess($this->lng->txt('ps_cdf_deleted'));
211  $this->listFields();
212  return true;
213  }
214 
219  protected function addField()
220  {
221  $this->initFieldForm(self::MODE_CREATE);
222 
223  $this->form->getItemByPostVar('va')->setValues(array(''));
224 
225  $this->tpl->setContent($this->form->getHTML());
226  }
227 
232  protected function saveField()
233  {
234  $GLOBALS['ilLog']->write(__METHOD__.': '.print_r($_POST,true));
235 
236  $this->initFieldForm(self::MODE_CREATE);
237  if($this->form->checkInput())
238  {
239  $udf = new ilCourseDefinedFieldDefinition($this->getObjId());
240  $udf->setName($this->form->getInput('na'));
241  $udf->setType($this->form->getInput('ty'));
242  $udf->setValues($udf->prepareValues($this->form->getInput('va')));
243  $udf->setValueOptions($this->form->getItemByPostVar('va')->getOpenAnswerIndexes()); // #14720
244  $udf->enableRequired($this->form->getInput('re'));
245  $udf->save();
246 
247  ilUtil::sendSuccess($this->lng->txt('ps_cdf_added_field'));
248  // reset agreements
250  $this->listFields();
251  return true;
252  }
253  // not valid
254  ilUtil::sendFailure($this->lng->txt('err_check_input'));
255  $this->form->setValuesByPost();
256  $this->tpl->setContent($this->form->getHTML());
257  return false;
258  }
259 
265  protected function editField()
266  {
267  if(!$_REQUEST['field_id'])
268  {
269  $this->listFields();
270  return false;
271  }
272 
273  $this->initFieldForm(self::MODE_UPDATE);
274 
275  $udf = new ilCourseDefinedFieldDefinition($this->getObjId(),(int) $_REQUEST['field_id']);
276  $this->form->getItemByPostVar('na')->setValue($udf->getName());
277  $this->form->getItemByPostVar('ty')->setValue($udf->getType());
278  $this->form->getItemByPostVar('re')->setChecked($udf->isRequired());
279  $this->form->getItemByPostVar('va')->setValues($udf->getValues());
280  $this->form->getItemByPostVar('va')->setOpenAnswerIndexes($udf->getValueOptions());
281 
282  $this->tpl->setContent($this->form->getHTML());
283  }
284 
289  protected function updateField()
290  {
291  $GLOBALS['ilLog']->write(__METHOD__.': '.print_r($_POST,true));
292 
293  $this->initFieldForm(self::MODE_UPDATE);
294 
295  if($this->form->checkInput())
296  {
297  $udf = new ilCourseDefinedFieldDefinition($this->getObjId(),(int) $_REQUEST['field_id']);
298  $udf->setName($this->form->getInput('na'));
299  $udf->setType($this->form->getInput('ty'));
300  $prepared = $udf->prepareValues($this->form->getInput('va'));
301  $udf->setValues($prepared);
302  $udf->setValueOptions($this->form->getItemByPostVar('va')->getOpenAnswerIndexes());
303  $udf->enableRequired($this->form->getInput('re'));
304  $udf->update();
305 
306  // Finally reset member agreements
308  ilUtil::sendSuccess($this->lng->txt('settings_saved'));
309  $this->listFields();
310  return true;
311  }
312 
313  ilUtil::sendFailure($this->lng->txt('err_check_input'));
314  $this->form->setValuesByPost();
315  $this->tpl->setContent($this->form->getHTML());
316  return false;
317  }
318 
323  protected function initFieldForm($a_mode)
324  {
325  if($this->form instanceof ilPropertyFormGUI)
326  {
327  return true;
328  }
329  include_once './Services/Form/classes/class.ilPropertyFormGUI.php';
330  $this->form = new ilPropertyFormGUI();
331 
332  switch($a_mode)
333  {
334  case self::MODE_CREATE:
335  $this->form->setFormAction($this->ctrl->getFormAction($this));
336  $this->form->setTitle($this->lng->txt('ps_cdf_add_field'));
337  $this->form->addCommandButton('saveField', $this->lng->txt('save'));
338  $this->form->addCommandButton('listFields', $this->lng->txt('cancel'));
339  break;
340 
341  case self::MODE_UPDATE:
342  $this->ctrl->setParameter($this,'field_id',(int) $_REQUEST['field_id']);
343  $this->form->setFormAction($this->ctrl->getFormAction($this));
344  $this->form->setTitle($this->lng->txt('ps_cdf_edit_field'));
345  $this->form->addCommandButton('updateField', $this->lng->txt('save'));
346  $this->form->addCommandButton('listFields', $this->lng->txt('cancel'));
347  break;
348  }
349 
350  // Name
351  $na = new ilTextInputGUI($this->lng->txt('ps_cdf_name'),'na');
352  $na->setSize(32);
353  $na->setMaxLength(255);
354  $na->setRequired(true);
355  $this->form->addItem($na);
356 
357  // Type
358  $ty = new ilRadioGroupInputGUI($this->lng->txt('ps_field_type'),'ty');
359  $ty->setRequired(true);
360  $this->form->addItem($ty);
361 
362  if($a_mode == self::MODE_UPDATE)
363  {
364  $ty->setDisabled(true); // #14888
365  }
366 
367  // Text type
368  $ty_te = new ilRadioOption($this->lng->txt('ps_type_txt_long'),IL_CDF_TYPE_TEXT);
369  $ty->addOption($ty_te);
370 
371  // Select Type
372  $ty_se = new ilRadioOption($this->lng->txt('ps_type_select_long'),IL_CDF_TYPE_SELECT);
373  $ty->addOption($ty_se);
374 
375  // Select Type Values
376  include_once './Services/Form/classes/class.ilSelectBuilderInputGUI.php';
377  $ty_se_mu = new ilSelectBuilderInputGUI($this->lng->txt('ps_cdf_value'),'va');
378  $ty_se_mu->setAllowMove(true);
379  $ty_se_mu->setRequired(true);
380  $ty_se_mu->setSize(32);
381  $ty_se_mu->setMaxLength(128);
382  $ty_se->addSubItem($ty_se_mu);
383 
384  // Required
385  $re = new ilCheckboxInputGUI($this->lng->txt('ps_cdf_required'),'re');
386  $re->setValue(1);
387  $this->form->addItem($re);
388  }
389 
394  protected function editMember(ilPropertyFormGUI $form = null)
395  {
396  $GLOBALS['ilCtrl']->saveParameter($this,'member_id');
397 
398  $GLOBALS['ilTabs']->clearTargets();
399  $GLOBALS['ilTabs']->clearSubTabs();
400  $GLOBALS['ilTabs']->setBackTarget($this->lng->txt('back'),$this->ctrl->getLinkTarget($this,'cancelEditMember'));
401 
402 
403  if($form instanceof ilPropertyFormGUI)
404  {
405  $GLOBALS['tpl']->setContent($form->getHTML());
406  }
407  else
408  {
409  $form = $this->initMemberForm();
410  ilMemberAgreementGUI::setCourseDefinedFieldValues($form, $this->getObjId(), (int) $_REQUEST['member_id']);
411  }
412 
413  $GLOBALS['tpl']->setContent($form->getHTML());
414  }
415 
416 
420  protected function cancelEditMember()
421  {
422  $GLOBALS['ilCtrl']->returnToParent($this);
423  }
424 
429  protected function initMemberForm()
430  {
431  include_once './Services/Form/classes/class.ilPropertyFormGUI.php';
432  $form = new ilPropertyFormGUI();
433  $form->setFormAction($GLOBALS['ilCtrl']->getFormAction($this));
434  $title = $this->lng->txt(ilObject::_lookupType($this->getObjId()).'_cdf_edit_member');
435  $name = ilObjUser::_lookupName((int) $_REQUEST['member_id']);
436  $title .= (': '.$name['lastname'].', '.$name['firstname']);
437  $form->setTitle($title);
438 
439  include_once './Services/Membership/classes/class.ilMemberAgreementGUI.php';
441 
442  $form->addCommandButton('saveMember', $this->lng->txt('save'));
443  $form->addCommandButton('cancelEditMember', $this->lng->txt('cancel'));
444 
445  return $form;
446  }
447 
448  protected function saveMember()
449  {
450  global $ilUser;
451 
452  $GLOBALS['ilCtrl']->saveParameter($this,'member_id');
453 
454  $form = $this->initMemberForm();
455  if($form->checkInput())
456  {
457  // save history
458  include_once './Services/Membership/classes/class.ilObjectCustomUserFieldHistory.php';
459  $history = new ilObjectCustomUserFieldHistory($this->getObjId(), (int) $_REQUEST['member_id']);
460  $history->setEditingTime(new ilDateTime(time(),IL_CAL_UNIX));
461  $history->setUpdateUser($ilUser->getId());
462  $history->save();
463 
464  ilMemberAgreementGUI::saveCourseDefinedFields($form, $this->getObjId(), (int) $_REQUEST['member_id']);
465  ilUtil::sendSuccess($this->lng->txt('settings_saved'),TRUE);
466  $GLOBALS['ilCtrl']->returnToParent($this);
467  return TRUE;
468  }
469 
470  $form->setValuesByPost();
471  ilUtil::sendFailure($this->lng->txt('err_check_input'));
472  return $this->editMember($form);
473  }
474 }
475 ?>
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
setAllowMove($a_allow_move)
Set allow move.
static _lookupName($a_user_id)
lookup user name
global $ilErr
Definition: raiseError.php:16
This class represents an option in a radio group.
editMember(ilPropertyFormGUI $form=null)
Edit Member.
This class represents a property form user interface.
initFieldForm($a_mode)
Init/create property form for fields.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
$cmd
Definition: sahs_server.php:35
This class represents a checkbox property in a property form.
Editing history for object custom user fields.
static addCustomFields($form, $a_obj_id, $a_type, $a_mode='user')
Add custom course fields.
const IL_CAL_UNIX
static _getAllReferences($a_id)
get all reference ids of object
Table presentation of course/group relevant user data fields
global $ilCtrl
Definition: ilias.php:18
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
saveFields()
Save Field settings (currently only required status)
This class represents a property in a property form.
setValue($a_value)
Set Value.
setSize($a_size)
Set Size.
This class represents a text property in a property form.
Date and time handling
$ilUser
Definition: imgupload.php:18
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
Input GUI for the configuration of select input elements.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static _hasAgreementsByObjId($a_obj_id)
Check if there is any user agreement.
static saveCourseDefinedFields(ilPropertyFormGUI $form, $a_obj_id, $a_usr_id=0)
Save course defined fields.
listFields()
List existing custom fields.
confirmDeleteFields()
Show delete confirmation screen.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
static setCourseDefinedFieldValues(ilPropertyFormGUI $form, $a_obj_id, $a_usr_id=0)
static _deleteByObjId($a_obj_id)
Delete all entries by obj_id.
$_POST["username"]
setRequired($a_required)
Set Required.
Confirmation screen class.
static _getFields($a_container_id, $a_sort=IL_CDF_SORT_NAME)
Get all fields of a container.