ILIAS  release_8 Revision v8.24
class.ilForumSettingsGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
27{
34 private ilTree $tree;
36 private \ILIAS\HTTP\GlobalHttpState $http;
37 private \ILIAS\Refinery\Factory $refinery;
40 private int $ref_id;
42 private \ILIAS\DI\Container $dic;
44 private \ILIAS\UI\Factory $ui_factory;
45
47 {
48 global $DIC;
49
50 $this->dic = $DIC;
51 $this->parent_obj = $parent_obj;
52
53 $this->ctrl = $DIC->ctrl();
54 $this->tpl = $DIC->ui()->mainTemplate();
55 $this->lng = $DIC->language();
56 $this->settings = $DIC->settings();
57 $this->tabs = $DIC->tabs();
58 $this->access = $DIC->access();
59 $this->tree = $DIC->repositoryTree();
60 $this->obj_service = $this->dic->object();
61 $this->ref_id = $this->parent_obj->getObject()->getRefId();
62 $this->http = $DIC->http();
63 $this->ui_factory = $DIC->ui()->factory();
64 $this->refinery = $DIC->refinery();
65 $this->error = $DIC['ilErr'];
66
67 $this->lng->loadLanguageModule('style');
68 $this->lng->loadLanguageModule('cont');
69 }
70
71 public function getRefId(): int
72 {
73 return $this->ref_id;
74 }
75
76 private function initForcedForumNotification(): void
77 {
78 $this->forumNotificationObj = new ilForumNotification($this->parent_obj->getObject()->getRefId());
79 $this->forumNotificationObj->readAllForcedEvents();
80 }
81
82 public function executeCommand(): void
83 {
84 $cmd = $this->ctrl->getCmd();
85 $next_class = $this->ctrl->getNextClass();
86
87 switch (strtolower($next_class)) {
88 default:
89 switch (true) {
90 case method_exists($this, $cmd):
91 $this->settingsTabs();
92 $this->{$cmd}();
93 break;
94
95 default:
96 $this->ctrl->redirect($this->parent_obj);
97 }
98 }
99 }
100
101 private function addAvailabilitySection(ilPropertyFormGUI $form): void
102 {
103 $section = new ilFormSectionHeaderGUI();
104 $section->setTitle($this->lng->txt('rep_activation_availability'));
105 $form->addItem($section);
106
107 $online = new ilCheckboxInputGUI($this->lng->txt('rep_activation_online'), 'activation_online');
108 $online->setInfo($this->lng->txt('frm_activation_online_info'));
109 $form->addItem($online);
110 }
111
112 public function getCustomForm(ilPropertyFormGUI $a_form): void
113 {
114 $this->settingsTabs();
115 $this->tabs->activateSubTab(self::UI_SUB_TAB_ID_BASIC_SETTINGS);
116 $a_form->setTitle($this->lng->txt('frm_settings_form_header'));
117
118 $this->addAvailabilitySection($a_form);
119
120 $presentationHeader = new ilFormSectionHeaderGUI();
121 $presentationHeader->setTitle($this->lng->txt('settings_presentation_header'));
122 $a_form->addItem($presentationHeader);
123
124 $this->obj_service->commonSettings()->legacyForm($a_form, $this->parent_obj->getObject())->addTileImage();
125
126 $rg_pro = new ilRadioGroupInputGUI($this->lng->txt('frm_default_view'), 'default_view');
127 $option_view_by_posts = new ilRadioOption($this->lng->txt('sort_by_posts'), (string) ilForumProperties::VIEW_TREE);
128 $option_view_by_posts->setInfo($this->lng->txt('sort_by_posts_desc'));
129 $rg_pro->addOption($option_view_by_posts);
130 $option_view_by_date = new ilRadioOption($this->lng->txt('sort_by_date'), (string) ilForumProperties::VIEW_DATE);
131 $option_view_by_date->setInfo($this->lng->txt('sort_by_date_desc'));
132 $sub_group = new ilRadioGroupInputGUI('', 'default_view_by_date');
133 $sub_group->addOption(new ilRadioOption($this->lng->txt('ascending_order'), (string) ilForumProperties::VIEW_DATE_ASC));
134 $sub_group->addOption(new ilRadioOption($this->lng->txt('descending_order'), (string) ilForumProperties::VIEW_DATE_DESC));
135
136 $option_view_by_date->addSubItem($sub_group);
137 $rg_pro->addOption($option_view_by_date);
138 $a_form->addItem($rg_pro);
139
140 $userFunctionsHeader = new ilFormSectionHeaderGUI();
141 $userFunctionsHeader->setTitle($this->lng->txt('frm_settings_user_functions_header'));
142 $a_form->addItem($userFunctionsHeader);
143
144 $frm_subject = new ilRadioGroupInputGUI($this->lng->txt('frm_subject_setting'), 'subject_setting');
145 $frm_subject->addOption(new ilRadioOption($this->lng->txt('preset_subject'), 'preset_subject'));
146 $frm_subject->addOption(new ilRadioOption($this->lng->txt('add_re_to_subject'), 'add_re_to_subject'));
147 $frm_subject->addOption(new ilRadioOption($this->lng->txt('empty_subject'), 'empty_subject'));
148 $a_form->addItem($frm_subject);
149
150 $cb_prop = new ilCheckboxInputGUI($this->lng->txt('enable_thread_ratings'), 'thread_rating');
151 $cb_prop->setValue('1');
152 $cb_prop->setInfo($this->lng->txt('enable_thread_ratings_info'));
153 $a_form->addItem($cb_prop);
154
156 $frm_upload = new ilCheckboxInputGUI($this->lng->txt('file_upload_allowed'), 'file_upload_allowed');
157 $frm_upload->setValue('1');
158 $frm_upload->setInfo($this->lng->txt('allow_file_upload_desc'));
159 $a_form->addItem($frm_upload);
160 }
161
162 $moderatorFunctionsHeader = new ilFormSectionHeaderGUI();
163 $moderatorFunctionsHeader->setTitle($this->lng->txt('frm_settings_mod_functions_header'));
164 $a_form->addItem($moderatorFunctionsHeader);
165
166 $cb_prop = new ilCheckboxInputGUI($this->lng->txt('activate_new_posts'), 'post_activation');
167 $cb_prop->setValue('1');
168 $cb_prop->setInfo($this->lng->txt('post_activation_desc'));
169 $a_form->addItem($cb_prop);
170
171 $cb_prop = new ilCheckboxInputGUI($this->lng->txt('mark_moderator_posts'), 'mark_mod_posts');
172 $cb_prop->setValue('1');
173 $cb_prop->setInfo($this->lng->txt('mark_moderator_posts_desc'));
174 $a_form->addItem($cb_prop);
175
176 $stickyThreadSorting = new ilRadioGroupInputGUI($this->lng->txt('sorting_manual_sticky'), 'thread_sorting');
177 $latestAtTop = new ilRadioOption($this->lng->txt('frm_sticky_threads_latest_at_top'), '0');
178 $latestAtTop->setInfo($this->lng->txt('frm_sticky_threads_latest_at_top_info'));
179 $stickyThreadSorting->addOption($latestAtTop);
180 $manualSorting = new ilRadioOption($this->lng->txt('frm_sticky_threads_manual_sorting'), '1');
181 $manualSorting->setInfo($this->lng->txt('frm_sticky_threads_manual_sorting_info'));
182 $stickyThreadSorting->addOption($manualSorting);
183 $a_form->addItem($stickyThreadSorting);
184
185 if ($this->settings->get('enable_anonymous_fora') || $this->settings->get('enable_fora_statistics')) {
186 $privacyHeader = new ilFormSectionHeaderGUI();
187 $privacyHeader->setTitle($this->lng->txt('frm_settings_privacy_header'));
188 $a_form->addItem($privacyHeader);
189 }
190
191 if ($this->settings->get('enable_fora_statistics')) {
192 $cb_prop = new ilCheckboxInputGUI($this->lng->txt('frm_statistics_enabled'), 'statistics_enabled');
193 $cb_prop->setValue('1');
194 $cb_prop->setInfo($this->lng->txt('frm_statistics_enabled_desc'));
195 $a_form->addItem($cb_prop);
196 }
197
198 if ($this->settings->get('enable_anonymous_fora') || $this->parent_obj->objProperties->isAnonymized()) {
199 $cb_prop = new ilCheckboxInputGUI($this->lng->txt('frm_anonymous_posting'), 'anonymized');
200 $cb_prop->setValue('1');
201 $cb_prop->setInfo($this->lng->txt('frm_anonymous_posting_desc'));
202 $a_form->addItem($cb_prop);
203 }
204 }
205
206 public function settingsTabs(): bool
207 {
208 $this->tabs->addSubTabTarget(
209 self::UI_SUB_TAB_ID_BASIC_SETTINGS,
210 $this->ctrl->getLinkTarget($this->parent_obj, 'edit'),
211 '',
212 [strtolower(ilObjForumGUI::class)]
213 );
214
215 if ($this->settings->get('forum_notification') > 0) {
216 // check if there a parent-node is a grp or crs
217 $grp_ref_id = $this->tree->checkForParentType($this->parent_obj->getRefId(), 'grp');
218 $crs_ref_id = $this->tree->checkForParentType($this->parent_obj->getRefId(), 'crs');
219
220 if ($grp_ref_id > 0 || $crs_ref_id > 0) {
221 #show member-tab for notification if forum-notification is enabled in administration
222 if ($this->access->checkAccess('write', '', $this->parent_obj->getRefId())) {
223 $cmd = '';
224 if ($this->dic->http()->wrapper()->query()->has('cmd')) {
225 $cmd = $this->dic->http()->wrapper()->query()->retrieve(
226 'cmd',
227 $this->dic->refinery()->kindlyTo()->string()
228 );
229 }
230
231 $mem_active = ['showMembers', 'forums_notification_settings'];
232 $force_mem_active = false;
233 if (in_array($cmd, $mem_active, true)) {
234 $force_mem_active = true;
235 }
236
237 $this->tabs->addSubTabTarget(
238 self::UI_SUB_TAB_ID_NOTIFICATIONS,
239 $this->ctrl->getLinkTarget($this, 'showMembers'),
240 '',
241 [strtolower(self::class)],
242 '',
243 $force_mem_active
244 );
245 }
246 }
247 }
248
249 $this->tabs->addSubTabTarget(
250 self::UI_SUB_TAB_ID_NEWS,
251 $this->ctrl->getLinkTargetByClass(ilContainerNewsSettingsGUI::class),
252 '',
253 [strtolower(ilContainerNewsSettingsGUI::class)]
254 );
255
256 $this->tabs->addSubTabTarget(
257 self::UI_SUB_TAB_ID_STYLE,
258 $this->ctrl->getLinkTargetByClass(strtolower(ilObjectContentStyleSettingsGUI::class), ""),
259 '',
260 [strtolower(ilObjectContentStyleSettingsGUI::class)]
261 );
262
263 $this->tabs->activateTab(self::UI_TAB_ID_SETTINGS);
264
265 return true;
266 }
267
268 public function getCustomValues(array &$a_values): void
269 {
270 $a_values['anonymized'] = $this->parent_obj->objProperties->isAnonymized();
271 $a_values['statistics_enabled'] = $this->parent_obj->objProperties->isStatisticEnabled();
272 $a_values['post_activation'] = $this->parent_obj->objProperties->isPostActivationEnabled();
273 $a_values['subject_setting'] = $this->parent_obj->objProperties->getSubjectSetting();
274 $a_values['mark_mod_posts'] = $this->parent_obj->objProperties->getMarkModeratorPosts();
275 $a_values['thread_sorting'] = $this->parent_obj->objProperties->getThreadSorting();
276 $a_values['thread_rating'] = $this->parent_obj->objProperties->isIsThreadRatingEnabled();
277
278 $default_view_value = $this->parent_obj->objProperties->getDefaultView();
279 if (in_array($default_view_value, [
284 ], true)) {
285 if (in_array($default_view_value, [
288 ], true)) {
289 $default_view_by_date = $default_view_value;
290 $default_view = ilForumProperties::VIEW_DATE;
291 } else {
292 $default_view = $default_view_value;
293 }
294 } else {
295 $default_view = ilForumProperties::VIEW_TREE;
296 }
297
298 $a_values['default_view'] = $default_view;
299 if (isset($default_view_by_date)) {
300 $a_values['default_view_by_date'] = $default_view_by_date;
301 }
302 $a_values['file_upload_allowed'] = $this->parent_obj->objProperties->getFileUploadAllowed();
303
304 $object = $this->parent_obj->getObject();
305 $a_values['activation_online'] = $object->getOfflineStatus() === false;
306 }
307
308 public function updateCustomValues(ilPropertyFormGUI $a_form): void
309 {
310 $default_view_input_value = (int) $a_form->getInput('default_view');
311 if (in_array($default_view_input_value, [
316 ], true)) {
317 if ($default_view_input_value === ilForumProperties::VIEW_DATE) {
318 $default_view_order_by_date_value = (int) $a_form->getInput('default_view_by_date');
319 if (in_array($default_view_order_by_date_value, [
322 ], true)) {
323 $default_view_input_value = $default_view_order_by_date_value;
324 }
325 }
326 $default_view = $default_view_input_value;
327 } else {
328 $default_view = ilForumProperties::VIEW_TREE;
329 }
330 $this->parent_obj->objProperties->setDefaultView($default_view);
331
332 // BUGFIX FOR 11271
333
334 if (ilSession::get('viewmode')) {
335 ilSession::set('viewmode', $default_view);
336 }
337
338 if ($this->settings->get('enable_anonymous_fora') || $this->parent_obj->objProperties->isAnonymized()) {
339 $this->parent_obj->objProperties->setAnonymisation((bool) $a_form->getInput('anonymized'));
340 }
341 if ($this->settings->get('enable_fora_statistics')) {
342 $this->parent_obj->objProperties->setStatisticsStatus((bool) $a_form->getInput('statistics_enabled'));
343 }
344 $this->parent_obj->objProperties->setPostActivation((bool) $a_form->getInput('post_activation'));
345 $this->parent_obj->objProperties->setSubjectSetting($a_form->getInput('subject_setting'));
346 $this->parent_obj->objProperties->setMarkModeratorPosts((bool) $a_form->getInput('mark_mod_posts'));
347 $this->parent_obj->objProperties->setThreadSorting((int) $a_form->getInput('thread_sorting'));
348 $this->parent_obj->objProperties->setIsThreadRatingEnabled((bool) $a_form->getInput('thread_rating'));
350 $this->parent_obj->objProperties->setFileUploadAllowed((bool) $a_form->getInput('file_upload_allowed'));
351 }
352 $this->parent_obj->objProperties->update();
353 $this->obj_service->commonSettings()->legacyForm($a_form, $this->parent_obj->getObject())->saveTileImage();
354
355 $object = $this->parent_obj->getObject();
356 $object->setOfflineStatus(!(bool) $a_form->getInput('activation_online'));
357 $object->update();
358 }
359
360 public function showMembers(): void
361 {
362 if (!$this->access->checkAccess('write', '', $this->parent_obj->getRefId())) {
363 $this->error->raiseError(
364 $this->lng->txt('msg_no_perm_read'),
365 $this->error->MESSAGE
366 );
367 }
368
369 $this->tpl->addBlockFile('ADM_CONTENT', 'adm_content', 'tpl.forums_members_list.html', 'Modules/Forum');
370
371 // instantiate the property form
372 if (!$this->initNotificationSettingsForm()) {
373 // if the form was just created set the values fetched from database
374 $interested_events = $this->parent_obj->objProperties->getInterestedEvents();
375
376 $form_events = [];
377 if ($interested_events & ilForumNotificationEvents::UPDATED) {
378 $form_events[] = ilForumNotificationEvents::UPDATED;
379 }
380
381 if ($interested_events & ilForumNotificationEvents::CENSORED) {
383 }
384
385 if ($interested_events & ilForumNotificationEvents::UNCENSORED) {
387 }
388
389 if ($interested_events & ilForumNotificationEvents::POST_DELETED) {
391 }
392
393 if ($interested_events & ilForumNotificationEvents::THREAD_DELETED) {
395 }
396
397 $this->notificationSettingsForm->setValuesByArray([
398 'notification_type' => $this->parent_obj->objProperties->getNotificationType(),
399 'adm_force' => $this->parent_obj->objProperties->isAdminForceNoti(),
400 'usr_toggle' => $this->parent_obj->objProperties->isUserToggleNoti(),
401 'notification_events' => $form_events
402 ]);
403 }
404
405 // set form html into template
406 $this->tpl->setVariable('NOTIFICATIONS_SETTINGS_FORM', $this->notificationSettingsForm->getHTML());
407
408 $frm_noti = new ilForumNotification($this->parent_obj->getObject()->getRefId());
409 $oParticipants = $this->getParticipants();
410
411 $moderator_ids = ilForum::_getModerators($this->parent_obj->getObject()->getRefId());
412
413 $admin_ids = $oParticipants->getAdmins();
414 $member_ids = $oParticipants->getMembers();
415 $tutor_ids = $oParticipants->getTutors();
416
417 if ($this->parent_obj->objProperties->getNotificationType() === 'default') {
418 // update forum_notification table
419 $forum_noti = new ilForumNotification($this->parent_obj->getObject()->getRefId());
420 $forum_noti->setAdminForce($this->parent_obj->objProperties->isAdminForceNoti());
421 $forum_noti->setUserToggle($this->parent_obj->objProperties->isUserToggleNoti());
422 $forum_noti->setForumId($this->parent_obj->objProperties->getObjId());
423 $forum_noti->setInterestedEvents($this->parent_obj->objProperties->getInterestedEvents());
424 $forum_noti->update();
425 } elseif ($this->parent_obj->objProperties->getNotificationType() === 'per_user') {
427
428 $moderators = $this->getUserNotificationTableData($moderator_ids);
429 $admins = $this->getUserNotificationTableData($admin_ids);
430 $members = $this->getUserNotificationTableData($member_ids);
431 $tutors = $this->getUserNotificationTableData($tutor_ids);
432
433 $this->showMembersTable($moderators, $admins, $members, $tutors);
434 }
435 }
436
437 private function getUserNotificationTableData($user_ids): array
438 {
439 $counter = 0;
440 $users = [];
441 foreach ($user_ids as $user_id) {
442 $forced_events = $this->forumNotificationObj->getForcedEventsObjectByUserId($user_id);
443
444 $users[$counter]['user_id'] = ilLegacyFormElementsUtil::formCheckbox(false, 'user_id[]', (string) $user_id);
445 $users[$counter]['login'] = ilObjUser::_lookupLogin($user_id);
446 $name = ilObjUser::_lookupName($user_id);
447 $users[$counter]['firstname'] = $name['firstname'];
448 $users[$counter]['lastname'] = $name['lastname'];
449 $users[$counter]['user_toggle_noti'] = $forced_events->getUserToggle();
450 $users[$counter]['notification_id'] = $forced_events->getNotificationId();
451 $users[$counter]['interested_events'] = $forced_events->getInterestedEvents();
452 $users[$counter]['usr_id_events'] = $user_id;
453 $users[$counter]['forum_id'] = $forced_events->getForumId();
454
455 $counter++;
456 }
457 return $users;
458 }
459
460 private function showMembersTable(array $moderators, array $admins, array $members, array $tutors): void
461 {
462 foreach (array_filter([
463 'moderators' => $moderators,
464 'administrator' => $admins,
465 'tutors' => $tutors,
466 'members' => $members
467 ]) as $type => $data) {
468 $tbl = new ilForumNotificationTableGUI($this, 'showMembers', $type);
469 $tbl->setData($data);
470
471 $this->tpl->setCurrentBlock(strtolower($type) . '_table');
472 $this->tpl->setVariable(strtoupper($type), $tbl->getHTML());
473 }
474 }
475
476 public function saveEventsForUser(): void
477 {
478 if (!$this->access->checkAccess('write', '', $this->parent_obj->getRefId())) {
479 $this->error->raiseError(
480 $this->lng->txt('msg_no_perm_read'),
481 $this->error->MESSAGE
482 );
483 }
484
485 $events_form_builder = new ilForumNotificationEventsFormGUI(
486 $this->ctrl->getFormAction($this, 'saveEventsForUser'),
487 null,
488 $this->ui_factory,
489 $this->lng
490 );
491
492 if ($this->http->request()->getMethod() === 'POST') {
493 $form = $events_form_builder->build()->withRequest($this->http->request());
494 $formData = $form->getData();
495
496 $interested_events = ilForumNotificationEvents::DEACTIVATED;
497
498 foreach ($events_form_builder->getValidEvents() as $event) {
499 $interested_events += isset($formData[$event]) && $formData[$event] ? $events_form_builder->getValueForEvent(
500 $event
501 ) : 0;
502 }
503
504 if (isset($formData['hidden_value']) && $formData['hidden_value']) {
505 $hidden_value = json_decode($formData['hidden_value'], false, 512, JSON_THROW_ON_ERROR);
506
507 $oParticipants = $this->getParticipants();
508 $moderator_ids = ilForum::_getModerators($this->parent_obj->getObject()->getRefId());
509 $admin_ids = $oParticipants->getAdmins();
510 $member_ids = $oParticipants->getMembers();
511 $tutor_ids = $oParticipants->getTutors();
512
513 $valid_usr_ids = array_unique(array_merge($moderator_ids, $admin_ids, $member_ids, $tutor_ids));
514
515 if (in_array($hidden_value->usr_id, $valid_usr_ids)) {
516 $frm_noti = new ilForumNotification($this->parent_obj->getRefId());
517 $frm_noti->setUserId($hidden_value->usr_id);
518 $frm_noti->setForumId($this->parent_obj->getObject()->getId());
519 $frm_noti->setInterestedEvents($interested_events);
520 $frm_noti->updateInterestedEvents();
521 }
522 }
523 }
524
525 $this->tpl->setOnScreenMessage('success', $this->lng->txt('saved_successfully'), true);
526
527 $this->showMembers();
528 }
529
530 public function enableAdminForceNoti(): void
531 {
532 if (!$this->access->checkAccess('write', '', $this->parent_obj->getRefId())) {
533 $this->error->raiseError(
534 $this->lng->txt('msg_no_perm_read'),
535 $this->error->MESSAGE
536 );
537 }
538
539 $user_ids = [];
540 if ($this->dic->http()->wrapper()->post()->has('user_id')) {
541 $user_ids = $this->dic->http()->wrapper()->post()->retrieve(
542 'user_id',
543 $this->dic->refinery()->kindlyTo()->listOf($this->dic->refinery()->kindlyTo()->int())
544 );
545 }
546
547 if (count($user_ids) === 0) {
548 $this->tpl->setOnScreenMessage('info', $this->lng->txt('time_limit_no_users_selected'), true);
549 } else {
550 $frm_noti = new ilForumNotification($this->parent_obj->getObject()->getRefId());
551
552 foreach ($user_ids as $user_id) {
553 $frm_noti->setUserId((int) $user_id);
554 $frm_noti->setUserToggle(false);
555 $is_enabled = $frm_noti->isAdminForceNotification();
556
557 if (!$is_enabled) {
558 $frm_noti->setAdminForce(true);
559 $frm_noti->insertAdminForce();
560 }
561 }
562
563 $this->tpl->setOnScreenMessage('success', $this->lng->txt('saved_successfully'));
564 }
565
566 $this->showMembers();
567 }
568
569 public function disableAdminForceNoti(): void
570 {
571 if (!$this->access->checkAccess('write', '', $this->parent_obj->getRefId())) {
572 $this->error->raiseError(
573 $this->lng->txt('msg_no_perm_read'),
574 $this->error->MESSAGE
575 );
576 }
577
578 $user_ids = [];
579 if ($this->dic->http()->wrapper()->post()->has('user_id')) {
580 $user_ids = $this->dic->http()->wrapper()->post()->retrieve(
581 'user_id',
582 $this->dic->refinery()->kindlyTo()->listOf($this->dic->refinery()->kindlyTo()->int())
583 );
584 }
585
586 if (count($user_ids) === 0) {
587 $this->tpl->setOnScreenMessage('info', $this->lng->txt('time_limit_no_users_selected'));
588 } else {
589 $frm_noti = new ilForumNotification($this->parent_obj->getObject()->getRefId());
590
591 foreach ($user_ids as $user_id) {
592 $frm_noti->setUserId((int) $user_id);
593 $is_enabled = $frm_noti->isAdminForceNotification();
594
595 if ($is_enabled) {
596 $frm_noti->deleteAdminForce();
597 }
598 }
599
600 $this->tpl->setOnScreenMessage('success', $this->lng->txt('saved_successfully'));
601 }
602
603 $this->showMembers();
604 }
605
606 public function enableHideUserToggleNoti(): void
607 {
608 if (!$this->access->checkAccess('write', '', $this->parent_obj->getRefId())) {
609 $this->error->raiseError(
610 $this->lng->txt('msg_no_perm_read'),
611 $this->error->MESSAGE
612 );
613 }
614
615 $user_ids = [];
616 if ($this->dic->http()->wrapper()->post()->has('user_id')) {
617 $user_ids = $this->dic->http()->wrapper()->post()->retrieve(
618 'user_id',
619 $this->dic->refinery()->kindlyTo()->listOf($this->dic->refinery()->kindlyTo()->int())
620 );
621 }
622
623 if (count($user_ids) === 0) {
624 $this->tpl->setOnScreenMessage('info', $this->lng->txt('time_limit_no_users_selected'));
625 } else {
626 $frm_noti = new ilForumNotification($this->parent_obj->getObject()->getRefId());
627
628 foreach ($user_ids as $user_id) {
629 $frm_noti->setUserId((int) $user_id);
630 $frm_noti->setUserToggle(true);
631 $is_enabled = $frm_noti->isAdminForceNotification();
632
633 if (!$is_enabled) {
634 $frm_noti->setAdminForce(true);
635 $frm_noti->insertAdminForce();
636 } else {
637 $frm_noti->updateUserToggle();
638 }
639 }
640
641 $this->tpl->setOnScreenMessage('success', $this->lng->txt('saved_successfully'));
642 }
643
644 $this->showMembers();
645 }
646
647 public function disableHideUserToggleNoti(): void
648 {
649 if (!$this->access->checkAccess('write', '', $this->parent_obj->getRefId())) {
650 $this->error->raiseError(
651 $this->lng->txt('msg_no_perm_read'),
652 $this->error->MESSAGE
653 );
654 }
655
656 $user_ids = [];
657 if ($this->dic->http()->wrapper()->post()->has('user_id')) {
658 $user_ids = $this->dic->http()->wrapper()->post()->retrieve(
659 'user_id',
660 $this->dic->refinery()->kindlyTo()->listOf($this->dic->refinery()->kindlyTo()->int())
661 );
662 }
663
664 if (count($user_ids) === 0) {
665 $this->tpl->setOnScreenMessage('info', $this->lng->txt('time_limit_no_users_selected'));
666 } else {
667 $frm_noti = new ilForumNotification($this->parent_obj->getObject()->getRefId());
668
669 foreach ($user_ids as $user_id) {
670 $frm_noti->setUserId((int) $user_id);
671 $frm_noti->setUserToggle(false);
672 $is_enabled = $frm_noti->isAdminForceNotification();
673 if ($is_enabled) {
674 $frm_noti->updateUserToggle();
675 } else {
676 $frm_noti->setAdminForce(true);
677 $frm_noti->insertAdminForce();
678 }
679 }
680
681 $this->tpl->setOnScreenMessage('success', $this->lng->txt('saved_successfully'));
682 }
683
684 $this->showMembers();
685 }
686
688 {
689 if (!$this->parent_obj->isParentObjectCrsOrGrp()) {
690 $this->error->raiseError(
691 $this->lng->txt('msg_no_perm_read'),
692 $this->error->MESSAGE
693 );
694 }
695
696 $grp_ref_id = $this->tree->checkForParentType($this->parent_obj->getObject()->getRefId(), 'grp');
697 if ($grp_ref_id > 0) {
700 }
701
702 $crs_ref_id = $this->tree->checkForParentType($this->parent_obj->getObject()->getRefId(), 'crs');
704
706 }
707
708 private function updateUserNotifications(bool $update_all_users = false): void
709 {
710 $oParticipants = $this->getParticipants();
711
712 $frm_noti = new ilForumNotification($this->parent_obj->getObject()->getRefId());
713 $moderator_ids = ilForum::_getModerators($this->parent_obj->getObject()->getRefId());
714
715 $admin_ids = $oParticipants->getAdmins();
716 $member_ids = $oParticipants->getMembers();
717 $tutor_ids = $oParticipants->getTutors();
718
719 $all_forum_users = array_merge($moderator_ids, $admin_ids, $member_ids, $tutor_ids);
720 $all_forum_users = array_unique($all_forum_users);
721
722 $all_notis = $frm_noti->read();
723
724 foreach ($all_forum_users as $user_id) {
725 $frm_noti->setUserId($user_id);
726
727 $frm_noti->setAdminForce(true);
728 $frm_noti->setUserToggle($this->parent_obj->objProperties->isUserToggleNoti());
729 $frm_noti->setInterestedEvents($this->parent_obj->objProperties->getInterestedEvents());
730
731 if (array_key_exists($user_id, $all_notis) && $update_all_users) {
732 $frm_noti->update();
733 } elseif ($frm_noti->existsNotification() === false) {
734 $frm_noti->insertAdminForce();
735 }
736 }
737 }
738
739 private function initNotificationSettingsForm(): bool
740 {
741 if (null === $this->notificationSettingsForm) {
742 $form = new ilPropertyFormGUI();
743 $form->setFormAction($this->ctrl->getFormAction($this, 'updateNotificationSettings'));
744 $form->setTitle($this->lng->txt('forums_notification_settings'));
745
746 $radio_grp = new ilRadioGroupInputGUI('', 'notification_type');
747 $radio_grp->setValue('default');
748
749 $opt_default = new ilRadioOption($this->lng->txt("user_decides_notification"), 'default');
750 $opt_0 = new ilRadioOption($this->lng->txt("settings_for_all_members"), 'all_users');
751 $opt_1 = new ilRadioOption($this->lng->txt("settings_per_users"), 'per_user');
752
753 $radio_grp->addOption($opt_default);
754 $radio_grp->addOption($opt_0);
755 $radio_grp->addOption($opt_1);
756
757 $chb_2 = new ilCheckboxInputGUI($this->lng->txt('user_toggle_noti'), 'usr_toggle');
758 $chb_2->setValue('1');
759
760 $opt_0->addSubItem($chb_2);
761
762 $cb_grp = new ilCheckboxGroupInputGUI($this->lng->txt('notification_settings'), 'notification_events');
763
764 $notify_modified = new ilCheckboxOption($this->lng->txt('notify_modified'), (string) ilForumNotificationEvents::UPDATED);
765 $cb_grp->addOption($notify_modified);
766
767 $notify_censored = new ilCheckboxOption($this->lng->txt('notify_censored'), (string) ilForumNotificationEvents::CENSORED);
768 $cb_grp->addOption($notify_censored);
769
770 $notify_uncensored = new ilCheckboxOption($this->lng->txt('notify_uncensored'), (string) ilForumNotificationEvents::UNCENSORED);
771 $cb_grp->addOption($notify_uncensored);
772
773 $notify_post_deleted = new ilCheckboxOption($this->lng->txt('notify_post_deleted'), (string) ilForumNotificationEvents::POST_DELETED);
774 $cb_grp->addOption($notify_post_deleted);
775
776 $notify_thread_deleted = new ilCheckboxOption($this->lng->txt('notify_thread_deleted'), (string) ilForumNotificationEvents::THREAD_DELETED);
777 $cb_grp->addOption($notify_thread_deleted);
778 $opt_0->addSubItem($cb_grp);
779
780 $form->addItem($radio_grp);
781
782 $form->addCommandButton('updateNotificationSettings', $this->lng->txt('save'));
783
784 $this->notificationSettingsForm = $form;
785
786 return false;
787 }
788
789 return true;
790 }
791
792 public function updateNotificationSettings(): void
793 {
794 if (!$this->access->checkAccess('write', '', $this->parent_obj->getRefId())) {
795 $this->error->raiseError(
796 $this->lng->txt('msg_no_perm_read'),
797 $this->error->MESSAGE
798 );
799 }
800
801 // instantiate the property form
803
804 // check input
805 if ($this->notificationSettingsForm->checkInput()) {
806 $notification_type = '';
807 if ($this->dic->http()->wrapper()->post()->has('notification_type')) {
808 $notification_type = $this->dic->http()->wrapper()->post()->retrieve(
809 'notification_type',
810 $this->dic->refinery()->kindlyTo()->string()
811 );
812 }
813
814 if ($notification_type === 'all_users') {
815 // set values and call update
816 $notification_events = $this->notificationSettingsForm->getInput('notification_events');
817 $interested_events = 0;
818
819 if (is_array($notification_events)) {
820 foreach ($notification_events as $activated_event) {
821 $interested_events += (int) $activated_event;
822 }
823 }
824
825 $this->parent_obj->objProperties->setAdminForceNoti(true);
826 $this->parent_obj->objProperties->setUserToggleNoti((bool) $this->notificationSettingsForm->getInput('usr_toggle'));
827 $this->parent_obj->objProperties->setNotificationType('all_users');
828 $this->parent_obj->objProperties->setInterestedEvents($interested_events);
829 $this->updateUserNotifications(true);
830 } elseif ($notification_type === 'per_user') {
831 $this->parent_obj->objProperties->setNotificationType('per_user');
832 $this->parent_obj->objProperties->setAdminForceNoti(true);
833 $this->parent_obj->objProperties->setUserToggleNoti(false);
835 } else { // if($notification_type] == 'default')
836 $this->parent_obj->objProperties->setNotificationType('default');
837 $this->parent_obj->objProperties->setAdminForceNoti(false);
838 $this->parent_obj->objProperties->setUserToggleNoti(false);
839 $frm_noti = new ilForumNotification($this->parent_obj->getObject()->getRefId());
840 $frm_noti->deleteNotificationAllUsers();
841 }
842
843 $this->parent_obj->objProperties->update();
844
845 $this->tpl->setOnScreenMessage('success', $this->lng->txt('saved_successfully'));
846 }
847 $this->notificationSettingsForm->setValuesByPost();
848
849 $this->showMembers();
850 }
851}
error(string $a_errmsg)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This class represents a checkbox property in a property form.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _getInstanceByObjId(int $a_obj_id)
Error Handling & global info handling uses PEAR error class.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilForumNotificationTableGUI.
Class ilForumSettingsGUI.
ILIAS HTTP GlobalHttpState $http
getCustomForm(ilPropertyFormGUI $a_form)
showMembersTable(array $moderators, array $admins, array $members, array $tutors)
ILIAS Refinery Factory $refinery
addAvailabilitySection(ilPropertyFormGUI $form)
__construct(ilObjForumGUI $parent_obj)
updateCustomValues(ilPropertyFormGUI $a_form)
ilGlobalTemplateInterface $tpl
updateUserNotifications(bool $update_all_users=false)
getCustomValues(array &$a_values)
ilForumNotification $forumNotificationObj
ilPropertyFormGUI $notificationSettingsForm
static _getModerators(int $a_ref_id)
static _getInstanceByObjId(int $a_obj_id)
Get singleton instance.
language handling
static formCheckbox(bool $checked, string $varname, string $value, bool $disabled=false)
Class ilObjForumGUI.
static _lookupName(int $a_user_id)
lookup user name
static _lookupLogin(int $a_user_id)
static getInstanceByRefId(int $ref_id, bool $stop_on_error=true)
get an instance of an Ilias object by reference id
Base class for course and group participants.
This class represents a property form user interface.
getInput(string $a_post_var, bool $ensureValidation=true)
Returns the input of an item, if item provides getInput method and as fallback the value of the HTTP-...
This class represents a property in a property form.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static get(string $a_var)
static set(string $a_var, $a_val)
Set a value.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: feed.php:28
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
if($format !==null) $name
Definition: metadata.php:247
static http()
Fetches the global http state from ILIAS.
$type