ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilMemberAgreementGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 include_once('Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
5 include_once('Services/Membership/classes/class.ilMemberAgreement.php');
6 include_once('Modules/Course/classes/Export/class.ilCourseUserData.php');
7 include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
8 
19 {
20  private $ref_id;
21  private $obj_id;
22  private $type;
23 
24  private $db;
25  private $ctrl;
26  private $lng;
27  private $tpl;
28 
29  private $privacy;
30  private $agreement;
31 
32  private $required_fullfilled = false;
33  private $agrement_required = false;
34 
41  public function __construct($a_ref_id)
42  {
43  global $DIC;
44 
45  $ilDB = $DIC['ilDB'];
46  $ilCtrl = $DIC['ilCtrl'];
47  $lng = $DIC['lng'];
48  $tpl = $DIC['tpl'];
49  $ilUser = $DIC['ilUser'];
50  $ilObjDataCache = $DIC['ilObjDataCache'];
51 
52  $this->ref_id = $a_ref_id;
53  $this->obj_id = $ilObjDataCache->lookupObjId($this->ref_id);
54  $this->type = ilObject::_lookupType($this->obj_id);
55  $this->ctrl = $ilCtrl;
56  $this->tpl = $tpl;
57  $this->lng = $lng;
58  $this->lng->loadLanguageModule('ps');
59 
60  $this->privacy = ilPrivacySettings::_getInstance();
61  $this->agreement = new ilMemberAgreement($ilUser->getId(), $this->obj_id);
62  $this->init();
63  }
64 
71  public function executeCommand()
72  {
73  $next_class = $this->ctrl->getNextClass($this);
74  $cmd = $this->ctrl->getCmd();
75 
76  switch ($next_class) {
77  default:
78  if (!$cmd or $cmd == 'view') {
79  $cmd = 'showAgreement';
80  }
81  $this->$cmd();
82  break;
83  }
84  }
85 
90  public function getPrivacy()
91  {
92  return $this->privacy;
93  }
94 
98  public function getAgreement()
99  {
100  return $this->agreement;
101  }
102 
108  protected function showAgreement(ilPropertyFormGUI $form = null)
109  {
110  global $DIC;
111 
112  $ilUser = $DIC['ilUser'];
113 
114  if (!$form instanceof ilPropertyFormGUI) {
115  $form = $this->initFormAgreement($form);
116  self::setCourseDefinedFieldValues($form, $this->obj_id, $ilUser->getId());
117  }
118 
119  $this->tpl->setContent($form->getHTML());
120  return true;
121  }
122 
123 
124 
125  protected function initFormAgreement()
126  {
127  include_once './Services/Form/classes/class.ilPropertyFormGUI.php';
128  $form = new ilPropertyFormGUI();
129  $form->setTitle($this->lng->txt($this->type . '_agreement_header'));
130  $form->setFormAction($GLOBALS['DIC']['ilCtrl']->getFormAction($this));
131  $form->addCommandButton('save', $this->lng->txt('save'));
132 
133  $form = self::addExportFieldInfo($form, $this->obj_id, $this->type);
134  $form = self::addCustomFields($form, $this->obj_id, $this->type);
135 
136  if ($this->getPrivacy()->confirmationRequired($this->type)) {
137  $form = self::addAgreement($form, $this->obj_id, $this->type);
138  }
139 
140  return $form;
141  }
142 
151  public static function addExportFieldInfo($form, $a_obj_id, $a_type)
152  {
153  global $DIC;
154 
155  $lng = $DIC['lng'];
156 
157  include_once('Services/PrivacySecurity/classes/class.ilExportFieldsInfo.php');
159 
160  $fields = new ilCustomInputGUI($lng->txt($a_type . '_user_agreement'), '');
161  $tpl = new ilTemplate('tpl.agreement_form.html', true, true, 'Services/Membership');
162  $tpl->setVariable('TXT_INFO_AGREEMENT', $lng->txt($a_type . '_info_agreement'));
163  foreach ($fields_info->getExportableFields() as $field) {
164  $tpl->setCurrentBlock('field_item');
165  $tpl->setVariable('FIELD_NAME', $lng->txt($field));
166  $tpl->parseCurrentBlock();
167  }
168 
169  // #17609 - not part of ilExportFieldsInfo::getExportableFields()
170  // see ilExportFieldsInfo::getSelectableFieldsInfo()
171  include_once('Services/User/classes/class.ilUserDefinedFields.php');
172  foreach (ilUserDefinedFields::_getInstance()->getExportableFields($a_obj_id) as $field) {
173  $tpl->setCurrentBlock('field_item');
174  $tpl->setVariable('FIELD_NAME', $field['field_name']);
175  $tpl->parseCurrentBlock();
176  }
177 
178  $fields->setHtml($tpl->get());
179  $form->addItem($fields);
180 
181  return $form;
182  }
183 
190  public static function addAgreement($form, $a_obj_id, $a_type)
191  {
192  global $DIC;
193 
194  $lng = $DIC['lng'];
195 
196  $agreement = new ilCheckboxInputGUI($lng->txt($a_type . '_agree'), 'agreement');
197  $agreement->setRequired(true);
198  $agreement->setOptionTitle($lng->txt($a_type . '_info_agree'));
199  $agreement->setValue(1);
200  $form->addItem($agreement);
201 
202  return $form;
203  }
204 
211  public static function addCustomFields($form, $a_obj_id, $a_type, $a_mode = 'user')
212  {
213  global $DIC;
214 
215  $lng = $DIC['lng'];
216 
217  include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
218  include_once('Modules/Course/classes/Export/class.ilCourseUserData.php');
219 
220  if (!count($cdf_fields = ilCourseDefinedFieldDefinition::_getFields($a_obj_id))) {
221  return $form;
222  }
223 
224  if ($a_mode == 'user') {
225  $cdf = new ilNonEditableValueGUI($lng->txt('ps_' . $a_type . '_user_fields'));
226  $cdf->setValue($lng->txt($a_type . '_ps_cdf_info'));
227  $cdf->setRequired(true);
228  }
229 
230  foreach ($cdf_fields as $field_obj) {
231  switch ($field_obj->getType()) {
232  case IL_CDF_TYPE_SELECT:
233 
234  if ($field_obj->getValueOptions()) {
235  // Show as radio group
236  $option_radios = new ilRadioGroupInputGUI($field_obj->getName(), 'cdf_' . $field_obj->getId());
237  if ($field_obj->isRequired()) {
238  $option_radios->setRequired(true);
239  }
240 
241  $open_answer_indexes = (array) $field_obj->getValueOptions();
242  foreach ($field_obj->getValues() as $key => $val) {
243  $option_radio = new ilRadioOption($val, $field_obj->getId() . '_' . $key);
244 
245  // open answers
246  if (in_array($key, $open_answer_indexes)) {
247  $open_answer = new ilTextInputGUI($lng->txt("form_open_answer"), 'cdf_oa_' . $field_obj->getId() . '_' . $key);
248  $open_answer->setRequired(true);
249  $option_radio->addSubItem($open_answer);
250  }
251 
252  $option_radios->addOption($option_radio);
253  }
254  if ($a_mode == 'user') {
255  $cdf->addSubItem($option_radios);
256  } else {
257  $form->addItem($option_radios);
258  }
259  } else {
260  $select = new ilSelectInputGUI($field_obj->getName(), 'cdf_' . $field_obj->getId());
261  #$select->setValue(ilUtil::stripSlashes($_POST['cdf'][$field_obj->getId()]));
262  $select->setOptions($field_obj->prepareSelectBox());
263  if ($field_obj->isRequired()) {
264  $select->setRequired(true);
265  }
266  if ($a_mode == 'user') {
267  $cdf->addSubItem($select);
268  } else {
269  $form->addItem($select);
270  }
271  }
272  break;
273 
274  case IL_CDF_TYPE_TEXT:
275  $text = new ilTextInputGUI($field_obj->getName(), 'cdf_' . $field_obj->getId());
276  #$text->setValue(ilUtil::stripSlashes($_POST['cdf'][$field_obj->getId()]));
277  $text->setSize(32);
278  $text->setMaxLength(255);
279  if ($field_obj->isRequired()) {
280  $text->setRequired(true);
281  }
282  if ($a_mode == 'user') {
283  $cdf->addSubItem($text);
284  } else {
285  $form->addItem($text);
286  }
287  break;
288  }
289  }
290  if ($a_mode == 'user') {
291  $form->addItem($cdf);
292  }
293  return $form;
294  }
295 
296 
297 
305  private function save()
306  {
307  global $DIC;
308 
309  $ilUser = $DIC['ilUser'];
310 
311  $form = $this->initFormAgreement();
312 
313  // #14715 - checkInput() does not work for checkboxes
314  if ($this->checkAgreement() && $form->checkInput()) {
315  self::saveCourseDefinedFields($form, $this->obj_id);
316 
317  $this->getAgreement()->setAccepted(true);
318  $this->getAgreement()->setAcceptanceTime(time());
319  $this->getAgreement()->save();
320 
321  include_once './Services/Membership/classes/class.ilObjectCustomUserFieldHistory.php';
322  $history = new ilObjectCustomUserFieldHistory($this->obj_id, $ilUser->getId());
323  $history->setUpdateUser($ilUser->getId());
324  $history->setEditingTime(new ilDateTime(time(), IL_CAL_UNIX));
325  $history->save();
326 
327  $this->ctrl->returnToParent($this);
328  } elseif (!$this->checkAgreement()) {
329  ilUtil::sendFailure($this->lng->txt($this->type . '_agreement_required'));
330  $form->setValuesByPost();
331  $this->showAgreement($form);
332  return false;
333  } else {
334  ilUtil::sendFailure($this->lng->txt('fill_out_all_required_fields'));
335  $form->setValuesByPost();
336  $this->showAgreement($form);
337  return false;
338  }
339  }
340 
341  public static function setCourseDefinedFieldValues(ilPropertyFormGUI $form, $a_obj_id, $a_usr_id = 0)
342  {
343  global $DIC;
344 
345  $ilUser = $DIC['ilUser'];
346 
347  if (!$a_usr_id) {
348  $a_usr_id = $ilUser->getId();
349  }
350 
351  $ud = ilCourseUserData::_getValuesByObjId($a_obj_id);
352 
353  foreach (ilCourseDefinedFieldDefinition::_getFields($a_obj_id) as $field_obj) {
354  $current_value = $ud[$a_usr_id][$field_obj->getId()];
355  if (!$current_value) {
356  continue;
357  }
358 
359  switch ($field_obj->getType()) {
360  case IL_CDF_TYPE_SELECT:
361 
362  $id = $field_obj->getIdByValue($current_value);
363 
364  if ($id >= 0) {
365  $item = $form->getItemByPostVar('cdf_' . $field_obj->getId());
366  $item->setValue($field_obj->getId() . '_' . $id);
367  } else {
368  // open answer
369  $open_answer_indexes = $field_obj->getValueOptions();
370  $open_answer_index = end($open_answer_indexes);
371  $item = $form->getItemByPostVar('cdf_' . $field_obj->getId());
372  $item->setValue($field_obj->getId() . '_' . $open_answer_index);
373  $item_txt = $form->getItemByPostVar('cdf_oa_' . $field_obj->getId() . '_' . $open_answer_index);
374  if ($item_txt) {
375  $item_txt->setValue($current_value);
376  }
377  }
378  break;
379 
380  case IL_CDF_TYPE_TEXT:
381  $item = $form->getItemByPostVar('cdf_' . $field_obj->getId());
382  $item->setValue($current_value);
383  break;
384  }
385  }
386  }
387 
388 
393  public static function saveCourseDefinedFields(ilPropertyFormGUI $form, $a_obj_id, $a_usr_id = 0)
394  {
395  global $DIC;
396 
397  $ilUser = $DIC['ilUser'];
398 
399  if (!$a_usr_id) {
400  $a_usr_id = $ilUser->getId();
401  }
402 
403  foreach (ilCourseDefinedFieldDefinition::_getFields($a_obj_id) as $field_obj) {
404  switch ($field_obj->getType()) {
405  case IL_CDF_TYPE_SELECT:
406 
407  // Split value id from post
408  list($field_id, $option_id) = explode('_', $form->getInput('cdf_' . $field_obj->getId()));
409  $open_answer_indexes = (array) $field_obj->getValueOptions();
410  if (in_array($option_id, $open_answer_indexes)) {
411  $value = $form->getInput('cdf_oa_' . $field_obj->getId() . '_' . $option_id);
412  } else {
413  $value = $field_obj->getValueById($option_id);
414  }
415  break;
416 
417  case IL_CDF_TYPE_TEXT:
418  $value = $form->getInput('cdf_' . $field_obj->getId());
419  break;
420  }
421 
422  $course_user_data = new ilCourseUserData($a_usr_id, $field_obj->getId());
423  $course_user_data->setValue($value);
424  $course_user_data->update();
425  }
426  }
427 
428 
435  private function checkAgreement()
436  {
437  global $DIC;
438 
439  $ilUser = $DIC['ilUser'];
440 
441  if ($_POST['agreement']) {
442  return true;
443  }
444  if ($this->privacy->confirmationRequired($this->type)) {
445  return false;
446  }
447  return true;
448  }
449 
450 
451 
458  private function init()
459  {
460  global $DIC;
461 
462  $ilUser = $DIC['ilUser'];
463 
464  $this->required_fullfilled = ilCourseUserData::_checkRequired($ilUser->getId(), $this->obj_id);
465  $this->agreement_required = $this->getAgreement()->agreementRequired();
466  }
467 
473  private function sendInfoMessage()
474  {
475  $message = '';
476  if ($this->agreement_required) {
477  $message = $this->lng->txt($this->type . '_ps_agreement_req_info');
478  }
479  if (!$this->required_fullfilled) {
480  if (strlen($message)) {
481  $message .= '<br />';
482  }
483  $message .= $this->lng->txt($this->type . '_ps_required_info');
484  }
485 
486  if (strlen($message)) {
488  }
489  }
490 }
This class represents an option in a radio group.
setHtml($a_html)
Set Html.
getItemByPostVar($a_post_var)
Get Item by POST variable.
static _getInstance()
Get instance.
This class represents a selection list property in a property form.
This class represents a property form user interface.
static addExportFieldInfo($form, $a_obj_id, $a_type)
Add export field info to form type $lng.
global $DIC
Definition: saml.php:7
sendInfoMessage()
Send info message.
static _getValuesByObjId($a_obj_id)
Get values by obj_id (for all users)
if(!array_key_exists('StateId', $_REQUEST)) $id
This class represents a checkbox property in a property form.
__construct($a_ref_id)
Constructor.
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
global $ilCtrl
Definition: ilias.php:18
$a_type
Definition: workflow.php:92
catch(Exception $e) $message
This class represents a property in a property form.
if(isset($_POST['submit'])) $form
static _getInstanceByType($a_type)
Get Singleton Instance.
special template class to simplify handling of ITX/PEAR
$text
Definition: errorreport.php:18
static addAgreement($form, $a_obj_id, $a_type)
Add agreement to form.
This class represents a text property in a property form.
Date and time handling
$ilUser
Definition: imgupload.php:18
getPrivacy()
Get privycy settings.
getInput($a_post_var, $ensureValidation=true)
Returns the value of a HTTP-POST variable, identified by the passed id.
setOptions($a_options)
Set Options.
static _checkRequired($a_usr_id, $a_obj_id)
Check required fields.
static _lookupType($a_id, $a_reference=false)
lookup object type
showAgreement(ilPropertyFormGUI $form=null)
Show agreement form.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static saveCourseDefinedFields(ilPropertyFormGUI $form, $a_obj_id, $a_usr_id=0)
Save course defined fields.
This class represents a custom property in a property form.
This class represents a non editable value in a property form.
global $ilDB
static _getInstance()
Get instance of ilPrivacySettings.
static setCourseDefinedFieldValues(ilPropertyFormGUI $form, $a_obj_id, $a_usr_id=0)
$key
Definition: croninfo.php:18
$_POST["username"]
setRequired($a_required)
Set Required.
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
static _getFields($a_container_id, $a_sort=IL_CDF_SORT_NAME)
Get all fields of a container.