ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilMailSearchObjectMembershipsTableGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22use ILIAS\Refinery\Factory as Refinery;
23
29{
30 private readonly GlobalHttpState $http;
31 private readonly Refinery $refinery;
32 private readonly ilObjUser $user;
34 private readonly array $mode;
35 private bool $mailing_allowed;
36 private readonly \ILIAS\UI\Factory $ui_factory;
37 private readonly \ILIAS\UI\Renderer $ui_renderer;
38
42 public function __construct(
43 $a_parent_obj,
44 string $type = 'crs',
45 string $context = 'mail',
46 array $contextObjects = []
47 ) {
48 global $DIC;
49
50 $this->ctrl = $DIC['ilCtrl'];
51 $this->lng = $DIC['lng'];
52 $this->user = $DIC['ilUser'];
53 $this->http = $DIC->http();
54 $this->refinery = $DIC->refinery();
55 $this->ui_factory = $DIC->ui()->factory();
56 $this->ui_renderer = $DIC->ui()->renderer();
57
58 $tableId = ilStr::subStr($type . '_cml_' . md5(implode('_', $contextObjects)), 0, 30);
59 $this->setId($tableId);
60 parent::__construct($a_parent_obj, 'showMembers');
61
62 $this->context = $context;
63 if ($this->context === 'mail') {
64 $mail = new ilMail($this->user->getId());
65 $this->mailing_allowed = $DIC->rbac()->system()->checkAccess('internal_mail', $mail->getMailObjectReferenceId());
66 }
67
68 $this->setDefaultOrderDirection('ASC');
69 $this->setDefaultOrderField('members_login');
70
71 $this->lng->loadLanguageModule('crs');
72 $this->lng->loadLanguageModule('buddysystem');
73
74 $mode = [];
75 if ($type === 'crs') {
76 $mode['checkbox'] = 'search_crs';
77 $mode['short'] = 'crs';
78 $mode['long'] = 'course';
79 $mode['lng_type'] = $this->lng->txt('course');
80 $mode['view'] = 'crs_members';
81 } elseif ($type === 'grp') {
82 $mode['checkbox'] = 'search_grp';
83 $mode['short'] = 'grp';
84 $mode['long'] = 'group';
85 $mode['lng_type'] = $this->lng->txt('group');
86 $mode['view'] = 'grp_members';
87 }
88
89 $this->setTitle($this->lng->txt('members'));
90 $this->mode = $mode;
91
92 $this->ctrl->setParameter($a_parent_obj, 'view', $mode['view']);
93
94 if (
95 $this->http->wrapper()->query()->has('ref') &&
96 $this->http->wrapper()->query()->retrieve('ref', $this->refinery->kindlyTo()->string()) !== ''
97 ) {
98 $this->ctrl->setParameter(
99 $a_parent_obj,
100 'ref',
101 $this->http->wrapper()->query()->retrieve('ref', $this->refinery->kindlyTo()->string())
102 );
103 }
104
105 if ($this->http->wrapper()->post()->has($mode['checkbox'])) {
106 $ids = $this->http->wrapper()->post()->retrieve(
107 $mode['checkbox'],
108 $this->refinery->kindlyTo()->listOf($this->refinery->kindlyTo()->int())
109 );
110
111 if ($ids !== []) {
112 $this->ctrl->setParameter(
113 $a_parent_obj,
114 $mode['checkbox'],
115 implode(', ', $ids)
116 );
117 }
118 }
119
120 $this->setFormAction($this->ctrl->getFormAction($a_parent_obj));
121
122 $this->setRowTemplate('tpl.mail_search_objects_members_row.html', 'components/ILIAS/Contact');
123
124 $this->addColumn('', '', '1%', true);
125 $this->addColumn($this->lng->txt('login'), 'members_login', '22%');
126 $this->addColumn($this->lng->txt('name'), 'members_name', '22%');
127 $this->addColumn($this->lng->txt($mode['long']), 'members_crs_grp', '22%');
128 if (ilBuddySystem::getInstance()->isEnabled()) {
129 $this->addColumn($this->lng->txt('buddy_tbl_filter_state'), 'status', '23%');
130 }
131 $this->addColumn($this->lng->txt('actions'), '', '10%');
132
133 if ($this->context === 'mail') {
134 if ($this->mailing_allowed) {
135 $this->setSelectAllCheckbox('search_members[]');
136 $this->addMultiCommand('mail', $this->lng->txt('mail_members'));
137 }
138 } else {
139 $this->setSelectAllCheckbox('search_members[]');
140 $this->lng->loadLanguageModule('wsp');
141 $this->addMultiCommand('share', $this->lng->txt('wsp_share_with_members'));
142 }
143 $this->lng->loadLanguageModule('buddysystem');
144 $this->addCommandButton('cancel', $this->lng->txt('cancel'));
145 }
146
147 protected function getRequestValue(string $key, \ILIAS\Refinery\Transformation $trafo, $default = null)
148 {
149 $value = $default;
150 if ($this->http->wrapper()->query()->has($key)) {
151 $value = $this->http->wrapper()->query()->retrieve($key, $trafo);
152 }
153
154 if ($this->http->wrapper()->post()->has($key)) {
155 $value = $this->http->wrapper()->post()->retrieve($key, $trafo);
156 }
157
158 return $value;
159 }
160
161 protected function fillRow(array $a_set): void
162 {
163 $trafo = $this->refinery->custom()->transformation(function ($value): string {
164 if (is_string($value)) {
165 return $this->refinery
166 ->custom()
167 ->transformation(fn(string $value): string => ilUtil::stripSlashes($value))
168 ->transform($value);
169 }
170
171 return implode(
172 ',',
173 $this->refinery->kindlyTo()->listOf(
174 $this->refinery->in()->series([
175 $this->refinery->kindlyTo()->int(),
176 $this->refinery->kindlyTo()->string()
177 ])
178 )->transform($value)
179 );
180 });
181
182 $buttons = [];
183
184 $this->ctrl->setParameter($this->parent_obj, 'search_members', $a_set['members_id']);
185 $this->ctrl->setParameter(
186 $this->parent_obj,
187 'search_' . $this->mode['short'],
188 $this->getRequestValue('search_' . $this->mode['short'], $trafo)
189 );
190 $this->ctrl->setParameter($this->parent_obj, 'view', $this->mode['view']);
191
192 $action_html = '';
193 if ($this->context === 'mail') {
194 if ($this->mailing_allowed) {
195 $buttons[] = $this->ui_factory
196 ->button()
197 ->shy(
198 $this->lng->txt('mail_member'),
199 $this->ctrl->getLinkTarget($this->parent_obj, 'mail')
200 );
201 }
202 } else {
203 $buttons[] = $this->ui_factory
204 ->button()
205 ->shy(
206 $this->lng->txt('wsp_share_with_members'),
207 $this->ctrl->getLinkTarget($this->parent_obj, 'share')
208 );
209 }
210
211 if ($this->context === 'mail' && ilBuddySystem::getInstance()->isEnabled()) {
212 $relation = ilBuddyList::getInstanceByGlobalUser()->getRelationByUserId((int) $a_set['members_id']);
213 if (
214 $a_set['members_id'] !== $this->user->getId() &&
215 $relation->isUnlinked() &&
216 ilUtil::yn2tf((string) ilObjUser::_lookupPref($a_set['members_id'], 'bs_allow_to_contact_me'))
217 ) {
218 $this->ctrl->setParameterByClass(ilBuddySystemGUI::class, 'user_id', $a_set['members_id']);
219 $buttons[] = $this->ui_factory
220 ->button()
221 ->shy(
222 $this->lng->txt('buddy_bs_btn_txt_unlinked_a'),
223 $this->ctrl->getLinkTargetByClass(ilBuddySystemGUI::class, 'request')
224 );
225 }
226 }
227
228 if ($buttons !== []) {
229 $drop_down = $this->ui_factory
230 ->dropdown()
231 ->standard($buttons)
232 ->withLabel($this->lng->txt('actions'));
233 $action_html = $this->ui_renderer->render($drop_down);
234 }
235 $this->tpl->setVariable('CURRENT_ACTION_LIST', $action_html);
236
237 foreach ($a_set as $key => $value) {
238 $this->tpl->setVariable(strtoupper($key), $value);
239 }
240 }
241}
$relation
Builds data types.
Definition: Factory.php:36
static getInstanceByGlobalUser(?ilObjUser $user=null)
__construct( $a_parent_obj, string $type='crs', string $context='mail', array $contextObjects=[])
getRequestValue(string $key, \ILIAS\Refinery\Transformation $trafo, $default=null)
User class.
static _lookupPref(int $a_usr_id, string $a_keyword)
static subStr(string $a_str, int $a_start, ?int $a_length=null)
Definition: class.ilStr.php:21
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
addCommandButton(string $a_cmd, string $a_text, string $a_onclick='', string $a_id="", string $a_class="")
addMultiCommand(string $a_cmd, string $a_text)
setFormAction(string $a_form_action, bool $a_multipart=false)
addColumn(string $a_text, string $a_sort_field="", string $a_width="", bool $a_is_checkbox_action_column=false, string $a_class="", string $a_tooltip="", bool $a_tooltip_with_html=false)
setDefaultOrderField(string $a_defaultorderfield)
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setId(string $a_val)
setDefaultOrderDirection(string $a_defaultorderdirection)
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
static yn2tf(string $a_yn)
Interface GlobalHttpState.
static http()
Fetches the global http state from ILIAS.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
global $DIC
Definition: shib_login.php:26