diff --git a/app/controllers/admin/ilias_interface.php b/app/controllers/admin/ilias_interface.php index fd3ac073f0023587efd3bbbcb99255426c8231e6..206e6754d944259e15b87297ae27ffb442957a51 100644 --- a/app/controllers/admin/ilias_interface.php +++ b/app/controllers/admin/ilias_interface.php @@ -243,6 +243,15 @@ class Admin_IliasInterfaceController extends AuthenticatedController { $this->ilias_config = $this->ilias_configs[$index]; $this->ilias_index = $index; + $this->ilias_datafields = []; + + $connected_ilias = new ConnectedIlias($index); + if ($admin_id = $connected_ilias->soap_client->lookupUser($this->ilias_config['admin'])) { + $user = $connected_ilias->soap_client->getUser($admin_id); + if (array_key_exists('udfs', $user)) { + $this->ilias_datafields = $user['udfs']; + } + } } /** @@ -315,6 +324,28 @@ class Admin_IliasInterfaceController extends AuthenticatedController if (Request::getInstance()->offsetExists('ilias_matriculation')) { $this->ilias_configs[$index]['matriculation'] = Request::get('ilias_matriculation'); } + if (Request::getInstance()->offsetExists('ilias_discipline_1') && Request::getInstance()->offsetExists('ilias_discipline_2')) { + if ($admin_id = $connected_ilias->soap_client->lookupUser($this->ilias_configs[$index]['admin'])) { + $user = $connected_ilias->soap_client->getUser($admin_id); + if (array_key_exists('udfs', $user)) { + $this->ilias_datafields = $user['udfs']; + foreach ($this->ilias_datafields as $field) { + if (Request::option('ilias_discipline_1') == $field['id']) { + $this->ilias_configs[$index]['discipline_1'] = ['id' => $field['id'], 'name' => $field['name']]; + } + if (Request::option('ilias_discipline_2') == $field['id']) { + $this->ilias_configs[$index]['discipline_2'] = ['id' => $field['id'], 'name' => $field['name']]; + } + } + if (!Request::option('ilias_discipline_1')) { + unset($this->ilias_configs[$index]['discipline_1']); + } + if (!Request::option('ilias_discipline_2')) { + unset($this->ilias_configs[$index]['discipline_2']); + } + } + } + } if (Request::getInstance()->offsetExists('ilias_cat_semester')) { $this->ilias_configs[$index]['cat_semester'] = Request::get('ilias_cat_semester'); } diff --git a/app/views/admin/ilias_interface/edit_content.php b/app/views/admin/ilias_interface/edit_content.php index fdbaed95cf7ca9b94fefbba1b6225cb8d6776bd5..f54a62d909d163c803a95305b8fa5df8b5e3b6a1 100644 --- a/app/views/admin/ilias_interface/edit_content.php +++ b/app/views/admin/ilias_interface/edit_content.php @@ -4,6 +4,7 @@ * @var string $ilias_index * @var array $ilias_config * @var array $modules_available + * @var array $ilias_datafields */ ?> <form class="default" action="<?= $controller->url_for('admin/ilias_interface/save/'.$ilias_index) ?>" method="post"> @@ -47,6 +48,26 @@ <span><?= _('Datenfeld (Name) mit Matrikelnummer (wenn leer, wird keine Matrikelnummer übergeben)') ?></span> <input type="text" name="ilias_matriculation" size="50" maxlength="255" value="<?= htmlReady($ilias_config['matriculation']) ?>"> </label> + <? if (count($ilias_datafields)) : ?> + <label> + <span><?= _('ILIAS-Datenfeld für Studiengang 1 (wenn leer, wird der Studiengang nicht übertragen)') ?></span> + <select name="ilias_discipline_1"> + <option></option> + <? foreach ($ilias_datafields as $field) : ?> + <option value="<?=$field['id']?>" <?=$ilias_config['discipline_1']['id'] == $field['id'] ? 'selected' : ''?>><?=htmlReady($field['name'])?></option> + <? endforeach ?> + </select> + </label> + <label> + <span><?= _('ILIAS-Datenfeld für Studiengang 2 (wenn leer, wird der Studiengang nicht übertragen)') ?></span> + <select name="ilias_discipline_2"> + <option></option> + <? foreach ($ilias_datafields as $field) : ?> + <option value="<?=$field['id']?>" <?=$ilias_config['discipline_2']['id'] == $field['id'] ? 'selected' : ''?>><?=htmlReady($field['name'])?></option> + <? endforeach ?> + </select> + </label> + <? endif ?> <label> <span class="required"><?= _('Struktur für angelegte Kurse') ?></span> </label> @@ -82,11 +103,11 @@ <span><?= _('Veranstaltungsname (Semester)') ?></span> </label> <label> - <input type="checkbox" name="ilias_course_veranstaltungsnummer" value="1" <?= $ilias_config['course_veranstaltungsnummer'] ? 'checked' : '' ?>> + <input type="checkbox" name="ilias_course_veranstaltungsnummer" value="1" <?= !empty($ilias_config['course_veranstaltungsnummer']) ? 'checked' : '' ?>> <span><?= _('Stud.IP-Veranstaltungsnummer im ILIAS-Kurstitel anzeigen') ?></span> </label> <label> - <input type="checkbox" name="ilias_delete_ilias_courses" value="1" <?= $ilias_config['delete_ilias_courses'] ? 'checked' : '' ?>> + <input type="checkbox" name="ilias_delete_ilias_courses" value="1" <?= !empty($ilias_config['delete_ilias_courses'] )? 'checked' : '' ?>> <span><?= _('Beim Löschen von Stud.IP-Veranstaltungen ILIAS-Kurse ebenfalls löschen (alle untergeordneten Objekte werden gelöscht!)') ?></span> </label> <label> diff --git a/lib/ilias_interface/IliasSoap.php b/lib/ilias_interface/IliasSoap.php index 7911e9e2af0bdaffeacad9dbf55ee03dc1bc54d3..645170c647c07d1d395124244da3a02b50860780 100644 --- a/lib/ilias_interface/IliasSoap.php +++ b/lib/ilias_interface/IliasSoap.php @@ -934,6 +934,11 @@ class IliasSoap extends StudipSoapClient $user_array['email'] = (string)$user->Email; $user_array['active'] = (string)$user->Active; $user_array['authmode'] = (string)$user->AuthMode->attributes()->type; + if (isset($user->UserDefinedField)) { + foreach ($user->UserDefinedField as $field) { + $user_array['udfs'][] = ['id' => (string)$field->attributes()->Id, 'name' => (string)$field->attributes()->Name]; + } + } return $user_array; } } @@ -1021,7 +1026,9 @@ class IliasSoap extends StudipSoapClient { $this->clearCache(); foreach($user_data as $key => $value) { - $user_data[$key] = htmlReady($user_data[$key]); + if (!is_array($value)) { + $user_data[$key] = htmlReady($user_data[$key]); + } } $update = $user_data["id"]; @@ -1050,8 +1057,13 @@ class IliasSoap extends StudipSoapClient $usr_xml .= "<Look Skin=\"".$user_data["user_skin"]."\" Style=\"".$user_data["user_style"]."\"/>"; } $usr_xml .= "<AuthMode type=\"".$user_data["auth_mode"]."\"/> -<ExternalAccount>".$user_data["external_account"]."</ExternalAccount> -</User> +<ExternalAccount>".$user_data["external_account"]."</ExternalAccount>"; + if (array_key_exists('UDF', $user_data) && is_array($user_data['UDF'])) { + foreach ($user_data['UDF'] as $udf_id => $udf_content) { + $usr_xml .= "<UserDefinedField Id=\"{$udf_id}\" Name=\"".$udf_content['name']."\">".htmlReady($udf_content['value'])."</UserDefinedField>"; + } + } + $usr_xml .= "</User> </Users>"; $param = [ diff --git a/lib/ilias_interface/IliasUser.php b/lib/ilias_interface/IliasUser.php index 426de8098259c7c35e7ad43440e6d9b83f92485e..da360827689c7fb147355e080cd18f3b04ce4141 100644 --- a/lib/ilias_interface/IliasUser.php +++ b/lib/ilias_interface/IliasUser.php @@ -41,6 +41,7 @@ class IliasUser public $phone_home; public $fax; public $matriculation; + public $disciplines; public $email; public $type; public $is_connected; @@ -156,6 +157,20 @@ class IliasUser if ($this->title_rear != '') { $this->title .= $this->title_rear; } + + $disciplines = UserStudyCourse::findByUser($this->studip_id); + if (is_array($disciplines) && count($disciplines)) { + if ((array_key_exists('discipline_1', $this->ilias_config) && $this->ilias_config['discipline_1']) || (array_key_exists('discipline_2', $this->ilias_config) && $this->ilias_config['discipline_2'])) { + $discipline = reset($disciplines); + if ($discipline) { + $this->disciplines[] = $discipline->studycourse_name . ' ' . $discipline->degree_name; + } + $discipline = next($disciplines); + if ($discipline) { + $this->disciplines[] = $discipline->studycourse_name . ' ' . $discipline->degree_name; + } + } + } return true; } @@ -187,6 +202,15 @@ class IliasUser $user_data['agree_date'] = date('Y-m-d H:i:s'); $user_data['auth_mode'] = 'default'; $user_data['external_account'] = ''; + $user_data['UDF'] = []; + if (is_array($this->disciplines)) { + if (is_array($this->ilias_config) && array_key_exists('discipline_1', $this->ilias_config) && array_key_exists(0, $this->disciplines)) { + $user_data['UDF'][$this->ilias_config['discipline_1']['id']] = ['name' => $this->ilias_config['discipline_1']['name'], 'value' => $this->disciplines[0]]; + } + if (is_array($this->ilias_config) && array_key_exists('discipline_2', $this->ilias_config) && array_key_exists(1, $this->disciplines)) { + $user_data['UDF'][$this->ilias_config['discipline_2']['id']] = ['name' => $this->ilias_config['discipline_2']['name'], 'value' => $this->disciplines[1]]; + } + } return $user_data; }