Skip to content
Snippets Groups Projects
Commit 6ed13d51 authored by Arne Schröder, M. A.'s avatar Arne Schröder, M. A. Committed by André Noack
Browse files

Resolve "Übergabe von Matrikelnummern und Studiengängen durch die ILIAS-Schnittstelle"

Closes #4271

Merge request studip/studip!3369
parent fb3184b6
No related branches found
No related tags found
No related merge requests found
......@@ -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');
}
......
......@@ -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>
......
......@@ -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,8 +1026,10 @@ class IliasSoap extends StudipSoapClient
{
$this->clearCache();
foreach($user_data as $key => $value) {
if (!is_array($value)) {
$user_data[$key] = htmlReady($user_data[$key]);
}
}
$update = $user_data["id"];
$usr_xml = "<Users>
......@@ -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 = [
......
......@@ -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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment