ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
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
24include_once('Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
25
35abstract class ilRegistrationGUI
36{
37 protected $privacy = null;
38
39 protected $container = null;
40 protected $ref_id;
41 protected $obj_id;
42
46 protected $participants;
47 protected $waiting_list = null;
48 protected $form;
49
50 protected $registration_possible = true;
51 protected $join_error = '';
52
53
54 protected $tpl;
55 protected $lng;
56 protected $ctrl;
57
65 public function __construct($a_container)
66 {
67 global $DIC;
68
69 $lng = $DIC['lng'];
70 $ilCtrl = $DIC['ilCtrl'];
71 $tpl = $DIC['tpl'];
72
73 $this->lng = $lng;
74 $this->lng->loadLanguageModule('crs');
75 $this->lng->loadLanguageModule('grp');
76 $this->lng->loadLanguageModule('ps');
77 $this->lng->loadLanguageModule('membership');
78
79 $this->ctrl = $ilCtrl;
80 $this->tpl = $tpl;
81
82 $this->container = $a_container;
83 $this->ref_id = $this->container->getRefId();
84 $this->obj_id = ilObject::_lookupObjId($this->ref_id);
85 $this->type = ilObject::_lookupType($this->obj_id);
86
87 // Init participants
88 $this->initParticipants();
89
90 // Init waiting list
91 $this->initWaitingList();
92
93 $this->privacy = ilPrivacySettings::_getInstance();
94 }
95
100 public function getContainer()
101 {
102 return $this->container;
103 }
104
109 public function getRefId()
110 {
111 return $this->ref_id;
112 }
113
120 protected function isRegistrationPossible()
121 {
122 return (bool) $this->registration_possible;
123 }
124
132 protected function enableRegistration($a_status)
133 {
134 $this->registration_possible = $a_status;
135 }
136
137
144 abstract protected function initParticipants();
145
153 abstract protected function initWaitingList();
154
161 abstract protected function isWaitingListActive();
162
168 protected function getWaitingList()
169 {
170 return $this->waiting_list;
171 }
172
173 protected function leaveWaitingList()
174 {
175 global $DIC;
176
177 $ilUser = $DIC['ilUser'];
178 $tree = $DIC['tree'];
179 $ilCtrl = $DIC['ilCtrl'];
180
181 $this->getWaitingList()->removeFromList($ilUser->getId());
182 $parent = $tree->getParentId($this->container->getRefId());
183
184 $message = sprintf(
185 $this->lng->txt($this->container->getType() . '_removed_from_waiting_list'),
186 $this->container->getTitle()
187 );
188 ilUtil::sendSuccess($message, true);
189
190 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $parent);
191 $ilCtrl->redirectByClass("ilrepositorygui", "");
192 }
193
200 abstract protected function getFormTitle();
201
208 abstract protected function fillInformations();
209
215 abstract protected function fillRegistrationPeriod();
216
224 abstract protected function fillMaxMembers();
225
226
233 abstract protected function fillRegistrationType();
234
241 protected function fillMembershipLimitation()
242 {
243 global $DIC;
244
245 $ilAccess = $DIC['ilAccess'];
246 $ilCtrl = $DIC['ilCtrl'];
247
248 include_once('Modules/Course/classes/class.ilObjCourseGrouping.php');
249 if (!$items = ilObjCourseGrouping::_getGroupingItems($this->container)) {
250 return true;
251 }
252
253 $mem = new ilCustomInputGUI($this->lng->txt('groupings'));
254
255 $tpl = new ilTemplate('tpl.membership_limitation_form.html', true, true, 'Services/Membership');
256 $tpl->setVariable('LIMIT_INTRO', $this->lng->txt($this->type . '_grp_info_reg'));
257
258 foreach ($items as $ref_id) {
262
263 if ($ilAccess->checkAccess('visible', '', $ref_id, $type)) {
264 include_once('./Services/Link/classes/class.ilLink.php');
265 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $ref_id);
266 $tpl->setVariable(
267 'LINK_ITEM',
268 $ilCtrl->getLinkTargetByClass("ilrepositorygui", "")
269 );
270 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
271 $tpl->setVariable('ITEM_LINKED_TITLE', $title);
272 } else {
273 $tpl->setVariable('ITEM_TITLE');
274 }
275 $tpl->setCurrentBlock('items');
276 $tpl->setVariable('TYPE_ICON', ilObject::_getIcon($obj_id, 'tiny', $type));
277 $tpl->setVariable('ALT_ICON', $this->lng->txt('obj_' . $type));
278 $tpl->parseCurrentBlock();
279 }
280
281 $mem->setHtml($tpl->get());
282
283
285 $mem->setAlert($this->container->getMessage());
286 $this->enableRegistration(false);
287 }
288 $this->form->addItem($mem);
289 }
290
297 protected function fillAgreement()
298 {
299 global $DIC;
300
301 $ilUser = $DIC['ilUser'];
302
303 if (!$this->isRegistrationPossible()) {
304 return true;
305 }
306
307 include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
308 if (!$this->privacy->confirmationRequired($this->type) and !ilCourseDefinedFieldDefinition::_hasFields($this->container->getId())) {
309 return true;
310 }
311
312 $this->lng->loadLanguageModule('ps');
313
314 include_once('Services/PrivacySecurity/classes/class.ilExportFieldsInfo.php');
315 $fields_info = ilExportFieldsInfo::_getInstanceByType(ilObject::_lookupType($this->container->getId()));
316
317 if (!count($fields_info->getExportableFields())) {
318 return true;
319 }
320
322 $section->setTitle($this->lng->txt($this->type . '_usr_agreement'));
323 $this->form->addItem($section);
324
325 include_once './Services/Membership/classes/class.ilMemberAgreementGUI.php';
326 ilMemberAgreementGUI::addExportFieldInfo($this->form, $this->obj_id, $this->type);
327
328
329 ilMemberAgreementGUI::addCustomFields($this->form, $this->obj_id, $this->type);
330
331 // Checkbox agreement
332 if ($this->privacy->confirmationRequired($this->type)) {
333 ilMemberAgreementGUI::addAgreement($this->form, $this->obj_id, $this->type);
334 }
335 return true;
336 }
337
343 protected function showCustomFields()
344 {
345 global $DIC;
346
347 $ilUser = $DIC['ilUser'];
348
349 include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
350 include_once('Modules/Course/classes/Export/class.ilCourseUserData.php');
351
352 if (!count($cdf_fields = ilCourseDefinedFieldDefinition::_getFields($this->container->getId()))) {
353 return true;
354 }
355
356 $cdf = new ilNonEditableValueGUI($this->lng->txt('ps_crs_user_fields'));
357 $cdf->setValue($this->lng->txt($this->type . '_ps_cdf_info'));
358 $cdf->setRequired(true);
359
360 foreach ($cdf_fields as $field_obj) {
361 $course_user_data = new ilCourseUserData($ilUser->getId(), $field_obj->getId());
362
363 switch ($field_obj->getType()) {
365 $select = new ilSelectInputGUI($field_obj->getName(), 'cdf[' . $field_obj->getId() . ']');
366 $select->setValue(ilUtil::stripSlashes($_POST['cdf'][$field_obj->getId()]));
367 $select->setOptions($field_obj->prepareSelectBox());
368 if ($field_obj->isRequired()) {
369 $select->setRequired(true);
370 }
371
372 $cdf->addSubItem($select);
373
374
375 break;
376
377 case IL_CDF_TYPE_TEXT:
378 $text = new ilTextInputGUI($field_obj->getName(), 'cdf[' . $field_obj->getId() . ']');
379 $text->setValue(ilUtil::stripSlashes($_POST['cdf'][$field_obj->getId()]));
380 $text->setSize(32);
381 $text->setMaxLength(255);
382 if ($field_obj->isRequired()) {
383 $text->setRequired(true);
384 }
385 $cdf->addSubItem($text);
386 break;
387 }
388 }
389 $this->form->addItem($cdf);
390 return true;
391 }
392
399 protected function validateAgreement()
400 {
401 global $DIC;
402
403 $ilUser = $DIC['ilUser'];
404
405 if ($_POST['agreement']) {
406 return true;
407 }
408 include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
409 if (!$this->privacy->confirmationRequired($this->type)) {
410 return true;
411 }
412 return false;
413 }
414
421 protected function validateCustomFields()
422 {
423 global $DIC;
424
425 $ilUser = $DIC['ilUser'];
426
427
428 $required_fullfilled = true;
429 foreach (ilCourseDefinedFieldDefinition::_getFields($this->container->getId()) as $field_obj) {
430 switch ($field_obj->getType()) {
432
433 // Split value id from post
434 list($field_id, $option_id) = explode('_', $_POST['cdf_' . $field_obj->getId()]);
435
436 $open_answer_indexes = (array) $field_obj->getValueOptions();
437 if (in_array($option_id, $open_answer_indexes)) {
438 $value = $_POST['cdf_oa_' . $field_obj->getId() . '_' . $option_id];
439 } else {
440 $value = $field_obj->getValueById($option_id);
441 }
442 break;
443
444 case IL_CDF_TYPE_TEXT:
445 $value = $_POST['cdf_' . $field_obj->getId()];
446 break;
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 // #14220
454 if ($field_obj->isRequired() and $value == "") {
455 $required_fullfilled = false;
456 }
457 }
458
459 return $required_fullfilled;
460 }
461
468 protected function setAccepted($a_status)
469 {
470 global $DIC;
471
472 $ilUser = $DIC['ilUser'];
473
474 include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
475 if (!$this->privacy->confirmationRequired($this->type) and !ilCourseDefinedFieldDefinition::_hasFields($this->container->getId())) {
476 return true;
477 }
478
479 include_once('Services/Membership/classes/class.ilMemberAgreement.php');
480 $this->agreement = new ilMemberAgreement($ilUser->getId(), $this->container->getId());
481 $this->agreement->setAccepted($a_status);
482 $this->agreement->setAcceptanceTime(time());
483 $this->agreement->save();
484 }
485
491 public function cancel()
492 {
493 global $DIC;
494
495 $tree = $DIC['tree'];
496 $ilCtrl = $DIC['ilCtrl'];
497
498 $ilCtrl->setParameterByClass(
499 "ilrepositorygui",
500 "ref_id",
501 $tree->getParentId($this->container->getRefId())
502 );
503 $ilCtrl->redirectByClass("ilrepositorygui", "");
504 }
505
513 public function show(ilPropertyFormGUI $form = null)
514 {
515 if (!$form instanceof ilPropertyFormGUI) {
516 $this->initForm();
517 }
518
519 if ($_SESSION["pending_goto"]) {
520 ilUtil::sendInfo($this->lng->txt("reg_goto_parent_membership_info"));
521 }
522
523 $this->tpl->setContent($this->form->getHTML());
524 }
525
533 public function join()
534 {
535 $form = $this->initForm();
536
537 if (!$form->checkInput() || !$this->validate()) {
538 $form->setValuesByPost();
539 if ($this->join_error) {
540 ilUtil::sendFailure($this->join_error);
541 } else {
542 ilUtil::sendFailure($this->lng->txt('err_check_input'));
543 }
544 $this->show($form);
545 return false;
546 }
547
548 $this->add();
549 }
550
551
558 protected function validate()
559 {
560 return true;
561 }
562
569 protected function initForm()
570 {
571 global $DIC;
572
573 $ilUser = $DIC['ilUser'];
574
575 if (is_object($this->form)) {
576 return true;
577 }
578
579 include_once('./Services/Form/classes/class.ilPropertyFormGUI.php');
580 $this->form = new ilPropertyFormGUI();
581 $this->form->setFormAction($this->ctrl->getFormAction($this, 'join'));
582 $this->form->setTitle($this->getFormTitle());
583
584 $this->fillInformations();
586 if ($this->isRegistrationPossible()) {
587 $this->fillRegistrationPeriod();
588 }
589 if ($this->isRegistrationPossible() || $this->participants->isSubscriber($ilUser->getId())) {
590 $this->fillRegistrationType();
591 }
592 if ($this->isRegistrationPossible()) {
593 $this->fillMaxMembers();
594 }
595 if ($this->isRegistrationPossible()) {
596 $this->fillAgreement();
597 }
598 $this->addCommandButtons();
599 return $this->form;
600 }
601
606 protected function addCommandButtons()
607 {
608 global $DIC;
609
610 $ilUser = $DIC['ilUser'];
611
612 if ($this->isRegistrationPossible() and $this->isWaitingListActive() and !$this->getWaitingList()->isOnList($ilUser->getId())) {
613 $this->form->addCommandButton('join', $this->lng->txt('mem_add_to_wl'));
614 $this->form->addCommandButton('cancel', $this->lng->txt('cancel'));
615 } elseif ($this->isRegistrationPossible() and !$this->getWaitingList()->isOnList($ilUser->getId())) {
616 $this->form->addCommandButton('join', $this->lng->txt('join'));
617 $this->form->addCommandButton('cancel', $this->lng->txt('cancel'));
618 }
619 if ($this->getWaitingList()->isOnList($ilUser->getId())) {
621 sprintf(
622 $this->lng->txt($this->container->getType() . '_cancel_waiting_list'),
623 $this->container->getTitle()
624 )
625 );
626 $this->form->addCommandButton('leaveWaitingList', $this->lng->txt('leave_waiting_list'));
627 $this->form->addCommandButton('cancel', $this->lng->txt('cancel'));
628 }
629 }
630
635 protected function updateSubscriptionRequest()
636 {
637 global $DIC;
638
639 $ilUser = $DIC['ilUser'];
640 $tree = $DIC['tree'];
641 $ilCtrl = $DIC['ilCtrl'];
642
643 $this->participants->updateSubject($ilUser->getId(), ilUtil::stripSlashes($_POST['subject']));
644 ilUtil::sendSuccess($this->lng->txt('sub_request_saved'), true);
645 $ilCtrl->setParameterByClass(
646 "ilrepositorygui",
647 "ref_id",
648 $tree->getParentId($this->container->getRefId())
649 );
650 $ilCtrl->redirectByClass("ilrepositorygui", "");
651 }
652
653 protected function cancelSubscriptionRequest()
654 {
655 global $DIC;
656
657 $ilUser = $DIC['ilUser'];
658 $tree = $DIC['tree'];
659 $ilCtrl = $DIC['ilCtrl'];
660
661 $this->participants->deleteSubscriber($ilUser->getId());
662 ilUtil::sendSuccess($this->lng->txt('sub_request_deleted'), true);
663
664 $ilCtrl->setParameterByClass(
665 "ilrepositorygui",
666 "ref_id",
667 $tree->getParentId($this->container->getRefId())
668 );
669 $ilCtrl->redirectByClass("ilrepositorygui", "");
670 }
671}
$section
Definition: Utf8Test.php:83
add()
Definition: add.php:2
$_GET["client_id"]
$_POST["username"]
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
static _getFields($a_container_id, $a_sort=IL_CDF_SORT_NAME)
Get all fields of a container.
static _hasFields($a_container_id)
Check if there are any define fields.
This class represents a custom property in a property form.
static _getInstanceByType($a_type)
Get Singleton Instance.
This class represents a section header in a property form.
static addExportFieldInfo($form, $a_obj_id, $a_type)
Add export field info to form @global type $lng.
static addCustomFields($form, $a_obj_id, $a_type, $a_mode='user')
Add custom course fields.
static addAgreement($form, $a_obj_id, $a_type)
Add agreement to form.
This class represents a non editable value in a property form.
static _checkGroupingDependencies(&$container_obj, $a_user_id=null)
static _getGroupingItems($container_obj)
Get courses/groups that are assigned to the same membership limitation.
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
static _lookupType($a_id, $a_reference=false)
lookup object type
static _getInstance()
Get instance of ilPrivacySettings.
This class represents a property form user interface.
Base class for Course and Group registration.
showCustomFields()
Show course defined fields.
fillRegistrationType()
show informations about registration procedure
initParticipants()
Init participants object (course or group participants)
isWaitingListActive()
Check if the waiting list is active Maximum of members exceeded or any user on the waiting list.
getFormTitle()
Get title for property form.
updateSubscriptionRequest()
Update subscription message.
fillRegistrationPeriod()
show informations about the registration period
fillAgreement()
Show user agreement.
addCommandButtons()
Add command buttons.
__construct($a_container)
Constructor.
validateAgreement()
Check Agreement.
setAccepted($a_status)
Set Agreement accepted.
cancel()
cancel subscription
validateCustomFields()
Check required course fields.
fillInformations()
fill informations
enableRegistration($a_status)
set registration disabled
initForm()
init registration form
validate()
validate join request
fillMembershipLimitation()
Show membership limitations.
getWaitingList()
Get waiting list object.
show(ilPropertyFormGUI $form=null)
show registration form
initWaitingList()
Init waiting list (course or group waiting list)
isRegistrationPossible()
check if registration is possible
fillMaxMembers()
show informations about the maximum number of user.
This class represents a selection list property in a property form.
special template class to simplify handling of ITX/PEAR
This class represents a text property in a property form.
static sendQuestion($a_info="", $a_keep=false)
Send Question to Screen.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
global $ilCtrl
Definition: ilias.php:18
$type
$ilUser
Definition: imgupload.php:18
$message
Definition: xapiexit.php:14
$DIC
Definition: xapitoken.php:46