ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
All Data Structures Namespaces Files Functions Variables Modules Pages
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  {
100  return $this->repository_gui;
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 
207  public function filterUserIdsByRbacOrPositionOfCurrentUser($a_user_ids)
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 
322  $provider = new ilUsersGalleryParticipants($this->getParentObject()->getMembersObject());
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();
403  $this->showParticipantsToolbar();
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 
1188  public function confirmAssignSubscribers()
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 
1223  public function confirmRefuseSubscribers()
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 =
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');
1760  $privacy = ilPrivacySettings::_getInstance();
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 }
static _lookupLogin($a_user_id)
lookup login
static _lookupName($a_user_id)
lookup user name
static _isParticipant($a_ref_id, $a_usr_id)
Static function to check if a user is a participant of the container object.
readMemberData(array $usr_ids, array $columns)
Required for member table guis.
Class ilCourseParticipantsGroupsGUI.
setSubTabs(ilTabsGUI $tabs)
Set sub tabs.
Base class for member tab content.
confirmDeleteParticipants()
Show confirmation screen for participants deletion.
addSubTabTarget( $a_text, $a_link, $a_cmd="", $a_cmdClass="", $a_frame="", $a_activate=false, $a_dir_text=false)
DEPRECATED.
static getInstance($a_usr_id)
Get singelton instance.
printMembersOutput()
print members output
addToClipboard()
Add selected users to user clipboard.
Tabs GUI.
printMembers()
Print members.
getMembersObject()
Get member object.
$_GET["client_id"]
getMailContextOptions()
Get mail context options.
updateParticipants()
update members
assignFromWaitingList()
Assign from waiting list type $rbacsystem.
checkPermissionBool($a_permission, $a_cmd='', $a_type='', $a_ref_id=0)
Check permission.
participantsResetFilter()
reset participants filter
ilUsersGalleryGUI: ilPublicUserProfileGUI ilUsersGalleryGUI: ilCourseMembershipGUI, ilGroupMembershipGUI
confirmAssignSubscribers()
Show subscription confirmation.
editMember()
Edit one participant.
__construct(ilObjectGUI $repository_gui, ilObject $repository_obj)
Constructor.
Class ilMailMemberSearchGUI.
printForMembersOutput()
print members output
const IL_GRP_MEMBER
checkPermission($a_permission, $a_cmd="")
Check permission If not granted redirect to parent gui.
parseWaitingListTable()
Parse table of subscription request.
static isReferenceMemberUpdateConfirmationRequired(int $course_ref_id, array $participants)
$ilErr
Definition: raiseError.php:18
Base class for attendance lists.
getLocalRoles()
Get parent roles.
const IL_CRS_MEMBER
static getInstance($a_ref_id)
Get instance by ref_id.
refuseSubscribers()
Refuse subscribers type $rbacsystem.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
showMailToMemberToolbarButton(ilToolbarGUI $toolbar, $a_back_cmd=null, $a_separator=false)
Show mail to member toolbar button.
$a_type
Definition: workflow.php:92
if($format !==null) $name
Definition: metadata.php:230
static _enabledUserRelatedData()
check wether user related tracking is enabled or not
static _enabledLearningProgress()
check wether learing progress is enabled or not
static getMapGUI()
Get an instance of the GUI class.
assignSubscribers()
Do assignment of subscription request type $rbacsystem type $ilErr.
GUI class for membership features.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
Class ilObjectGUI Basic methods of all Output classes.
checkRbacOrPermissionAccess($a_rbac_perm, $a_pos_perm)
check rbac or position access
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
GUI class for course/group subscriptions.
$ilUser
Definition: imgupload.php:18
sendMailToSelectedUsers()
Send mail to selected users.
getParentGUI()
Get parent gui.
addSeparator()
Add separator.
confirmAssignFromWaitingList()
Assign from waiting list (confirmatoin)
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
Class ilUsersGalleryParticipants.
showParticipantsToolbar()
Show participants toolbar.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
GUI class for membership features.
showMemberExportToolbarButton(ilToolbarGUI $toolbar, $a_back_cmd=null, $a_separator=false)
Show member export button.
confirmRefuseSubscribers()
Refuse subscriber confirmation.
static isActivated()
Checks whether Map feature is activated.
parseSubscriberTable()
Parse table of subscription request.
mailMembersBtn()
Mail to members view type $ilToolbar.
getDefaultCommand()
Get default command.
static getRedirectTarget($gui, $cmd, array $gui_params=array(), array $mail_params=array(), array $context_params=array())
addButton( $a_txt, $a_cmd, $a_target="", $a_acc_key="", $a_additional_attrs='', $a_id="", $a_class='submit')
Add button to toolbar.
$ret
Definition: parser.php:6
$DIC
Definition: xapitoken.php:46
GUI class for course/group waiting list.
addMemberTab(ilTabsGUI $tabs, $a_is_participant=false)
add member tab
participants()
Show participant table, subscriber table, wating list table;.
addTab($a_id, $a_text, $a_link, $a_frame="")
Add a Tab.
refuseFromList()
refuse from waiting list
static setRecipients(array $recipients)
membersMap()
Members map.
static _getInstance()
Get instance of ilPrivacySettings.
static fillAutoCompleteToolbar($parent_object, ilToolbarGUI $toolbar=null, $a_options=array(), $a_sticky=false)
fill toolbar with
getParentObject()
Get parent object.
editParticipants($post_participants=array())
Edit participants.
confirmRefuseFromList()
Refuse from waiting list (confirmation)
getMemberTabName()
Get member tab name.
filterUserIdsByRbacOrPositionOfCurrentUser($a_user_ids)
Filter user ids by access.
static redirect($a_script)
static getInstance($a_obj_id)
if(! $in) $columns
Definition: Utf8Test.php:45
canAddOrSearchUsers()
Check if current user is allowed to add / search users.
$_POST["username"]
static getInstanceByObjId($a_obj_id)
Get instance by obj type.
checkRbacOrPositionAccessBool($a_rbac_perm, $a_pos_perm, $a_ref_id=0)
Check if rbac or position access is granted.
GUI class for learning sequence membership features.
participantsApplyFilter()
Apply filter for participant table.
Confirmation screen class.