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