ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilMembershipGUI.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
4
12{
16 private $repository_object = null;
17
21 private $repository_gui = null;
22
26 protected $lng = null;
27
31 protected $ctrl = null;
32
36 protected $logger = null;
37
41 protected $tpl;
42
46 protected $access;
47
48
53 public function __construct(ilObjectGUI $repository_gui, ilObject $repository_obj)
54 {
55 global $DIC;
56
57 $this->repository_gui = $repository_gui;
58 $this->repository_object = $repository_obj;
59
60 $this->lng = $GLOBALS['DIC']->language();
61 $this->lng->loadLanguageModule('crs');
62 $this->lng->loadLanguageModule($this->getParentObject()->getType());
63 $this->tpl = $GLOBALS['DIC']->ui()->mainTemplate();
64 $this->ctrl = $GLOBALS['DIC']->ctrl();
65 $this->logger = $DIC->logger()->mmbr();
66 $this->access = $GLOBALS['DIC']->access();
67 }
68
72 protected function getLanguage()
73 {
74 return $this->lng;
75 }
76
80 protected function getCtrl()
81 {
82 return $this->ctrl;
83 }
84
88 protected function getLogger()
89 {
90 return $this->logger;
91 }
92
93
98 public function getParentGUI()
99 {
101 }
102
107 public function getParentObject()
108 {
110 }
111
116 public function getMembersObject()
117 {
118 if ($this->participants instanceof ilParticipants) {
119 return $this->participants;
120 }
121 return $this->participants = ilParticipants::getInstance($this->getParentObject()->getRefId());
122 }
123
127 protected function getMailMemberRoles()
128 {
129 return null;
130 }
131
139 protected function checkPermissionBool($a_permission, $a_cmd = '', $a_type = '', $a_ref_id = 0)
140 {
141 if (!$a_ref_id) {
142 $a_ref_id = $this->getParentObject()->getRefId();
143 }
144 return $this->access->checkAccess($a_permission, $a_cmd, $a_ref_id);
145 }
146
153 protected function checkRbacOrPositionAccessBool($a_rbac_perm, $a_pos_perm, $a_ref_id = 0)
154 {
155 if (!$a_ref_id) {
156 $a_ref_id = $this->getParentObject()->getRefId();
157 }
158 return $this->access->checkRbacOrPositionPermissionAccess($a_rbac_perm, $a_pos_perm, $a_ref_id);
159 }
160
168 protected function checkPermission($a_permission, $a_cmd = "")
169 {
170 if (!$this->checkPermissionBool($a_permission, $a_cmd)) {
171 ilUtil::sendFailure($this->lng->txt('no_permission'), true);
172 $this->ctrl->redirect($this->getParentGUI());
173 }
174 }
175
182 protected function checkRbacOrPermissionAccess($a_rbac_perm, $a_pos_perm)
183 {
184 if (!$this->checkRbacOrPositionAccessBool($a_rbac_perm, $a_pos_perm)) {
185 ilUtil::sendFailure($this->lng->txt('no_permission'), true);
186 $this->ctrl->redirect($this->getParentGUI());
187 }
188 }
189
190
191
196 protected function canAddOrSearchUsers()
197 {
198 return $this->checkPermissionBool('manage_members');
199 }
200
201
208 {
209 return $a_user_ids;
210 }
211
215 public function executeCommand()
216 {
220 global $DIC;
221
222 $ilUser = $DIC['ilUser'];
223 $ilErr = $DIC['ilErr'];
224 $ilAccess = $DIC['ilAccess'];
225 $rbacsystem = $DIC['rbacsystem'];
226 $ilTabs = $DIC['ilTabs'];
227
228 $cmd = $this->ctrl->getCmd('participants');
229 $next_class = $this->ctrl->getNextClass();
230
231 switch ($next_class) {
232 case 'ilrepositorysearchgui':
233
234 $this->checkPermission('manage_members');
235
236 include_once('./Services/Search/classes/class.ilRepositorySearchGUI.php');
237 include_once './Services/Membership/classes/class.ilParticipants.php';
238 $rep_search = new ilRepositorySearchGUI();
239 $rep_search->addUserAccessFilterCallable([$this,'filterUserIdsByRbacOrPositionOfCurrentUser']);
240
241 $participants = $this->getMembersObject();
242 if (
243 $participants->isAdmin($GLOBALS['DIC']['ilUser']->getId()) ||
244 $ilAccess->checkAccess('manage_members', '', $this->getParentObject()->getRefId())
245 ) {
246 $rep_search->setCallback(
247 $this,
248 'assignMembers',
249 $this->getParentGUI()->getLocalRoles()
250 );
251 } else {
252 //#18445 excludes admin role
253 $rep_search->setCallback(
254 $this,
255 'assignMembers',
256 $this->getLocalRoles(array($this->getParentObject()->getDefaultAdminRole()))
257 );
258 }
259
260 // Set tabs
261 $this->ctrl->setReturn($this, 'participants');
262 $ret = $this->ctrl->forwardCommand($rep_search);
263 break;
264
265
266 case 'ilmailmembersearchgui':
267 $ilTabs->clearTargets();
268 $ilTabs->setBackTarget(
269 $this->lng->txt('btn_back'),
270 $this->ctrl->getLinkTarget($this, $this->getDefaultCommand())
271 );
272
273 $mail = new ilMail($ilUser->getId());
274 if (!(
275 $this->getParentObject()->getMailToMembersType() == ilCourseConstants::MAIL_ALLOWED_ALL ||
276 $ilAccess->checkAccess('manage_members', "", $this->getParentObject()->getRefId())
277 ) ||
278 !$rbacsystem->checkAccess(
279 'internal_mail',
280 $mail->getMailObjectReferenceId()
281 )) {
282 $ilErr->raiseError($this->lng->txt("msg_no_perm_read"), $ilErr->MESSAGE);
283 }
284
285 $mail_search = new ilMailMemberSearchGUI(
286 $this,
287 $this->getParentObject()->getRefId(),
288 $this->getMailMemberRoles()
289 );
290 $mail_search->setObjParticipants(
291 ilParticipants::getInstance($this->getParentObject()->getRefId())
292 );
293 $this->ctrl->forwardCommand($mail_search);
294 break;
295
296 case 'ilusersgallerygui':
297
298 $this->setSubTabs($GLOBALS['DIC']['ilTabs']);
299 $tabs = $GLOBALS['DIC']->tabs()->setSubTabActive(
300 $this->getParentObject()->getType() . '_members_gallery'
301 );
302
303 $is_admin = (bool) $this->checkRbacOrPositionAccessBool('manage_members', 'manage_members');
304 $is_participant = (bool) ilParticipants::_isParticipant($this->getParentObject()->getRefId(), $ilUser->getId());
305 if (
306 !$is_admin &&
307 (
308 $this->getParentObject()->getShowMembers() == 0 ||
309 !$is_participant
310 )
311 ) {
312 $ilErr->raiseError($this->lng->txt('msg_no_perm_read'), $ilErr->MESSAGE);
313 }
314
315 $this->showMailToMemberToolbarButton($GLOBALS['DIC']['ilToolbar'], 'jump2UsersGallery');
316 $this->showMemberExportToolbarButton($GLOBALS['DIC']['ilToolbar'], 'jump2UsersGallery');
317
318 require_once 'Services/User/Gallery/classes/class.ilUsersGalleryGUI.php';
319 require_once 'Services/User/Gallery/classes/class.ilUsersGalleryParticipants.php';
320
321
323 $gallery_gui = new ilUsersGalleryGUI($provider);
324 $this->ctrl->forwardCommand($gallery_gui);
325 break;
326
327 case 'ilcourseparticipantsgroupsgui':
328
329 $this->setSubTabs($GLOBALS['DIC']['ilTabs']);
330 $this->checkRbacOrPermissionAccess('manage_members', 'manage_members');
331
332
333 include_once './Modules/Course/classes/class.ilCourseParticipantsGroupsGUI.php';
334 $cmg_gui = new ilCourseParticipantsGroupsGUI($this->getParentObject()->getRefId());
335 if ($cmd == "show" || $cmd = "") {
336 $this->showMailToMemberToolbarButton($GLOBALS['DIC']['ilToolbar']);
337 }
338 $this->ctrl->forwardCommand($cmg_gui);
339 break;
340
341 case 'ilsessionoverviewgui':
342
343 $this->setSubTabs($GLOBALS['DIC']['ilTabs']);
344 $this->checkRbacOrPermissionAccess('manage_members', 'manage_members');
345
346 include_once './Services/Membership/classes/class.ilParticipants.php';
347 $prt = ilParticipants::getInstance($this->getParentObject()->getRefId());
348
349 include_once('./Modules/Session/classes/class.ilSessionOverviewGUI.php');
350 $overview = new ilSessionOverviewGUI($this->getParentObject()->getRefId(), $prt);
351 $this->ctrl->forwardCommand($overview);
352 break;
353
354 case 'ilmemberexportgui':
355
356 $this->setSubTabs($GLOBALS['DIC']['ilTabs']);
357 $this->checkRbacOrPermissionAccess('manage_members', 'manage_members');
358
359 include_once('./Services/Membership/classes/Export/class.ilMemberExportGUI.php');
360 $export = new ilMemberExportGUI($this->getParentObject()->getRefId());
361 $this->ctrl->forwardCommand($export);
362 break;
363
364 case 'ilobjectcustomuserfieldsgui':
365
366 $this->setSubTabs($GLOBALS['DIC']['ilTabs']);
367 $this->checkRbacOrPermissionAccess('manage_members', 'manage_members');
368 $this->activateSubTab($this->getParentObject()->getType() . "_member_administration");
369 $this->ctrl->setReturn($this, 'participants');
370
371 include_once './Services/Membership/classes/class.ilObjectCustomUserFieldsGUI.php';
372 $cdf_gui = new ilObjectCustomUserFieldsGUI($this->getParentGUI()->object->getId());
373 $this->ctrl->forwardCommand($cdf_gui);
374 break;
375
376 default:
377
378 $this->setSubTabs($GLOBALS['DIC']['ilTabs']);
379
380 //exclude mailMembersBtn cmd from this check
381 if (
382 $cmd == "mailMembersBtn" ||
383 $cmd == 'membersMap' ||
384 $cmd == 'printForMembersOutput' ||
385 $cmd == 'jump2UsersGallery'
386 ) {
387 $this->checkPermission('read');
388 } else {
389 $this->checkRbacOrPermissionAccess('manage_members', 'manage_members');
390 }
391
392 $this->$cmd();
393 break;
394 }
395 }
396
400 protected function participants()
401 {
402 $this->initParticipantTemplate();
404 $this->activateSubTab($this->getParentObject()->getType() . "_member_administration");
405
406 // show waiting list table
407 $waiting = $this->parseWaitingListTable();
408 if ($waiting instanceof ilWaitingListTableGUI) {
409 $this->tpl->setVariable('TABLE_WAIT', $waiting->getHTML());
410 }
411
412 // show subscriber table
413 $subscriber = $this->parseSubscriberTable();
414 if ($subscriber instanceof ilSubscriberTableGUI) {
415 $this->tpl->setVariable('TABLE_SUB', $subscriber->getHTML());
416 }
417
418 // show member table
419 $table = $this->initParticipantTableGUI();
420 $table->setTitle($this->lng->txt($this->getParentObject()->getType() . '_mem_tbl_header'));
421 $table->setFormAction($this->ctrl->getFormAction($this));
422 $table->parse();
423
424 // filter commands
425 $table->setFilterCommand('participantsApplyFilter');
426 $table->setResetCommand('participantsResetFilter');
427
428 $this->tpl->setVariable('MEMBERS', $table->getHTML());
429 }
430
434 protected function participantsApplyFilter()
435 {
436 $table = $this->initParticipantTableGUI();
437 $table->resetOffset();
438 $table->writeFilterToSession();
439
440 $this->participants();
441 }
442
446 protected function participantsResetFilter()
447 {
448 $table = $this->initParticipantTableGUI();
449 $table->resetOffset();
450 $table->resetFilter();
451
452 $this->participants();
453 }
454
455
459 protected function editMember()
460 {
461 $this->activateSubTab($this->getParentObject()->getType() . "_member_administration");
462 return $this->editParticipants(array($_REQUEST['member_id']));
463 }
464
469 protected function editParticipants($post_participants = array())
470 {
471 if (!$post_participants) {
472 $post_participants = (array) $_POST['participants'];
473 }
474
475 $real_participants = $this->getMembersObject()->getParticipants();
476 $participants = array_intersect((array) $post_participants, (array) $real_participants);
477
478 if (!count($participants)) {
479 ilUtil::sendFailure($this->lng->txt('no_checkbox'), true);
480 $this->ctrl->redirect($this, 'participants');
481 }
482 $table = $this->initEditParticipantTableGUI($participants);
483 $this->tpl->setContent($table->getHTML());
484 return true;
485 }
486
494 public function updateParticipants()
495 {
496 global $DIC;
497
498 $rbacsystem = $DIC['rbacsystem'];
499 $rbacreview = $DIC['rbacreview'];
500 $ilUser = $DIC['ilUser'];
501 $ilAccess = $DIC['ilAccess'];
502
503 if (!array_key_exists('participants', $_POST) || !count($_POST['participants'])) {
504 ilUtil::sendFailure($this->lng->txt('no_checkbox'), true);
505 $this->ctrl->redirect($this, 'participants');
506 }
507
508 $notifications = $_POST['notification'] ? $_POST['notification'] : array();
509 $passed = $_POST['passed'] ? $_POST['passed'] : array();
510 $blocked = $_POST['blocked'] ? $_POST['blocked'] : array();
511 $contact = $_POST['contact'] ? $_POST['contact'] : array();
512
513 // Determine whether the user has the 'edit_permission' permission
514 $hasEditPermissionAccess =
515 (
516 $ilAccess->checkAccess('edit_permission', '', $this->getParentObject()->getRefId()) or
517 $this->getMembersObject()->isAdmin($ilUser->getId())
518 );
519
520 // Get all assignable local roles of the object, and
521 // determine the role id of the course administrator role.
522 $assignableLocalRoles = array();
523 $adminRoleId = $this->getParentObject()->getDefaultAdminRole();
524 foreach ($this->getLocalTypeRole(false) as $title => $role_id) {
525 $assignableLocalRoles[$role_id] = $title;
526 }
527
528 // Validate the user ids and role ids in the post data
529 foreach ($_POST['participants'] as $usr_id) {
530 $memberIsAdmin = $rbacreview->isAssigned($usr_id, $adminRoleId);
531
532 // If the current user doesn't have the 'edit_permission'
533 // permission, make sure he doesn't remove the course
534 // administrator role of members who are course administrator.
535 if (!$hasEditPermissionAccess && $memberIsAdmin &&
536 !in_array($adminRoleId, $_POST['roles'][$usr_id])
537 ) {
538 $_POST['roles'][$usr_id][] = $adminRoleId;
539 }
540
541 // Validate the role ids in the post data
542 foreach ((array) $_POST['roles'][$usr_id] as $role_id) {
543 if (!array_key_exists($role_id, $assignableLocalRoles)) {
544 ilUtil::sendFailure($this->lng->txt('msg_no_perm_perm'), true);
545 $this->ctrl->redirect($this, 'participants');
546 }
547 if (!$hasEditPermissionAccess &&
548 $role_id == $adminRoleId &&
549 !$memberIsAdmin) {
550 ilUtil::sendFailure($this->lng->txt('msg_no_perm_perm'));
551 $this->ctrl->redirect($this, 'participants');
552 }
553 }
554 }
555
556 $has_admin = false;
557 foreach ($this->getMembersObject()->getAdmins() as $admin_id) {
558 if (!isset($_POST['roles'][$admin_id])) {
559 $has_admin = true;
560 break;
561 }
562 if (in_array($adminRoleId, $_POST['roles'][$admin_id])) {
563 $has_admin = true;
564 break;
565 }
566 }
567
568 if (!$has_admin && is_array($_POST['roles'])) {
569 foreach ($_POST['roles'] as $usrId => $roleIdsToBeAssigned) {
570 if (in_array($adminRoleId, $roleIdsToBeAssigned)) {
571 $has_admin = true;
572 break;
573 }
574 }
575 }
576
577 if (!$has_admin) {
578 ilUtil::sendFailure($this->lng->txt($this->getParentObject()->getType() . '_min_one_admin'), true);
579 $this->ctrl->redirect($this, 'participants');
580 }
581
582 foreach ($_POST['participants'] as $usr_id) {
583 $this->getMembersObject()->updateRoleAssignments($usr_id, (array) $_POST['roles'][$usr_id]);
584
585 // Disable notification for all of them
586 $this->getMembersObject()->updateNotification($usr_id, 0);
587 if (($this->getMembersObject()->isTutor($usr_id) or $this->getMembersObject()->isAdmin($usr_id)) and in_array($usr_id, $notifications)) {
588 $this->getMembersObject()->updateNotification($usr_id, 1);
589 }
590
591 $this->getMembersObject()->updateBlocked($usr_id, 0);
592 if ((!$this->getMembersObject()->isAdmin($usr_id) and !$this->getMembersObject()->isTutor($usr_id)) and in_array($usr_id, $blocked)) {
593 $this->getMembersObject()->updateBlocked($usr_id, 1);
594 }
595
596 if ($this instanceof ilCourseMembershipGUI) {
597 $this->getMembersObject()->updatePassed($usr_id, in_array($usr_id, $passed), true);
598 $this->getMembersObject()->sendNotification(
599 $this->getMembersObject()->NOTIFY_STATUS_CHANGED,
600 $usr_id
601 );
602 }
603
604 if (
605 ($this->getMembersObject()->isAdmin($usr_id) ||
606 $this->getMembersObject()->isTutor($usr_id)) &&
607 in_array($usr_id, $contact)
608 ) {
609 $this->getMembersObject()->updateContact($usr_id, true);
610 } else {
611 $this->getMembersObject()->updateContact($usr_id, false);
612 }
613
614 $this->updateLPFromStatus($usr_id, in_array($usr_id, $passed));
615 }
616 ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"), true);
617 $this->ctrl->redirect($this, "participants");
618 }
619
623 protected function confirmDeleteParticipants()
624 {
625 global $DIC;
626
627 $ilAccess = $DIC['ilAccess'];
628 $ilUser = $DIC['ilUser'];
629
630 $participants = (array) $_POST['participants'];
631
632 if (!count($participants)) {
633 ilUtil::sendFailure($this->lng->txt('no_checkbox'), true);
634 $this->ctrl->redirect($this, 'participants');
635 }
636
637 // Check last admin
638 if (!$this->getMembersObject()->checkLastAdmin($participants)) {
639 ilUtil::sendFailure($this->lng->txt($this->getParentObject()->getType() . '_at_least_one_admin'), true);
640 $this->ctrl->redirect($this, 'participants');
641 }
642
643 // if only position access is granted, show additional info
644 if (!$this->checkPermissionBool('manage_members')) {
645 $this->lng->loadLanguageModule('rbac');
646 ilUtil::sendInfo($this->lng->txt('rbac_info_only_position_access'));
647 }
648
649
650 // Access check for admin deletion
651 if (
652 !$ilAccess->checkAccess(
653 'edit_permission',
654 '',
655 $this->getParentObject()->getRefId()
656 ) &&
657 !$this->getMembersObject()->isAdmin($GLOBALS['DIC']['ilUser']->getId())
658 ) {
659 foreach ($participants as $usr_id) {
660 if ($this->getMembersObject()->isAdmin($usr_id)) {
661 ilUtil::sendFailure($this->lng->txt("msg_no_perm_perm"), true);
662 $this->ctrl->redirect($this, 'participants');
663 }
664 }
665 }
666
668 $this->repository_object->getRefId(),
669 $participants
670 )) {
671 return $this->showDeleteParticipantsConfirmationWithLinkedCourses($participants);
672 }
673
674 include_once('./Services/Utilities/classes/class.ilConfirmationGUI.php');
675 $confirm = new ilConfirmationGUI();
676 $confirm->setFormAction($this->ctrl->getFormAction($this, 'confirmDeleteParticipants'));
677 $confirm->setHeaderText($this->lng->txt($this->getParentObject()->getType() . '_header_delete_members'));
678 $confirm->setConfirm($this->lng->txt('confirm'), 'deleteParticipants');
679 $confirm->setCancel($this->lng->txt('cancel'), 'participants');
680
681 foreach ($participants as $usr_id) {
682 $name = ilObjUser::_lookupName($usr_id);
683
684 $confirm->addItem(
685 'participants[]',
686 $name['user_id'],
687 $name['lastname'] . ', ' . $name['firstname'] . ' [' . $name['login'] . ']',
688 ilUtil::getImagePath('icon_usr.svg')
689 );
690 }
691
692 $this->tpl->setContent($confirm->getHTML());
693 }
694
695 protected function deleteParticipants()
696 {
697 global $DIC;
698
699 $rbacreview = $DIC['rbacreview'];
700 $rbacsystem = $DIC['rbacsystem'];
701 $ilAccess = $DIC['ilAccess'];
702 $ilUser = $DIC['ilUser'];
703
704 $participants = (array) $_POST['participants'];
705
706 if (!is_array($participants) or !count($participants)) {
707 ilUtil::sendFailure($this->lng->txt("no_checkbox"), true);
708 $this->ctrl->redirect($this, 'participants');
709 }
710
711 // If the user doesn't have the edit_permission and is not administrator, he may not remove
712 // members who have the course administrator role
713 if (
714 !$ilAccess->checkAccess('edit_permission', '', $this->getParentObject()->getRefId()) &&
715 !$this->getMembersObject()->isAdmin($GLOBALS['DIC']['ilUser']->getId())
716 ) {
717 foreach ($participants as $part) {
718 if ($this->getMembersObject()->isAdmin($part)) {
719 ilUtil::sendFailure($this->lng->txt('msg_no_perm_perm'), true);
720 $this->ctrl->redirect($this, 'participants');
721 }
722 }
723 }
724
725 if (!$this->getMembersObject()->deleteParticipants($participants)) {
726 ilUtil::sendFailure('Error deleting participants.', true);
727 $this->ctrl->redirect($this, 'participants');
728 } else {
729 foreach ((array) $_POST["participants"] as $usr_id) {
730 $mail_type = 0;
731 // @todo more generic
732 switch ($this->getParentObject()->getType()) {
733 case 'crs':
734 $mail_type = $this->getMembersObject()->NOTIFY_DISMISS_MEMBER;
735 break;
736 case 'grp':
737 include_once './Modules/Group/classes/class.ilGroupMembershipMailNotification.php';
739 break;
740 case 'lso':
742 break;
743 }
744 $this->getMembersObject()->sendNotification($mail_type, $usr_id);
745 }
746 }
747 ilUtil::sendSuccess($this->lng->txt($this->getParentObject()->getType() . "_members_deleted"), true);
748 $this->ctrl->redirect($this, "participants");
749
750 return true;
751 }
752
756 protected function sendMailToSelectedUsers()
757 {
758 $participants = [];
759 if ($_POST['participants']) {
760 $participants = (array) $_POST['participants'];
761 } elseif ($_GET['member_id']) {
762 $participants = array($_GET['member_id']);
763 } elseif ($_POST['subscribers']) {
764 $participants = (array) $_POST['subscribers'];
765 } elseif ($_POST['waiting']) {
766 $participants = (array) $_POST['waiting'];
767 }
768
769 if (!count($participants)) {
770 ilUtil::sendFailure($this->lng->txt("no_checkbox"), true);
771 $this->ctrl->redirect($this, 'participants');
772 }
773
774 foreach ($participants as $usr_id) {
775 $rcps[] = ilObjUser::_lookupLogin($usr_id);
776 }
777
778
779 $context_options = $this->getMailContextOptions();
780
784 $this,
785 'participants',
786 array(),
787 array(
788 'type' => 'new',
789 'sig' => $this->createMailSignature()
790 ),
791 $context_options
792 )
793 );
794 }
795
800 protected function getMailContextOptions()
801 {
802 $context_options = [];
803 return $context_options;
804 }
805
806
810 protected function membersMap()
811 {
812 global $DIC;
813
814 $tpl = $DIC['tpl'];
815 $this->activateSubTab($this->getParentObject()->getType() . "_members_map");
816 include_once("./Services/Maps/classes/class.ilMapUtil.php");
817 if (!ilMapUtil::isActivated() || !$this->getParentObject()->getEnableMap()) {
818 return;
819 }
820
821 $map = ilMapUtil::getMapGUI();
822 $map->setMapId("course_map")
823 ->setWidth("700px")
824 ->setHeight("500px")
825 ->setLatitude($this->getParentObject()->getLatitude())
826 ->setLongitude($this->getParentObject()->getLongitude())
827 ->setZoom($this->getParentObject()->getLocationZoom())
828 ->setEnableTypeControl(true)
829 ->setEnableNavigationControl(true)
830 ->setEnableCentralMarker(true);
831
832 include_once './Services/Membership/classes/class.ilParticipants.php';
833 $members = ilParticipants::getInstanceByObjId($this->getParentObject()->getId())->getParticipants();
834 foreach ((array) $members as $user_id) {
835 $map->addUserMarker($user_id);
836 }
837
838 $tpl->setContent($map->getHTML());
839 $tpl->setLeftContent($map->getUserListHTML());
840 }
841
846 protected function mailMembersBtn()
847 {
848 global $DIC;
849
850 $ilToolbar = $DIC['ilToolbar'];
851
852 $this->showMailToMemberToolbarButton($GLOBALS['DIC']['ilToolbar'], 'mailMembersBtn');
853 }
854
855
856
857
861 protected function showParticipantsToolbar()
862 {
863 global $DIC;
864
865 $ilToolbar = $DIC['ilToolbar'];
866
867 if ($this->canAddOrSearchUsers()) {
868 include_once './Services/Search/classes/class.ilRepositorySearchGUI.php';
870 $this,
871 $ilToolbar,
872 array(
873 'auto_complete_name' => $this->lng->txt('user'),
874 'user_type' => $this->getParentGUI()->getLocalRoles(),
875 'user_type_default' => $this->getDefaultRole(),
876 'submit_name' => $this->lng->txt('add')
877 )
878 );
879
880 // spacer
881 $ilToolbar->addSeparator();
882
883 // search button
884 $ilToolbar->addButton(
885 $this->lng->txt($this->getParentObject()->getType() . "_search_users"),
886 $this->ctrl->getLinkTargetByClass(
887 'ilRepositorySearchGUI',
888 'start'
889 )
890 );
891
892 // separator
893 $ilToolbar->addSeparator();
894 }
895
896 // print button
897 $ilToolbar->addButton(
898 $this->lng->txt($this->getParentObject()->getType() . "_print_list"),
899 $this->ctrl->getLinkTarget($this, 'printMembers')
900 );
901
902 $this->showMailToMemberToolbarButton($ilToolbar, 'participants', false);
903 }
904
911 protected function showMemberExportToolbarButton(ilToolbarGUI $toolbar, $a_back_cmd = null, $a_separator = false)
912 {
913 if (
914 $this->getParentObject()->getType() == 'crs' &&
915 $this->getParentObject()->getShowMembersExport()) {
916 if ($a_separator) {
917 $toolbar->addSeparator();
918 }
919
920 if ($a_back_cmd) {
921 $this->ctrl->setParameter($this, "back_cmd", $a_back_cmd);
922 }
923 $toolbar->addButton(
924 $this->lng->txt($this->getParentObject()->getType() . '_print_list'),
925 $this->ctrl->getLinkTarget($this, 'printForMembersOutput')
926 );
927 }
928 }
929
930
931
932
933
937 protected function showMailToMemberToolbarButton(ilToolbarGUI $toolbar, $a_back_cmd = null, $a_separator = false)
938 {
939 global $DIC;
940
941 $ilUser = $DIC['ilUser'];
942 $rbacsystem = $DIC['rbacsystem'];
943 $ilAccess = $DIC['ilAccess'];
944 include_once 'Services/Mail/classes/class.ilMail.php';
945 $mail = new ilMail($ilUser->getId());
946
947 if (
948 ($this->getParentObject()->getMailToMembersType() == 1) ||
949 (
950 $ilAccess->checkAccess('manage_members', "", $this->getParentObject()->getRefId()) &&
951 $rbacsystem->checkAccess('internal_mail', $mail->getMailObjectReferenceId())
952 )
953 ) {
954 if ($a_separator) {
955 $toolbar->addSeparator();
956 }
957
958 if ($a_back_cmd) {
959 $this->ctrl->setParameter($this, "back_cmd", $a_back_cmd);
960 }
961
962 $toolbar->addButton(
963 $this->lng->txt("mail_members"),
964 $this->ctrl->getLinkTargetByClass('ilMailMemberSearchGUI', '')
965 );
966 }
967 }
968
973 public function createMailSignature()
974 {
975 return $this->getParentGUI()->createMailSignature();
976 }
977
982 protected function getDefaultCommand()
983 {
984 $has_manage_members_permission = $this->checkRbacOrPositionAccessBool(
985 'manage_members',
986 'manage_members',
987 $this->getParentObject()->getRefId()
988 );
989 if ($has_manage_members_permission) {
990 return 'participants';
991 }
992
993 if ($this->getParentObject()->getShowMembers()) {
994 return 'jump2UsersGallery';
995 }
996 return 'mailMembersBtn';
997 }
998
1004 public function addMemberTab(ilTabsGUI $tabs, $a_is_participant = false)
1005 {
1006 global $DIC;
1007
1008 $ilAccess = $DIC->access();
1009
1010 // no read no tab
1011 if (!$ilAccess->checkAccess('read', '', $this->getParentObject()->getRefId())) {
1012 return false;
1013 }
1014
1015
1016 include_once './Services/Mail/classes/class.ilMail.php';
1017 $mail = new ilMail($GLOBALS['DIC']['ilUser']->getId());
1018
1019 $member_tab_name = $this->getMemberTabName();
1020
1021 $has_manage_members_permission = $this->checkRbacOrPositionAccessBool(
1022 'manage_members',
1023 'manage_members',
1024 $this->getParentObject()->getRefId()
1025 );
1026
1027 if ($has_manage_members_permission) {
1028 $tabs->addTab(
1029 'members',
1030 $member_tab_name,
1031 $this->ctrl->getLinkTarget($this, '')
1032 );
1033 } elseif (
1034 (bool) $this->getParentObject()->getShowMembers() && $a_is_participant
1035 ) {
1036 $tabs->addTab(
1037 'members',
1038 $member_tab_name,
1039 $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilusersgallerygui'), 'view')
1040 );
1041 } elseif (
1042 $this->getParentObject()->getMailToMembersType() == 1 &&
1043 $GLOBALS['DIC']['rbacsystem']->checkAccess('internal_mail', $mail->getMailObjectReferenceId()) &&
1044 $a_is_participant
1045 ) {
1046 $tabs->addTab(
1047 'members',
1048 $member_tab_name,
1049 $this->ctrl->getLinkTarget($this, "mailMembersBtn")
1050 );
1051 }
1052 }
1053
1058 protected function getMemberTabName()
1059 {
1060 return $this->lng->txt('members');
1061 }
1062
1066 protected function setSubTabs(ilTabsGUI $tabs)
1067 {
1068 global $DIC;
1069
1070 $ilAccess = $DIC['ilAccess'];
1071
1072 if ($this->checkRbacOrPositionAccessBool('manage_members', 'manage_members', $this->getParentObject()->getRefId())) {
1073 $tabs->addSubTabTarget(
1074 $this->getParentObject()->getType() . "_member_administration",
1075 $this->ctrl->getLinkTarget($this, 'participants'),
1076 "members",
1077 get_class($this)
1078 );
1079
1080 // show group overview
1081 if ($this instanceof ilCourseMembershipGUI) {
1082 $tabs->addSubTabTarget(
1083 "crs_members_groups",
1084 $this->ctrl->getLinkTargetByClass("ilCourseParticipantsGroupsGUI", "show"),
1085 "",
1086 "ilCourseParticipantsGroupsGUI"
1087 );
1088 }
1089
1090 $tree = $DIC->repositoryTree();
1091 $children = (array) $tree->getSubTree($tree->getNodeData($this->getParentObject()->getRefId()), false, 'sess');
1092 if (count($children)) {
1093 $tabs->addSubTabTarget(
1094 'events',
1095 $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilsessionoverviewgui'), 'listSessions'),
1096 '',
1097 'ilsessionoverviewgui'
1098 );
1099 }
1100
1101 $tabs->addSubTabTarget(
1102 $this->getParentObject()->getType() . '_members_gallery',
1103 $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilUsersGalleryGUI')),
1104 'view',
1105 'ilUsersGalleryGUI'
1106 );
1107 } elseif ($this->getParentObject()->getShowMembers()) {
1108 // gallery
1109 $tabs->addSubTabTarget(
1110 $this->getParentObject()->getType() . '_members_gallery',
1111 $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilUsersGalleryGUI')),
1112 'view',
1113 'ilUsersGalleryGUI'
1114 );
1115 }
1116
1117 include_once './Services/Maps/classes/class.ilMapUtil.php';
1118 if (ilMapUtil::isActivated() && $this->getParentObject()->getEnableMap()) {
1119 $tabs->addSubTabTarget(
1120 $this->getParentObject()->getType() . '_members_map',
1121 $this->ctrl->getLinkTarget($this, 'membersMap'),
1122 "membersMap",
1123 get_class($this)
1124 );
1125 }
1126
1127 include_once 'Services/PrivacySecurity/classes/class.ilPrivacySettings.php';
1128 if (ilPrivacySettings::_getInstance()->checkExportAccess($this->getParentObject()->getRefId())) {
1129 $tabs->addSubTabTarget(
1130 'export_members',
1131 $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilmemberexportgui'), 'show'),
1132 '',
1133 'ilmemberexportgui'
1134 );
1135 }
1136 }
1137
1143 public function readMemberData(array $usr_ids, array $columns)
1144 {
1145 return $this->getParentGUI()->readMemberData($usr_ids, $columns);
1146 }
1147
1152 public function getLocalRoles()
1153 {
1154 return $this->getParentGUI()->getLocalRoles();
1155 }
1156
1160 protected function parseSubscriberTable()
1161 {
1162 $subscribers = $this->getMembersObject()->getSubscribers();
1163 $filtered_subscribers = $this->filterUserIdsByRbacOrPositionOfCurrentUser($subscribers);
1164 if (!count($filtered_subscribers)) {
1165 return null;
1166 }
1167 $subscriber = $this->initSubscriberTable();
1168 $subscriber->readSubscriberData(
1169 $filtered_subscribers
1170 );
1171 return $subscriber;
1172 }
1173
1177 protected function initSubscriberTable()
1178 {
1179 $subscriber = new \ilSubscriberTableGUI($this, $this->getParentObject(), true, true);
1180 $subscriber->setTitle($this->lng->txt('group_new_registrations'));
1181 return $subscriber;
1182 }
1183
1189 {
1190 if (!is_array($_POST["subscribers"])) {
1191 ilUtil::sendFailure($this->lng->txt("crs_no_subscribers_selected"), true);
1192 $this->ctrl->redirect($this, 'participants');
1193 }
1194
1195 include_once("Services/Utilities/classes/class.ilConfirmationGUI.php");
1196 $c_gui = new ilConfirmationGUI();
1197
1198 // set confirm/cancel commands
1199 $c_gui->setFormAction($this->ctrl->getFormAction($this, "assignSubscribers"));
1200 $c_gui->setHeaderText($this->lng->txt("info_assign_sure"));
1201 $c_gui->setCancel($this->lng->txt("cancel"), "participants");
1202 $c_gui->setConfirm($this->lng->txt("confirm"), "assignSubscribers");
1203
1204 foreach ($_POST["subscribers"] as $subscribers) {
1205 $name = ilObjUser::_lookupName($subscribers);
1206
1207 $c_gui->addItem(
1208 'subscribers[]',
1209 $name['user_id'],
1210 $name['lastname'] . ', ' . $name['firstname'] . ' [' . $name['login'] . ']',
1211 ilUtil::getImagePath('icon_usr.svg')
1212 );
1213 }
1214
1215 $this->tpl->setContent($c_gui->getHTML());
1216 return true;
1217 }
1218
1224 {
1225 if (!is_array($_POST["subscribers"])) {
1226 ilUtil::sendFailure($this->lng->txt("crs_no_subscribers_selected"), true);
1227 $this->ctrl->redirect($this, 'participants');
1228 }
1229
1230 $this->lng->loadLanguageModule('mmbr');
1231
1232 include_once("Services/Utilities/classes/class.ilConfirmationGUI.php");
1233 $c_gui = new ilConfirmationGUI();
1234
1235 // set confirm/cancel commands
1236 $c_gui->setFormAction($this->ctrl->getFormAction($this, "refuseSubscribers"));
1237 $c_gui->setHeaderText($this->lng->txt("info_refuse_sure"));
1238 $c_gui->setCancel($this->lng->txt("cancel"), "participants");
1239 $c_gui->setConfirm($this->lng->txt("confirm"), "refuseSubscribers");
1240
1241 foreach ($_POST["subscribers"] as $subscribers) {
1242 $name = ilObjUser::_lookupName($subscribers);
1243
1244 $c_gui->addItem(
1245 'subscribers[]',
1246 $name['user_id'],
1247 $name['lastname'] . ', ' . $name['firstname'] . ' [' . $name['login'] . ']',
1248 ilUtil::getImagePath('icon_usr.svg')
1249 );
1250 }
1251
1252 $this->tpl->setContent($c_gui->getHTML());
1253 return true;
1254 }
1255
1261 protected function refuseSubscribers()
1262 {
1263 global $DIC;
1264
1265 $rbacsystem = $DIC['rbacsystem'];
1266
1267 if (!$_POST['subscribers']) {
1268 ilUtil::sendFailure($this->lng->txt("crs_no_subscribers_selected"), true);
1269 $this->ctrl->redirect($this, 'participants');
1270 }
1271
1272 if (!$this->getMembersObject()->deleteSubscribers($_POST["subscribers"])) {
1273 ilUtil::sendFailure($GLOBALS['DIC']['ilErr']->getMessage(), true);
1274 $this->ctrl->redirect($this, 'participants');
1275 } else {
1276 foreach ($_POST['subscribers'] as $usr_id) {
1277 if ($this instanceof ilCourseMembershipGUI) {
1278 $this->getMembersObject()->sendNotification($this->getMembersObject()->NOTIFY_DISMISS_SUBSCRIBER, $usr_id);
1279 }
1280 if ($this instanceof ilGroupMembershipGUI) {
1281 include_once './Modules/Group/classes/class.ilGroupMembershipMailNotification.php';
1282 $this->getMembersObject()->sendNotification(
1284 $usr_id
1285 );
1286 }
1287 if ($this instanceof ilSessionMembershipGUI) {
1289 $noti->setRefId($this->getParentObject()->getRefId());
1290 $noti->setRecipients(array($usr_id));
1292 $noti->send();
1293 }
1294 if ($this instanceof ilLearningSequenceMembershipGUI) {
1295 $this->getMembersObject()->sendNotification(
1297 $usr_id
1298 );
1299 }
1300 }
1301 }
1302
1303 ilUtil::sendSuccess($this->lng->txt("crs_subscribers_deleted"), true);
1304 $this->ctrl->redirect($this, 'participants');
1305 }
1306
1313 public function assignSubscribers()
1314 {
1315 global $DIC;
1316
1317 $ilErr = $DIC['ilErr'];
1318
1319 if (!is_array($_POST["subscribers"])) {
1320 ilUtil::sendFailure($this->lng->txt("crs_no_subscribers_selected"), true);
1321 $this->ctrl->redirect($this, 'participants');
1322 }
1323
1324 if (!$this->getMembersObject()->assignSubscribers($_POST["subscribers"])) {
1325 ilUtil::sendFailure($ilErr->getMessage(), true);
1326 $this->ctrl->redirect($this, 'participants');
1327 } else {
1328 foreach ($_POST["subscribers"] as $usr_id) {
1329 if ($this instanceof ilCourseMembershipGUI) {
1330 $this->getMembersObject()->sendNotification($this->getMembersObject()->NOTIFY_ACCEPT_SUBSCRIBER, $usr_id);
1331 $this->getParentObject()->checkLPStatusSync($usr_id);
1332 }
1333 if ($this instanceof ilGroupMembershipGUI) {
1334 include_once './Modules/Group/classes/class.ilGroupMembershipMailNotification.php';
1335 $this->getMembersObject()->sendNotification(
1337 $usr_id
1338 );
1339 }
1340 if ($this instanceof ilSessionMembershipGUI) {
1341 // todo refactor to participants
1342 include_once './Modules/Session/classes/class.ilSessionMembershipMailNotification.php';
1344 $noti->setRefId($this->getParentObject()->getRefId());
1345 $noti->setRecipients(array($usr_id));
1347 $noti->send();
1348 }
1349 }
1350 }
1351 ilUtil::sendSuccess($this->lng->txt("crs_subscribers_assigned"), true);
1352 $this->ctrl->redirect($this, 'participants');
1353 }
1354
1359 protected function parseWaitingListTable()
1360 {
1361 $wait = $this->initWaitingList();
1362
1363 $wait_users = $this->filterUserIdsByRbacOrPositionOfCurrentUser($wait->getUserIds());
1364 if (!count($wait_users)) {
1365 return null;
1366 }
1367
1368 include_once './Services/Membership/classes/class.ilWaitingListTableGUI.php';
1369 $waiting_table = new ilWaitingListTableGUI($this, $this->getParentObject(), $wait);
1370 $waiting_table->setUserIds(
1371 $wait_users
1372 );
1373 $waiting_table->readUserData();
1374 $waiting_table->setTitle($this->lng->txt('crs_waiting_list'));
1375
1376 return $waiting_table;
1377 }
1378
1384 {
1385 if (!is_array($_POST["waiting"])) {
1386 ilUtil::sendFailure($this->lng->txt("crs_no_users_selected"), true);
1387 $this->ctrl->redirect($this, 'participants');
1388 }
1389
1390
1391 include_once("Services/Utilities/classes/class.ilConfirmationGUI.php");
1392 $c_gui = new ilConfirmationGUI();
1393
1394 // set confirm/cancel commands
1395 $c_gui->setFormAction($this->ctrl->getFormAction($this, "assignFromWaitingList"));
1396 $c_gui->setHeaderText($this->lng->txt("info_assign_sure"));
1397 $c_gui->setCancel($this->lng->txt("cancel"), "participants");
1398 $c_gui->setConfirm($this->lng->txt("confirm"), "assignFromWaitingList");
1399
1400 foreach ($_POST["waiting"] as $waiting) {
1401 $name = ilObjUser::_lookupName($waiting);
1402
1403 $c_gui->addItem(
1404 'waiting[]',
1405 $name['user_id'],
1406 $name['lastname'] . ', ' . $name['firstname'] . ' [' . $name['login'] . ']',
1407 ilUtil::getImagePath('icon_usr.svg')
1408 );
1409 }
1410
1411 $this->tpl->setContent($c_gui->getHTML());
1412 return true;
1413 }
1414
1420 public function assignFromWaitingList()
1421 {
1422 if (!array_key_exists('waiting', $_POST) || !count($_POST["waiting"])) {
1423 ilUtil::sendFailure($this->lng->txt("crs_no_users_selected"), true);
1424 $this->ctrl->redirect($this, 'participants');
1425 }
1426
1427 $waiting_list = $this->initWaitingList();
1428
1429 $added_users = 0;
1430 foreach ($_POST["waiting"] as $user_id) {
1431 if (!$tmp_obj = ilObjectFactory::getInstanceByObjId($user_id, false)) {
1432 continue;
1433 }
1434 if ($this->getMembersObject()->isAssigned($user_id)) {
1435 continue;
1436 }
1437
1438 if ($this instanceof ilCourseMembershipGUI) {
1439 $this->getMembersObject()->add($user_id, IL_CRS_MEMBER);
1440 $this->getMembersObject()->sendNotification($this->getMembersObject()->NOTIFY_ACCEPT_USER, $user_id, true);
1441 $this->getParentObject()->checkLPStatusSync($user_id);
1442 }
1443 if ($this instanceof ilGroupMembershipGUI) {
1444 include_once './Modules/Group/classes/class.ilGroupMembershipMailNotification.php';
1445 $this->getMembersObject()->add($user_id, IL_GRP_MEMBER);
1446 $this->getMembersObject()->sendNotification(
1448 $user_id,
1449 true
1450 );
1451 }
1452 if ($this instanceof ilSessionMembershipGUI) {
1453 $this->getMembersObject()->register($user_id);
1455 $noti->setRefId($this->getParentObject()->getRefId());
1456 $noti->setRecipients(array($user_id));
1458 $noti->send();
1459 }
1460
1461 $waiting_list->removeFromList($user_id);
1462 ++$added_users;
1463 }
1464
1465 if ($added_users) {
1466 ilUtil::sendSuccess($this->lng->txt("crs_users_added"), true);
1467 $this->ctrl->redirect($this, 'participants');
1468 } else {
1469 ilUtil::sendFailure($this->lng->txt("crs_users_already_assigned"), true);
1470 $this->ctrl->redirect($this, 'participants');
1471 }
1472 }
1473
1478 public function confirmRefuseFromList()
1479 {
1480 if (!is_array($_POST["waiting"])) {
1481 ilUtil::sendFailure($this->lng->txt("no_checkbox"), true);
1482 $this->ctrl->redirect($this, 'participants');
1483 }
1484
1485 $this->lng->loadLanguageModule('mmbr');
1486
1487 include_once("Services/Utilities/classes/class.ilConfirmationGUI.php");
1488 $c_gui = new ilConfirmationGUI();
1489
1490 // set confirm/cancel commands
1491 $c_gui->setFormAction($this->ctrl->getFormAction($this, "refuseFromList"));
1492 $c_gui->setHeaderText($this->lng->txt("info_refuse_sure"));
1493 $c_gui->setCancel($this->lng->txt("cancel"), "participants");
1494 $c_gui->setConfirm($this->lng->txt("confirm"), "refuseFromList");
1495
1496 foreach ($_POST["waiting"] as $waiting) {
1497 $name = ilObjUser::_lookupName($waiting);
1498
1499 $c_gui->addItem(
1500 'waiting[]',
1501 $name['user_id'],
1502 $name['lastname'] . ', ' . $name['firstname'] . ' [' . $name['login'] . ']',
1503 ilUtil::getImagePath('icon_usr.svg')
1504 );
1505 }
1506
1507 $this->tpl->setContent($c_gui->getHTML());
1508 return true;
1509 }
1510
1517 protected function refuseFromList()
1518 {
1519 if (!array_key_exists('waiting', $_POST) || !count($_POST['waiting'])) {
1520 ilUtil::sendFailure($this->lng->txt('no_checkbox'), true);
1521 $this->ctrl->redirect($this, 'participants');
1522 }
1523
1524 $waiting_list = $this->initWaitingList();
1525
1526 foreach ($_POST["waiting"] as $user_id) {
1527 $waiting_list->removeFromList($user_id);
1528
1529 if ($this instanceof ilCourseMembershipGUI) {
1530 $this->getMembersObject()->sendNotification($this->getMembersObject()->NOTIFY_DISMISS_SUBSCRIBER, $user_id, true);
1531 }
1532 if ($this instanceof ilGroupMembershipGUI) {
1533 include_once './Modules/Group/classes/class.ilGroupMembershipMailNotification.php';
1534 $this->getMembersObject()->sendNotification(
1536 $user_id,
1537 true
1538 );
1539 }
1540 if ($this instanceof ilSessionMembershipGUI) {
1541 include_once './Modules/Session/classes/class.ilSessionMembershipMailNotification.php';
1543 $noti->setRefId($this->getParentObject()->getRefId());
1544 $noti->setRecipients(array($user_id));
1546 $noti->send();
1547 }
1548 }
1549 ilUtil::sendSuccess($this->lng->txt('crs_users_removed_from_list'), true);
1550 $this->ctrl->redirect($this, 'participants');
1551 }
1552
1556 protected function addToClipboard()
1557 {
1558 // begin-patch clipboard
1559 $users = [];
1560 if (isset($_POST['participants'])) {
1561 $users = (array) $_POST['participants'];
1562 } elseif (isset($_POST['subscribers'])) {
1563 $users = (array) $_POST['subscribers'];
1564 } elseif (isset($_POST['waiting'])) {
1565 $users = (array) $_POST['waiting'];
1566 }
1567 // end-patch clipboard
1568 if (!count($users)) {
1569 ilUtil::sendFailure($this->lng->txt('select_one'), true);
1570 $this->ctrl->redirect($this, 'participants');
1571 }
1572 include_once './Services/User/classes/class.ilUserClipboard.php';
1573 $clip = ilUserClipboard::getInstance($GLOBALS['DIC']['ilUser']->getId());
1574 $clip->add($users);
1575 $clip->save();
1576
1577 $this->lng->loadLanguageModule('user');
1578 ilUtil::sendSuccess($this->lng->txt('clipboard_user_added'), true);
1579 $this->ctrl->redirect($this, 'participants');
1580 }
1581
1585 protected function getDefaultRole()
1586 {
1587 return null;
1588 }
1589
1593 protected function activateSubTab($a_sub_tab)
1594 {
1598 $tabs = $GLOBALS['DIC']['ilTabs'];
1599 $tabs->activateSubTab($a_sub_tab);
1600 }
1601
1602
1603
1604
1609 protected function printMembers()
1610 {
1611 global $DIC;
1612
1613 $ilTabs = $DIC['ilTabs'];
1614
1615 $this->checkPermission('read');
1616
1617 $ilTabs->clearTargets();
1618
1619 $ilTabs->setBackTarget(
1620 $this->lng->txt('back'),
1621 $this->ctrl->getLinkTarget($this, 'participants')
1622 );
1623
1624 $list = $this->initAttendanceList();
1625 $form = $list->initForm('printMembersOutput');
1626 $this->tpl->setContent($form->getHTML());
1627 }
1628
1632 protected function printMembersOutput()
1633 {
1634 global $DIC;
1635
1636 $tabs = $DIC->tabs();
1637 $tabs->clearTargets();
1638 $tabs->setBackTarget(
1639 $this->lng->txt('back'),
1640 $this->ctrl->getLinkTarget($this, 'participants')
1641 );
1642
1643 $list = $this->initAttendanceList();
1644 $list->initFromForm();
1645 $list->setCallback(array($this, 'getAttendanceListUserData'));
1646 $this->member_data = $this->getPrintMemberData(
1648 $this->getMembersObject()->getParticipants()
1649 )
1650 );
1651
1652 $list->getNonMemberUserData($this->member_data);
1653 $list->getFullscreenHTML();
1654 }
1655
1659 protected function printForMembersOutput()
1660 {
1661 global $DIC;
1662
1663 $tabs = $DIC->tabs();
1664 $tabs->clearTargets();
1665 $tabs->setBackTarget(
1666 $this->lng->txt('back'),
1667 $this->ctrl->getLinkTarget($this, 'jump2UsersGallery')
1668 );
1669
1670 $list = $this->initAttendanceList();
1671 $list->setTitle($this->lng->txt('obj_' . $this->getParentObject()->getType()) . ': ' . $this->getParentObject()->getTitle());
1672 $list->setId(0);
1673 $form = $list->initForm('printForMembersOutput');
1674 $list->initFromForm();
1675 $list->setCallback(array($this, 'getAttendanceListUserData'));
1676 $this->member_data = $this->getPrintMemberData($this->getMembersObject()->getParticipants());
1677 $list->getNonMemberUserData($this->member_data);
1678
1679 $list->getFullscreenHTML();
1680 }
1681
1685 protected function jump2UsersGallery()
1686 {
1687 $this->ctrl->redirectByClass('ilUsersGalleryGUI');
1688 }
1689
1690
1691
1692
1696 protected function initAttendanceList($a_for_members = false)
1697 {
1698 global $DIC;
1699
1703 $waiting_list = $this->initWaitingList();
1704
1705 if ($this instanceof ilSessionMembershipGUI) {
1706 $member_id = $DIC->repositoryTree()->checkForParentType(
1707 $this->getParentObject()->getRefId(),
1708 'grp'
1709 );
1710 if (!$member_id) {
1711 $member_id = $DIC->repositoryTree()->checkForParentType(
1712 $this->getParentObject()->getRefId(),
1713 'crs'
1714 );
1715 }
1716 if (!$member_id) {
1717 $DIC->logger()->sess()->warning('Cannot find parent course or group for ref_id: ' . $this->getParentObject()->getRefId());
1718 $member_id = $this->getParentObject()->getRefId();
1719 }
1720 $part = ilParticipants::getInstance($member_id);
1721
1722 $list = new ilAttendanceList(
1723 $this,
1724 $this->getParentObject(),
1725 $part,
1726 $waiting_list
1727 );
1728 } else {
1729 include_once 'Services/Membership/classes/class.ilAttendanceList.php';
1730 $list = new ilAttendanceList(
1731 $this,
1732 $this->getParentObject(),
1733 $this->getMembersObject(),
1734 $waiting_list
1735 );
1736 }
1737 $list->setId($this->getParentObject()->getType() . '_memlist_' . $this->getParentObject()->getId());
1738
1739 $list->setTitle(
1740 $this->lng->txt($this->getParentObject()->getType() . '_members_print_title'),
1741 $this->lng->txt('obj_' . $this->getParentObject()->getType()) . ': ' . $this->getParentObject()->getTitle()
1742 );
1743
1744 include_once './Services/Tracking/classes/class.ilObjUserTracking.php';
1745 $show_tracking =
1746 (ilObjUserTracking::_enabledLearningProgress() and ilObjUserTracking::_enabledUserRelatedData());
1747 if ($show_tracking) {
1748 include_once('./Services/Object/classes/class.ilObjectLP.php');
1749 $olp = ilObjectLP::getInstance($this->getParentObject()->getId());
1750 $show_tracking = $olp->isActive();
1751 }
1752 if ($show_tracking) {
1753 $list->addPreset('progress', $this->lng->txt('learning_progress'), true);
1754 }
1755
1756 include_once('./Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
1761 if ($privacy->enabledAccessTimesByType($this->getParentObject()->getType())) {
1762 $list->addPreset('access', $this->lng->txt('last_access'), true);
1763 }
1764
1765 switch ($this->getParentObject()->getType()) {
1766 case 'crs':
1767 $list->addPreset('status', $this->lng->txt('crs_status'), true);
1768 $list->addPreset('passed', $this->lng->txt('crs_passed'), true);
1769 break;
1770
1771 case 'sess':
1772 $list->addPreset('mark', $this->lng->txt('trac_mark'), true);
1773 $list->addPreset('comment', $this->lng->txt('trac_comment'), true);
1774 if ($this->getParentObject()->enabledRegistration()) {
1775 $list->addPreset('registered', $this->lng->txt('event_tbl_registered'), true);
1776 }
1777 $list->addPreset('participated', $this->lng->txt('event_tbl_participated'), true);
1778 $list->addBlank($this->lng->txt('sess_signature'));
1779
1780 $list->addUserFilter('registered', $this->lng->txt('event_list_registered_only'));
1781 break;
1782
1783 case 'grp':
1784 default:
1785 break;
1786 }
1787
1788 return $list;
1789 }
1790}
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
if(! $in) $columns
Definition: Utf8Test.php:45
$_GET["client_id"]
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
const IL_CRS_MEMBER
const IL_GRP_MEMBER
Base class for attendance lists.
Confirmation screen class.
Class ilCourseParticipantsGroupsGUI.
static isReferenceMemberUpdateConfirmationRequired(int $course_ref_id, array $participants)
GUI class for membership features.
GUI class for learning sequence membership features.
static getRedirectTarget($gui, $cmd, array $gui_params=array(), array $mail_params=array(), array $context_params=array())
static setRecipients(array $recipients)
Class ilMailMemberSearchGUI.
static isActivated()
Checks whether Map feature is activated.
static getMapGUI()
Get an instance of the GUI class.
Base class for member tab content.
getParentGUI()
Get parent gui.
assignFromWaitingList()
Assign from waiting list @global type $rbacsystem.
printMembersOutput()
print members output
participantsApplyFilter()
Apply filter for participant table.
checkPermissionBool($a_permission, $a_cmd='', $a_type='', $a_ref_id=0)
Check permission.
checkPermission($a_permission, $a_cmd="")
Check permission If not granted redirect to parent gui.
parseWaitingListTable()
Parse table of subscription request.
getDefaultCommand()
Get default command.
assignSubscribers()
Do assignment of subscription request @global type $rbacsystem @global type $ilErr.
filterUserIdsByRbacOrPositionOfCurrentUser($a_user_ids)
Filter user ids by access.
printForMembersOutput()
print members output
participantsResetFilter()
reset participants filter
sendMailToSelectedUsers()
Send mail to selected users.
confirmAssignFromWaitingList()
Assign from waiting list (confirmatoin)
updateParticipants()
update members
showParticipantsToolbar()
Show participants toolbar.
getMemberTabName()
Get member tab name.
participants()
Show participant table, subscriber table, wating list table;.
parseSubscriberTable()
Parse table of subscription request.
showMemberExportToolbarButton(ilToolbarGUI $toolbar, $a_back_cmd=null, $a_separator=false)
Show member export button.
getMailContextOptions()
Get mail context options.
editMember()
Edit one participant.
refuseSubscribers()
Refuse subscribers @global type $rbacsystem.
__construct(ilObjectGUI $repository_gui, ilObject $repository_obj)
Constructor.
editParticipants($post_participants=array())
Edit participants.
getLocalRoles()
Get parent roles.
confirmRefuseSubscribers()
Refuse subscriber confirmation.
addMemberTab(ilTabsGUI $tabs, $a_is_participant=false)
add member tab
checkRbacOrPositionAccessBool($a_rbac_perm, $a_pos_perm, $a_ref_id=0)
Check if rbac or position access is granted.
mailMembersBtn()
Mail to members view @global type $ilToolbar.
confirmDeleteParticipants()
Show confirmation screen for participants deletion.
showMailToMemberToolbarButton(ilToolbarGUI $toolbar, $a_back_cmd=null, $a_separator=false)
Show mail to member toolbar button.
confirmAssignSubscribers()
Show subscription confirmation.
getParentObject()
Get parent object.
getMembersObject()
Get member object.
printMembers()
Print members.
checkRbacOrPermissionAccess($a_rbac_perm, $a_pos_perm)
check rbac or position access
addToClipboard()
Add selected users to user clipboard.
readMemberData(array $usr_ids, array $columns)
Required for member table guis.
setSubTabs(ilTabsGUI $tabs)
Set sub tabs.
refuseFromList()
refuse from waiting list
confirmRefuseFromList()
Refuse from waiting list (confirmation)
canAddOrSearchUsers()
Check if current user is allowed to add / search users.
static _enabledLearningProgress()
check wether learing progress is enabled or not
static _lookupLogin($a_user_id)
lookup login
static _lookupName($a_user_id)
lookup user name
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
Class ilObjectGUI Basic methods of all Output classes.
static getInstance($a_obj_id)
Class ilObject Basic functions for all objects.
static getInstanceByObjId($a_obj_id)
Get instance by obj type.
static _isParticipant($a_ref_id, $a_usr_id)
Static function to check if a user is a participant of the container object.
static getInstance($a_ref_id)
Get instance by ref_id.
static _getInstance()
Get instance of ilPrivacySettings.
static fillAutoCompleteToolbar($parent_object, ilToolbarGUI $toolbar=null, $a_options=array(), $a_sticky=false)
fill toolbar with
GUI class for membership features.
GUI class for course/group subscriptions.
Tabs GUI.
addSubTabTarget( $a_text, $a_link, $a_cmd="", $a_cmdClass="", $a_frame="", $a_activate=false, $a_dir_text=false)
DEPRECATED.
addTab($a_id, $a_text, $a_link, $a_frame="")
Add a Tab.
addButton( $a_txt, $a_cmd, $a_target="", $a_acc_key="", $a_additional_attrs='', $a_id="", $a_class='submit')
Add button to toolbar.
addSeparator()
Add separator.
static getInstance($a_usr_id)
Get singelton instance.
@ilCtrl_Calls ilUsersGalleryGUI: ilPublicUserProfileGUI @ilCtrl_isCalledBy ilUsersGalleryGUI: ilCours...
Class ilUsersGalleryParticipants.
static redirect($a_script)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
GUI class for course/group waiting list.
if(!file_exists(getcwd() . '/ilias.ini.php'))
registration confirmation script for ilias
Definition: confirmReg.php:12
if($format !==null) $name
Definition: metadata.php:230
$ret
Definition: parser.php:6
$ilErr
Definition: raiseError.php:18
$ilUser
Definition: imgupload.php:18
$a_type
Definition: workflow.php:92
$DIC
Definition: xapitoken.php:46