ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilCourseRegistrationGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once('./Services/Membership/classes/class.ilRegistrationGUI.php');
5
17{
18 private $parent_gui = null;
19
26 public function __construct($a_container, $a_parent_gui)
27 {
28 parent::__construct($a_container);
29
30 $this->parent_gui = $a_parent_gui;
31 }
32
38 public function executeCommand()
39 {
40 global $DIC;
41
42 $ilTabs = $DIC['ilTabs'];
43 $ilUser = $DIC['ilUser'];
44
45 if ($this->getWaitingList()->isOnList($ilUser->getId())) {
46 $ilTabs->activateTab('leave');
47 }
48
49 if (!$GLOBALS['DIC']['ilAccess']->checkAccess('join', '', $this->getRefId())) {
50 $this->ctrl->setReturn($this->parent_gui, 'infoScreen');
51 $this->ctrl->returnToParent($this);
52 return false;
53 }
54
55 $next_class = $this->ctrl->getNextClass($this);
56 switch ($next_class) {
57 default:
58 $cmd = $this->ctrl->getCmd("show");
59 $this->$cmd();
60 break;
61 }
62 return true;
63 }
64
71 protected function getFormTitle()
72 {
73 global $DIC;
74
75 $ilUser = $DIC['ilUser'];
76
77 if ($this->getWaitingList()->isOnList($ilUser->getId())) {
78 return $this->lng->txt('member_status');
79 }
80 return $this->lng->txt('crs_registration');
81 }
82
90 protected function fillInformations()
91 {
92 if ($this->container->getImportantInformation()) {
93 $imp = new ilNonEditableValueGUI($this->lng->txt('crs_important_info'), "", true);
94 $value = nl2br(ilUtil::makeClickable($this->container->getImportantInformation(), true));
95 $imp->setValue($value);
96 $this->form->addItem($imp);
97 }
98
99 if ($this->container->getSyllabus()) {
100 $syl = new ilNonEditableValueGUI($this->lng->txt('crs_syllabus'), "", true);
101 $value = nl2br(ilUtil::makeClickable($this->container->getSyllabus(), true));
102 $syl->setValue($value);
103 $this->form->addItem($syl);
104 }
105 }
106
112 protected function fillRegistrationPeriod()
113 {
114 include_once('./Services/Calendar/classes/class.ilDateTime.php');
115 $now = new ilDateTime(time(), IL_CAL_UNIX, 'UTC');
116
117 if ($this->container->getSubscriptionUnlimitedStatus()) {
118 $reg = new ilNonEditableValueGUI($this->lng->txt('mem_reg_period'));
119 $reg->setValue($this->lng->txt('mem_unlimited'));
120 $this->form->addItem($reg);
121 return true;
122 } elseif ($this->container->getSubscriptionLimitationType() == IL_CRS_SUBSCRIPTION_DEACTIVATED) {
123 return true;
124 }
125
126 $start = new ilDateTime($this->container->getSubscriptionStart(), IL_CAL_UNIX, 'UTC');
127 $end = new ilDateTime($this->container->getSubscriptionEnd(), IL_CAL_UNIX, 'UTC');
128
129 if (ilDateTime::_before($now, $start)) {
130 $tpl = new ilTemplate('tpl.registration_period_form.html', true, true, 'Services/Membership');
131 $tpl->setVariable('TXT_FIRST', $this->lng->txt('mem_start'));
132 $tpl->setVariable('FIRST', ilDatePresentation::formatDate($start));
133
134 $tpl->setVariable('TXT_END', $this->lng->txt('mem_end'));
135 $tpl->setVariable('END', ilDatePresentation::formatDate($end));
136
137 $warning = $this->lng->txt('mem_reg_not_started');
138 } elseif (ilDateTime::_after($now, $end)) {
139 $tpl = new ilTemplate('tpl.registration_period_form.html', true, true, 'Services/Membership');
140 $tpl->setVariable('TXT_FIRST', $this->lng->txt('mem_start'));
141 $tpl->setVariable('FIRST', ilDatePresentation::formatDate($start));
142
143 $tpl->setVariable('TXT_END', $this->lng->txt('mem_end'));
144 $tpl->setVariable('END', ilDatePresentation::formatDate($end));
145
146
147 $warning = $this->lng->txt('mem_reg_expired');
148 } else {
149 $tpl = new ilTemplate('tpl.registration_period_form.html', true, true, 'Services/Membership');
150 $tpl->setVariable('TXT_FIRST', $this->lng->txt('mem_end'));
151 $tpl->setVariable('FIRST', ilDatePresentation::formatDate($end));
152 }
153
154 $reg = new ilCustomInputGUI($this->lng->txt('mem_reg_period'));
155 $reg->setHtml($tpl->get());
156 if (strlen($warning)) {
157 // Disable registration
158 $this->enableRegistration(false);
159 ilUtil::sendFailure($warning);
160 #$reg->setAlert($warning);
161 }
162 $this->form->addItem($reg);
163 return true;
164 }
165
166
174 protected function fillMaxMembers()
175 {
176 global $DIC;
177
178 $ilUser = $DIC['ilUser'];
179
180 if (!$this->container->isSubscriptionMembershipLimited()) {
181 return true;
182 }
183 $tpl = new ilTemplate('tpl.max_members_form.html', true, true, 'Services/Membership');
184
185 if ($this->container->getSubscriptionMinMembers()) {
186 $tpl->setVariable('TXT_MIN', $this->lng->txt('mem_min_users') . ':');
187 $tpl->setVariable('NUM_MIN', $this->container->getSubscriptionMinMembers());
188 }
189
190 if ($this->container->getSubscriptionMaxMembers()) {
191 $tpl->setVariable('TXT_MAX', $this->lng->txt('mem_max_users'));
192 $tpl->setVariable('NUM_MAX', $this->container->getSubscriptionMaxMembers());
193
194 $tpl->setVariable('TXT_FREE', $this->lng->txt('mem_free_places') . ":");
195 include_once './Modules/Course/classes/class.ilObjCourseAccess.php';
196 $reg_info = ilObjCourseAccess::lookupRegistrationInfo($this->getContainer()->getId());
197 $free = $reg_info['reg_info_free_places'];
198
199 if ($free) {
200 $tpl->setVariable('NUM_FREE', $free);
201 } else {
202 $tpl->setVariable('WARN_FREE', $free);
203 }
204
205 include_once('./Modules/Course/classes/class.ilCourseWaitingList.php');
206 $waiting_list = new ilCourseWaitingList($this->container->getId());
207 if (
208 $this->container->isSubscriptionMembershipLimited() and
209 $this->container->enabledWaitingList() and
210 (!$free or $waiting_list->getCountUsers())) {
211 if ($waiting_list->isOnList($ilUser->getId())) {
212 $tpl->setVariable('TXT_WAIT', $this->lng->txt('mem_waiting_list_position'));
213 $tpl->setVariable('NUM_WAIT', $waiting_list->getPosition($ilUser->getId()));
214 } else {
215 $tpl->setVariable('TXT_WAIT', $this->lng->txt('mem_waiting_list'));
216 if ($free and $waiting_list->getCountUsers()) {
217 $tpl->setVariable('WARN_WAIT', $waiting_list->getCountUsers());
218 } else {
219 $tpl->setVariable('NUM_WAIT', $waiting_list->getCountUsers());
220 }
221 }
222 }
223
224 $alert = '';
225 if (
226 !$free and
227 !$this->container->enabledWaitingList()) {
228 // Disable registration
229 $this->enableRegistration(false);
230 ilUtil::sendFailure($this->lng->txt('mem_alert_no_places'));
231 #$alert = $this->lng->txt('mem_alert_no_places');
232 } elseif (
233 $this->container->enabledWaitingList() and
234 $this->container->isSubscriptionMembershipLimited() and
235 $waiting_list->isOnList($ilUser->getId())
236 ) {
237 // Disable registration
238 $this->enableRegistration(false);
239 } elseif (
240 !$free and
241 $this->container->enabledWaitingList() and
242 $this->container->isSubscriptionMembershipLimited()) {
243 ilUtil::sendFailure($this->lng->txt('crs_warn_no_max_set_on_waiting_list'));
244 #$alert = $this->lng->txt('crs_warn_no_max_set_on_waiting_list');
245 } elseif (
246 $free and
247 $this->container->enabledWaitingList() and
248 $this->container->isSubscriptionMembershipLimited() and
249 $this->getWaitingList()->getCountUsers()) {
250 ilUtil::sendFailure($this->lng->txt('crs_warn_wl_set_on_waiting_list'));
251 #$alert = $this->lng->txt('crs_warn_wl_set_on_waiting_list');
252 }
253 }
254
255 $max = new ilCustomInputGUI($this->lng->txt('mem_participants'));
256 $max->setHtml($tpl->get());
257 if (strlen($alert)) {
258 $max->setAlert($alert);
259 }
260 $this->form->addItem($max);
261 return true;
262 }
263
270 protected function fillRegistrationType()
271 {
272 global $DIC;
273
274 $ilUser = $DIC['ilUser'];
275
276 if ($this->container->getSubscriptionLimitationType() == IL_CRS_SUBSCRIPTION_DEACTIVATED) {
277 $reg = new ilCustomInputGUI($this->lng->txt('mem_reg_type'));
278 #$reg->setHtml($this->lng->txt('crs_info_reg_deactivated'));
279 $reg->setAlert($this->lng->txt('crs_info_reg_deactivated'));
280 #ilUtil::sendFailure($this->lng->txt('crs_info_reg_deactivated'));
281 #$reg = new ilNonEditableValueGUI($this->lng->txt('mem_reg_type'));
282 #$reg->setValue($this->lng->txt('crs_info_reg_deactivated'));
283 #$reg->setAlert($this->lng->txt('grp_reg_deactivated_alert'));
284 $this->form->addItem($reg);
285
286 // Disable registration
287 $this->enableRegistration(false);
288 return true;
289 }
290
291 switch ($this->container->getSubscriptionType()) {
293
294 // no "request" info if waiting list is active
295 if ($this->isWaitingListActive()) {
296 return true;
297 }
298
299 $txt = new ilNonEditableValueGUI($this->lng->txt('mem_reg_type'));
300 $txt->setValue($this->lng->txt('crs_info_reg_direct'));
301
302 $this->form->addItem($txt);
303 break;
304
306 $txt = new ilNonEditableValueGUI($this->lng->txt('mem_reg_type'));
307 $txt->setValue($this->lng->txt('crs_subscription_options_password'));
308
309
310 $pass = new ilTextInputGUI($this->lng->txt('passwd'), 'grp_passw');
311 $pass->setInputType('password');
312 $pass->setSize(12);
313 $pass->setMaxLength(32);
314 #$pass->setRequired(true);
315 $pass->setInfo($this->lng->txt('crs_info_reg_password'));
316
317 $txt->addSubItem($pass);
318 $this->form->addItem($txt);
319 break;
320
322
323 // no "request" info if waiting list is active
324 if ($this->isWaitingListActive()) {
325 return true;
326 }
327
328 $txt = new ilNonEditableValueGUI($this->lng->txt('mem_reg_type'));
329 $txt->setValue($this->lng->txt('crs_subscription_options_confirmation'));
330
331 $sub = new ilTextAreaInputGUI($this->lng->txt('crs_reg_subject'), 'subject');
332 $sub->setValue($_POST['subject']);
333 $sub->setInfo($this->lng->txt('crs_info_reg_confirmation'));
334 $sub->setCols(40);
335 $sub->setRows(5);
336 if ($this->participants->isSubscriber($ilUser->getId())) {
337 $sub_data = $this->participants->getSubscriberData($ilUser->getId());
338 $sub->setValue($sub_data['subject']);
339 $sub->setInfo('');
340 ilUtil::sendFailure($this->lng->txt('crs_reg_user_already_subscribed'));
341 $this->enableRegistration(false);
342 }
343 $txt->addSubItem($sub);
344 $this->form->addItem($txt);
345 break;
346
347
348 default:
349 return true;
350 }
351
352 return true;
353 }
354
359 protected function addCommandButtons()
360 {
361 global $DIC;
362
363 $ilUser = $DIC['ilUser'];
364
365 parent::addCommandButtons();
366
367
368 switch ($this->container->getSubscriptionType()) {
370 if ($this->participants->isSubscriber($ilUser->getId())) {
371 $this->form->clearCommandButtons();
372 $this->form->addCommandButton('updateSubscriptionRequest', $this->lng->txt('crs_update_subscr_request'));
373 $this->form->addCommandButton('cancelSubscriptionRequest', $this->lng->txt('crs_cancel_subscr_request'));
374 } elseif ($this->isRegistrationPossible()) {
375 $this->form->clearCommandButtons();
376 $this->form->addCommandButton('join', $this->lng->txt('crs_join_request'));
377 $this->form->addCommandButton('cancel', $this->lng->txt('cancel'));
378 }
379 break;
380 }
381 if (!$this->isRegistrationPossible()) {
382 return false;
383 }
384
385 return true;
386 }
387
395 protected function validate()
396 {
397 global $DIC;
398
399 $ilUser = $DIC['ilUser'];
400
401 if ($ilUser->getId() == ANONYMOUS_USER_ID) {
402 $this->join_error = $this->lng->txt('permission_denied');
403 return false;
404 }
405
406 // Set aggrement to not accepted
407 $this->setAccepted(false);
408
409 if (!$this->isRegistrationPossible()) {
410 $this->join_error = $this->lng->txt('mem_error_preconditions');
411 return false;
412 }
413 if ($this->container->getSubscriptionType() == IL_CRS_SUBSCRIPTION_PASSWORD) {
414 if (!strlen($pass = ilUtil::stripSlashes($_POST['grp_passw']))) {
415 $this->join_error = $this->lng->txt('crs_password_required');
416 return false;
417 }
418 if (strcmp($pass, $this->container->getSubscriptionPassword()) !== 0) {
419 $this->join_error = $this->lng->txt('crs_password_not_valid');
420 return false;
421 }
422 }
423 if (!$this->validateCustomFields()) {
424 $this->join_error = $this->lng->txt('fill_out_all_required_fields');
425 return false;
426 }
427 if (!$this->validateAgreement()) {
428 $this->join_error = $this->lng->txt('crs_agreement_required');
429 return false;
430 }
431
432 return true;
433 }
434
442 protected function add()
443 {
444 global $DIC;
445
446 $ilUser = $DIC['ilUser'];
447 $tree = $DIC['tree'];
448 $ilCtrl = $DIC['ilCtrl'];
449
450 // TODO: language vars
451
452 // set aggreement accepted
453 $this->setAccepted(true);
454
455 include_once('./Modules/Course/classes/class.ilCourseWaitingList.php');
456 $free = max(0, $this->container->getSubscriptionMaxMembers() - $this->participants->getCountMembers());
457 $waiting_list = new ilCourseWaitingList($this->container->getId());
458 if ($this->container->isSubscriptionMembershipLimited() and $this->container->enabledWaitingList() and (!$free or $waiting_list->getCountUsers())) {
459 $waiting_list->addToList($ilUser->getId());
460 $info = sprintf(
461 $this->lng->txt('crs_added_to_list'),
462 $waiting_list->getPosition($ilUser->getId())
463 );
464 ilUtil::sendSuccess($info, true);
465
466 $this->participants->sendNotification($this->participants->NOTIFY_SUBSCRIPTION_REQUEST, $ilUser->getId());
467 $this->participants->sendNotification($this->participants->NOTIFY_WAITING_LIST, $ilUser->getId());
468 $ilCtrl->setParameterByClass(
469 "ilrepositorygui",
470 "ref_id",
471 $tree->getParentId($this->container->getRefId())
472 );
473 $ilCtrl->redirectByClass("ilrepositorygui", "");
474 }
475
476 switch ($this->container->getSubscriptionType()) {
478 $this->participants->addSubscriber($ilUser->getId());
479 $this->participants->updateSubscriptionTime($ilUser->getId(), time());
480 $this->participants->updateSubject($ilUser->getId(), ilUtil::stripSlashes($_POST['subject']));
481 $this->participants->sendNotification($this->participants->NOTIFY_SUBSCRIPTION_REQUEST, $ilUser->getId());
482
483 ilUtil::sendSuccess($this->lng->txt("application_completed"), true);
484 $ilCtrl->setParameterByClass(
485 "ilrepositorygui",
486 "ref_id",
487 $tree->getParentId($this->container->getRefId())
488 );
489 $ilCtrl->redirectByClass("ilrepositorygui", "");
490 break;
491
492 default:
493
494 if ($this->container->isSubscriptionMembershipLimited() && $this->container->getSubscriptionMaxMembers()) {
495 $success = $GLOBALS['DIC']['rbacadmin']->assignUserLimited(
496 ilParticipants::getDefaultMemberRole($this->container->getRefId()),
497 $ilUser->getId(),
498 $this->container->getSubscriptionMaxMembers(),
499 array(ilParticipants::getDefaultMemberRole($this->container->getRefId()))
500 );
501 if (!$success) {
502 ilUtil::sendFailure($this->lng->txt('crs_subscription_failed_limit'));
503 $this->show();
504 return false;
505 }
506 }
507
508 $this->participants->add($ilUser->getId(), IL_CRS_MEMBER);
509 $this->participants->sendNotification($this->participants->NOTIFY_ADMINS, $ilUser->getId());
510 $this->participants->sendNotification($this->participants->NOTIFY_REGISTERED, $ilUser->getId());
511
512 include_once './Modules/Forum/classes/class.ilForumNotification.php';
513 ilForumNotification::checkForumsExistsInsert($this->container->getRefId(), $ilUser->getId());
514
515 if ($this->container->getType() == "crs") {
516 $this->container->checkLPStatusSync($ilUser->getId());
517 }
518
519 if (!$_SESSION["pending_goto"]) {
520 ilUtil::sendSuccess($this->lng->txt("crs_subscription_successful"), true);
521 $this->ctrl->returnToParent($this);
522 } else {
523 $tgt = $_SESSION["pending_goto"];
524 unset($_SESSION["pending_goto"]);
525 ilUtil::redirect($tgt);
526 }
527 break;
528 }
529 }
530
531
532
533
539 protected function initParticipants()
540 {
541 include_once('./Modules/Course/classes/class.ilCourseParticipants.php');
542 $this->participants = ilCourseParticipants::_getInstanceByObjId($this->obj_id);
543 }
544
545
550 protected function initWaitingList()
551 {
552 include_once './Modules/Course/classes/class.ilCourseWaitingList.php';
553 $this->waiting_list = new ilCourseWaitingList($this->container->getId());
554 }
555
559 protected function isWaitingListActive()
560 {
561 global $DIC;
562
563 $ilUser = $DIC['ilUser'];
564 static $active = null;
565
566 if ($active !== null) {
567 return $active;
568 }
569 if (!$this->container->enabledWaitingList() or !$this->container->isSubscriptionMembershipLimited()) {
570 return $active = false;
571 }
572 if (!$this->container->getSubscriptionMaxMembers()) {
573 return $active = false;
574 }
575
576 $free = max(0, $this->container->getSubscriptionMaxMembers() - $this->participants->getCountMembers());
577 return $active = (!$free or $this->getWaitingList()->getCountUsers());
578 }
579}
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
$success
Definition: Utf8Test.php:86
$_POST["username"]
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
const IL_CRS_SUBSCRIPTION_PASSWORD
const IL_CRS_SUBSCRIPTION_CONFIRMATION
const IL_CRS_SUBSCRIPTION_DEACTIVATED
const IL_CRS_SUBSCRIPTION_DIRECT
const IL_CAL_UNIX
const IL_CRS_MEMBER
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
GUI class for course registrations.
initParticipants()
Init course participants.
fillRegistrationPeriod()
show informations about the registration period
validate()
Validate subscription request.
addCommandButtons()
Add group specific command buttons.
__construct($a_container, $a_parent_gui)
Constructor.
fillRegistrationType()
fill registration type
This class represents a custom property in a property form.
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date @access public.
@classDescription Date and time handling
static _after(ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
compare two dates and check start is after end This method does not consider tz offsets.
static _before(ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
compare two dates and check start is before end This method does not consider tz offsets.
static checkForumsExistsInsert($ref_id, $user_id=0)
This class represents a non editable value in a property form.
static lookupRegistrationInfo($a_obj_id)
Lookup registration info @global ilDB $ilDB @global ilObjUser $ilUser @global ilLanguage $lng.
static getDefaultMemberRole($a_ref_id)
Base class for Course and Group registration.
validateAgreement()
Check Agreement.
setAccepted($a_status)
Set Agreement accepted.
validateCustomFields()
Check required course fields.
enableRegistration($a_status)
set registration disabled
getWaitingList()
Get waiting list object.
show(ilPropertyFormGUI $form=null)
show registration form
isRegistrationPossible()
check if registration is possible
special template class to simplify handling of ITX/PEAR
This class represents a text area property in a property form.
This class represents a text property in a property form.
static redirect($a_script)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static makeClickable($a_text, $detectGotoLinks=false)
makeClickable In Texten enthaltene URLs und Mail-Adressen klickbar machen
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
const ANONYMOUS_USER_ID
Definition: constants.php:25
$txt
Definition: error.php:13
global $DIC
Definition: goto.php:24
$ilUser
Definition: imgupload.php:18
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc