ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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();
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
This class represents an option in a radio group.
$_POST['username']
Definition: cron.php:12
editMember(ilPropertyFormGUI $form=null)
Edit Member.
This class represents a property form user interface.
initFieldForm($a_mode)
Init/create property form for fields.
$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
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.
global $ilUser
Definition: imgupload.php:15
listFields()
List existing custom fields.
confirmDeleteFields()
Show delete confirmation screen.
if($_REQUEST['ilias_path']) define('ILIAS_HTTP_PATH' $_REQUEST['ilias_path']
Definition: index.php:7
static setCourseDefinedFieldValues(ilPropertyFormGUI $form, $a_obj_id, $a_usr_id=0)
$GLOBALS['PHPCAS_CLIENT']
This global variable is used by the interface class phpCAS.
Definition: CAS.php:276
static _deleteByObjId($a_obj_id)
Delete all entries by obj_id.
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.