ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilECSParticipantSettingsGUI.php
Go to the documentation of this file.
1 <?php
2 
18 declare(strict_types=1);
19 
21 
26 {
27  private int $server_id ;
28  private int $mid;
29 
31 
33  protected ilLanguage $lng;
34  protected ilCtrl $ctrl;
35  protected ilTabsGUI $tabs;
38  protected ilSetting $settings;
39 
40  public function __construct(int $a_server_id, int $a_mid)
41  {
42  global $DIC;
43 
44  $this->lng = $DIC->language();
45  $this->tpl = $DIC->ui()->mainTemplate();
46  $this->ctrl = $DIC->ctrl();
47  $this->tabs = $DIC->tabs();
48  $this->ui_factory = $DIC->ui()->factory();
49  $this->toolbar = $DIC->toolbar();
50  $this->settings = $DIC->settings();
51 
52  $this->server_id = $a_server_id;
53  $this->mid = $a_mid;
54 
55  $this->lng->loadLanguageModule('ecs');
56 
57  $this->participant = new ilECSParticipantSetting($this->getServerId(), $this->getMid());
58  }
59 
60  public function getServerId(): int
61  {
62  return $this->server_id;
63  }
64 
65  public function getMid(): int
66  {
67  return $this->mid;
68  }
69 
71  {
72  return $this->participant;
73  }
74 
75 
79  public function executeCommand(): bool
80  {
81  $this->ctrl->saveParameter($this, 'server_id');
82  $this->ctrl->saveParameter($this, 'mid');
83 
84  $next_class = $this->ctrl->getNextClass($this);
85  $cmd = $this->ctrl->getCmd('settings');
86 
87  $this->setTabs();
88  $this->$cmd();
89 
90  return true;
91  }
92 
96  private function abort(): void
97  {
98  $this->ctrl->returnToParent($this);
99  }
100 
101 
105  private function settings(ilPropertyFormGUI $form = null): void
106  {
107  $this->renderConsentToolbar();
108 
109  if (!$form instanceof ilPropertyFormGUI) {
110  $form = $this->initFormSettings();
111  }
112  $this->tpl->setContent($form->getHTML());
113  }
114 
115  protected function renderConsentToolbar(): void
116  {
117  $consents = new ilECSParticipantConsents(
118  $this->getServerId(),
119  $this->getMid()
120  );
121  if (!$consents->hasConsents()) {
122  return;
123  }
124 
125  $confirm = $this->ui_factory->modal()->interruptive(
126  $this->lng->txt('ecs_consent_reset_confirm_title'),
127  $this->lng->txt('ecs_consent_reset_confirm_title_info'),
128  $this->ctrl->getLinkTarget($this, 'resetConsents')
129  );
130  $this->toolbar->addComponent($confirm);
131 
132  $confirmation_trigger = $this->ui_factory->button()->standard(
133  $this->lng->txt('ecs_consent_reset_confirm_title'),
134  ''
135  )->withOnClick($confirm->getShowSignal());
136  $this->toolbar->addComponent($confirmation_trigger);
137  }
138 
139  protected function resetConsents()
140  {
141  $consents = new ilECSParticipantConsents($this->getServerId(), $this->getMid());
142  $consents->delete();
143  $this->tpl->setOnScreenMessage('success', $this->lng->txt('ecs_user_consents_deleted'), true);
144  $this->ctrl->redirect($this, 'settings');
145  }
146 
150  protected function saveSettings(): void
151  {
152  $form = $this->initFormSettings();
153  if ($form->checkInput()) {
154  $this->getParticipant()->enableToken((bool) $form->getInput('token'));
155  $this->getParticipant()->enableExport((bool) $form->getInput('export'));
156  $this->getParticipant()->setExportTypes($form->getInput('export_types'));
157  $this->getParticipant()->enableImport((bool) $form->getInput('import'));
158  $this->getParticipant()->setImportTypes($form->getInput('import_types'));
159  $this->getParticipant()->enableIncomingLocalAccounts((bool) $form->getInput('incoming_local_accounts'));
160  $this->getParticipant()->setIncomingAuthType((int) $form->getInput('incoming_auth_type'));
161  $this->getParticipant()->setOutgoingAuthModes((array) $form->getInput('outgoing_auth_modes'));
162 
163  // placeholders
164  $placeholders = [];
165  foreach ($this->parseAvailableAuthModes() as $authmode_name => $authmode_text) {
166  $placeholders[$authmode_name] = $form->getInput(
167  'username_placeholder_' . $authmode_name
168  );
169  }
170  $this->getParticipant()->setOutgoingUsernamePlaceholders($placeholders);
171 
172  // additional validation
173  $error_code = $this->getParticipant()->validate();
174  switch ($error_code) {
176  $form->getItemByPostVar('outgoing_auth_modes')->setAlert(
177  $this->lng->txt('ecs_username_place_holder_err_mssing_placeholder')
178  );
179  break;
180  default:
181  $this->getParticipant()->update();
182  $this->tpl->setOnScreenMessage('success', $this->lng->txt('settings_saved'), true);
183  $this->ctrl->redirect($this, 'settings');
184  }
185  }
186  $form->setValuesByPost();
187  $this->tpl->setOnScreenMessage('failure', $this->lng->txt('err_check_input'));
188  $this->settings($form);
189  }
190 
194  protected function initFormSettings(): ilPropertyFormGUI
195  {
196  $form = new ilPropertyFormGUI();
197  $form->setFormAction($this->ctrl->getFormAction($this));
198  $form->setTitle($this->lng->txt('ecs_part_settings') . ' ' . $this->getParticipant()->getTitle());
199 
200 
201  $token = new ilCheckboxInputGUI($this->lng->txt('ecs_token_mechanism'), 'token');
202  $token->setInfo($this->lng->txt('ecs_token_mechanism_info'));
203  $token->setValue("1");
204  $token->setChecked($this->getParticipant()->isTokenEnabled());
205  $form->addItem($token);
206 
207  // Export
208  $export = new ilCheckboxInputGUI($this->lng->txt('ecs_tbl_export'), 'export');
209  $export->setValue("1");
210  $export->setChecked($this->getParticipant()->isExportEnabled());
211  $form->addItem($export);
212 
213  $auth_types = new ilCheckboxInputGUI(
214  $this->lng->txt('ecs_export_local_account'),
215  'incoming_local_accounts'
216  );
217  $auth_types->setInfo($this->lng->txt('ecs_export_local_account_info'));
218  $auth_types->setChecked($this->getParticipant()->areIncomingLocalAccountsSupported());
219  $export->addSubItem($auth_types);
220 
221  // radio group with login page and (optional) shibboleth option
222  $external_auth_type = new ilRadioGroupInputGUI(
223  $this->lng->txt('ecs_export_auth_type'),
224  'incoming_auth_type'
225  );
226  $external_auth_type->setInfo($this->lng->txt('ecs_export_auth_type_info'));
227  $external_auth_type->setValue(
228  (string) $this->getParticipant()->getIncomingAuthType()
229  );
230  $external_auth_type->addOption(
231  new ilRadioOption(
232  $this->lng->txt('ecs_export_auth_type_ilias'),
234  )
235  );
236  if ($this->isShibbolethActive()) {
237  $external_auth_type->addOption(
238  new ilRadioOption(
239  $this->lng->txt('ecs_export_auth_type_shib'),
241  )
242  );
243  }
244  $external_auth_type->addOption(
245  new ilRadioOption(
246  $this->lng->txt('ecs_export_auth_type_none'),
248  )
249  );
250  $export->addSubItem($external_auth_type);
251 
252  // Export types
253  $obj_types = new ilCheckboxGroupInputGUI($this->lng->txt('ecs_export_types'), 'export_types');
254  $obj_types->setValue($this->getParticipant()->getExportTypes());
255 
256 
257  foreach (ilECSUtils::getPossibleReleaseTypes(true) as $type => $trans) {
258  $obj_types->addOption(new ilCheckboxOption($trans, $type));
259  }
260  $export->addSubItem($obj_types);
261 
262 
263  // Import
264  $import = new ilCheckboxInputGUI($this->lng->txt('ecs_tbl_import'), 'import');
265  $import->setValue("1");
266  $import->setChecked($this->getParticipant()->isImportEnabled());
267  $form->addItem($import);
268 
269  // user credentials by auth mode
270  $user_credentials = new ilCheckboxGroupInputGUI(
271  $this->lng->txt('ecs_import_user_credentials_by_auth_mode'),
272  'outgoing_auth_modes'
273  );
274  $user_credentials->setInfo($this->lng->txt('ecs_import_user_credentials_by_auth_mode_info'));
275  $user_credentials->setValue($this->getParticipant()->getOutgoingAuthModes());
276  $import->addSubItem($user_credentials);
277  foreach ($this->parseAvailableAuthModes() as $option_name => $option_text) {
278  $option = new ilCheckboxOption(
279  $this->lng->txt('ecs_import_auth_mode') . ' ' . $option_text,
280  $option_name
281  );
282  $user_credentials->addOption($option);
283  $username_placeholder = new ilTextInputGUI(
284  $this->lng->txt('ecs_outgoing_user_credentials'),
285  'username_placeholder_' . $option_name
286  );
287  $username_placeholder->setRequired(false);
288  $username_placeholder->setInfo($this->lng->txt('ecs_outgoing_user_credentials_info'));
289  $username_placeholder->setValue(
290  $this->getParticipant()->getOutgoingUsernamePlaceholderByAuthMode(
291  $option_name
292  )
293  );
294  $option->addSubItem($username_placeholder);
295  }
296  $option = new ilCheckboxOption(
297  $this->lng->txt('ecs_import_auth_type_default'),
298  'default'
299  );
300  $user_credentials->addOption($option);
301 
302  // Import types
303  $imp_types = new ilCheckboxGroupInputGUI($this->lng->txt('ecs_import_types'), 'import_types');
304  $imp_types->setValue($this->getParticipant()->getImportTypes());
305 
306 
307  foreach (ilECSUtils::getPossibleRemoteTypes(true) as $type => $trans) {
308  $imp_types->addOption(new ilCheckboxOption($trans, $type));
309  }
310  $import->addSubItem($imp_types);
311 
312  $form->addCommandButton('saveSettings', $this->lng->txt('save'));
313  $form->addCommandButton('abort', $this->lng->txt('cancel'));
314  return $form;
315  }
316 
317  protected function parseAvailableAuthModes($a_mode_incoming = true): array
318  {
319  $options = [];
320  if ($this->isShibbolethActive()) {
321  $options['shibboleth'] = $this->lng->txt('auth_shib');
322  }
323  foreach (ilLDAPServer::getServerIds() as $server_id) {
325  $options['ldap_' . $server->getServerId()] = $server->getName();
326  }
327  return $options;
328  }
329 
330  protected function isShibbolethActive(): bool
331  {
332  return (bool) $this->settings->get('shib_active', '0');
333  }
334 
338  private function setTabs(): void
339  {
340  $this->tabs->clearTargets();
341  $this->tabs->setBackTarget(
342  $this->lng->txt('back'),
343  $this->ctrl->getParentReturnByClass(self::class)
344  );
345  }
346 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getPossibleReleaseTypes(bool $a_with_captions=false)
Get all possible release object types.
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...
static getInstanceByServerId(int $a_server_id)
Get instance by server id.
static getPossibleRemoteTypes(bool $a_with_captions=false)
Get all possible remote object types.
global $DIC
Definition: feed.php:28
This class represents a property in a property form.
static getServerIds()
Get all server ids.
$token
Definition: xapitoken.php:70
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$server
__construct(int $a_server_id, int $a_mid)
settings(ilPropertyFormGUI $form=null)
Settings.