ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilRegistrationGUI.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 
24 include_once('Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
25 
35 abstract class ilRegistrationGUI
36 {
37  protected $privacy = null;
38 
39  protected $container = null;
40  protected $ref_id;
41  protected $obj_id;
42 
43  protected $participants;
44  protected $waiting_list = null;
45  protected $form;
46 
47  protected $registration_possible = true;
48  protected $join_error = '';
49 
50 
51  protected $tpl;
52  protected $lng;
53  protected $ctrl;
54 
62  public function __construct($a_container)
63  {
64  global $lng,$ilCtrl,$tpl;
65 
66  $this->lng = $lng;
67  $this->lng->loadLanguageModule('crs');
68  $this->lng->loadLanguageModule('grp');
69  $this->lng->loadLanguageModule('ps');
70 
71  $this->ctrl = $ilCtrl;
72  $this->tpl = $tpl;
73 
74  $this->container = $a_container;
75  $this->ref_id = $this->container->getRefId();
76  $this->obj_id = ilObject::_lookupObjId($this->ref_id);
77  $this->type = ilObject::_lookupType($this->obj_id);
78 
79  // Init participants
80  $this->initParticipants();
81 
82  // Init waiting list
83  $this->initWaitingList();
84 
85  $this->privacy = ilPrivacySettings::_getInstance();
86  }
87 
92  public function getContainer()
93  {
94  return $this->container;
95  }
96 
101  public function getRefId()
102  {
103  return $this->ref_id;
104  }
105 
112  protected function isRegistrationPossible()
113  {
114  return (bool) $this->registration_possible;
115  }
116 
124  protected function enableRegistration($a_status)
125  {
126  $this->registration_possible = $a_status;
127  }
128 
129 
136  abstract protected function initParticipants();
137 
145  abstract protected function initWaitingList();
146 
153  abstract protected function isWaitingListActive();
154 
160  protected function getWaitingList()
161  {
162  return $this->waiting_list;
163  }
164 
165  protected function leaveWaitingList()
166  {
167  global $ilUser,$tree,$ilCtrl;
168 
169  $this->getWaitingList()->removeFromList($ilUser->getId());
170  $parent = $tree->getParentId($this->container->getRefId());
171 
172  $message = sprintf($this->lng->txt($this->container->getType().'_removed_from_waiting_list'),
173  $this->container->getTitle());
174  ilUtil::sendSuccess($message,true);
175 
176  $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $parent);
177  $ilCtrl->redirectByClass("ilrepositorygui", "");
178  }
179 
186  abstract protected function getFormTitle();
187 
194  abstract protected function fillInformations();
195 
201  abstract protected function fillRegistrationPeriod();
202 
210  abstract protected function fillMaxMembers();
211 
212 
219  abstract protected function fillRegistrationType();
220 
227  protected function fillMembershipLimitation()
228  {
229  global $ilAccess, $ilCtrl;
230 
231  include_once('Modules/Course/classes/class.ilObjCourseGrouping.php');
232  if(!$items = ilObjCourseGrouping::_getGroupingItems($this->container))
233  {
234  return true;
235  }
236 
237  $mem = new ilCustomInputGUI($this->lng->txt('groupings'));
238 
239  $tpl = new ilTemplate('tpl.membership_limitation_form.html',true,true,'Services/Membership');
240  $tpl->setVariable('LIMIT_INTRO',$this->lng->txt($this->type.'_grp_info_reg'));
241 
242  foreach($items as $ref_id)
243  {
244  $obj_id = ilObject::_lookupObjId($ref_id);
247 
248  if($ilAccess->checkAccess('visible','',$ref_id,$type))
249  {
250  include_once('./Services/Link/classes/class.ilLink.php');
251  $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $ref_id);
252  $tpl->setVariable('LINK_ITEM',
253  $ilCtrl->getLinkTargetByClass("ilrepositorygui", ""));
254  $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
255  $tpl->setVariable('ITEM_LINKED_TITLE',$title);
256  }
257  else
258  {
259  $tpl->setVariable('ITEM_TITLE');
260  }
261  $tpl->setCurrentBlock('items');
262  $tpl->setVariable('TYPE_ICON',ilObject::_getIcon($obj_id,tiny,$type));
263  $tpl->setVariable('ALT_ICON',$this->lng->txt('obj_'.$type));
264  $tpl->parseCurrentBlock();
265  }
266 
267  $mem->setHtml($tpl->get());
268 
269 
271  {
272  $mem->setAlert($this->container->getMessage());
273  $this->enableRegistration(false);
274  }
275  $this->form->addItem($mem);
276  }
277 
284  protected function fillAgreement()
285  {
286  global $ilUser;
287 
288  if(!$this->isRegistrationPossible())
289  {
290  return true;
291  }
292 
293  include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
294  if(!$this->privacy->confirmationRequired($this->type) and !ilCourseDefinedFieldDefinition::_hasFields($this->container->getId()))
295  {
296  return true;
297  }
298 
299  $this->lng->loadLanguageModule('ps');
300 
301  include_once('Services/PrivacySecurity/classes/class.ilExportFieldsInfo.php');
302  $fields_info = ilExportFieldsInfo::_getInstanceByType(ilObject::_lookupType($this->container->getId()));
303 
304  if(!count($fields_info->getExportableFields()))
305  {
306  return true;
307  }
308 
310  $section->setTitle($this->lng->txt($this->type.'_usr_agreement'));
311  $this->form->addItem($section);
312 
313  include_once './Services/Membership/classes/class.ilMemberAgreementGUI.php';
314  ilMemberAgreementGUI::addExportFieldInfo($this->form, $this->obj_id, $this->type);
315 
316 
317  ilMemberAgreementGUI::addCustomFields($this->form, $this->obj_id, $this->type);
318 
319  // Checkbox agreement
320  if($this->privacy->confirmationRequired($this->type))
321  {
322  ilMemberAgreementGUI::addAgreement($this->form, $this->obj_id, $this->type);
323  }
324  return true;
325  }
326 
332  protected function showCustomFields()
333  {
334  global $ilUser;
335 
336  include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
337  include_once('Modules/Course/classes/Export/class.ilCourseUserData.php');
338 
339  if(!count($cdf_fields = ilCourseDefinedFieldDefinition::_getFields($this->container->getId())))
340  {
341  return true;
342  }
343 
344  $cdf = new ilNonEditableValueGUI($this->lng->txt('ps_crs_user_fields'));
345  $cdf->setValue($this->lng->txt($this->type.'_ps_cdf_info'));
346  $cdf->setRequired(true);
347 
348  foreach($cdf_fields as $field_obj)
349  {
350  $course_user_data = new ilCourseUserData($ilUser->getId(),$field_obj->getId());
351 
352  switch($field_obj->getType())
353  {
354  case IL_CDF_TYPE_SELECT:
355  $select = new ilSelectInputGUI($field_obj->getName(),'cdf['.$field_obj->getId().']');
356  $select->setValue(ilUtil::stripSlashes($_POST['cdf'][$field_obj->getId()]));
357  $select->setOptions($field_obj->prepareSelectBox());
358  if($field_obj->isRequired())
359  {
360  $select->setRequired(true);
361  }
362 
363  $cdf->addSubItem($select);
364 
365 
366  break;
367 
368  case IL_CDF_TYPE_TEXT:
369  $text = new ilTextInputGUI($field_obj->getName(),'cdf['.$field_obj->getId().']');
370  $text->setValue(ilUtil::stripSlashes($_POST['cdf'][$field_obj->getId()]));
371  $text->setSize(32);
372  $text->setMaxLength(255);
373  if($field_obj->isRequired())
374  {
375  $text->setRequired(true);
376  }
377  $cdf->addSubItem($text);
378  break;
379  }
380  }
381  $this->form->addItem($cdf);
382  return true;
383  }
384 
391  protected function validateAgreement()
392  {
393  global $ilUser;
394 
395  if($_POST['agreement'])
396  {
397  return true;
398  }
399  include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
400  if(!$this->privacy->confirmationRequired($this->type))
401  {
402  return true;
403  }
404  return false;
405  }
406 
413  protected function validateCustomFields()
414  {
415  global $ilUser;
416 
417 
418  $required_fullfilled = true;
419  foreach(ilCourseDefinedFieldDefinition::_getFields($this->container->getId()) as $field_obj)
420  {
421  switch($field_obj->getType())
422  {
423  case IL_CDF_TYPE_SELECT:
424 
425  // Split value id from post
426  list($field_id,$option_id) = explode('_', $_POST['cdf_'.$field_obj->getId()]);
427 
428  #$GLOBALS['ilLog']->write(__METHOD__.': '.print_r($field_id,TRUE).' '.print_r($option_id,TRUE).' '.print_r($_POST,TRUE));
429 
430  $open_answer_indexes = (array) $field_obj->getValueOptions();
431  if(in_array($option_id, $open_answer_indexes))
432  {
433  $value = $_POST['cdf_oa_'.$field_obj->getId().'_'.$option_id];
434  }
435  else
436  {
437  $value = $field_obj->getValueById($option_id);
438  }
439  break;
440 
441  case IL_CDF_TYPE_TEXT:
442  $value = $_POST['cdf_'.$field_obj->getId()];
443  break;
444  }
445 
446  $GLOBALS['ilLog']->write(__METHOD__.': new value '. $value);
447 
448 
449  $course_user_data = new ilCourseUserData($ilUser->getId(),$field_obj->getId());
450  $course_user_data->setValue($value);
451  $course_user_data->update();
452 
453  if($field_obj->isRequired() and !$value)
454  {
455  $required_fullfilled = false;
456  }
457  }
458 
459  return $required_fullfilled;
460  }
461 
468  protected function setAccepted($a_status)
469  {
470  global $ilUser;
471 
472  include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
473  if(!$this->privacy->confirmationRequired($this->type) and !ilCourseDefinedFieldDefinition::_hasFields($this->container->getId()))
474  {
475  return true;
476  }
477 
478  include_once('Services/Membership/classes/class.ilMemberAgreement.php');
479  $this->agreement = new ilMemberAgreement($ilUser->getId(),$this->container->getId());
480  $this->agreement->setAccepted($a_status);
481  $this->agreement->setAcceptanceTime(time());
482  $this->agreement->save();
483  }
484 
490  public function cancel()
491  {
492  global $tree, $ilCtrl;
493 
494  $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id",
495  $tree->getParentId($this->container->getRefId()));
496  $ilCtrl->redirectByClass("ilrepositorygui", "");
497  }
498 
506  public function show()
507  {
508  $this->initForm();
509 
510  if($_SESSION["pending_goto"])
511  {
512  ilUtil::sendInfo($this->lng->txt("reg_goto_parent_membership_info"));
513  }
514 
515  $this->tpl->setContent($this->form->getHTML());
516  }
517 
525  public function join()
526  {
527  $this->initForm();
528 
529  if(!$this->validate())
530  {
531  ilUtil::sendFailure($this->join_error);
532  $this->show();
533  return false;
534  }
535 
536  $this->add();
537  }
538 
539 
546  protected function validate()
547  {
548  return true;
549  }
550 
557  protected function initForm()
558  {
559  global $ilUser;
560 
561  if(is_object($this->form))
562  {
563  return true;
564  }
565 
566  include_once('./Services/Form/classes/class.ilPropertyFormGUI.php');
567  $this->form = new ilPropertyFormGUI();
568  $this->form->setFormAction($this->ctrl->getFormAction($this,'join'));
569  $this->form->setTitle($this->getFormTitle());
570 
571  $this->fillInformations();
572  $this->fillMembershipLimitation();
573  if($this->isRegistrationPossible())
574  {
575  $this->fillRegistrationPeriod();
576  }
577  if($this->isRegistrationPossible())
578  {
579  $this->fillRegistrationType();
580  }
581  if($this->isRegistrationPossible())
582  {
583  $this->fillMaxMembers();
584  }
585  if($this->isRegistrationPossible())
586  {
587  $this->fillAgreement();
588  }
589  $this->addCommandButtons();
590  }
591 
596  protected function addCommandButtons()
597  {
598  global $ilUser;
599 
600  if($this->isRegistrationPossible() and $this->isWaitingListActive() and !$this->getWaitingList()->isOnList($ilUser->getId()))
601  {
602  $this->form->addCommandButton('join',$this->lng->txt('mem_add_to_wl'));
603  $this->form->addCommandButton('cancel',$this->lng->txt('cancel'));
604  }
605  elseif($this->isRegistrationPossible() and !$this->getWaitingList()->isOnList($ilUser->getId()))
606  {
607  $this->form->addCommandButton('join',$this->lng->txt('join'));
608  $this->form->addCommandButton('cancel',$this->lng->txt('cancel'));
609  }
610  if($this->getWaitingList()->isOnList($ilUser->getId()))
611  {
613  sprintf($this->lng->txt($this->container->getType().'_cancel_waiting_list'),
614  $this->container->getTitle())
615  );
616  $this->form->addCommandButton('leaveWaitingList', $this->lng->txt('leave_waiting_list'));
617  $this->form->addCommandButton('cancel', $this->lng->txt('cancel'));
618  }
619  }
620 
625  protected function updateSubscriptionRequest()
626  {
627  global $ilUser, $tree, $ilCtrl;
628 
629  $this->participants->updateSubject($ilUser->getId(),ilUtil::stripSlashes($_POST['subject']));
630  ilUtil::sendSuccess($this->lng->txt('sub_request_saved'),true);
631  $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id",
632  $tree->getParentId($this->container->getRefId()));
633  $ilCtrl->redirectByClass("ilrepositorygui", "");
634 
635  }
636 
637  protected function cancelSubscriptionRequest()
638  {
639  global $ilUser, $tree, $ilCtrl;
640 
641  $this->participants->deleteSubscriber($ilUser->getId());
642  ilUtil::sendSuccess($this->lng->txt('sub_request_deleted'),true);
643 
644  $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id",
645  $tree->getParentId($this->container->getRefId()));
646  $ilCtrl->redirectByClass("ilrepositorygui", "");
647  }
648 }
649 ?>