ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilLearningSequenceMembershipGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
33 {
34  public function __construct(
36  protected ilObject $obj,
37  protected ilObjUserTracking $obj_user_tracking,
38  protected ilPrivacySettings $privacy_settings,
39  protected ilRbacReview $rbac_review,
40  protected ilSetting $settings,
41  protected ilToolbarGUI $toolbar,
42  protected ILIAS\HTTP\Wrapper\RequestWrapper $request_wrapper,
43  protected ArrayBasedRequestWrapper $post_wrapper,
44  protected ILIAS\Refinery\Factory $refinery,
45  protected ILIAS\UI\Factory $ui_factory
46  ) {
47  parent::__construct($repository_gui, $obj);
48  }
49 
50  protected function printMembers(): void
51  {
52  $this->checkPermission('read');
53  if ($this->checkRbacOrPositionAccessBool('manage_members', 'manage_members')) {
54  $back_cmd = 'participants';
55  } else {
56  $back_cmd = 'jump2UsersGallery';
57  }
58 
59  global $DIC;
60  $ilTabs = $DIC['ilTabs'];
61  $ilTabs->clearTargets();
62  $ilTabs->setBackTarget(
63  $this->lng->txt('back'),
64  $this->ctrl->getLinkTarget($this, $back_cmd)
65  );
66 
67  $list = $this->initAttendanceList();
68  $form = $list->initForm('printMembersOutput');
69  $this->tpl->setContent($form->getHTML());
70  }
71 
72  protected function getDefaultCommand(): string
73  {
75  return $this->request_wrapper->retrieve("back_cmd", $r->byTrying([$r->kindlyTo()->string(), $r->always("members")]));
76  }
77 
83  public function filterUserIdsByRbacOrPositionOfCurrentUser(array $a_user_ids): array
84  {
85  return $this->access->filterUserIdsByRbacOrPositionOfCurrentUser(
86  'manage_members',
87  'manage_members',
88  $this->getParentObject()->getRefId(),
89  $a_user_ids
90  );
91  }
92 
96  public function assignMembers(array $user_ids, string $type): bool
97  {
98  $object = $this->getParentObject();
99  $members = $this->getParentObject()->getLSParticipants();
100 
101  if (count($user_ids) == 0) {
102  $this->lng->loadLanguageModule('search');
103  $this->tpl->setOnScreenMessage('failure', $this->lng->txt('search_err_user_not_exist'), true);
104  return false;
105  }
106 
107  $assigned = false;
108  foreach ($user_ids as $new_member) {
109  $new_member = (int) $new_member;
110 
111  if ($members->isAssigned($new_member)) {
112  continue;
113  }
114 
115  switch ($type) {
116  case $object->getDefaultAdminRole():
117  $members->add($new_member, ilParticipants::IL_LSO_ADMIN);
118  $members->sendNotification(
120  $new_member
121  );
122  $assigned = true;
123  break;
124  case $object->getDefaultMemberRole():
125  $members->add($new_member, ilParticipants::IL_LSO_MEMBER);
126  $members->sendNotification(
128  $new_member
129  );
130  $assigned = true;
131  break;
132  default:
133  if (in_array($type, $object->getLocalLearningSequenceRoles(true))) {
134  $members->add($new_member, ilParticipants::IL_LSO_MEMBER);
135  $members->updateRoleAssignments($new_member, array($type));
136  } else {
137  ilLoggerFactory::getLogger('lso')->notice(
138  'Can not find role with id .' . $type . ' to assign users.'
139  );
140  $this->tpl->setOnScreenMessage('failure', $this->lng->txt("lso_cannot_find_role"), true);
141  return false;
142  }
143 
144  $members->sendNotification(
146  $new_member
147  );
148  $assigned = true;
149  break;
150  }
151  }
152 
153  if ($assigned) {
154  $this->tpl->setOnScreenMessage('success', $this->lng->txt("lso_msg_member_assigned"), true);
155  } else {
156  $this->tpl->setOnScreenMessage('success', $this->lng->txt('lso_users_already_assigned'), true);
157  }
158 
159  $this->ctrl->redirect($this, 'participants');
160  return $assigned;
161  }
162 
166  protected function updateParticipantsStatus(): void
167  {
168  $members = $this->getParentObject()->getLSParticipants();
169 
170  $participants = $this->post_wrapper->retrieve(
171  "visible_member_ids",
172  $this->refinery->kindlyTo()->listOf($this->refinery->kindlyTo()->int())
173  );
174 
175  $notification = [];
176  if ($this->post_wrapper->has('notification')) {
177  $notification = $this->post_wrapper->retrieve(
178  "notification",
179  $this->refinery->kindlyTo()->listOf($this->refinery->kindlyTo()->int())
180  );
181  }
182 
183  foreach ($participants as $participant) {
184  if ($members->isAdmin($participant)) {
185  $members->updateNotification($participant, in_array($participant, $notification));
186  continue;
187  }
188  $members->updateNotification($participant, false);
189  }
190 
191  $this->tpl->setOnScreenMessage('success', $this->lng->txt('settings_saved'), true);
192  $this->ctrl->redirect($this, 'participants');
193  }
194 
196  {
198  $this,
199  $this->getParentObject(),
200  $this->obj_user_tracking,
201  $this->privacy_settings,
202  $this->lng,
203  $this->access,
204  $this->rbac_review,
205  $this->settings
206  );
207  }
208 
210  {
211  $obj = parent::getParentObject();
212  if (!$obj instanceof ilObjLearningSequence) {
213  throw new Exception('Invalid class type ' . get_class($obj) . ". Expected ilObjLearningSequence.");
214  }
215  return $obj;
216  }
217 
219  {
221  $this,
222  $this->getParentObject(),
223  $this->getParentObject()->getLSParticipants(),
224  $this->privacy_settings
225  );
226 
227  $table->setTitle($this->lng->txt($this->getParentObject()->getType() . '_header_edit_members'));
228  $table->setData($this->readMemberData($participants));
229 
230  return $table;
231  }
232 
236  protected function initParticipantTemplate(): void
237  {
238  $this->tpl->addBlockFile('ADM_CONTENT', 'adm_content', 'tpl.lso_edit_members.html', 'Modules/LearningSequence');
239  }
240 
244  public function getLocalTypeRole(bool $translation = false): array
245  {
246  return $this->getParentObject()->getLocalLearningSequenceRoles($translation);
247  }
248 
254  public function readMemberData(array $usr_ids, array $columns = null): array
255  {
256  return $this->getParentObject()->readMemberData($usr_ids, $columns);
257  }
258 
259 
261  {
262  return new ilLearningSequenceWaitingList($this->getParentObject()->getId());
263  }
264 
265  protected function getDefaultRole(): ?int
266  {
267  return $this->getParentObject()->getDefaultMemberRole();
268  }
269 
273  public function getPrintMemberData(array $members): array
274  {
275  $member_data = $this->readMemberData($members, array());
276 
277  return $this->getParentGUI()->addCustomData($member_data);
278  }
279 
283  public function getAttendanceListUserData(int $user_id, array $filters = []): array
284  {
285  $data = array();
286 
287  if ($this->filterUserIdsByRbacOrPositionOfCurrentUser([$user_id])) {
288  $data = $this->member_data[$user_id];
289  if (array_key_exists('access_time', $data)) {
290  $data['access'] = $data['access_time'];
291  }
292  $data['progress'] = $this->lng->txt($data['progress']);
293  }
294 
295  return $data;
296  }
297 
299  {
301  }
302 
303  protected function setSubTabs(ilTabsGUI $tabs): void
304  {
306  'manage_members',
307  'manage_members',
308  $this->getParentObject()->getRefId()
309  );
310 
311  if ($access) {
312  $tabs->addSubTabTarget(
313  $this->getParentObject()->getType() . "_member_administration",
314  $this->ctrl->getLinkTarget($this, 'participants'),
315  "members",
316  get_class($this)
317  );
318 
319  $tabs->addSubTabTarget(
320  $this->getParentObject()->getType() . '_members_gallery',
321  $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilUsersGalleryGUI')),
322  'view',
323  'ilUsersGalleryGUI'
324  );
325  } elseif ($this->getParentObject()->getShowMembers()) {
326  $tabs->addSubTabTarget(
327  $this->getParentObject()->getType() . '_members_gallery',
328  $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilUsersGalleryGUI')),
329  'view',
330  'ilUsersGalleryGUI'
331  );
332  }
333  }
334 
335  protected function showParticipantsToolbar(): void
336  {
337  $toolbar_entries = [
338  'auto_complete_name' => $this->lng->txt('user'),
339  'user_type' => $this->getParentGUI()->getLocalRoles(),
340  'user_type_default' => $this->getDefaultRole(),
341  'submit_name' => $this->lng->txt('add'),
342  'add_search' => true
343  ];
344 
345  $search_params = ['crs', 'grp'];
346  $parent_container = $this->obj->getParentObjectInfo(
347  $this->obj->getRefId(),
348  $search_params
349  );
350  if (!is_null($parent_container)) {
351  $container_id = $parent_container['ref_id'];
352  $toolbar_entries['add_from_container'] = $container_id;
353  }
354 
356  $this,
357  $this->toolbar,
358  $toolbar_entries
359  );
360 
361  $this->toolbar->addSeparator();
362 
363  $this->toolbar->addComponent(
364  $this->ui_factory->button()->standard(
365  $this->lng->txt($this->getParentObject()->getType() . "_print_list"),
366  $this->ctrl->getLinkTarget($this, 'printMembers')
367  )
368  );
369 
370  $this->showMailToMemberToolbarButton($this->toolbar, 'participants');
371  }
372 }
readMemberData(array $usr_ids, array $columns=null)
array $settings
Setting values (LTI parameters, custom parameters and local parameters).
Definition: System.php:200
updateNotification(int $a_usr_id, bool $a_notification)
Update notification status.
Base class for member tab content.
static getLogger(string $a_component_id)
Get component logger.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ChatMainBarProvider .
checkPermission(string $a_permission, string $a_cmd="")
Check permission If not granted redirect to parent gui.
addSubTabTarget(string $a_text, string $a_link, $a_cmd="", $a_cmdClass="", string $a_frame="", bool $a_activate=false, bool $a_dir_text=false)
getAttendanceListUserData(int $user_id, array $filters=[])
global $DIC
Definition: feed.php:28
__construct(VocabulariesInterface $vocabularies)
Singleton class that stores all privacy settings.
Class ilObjectGUI Basic methods of all Output classes.
initParticipantTemplate()
Init participant view template.
initAttendanceList(bool $a_for_members=false)
ilParticipants $participants
showMailToMemberToolbarButton(ilToolbarGUI $toolbar, ?string $a_back_cmd=null, bool $a_separator=false)
Show mail to member toolbar button.
static fillAutoCompleteToolbar(object $parent_object, ilToolbarGUI $toolbar=null, array $a_options=[], bool $a_sticky=false)
array( auto_complete_name = $lng->txt(&#39;user&#39;), auto_complete_size = 15, user_type = array(ilCoursePar...
__construct(ilObjectGUI $repository_gui, protected ilObject $obj, protected ilObjUserTracking $obj_user_tracking, protected ilPrivacySettings $privacy_settings, protected ilRbacReview $rbac_review, protected ilSetting $settings, protected ilToolbarGUI $toolbar, protected ILIAS\HTTP\Wrapper\RequestWrapper $request_wrapper, protected ArrayBasedRequestWrapper $post_wrapper, protected ILIAS\Refinery\Factory $refinery, protected ILIAS\UI\Factory $ui_factory)
filterUserIdsByRbacOrPositionOfCurrentUser(array $a_user_ids)
Filter user ids by access.
ilAccessHandler $access
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
checkRbacOrPositionAccessBool(string $a_rbac_perm, string $a_pos_perm, int $a_ref_id=0)
Class ilAbstractMailMemberRoles.
GUI class for learning sequence membership features.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$r