ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.ilMailSearchObjectMembershipsTableGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
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
setFormAction(string $a_form_action, bool $a_multipart=false)
addCommandButton(string $a_cmd, string $a_text, string $a_onclick='', string $a_id="", string $a_class="")
Interface Observer Contains several chained tasks and infos about them.
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
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
getRequestValue(string $key, \ILIAS\Refinery\Transformation $trafo, $default=null)
setId(string $a_val)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
static http()
Fetches the global http state from ILIAS.
setDefaultOrderField(string $a_defaultorderfield)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
global $DIC
Definition: shib_login.php:26
setDefaultOrderDirection(string $a_defaultorderdirection)
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
__construct( $a_parent_obj, string $type='crs', string $context='mail', array $contextObjects=[])
__construct(Container $dic, ilPlugin $plugin)
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)
static yn2tf(string $a_yn)
addMultiCommand(string $a_cmd, string $a_text)
static getInstanceByGlobalUser(?ilObjUser $user=null)