ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
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  $this->listFields();
249  return true;
250  }
251  // not valid
252  ilUtil::sendFailure($this->lng->txt('err_check_input'));
253  $this->form->setValuesByPost();
254  $this->tpl->setContent($this->form->getHTML());
255  return false;
256  }
257 
263  protected function editField()
264  {
265  if(!$_REQUEST['field_id'])
266  {
267  $this->listFields();
268  return false;
269  }
270 
271  $this->initFieldForm(self::MODE_UPDATE);
272 
273  $udf = new ilCourseDefinedFieldDefinition($this->getObjId(),(int) $_REQUEST['field_id']);
274  $this->form->getItemByPostVar('na')->setValue($udf->getName());
275  $this->form->getItemByPostVar('ty')->setValue($udf->getType());
276  $this->form->getItemByPostVar('re')->setChecked($udf->isRequired());
277  $this->form->getItemByPostVar('va')->setValues($udf->getValues());
278  $this->form->getItemByPostVar('va')->setOpenAnswerIndexes($udf->getValueOptions());
279 
280  $this->tpl->setContent($this->form->getHTML());
281  }
282 
287  protected function updateField()
288  {
289  $GLOBALS['ilLog']->write(__METHOD__.': '.print_r($_POST,true));
290 
291  $this->initFieldForm(self::MODE_UPDATE);
292 
293  if($this->form->checkInput())
294  {
295  $udf = new ilCourseDefinedFieldDefinition($this->getObjId(),(int) $_REQUEST['field_id']);
296  $udf->setName($this->form->getInput('na'));
297  $udf->setType($this->form->getInput('ty'));
298  $prepared = $udf->prepareValues($this->form->getInput('va'));
299  $udf->setValues($prepared);
300  $udf->setValueOptions($this->form->getItemByPostVar('va')->getOpenAnswerIndexes());
301  $udf->enableRequired($this->form->getInput('re'));
302  $udf->update();
303 
304  // Finally reset member agreements
306  ilUtil::sendSuccess($this->lng->txt('settings_saved'));
307  $this->listFields();
308  return true;
309  }
310 
311  ilUtil::sendFailure($this->lng->txt('err_check_input'));
312  $this->form->setValuesByPost();
313  $this->tpl->setContent($this->form->getHTML());
314  return false;
315  }
316 
321  protected function initFieldForm($a_mode)
322  {
323  if($this->form instanceof ilPropertyFormGUI)
324  {
325  return true;
326  }
327  include_once './Services/Form/classes/class.ilPropertyFormGUI.php';
328  $this->form = new ilPropertyFormGUI();
329 
330  switch($a_mode)
331  {
332  case self::MODE_CREATE:
333  $this->form->setFormAction($this->ctrl->getFormAction($this));
334  $this->form->setTitle($this->lng->txt('ps_cdf_add_field'));
335  $this->form->addCommandButton('saveField', $this->lng->txt('save'));
336  $this->form->addCommandButton('listFields', $this->lng->txt('cancel'));
337  break;
338 
339  case self::MODE_UPDATE:
340  $this->ctrl->setParameter($this,'field_id',(int) $_REQUEST['field_id']);
341  $this->form->setFormAction($this->ctrl->getFormAction($this));
342  $this->form->setTitle($this->lng->txt('ps_cdf_edit_field'));
343  $this->form->addCommandButton('updateField', $this->lng->txt('save'));
344  $this->form->addCommandButton('listFields', $this->lng->txt('cancel'));
345  break;
346  }
347 
348  // Name
349  $na = new ilTextInputGUI($this->lng->txt('ps_cdf_name'),'na');
350  $na->setSize(32);
351  $na->setMaxLength(255);
352  $na->setRequired(true);
353  $this->form->addItem($na);
354 
355  // Type
356  $ty = new ilRadioGroupInputGUI($this->lng->txt('ps_field_type'),'ty');
357  $ty->setRequired(true);
358  $this->form->addItem($ty);
359 
360  if($a_mode == self::MODE_UPDATE)
361  {
362  $ty->setDisabled(true); // #14888
363  }
364 
365  // Text type
366  $ty_te = new ilRadioOption($this->lng->txt('ps_type_txt_long'),IL_CDF_TYPE_TEXT);
367  $ty->addOption($ty_te);
368 
369  // Select Type
370  $ty_se = new ilRadioOption($this->lng->txt('ps_type_select_long'),IL_CDF_TYPE_SELECT);
371  $ty->addOption($ty_se);
372 
373  // Select Type Values
374  include_once './Services/Form/classes/class.ilSelectBuilderInputGUI.php';
375  $ty_se_mu = new ilSelectBuilderInputGUI($this->lng->txt('ps_cdf_value'),'va');
376  $ty_se_mu->setAllowMove(true);
377  $ty_se_mu->setRequired(true);
378  $ty_se_mu->setSize(32);
379  $ty_se_mu->setMaxLength(128);
380  $ty_se->addSubItem($ty_se_mu);
381 
382  // Required
383  $re = new ilCheckboxInputGUI($this->lng->txt('ps_cdf_required'),'re');
384  $re->setValue(1);
385  $this->form->addItem($re);
386  }
387 
392  protected function editMember(ilPropertyFormGUI $form = null)
393  {
394  $GLOBALS['ilCtrl']->saveParameter($this,'member_id');
395 
396  $GLOBALS['ilTabs']->clearTargets();
397  $GLOBALS['ilTabs']->clearSubTabs();
398  $GLOBALS['ilTabs']->setBackTarget($this->lng->txt('back'),$this->ctrl->getLinkTarget($this,'cancelEditMember'));
399 
400 
401  if($form instanceof ilPropertyFormGUI)
402  {
403  $GLOBALS['tpl']->setContent($form->getHTML());
404  }
405  else
406  {
407  $form = $this->initMemberForm();
409  }
410 
411  $GLOBALS['tpl']->setContent($form->getHTML());
412  }
413 
414 
418  protected function cancelEditMember()
419  {
420  $GLOBALS['ilCtrl']->returnToParent($this);
421  }
422 
427  protected function initMemberForm()
428  {
429  include_once './Services/Form/classes/class.ilPropertyFormGUI.php';
430  $form = new ilPropertyFormGUI();
431  $form->setFormAction($GLOBALS['ilCtrl']->getFormAction($this));
432  $title = $this->lng->txt(ilObject::_lookupType($this->getObjId()).'_cdf_edit_member');
433  $name = ilObjUser::_lookupName((int) $_REQUEST['member_id']);
434  $title .= (': '.$name['lastname'].', '.$name['firstname']);
435  $form->setTitle($title);
436 
437  include_once './Services/Membership/classes/class.ilMemberAgreementGUI.php';
439 
440  $form->addCommandButton('saveMember', $this->lng->txt('save'));
441  $form->addCommandButton('cancelEditMember', $this->lng->txt('cancel'));
442 
443  return $form;
444  }
445 
446  protected function saveMember()
447  {
448  global $ilUser;
449 
450  $GLOBALS['ilCtrl']->saveParameter($this,'member_id');
451 
452  $form = $this->initMemberForm();
453  if($form->checkInput())
454  {
455  // save history
456  include_once './Services/Membership/classes/class.ilObjectCustomUserFieldHistory.php';
457  $history = new ilObjectCustomUserFieldHistory($this->getObjId(), (int) $_REQUEST['member_id']);
458  $history->setEditingTime(new ilDateTime(time(),IL_CAL_UNIX));
459  $history->setUpdateUser($ilUser->getId());
460  $history->save();
461 
462  ilMemberAgreementGUI::saveCourseDefinedFields($form, $this->getObjId(), (int) $_REQUEST['member_id']);
463  ilUtil::sendSuccess($this->lng->txt('settings_saved'),TRUE);
464  $GLOBALS['ilCtrl']->returnToParent($this);
465  return TRUE;
466  }
467 
468  $form->setValuesByPost();
469  ilUtil::sendFailure($this->lng->txt('err_check_input'));
470  return $this->editMember($form);
471  }
472 }
473 ?>