some fixes for LDAP/ADS account import:

- fix not working "Users, groups and memberships" option
- calling add/edit account/group hooks to eg. create home-directories and mail-accounts
This commit is contained in:
ralf 2022-06-30 15:17:19 +02:00
parent 22c42a8caf
commit b813f403a7
2 changed files with 26 additions and 7 deletions

View File

@ -52,7 +52,7 @@ class Import
{ {
throw new \InvalidArgumentException("Invalid account_import_source='{$GLOBALS['egw_info']['server']['account_import_source']}'!"); throw new \InvalidArgumentException("Invalid account_import_source='{$GLOBALS['egw_info']['server']['account_import_source']}'!");
} }
if (!in_array($type = $GLOBALS['egw_info']['server']['account_import_type'], ['users', 'users_groups'])) if (!in_array($type = $GLOBALS['egw_info']['server']['account_import_type'], ['users', 'users+groups']))
{ {
throw new \InvalidArgumentException("Invalid account_import_type='{$GLOBALS['egw_info']['server']['account_import_type']}'!"); throw new \InvalidArgumentException("Invalid account_import_type='{$GLOBALS['egw_info']['server']['account_import_type']}'!");
} }
@ -77,7 +77,7 @@ class Import
Api\Accounts::cache_invalidate(); // to not get any cached data eg. from the wrong backend Api\Accounts::cache_invalidate(); // to not get any cached data eg. from the wrong backend
$created = $updated = $uptodate = $errors = $deleted = 0; $created = $updated = $uptodate = $errors = $deleted = 0;
if (in_array('groups', explode('_', $type))) if (in_array('groups', explode('+', $type)))
{ {
[$created, $updated, $uptodate, $errors, $deleted] = $this->groups( [$created, $updated, $uptodate, $errors, $deleted] = $this->groups(
$initial_import ? null : $GLOBALS['egw_info']['server']['account_import_lastrun'], $initial_import ? null : $GLOBALS['egw_info']['server']['account_import_lastrun'],
@ -115,8 +115,13 @@ class Import
{ {
unset($sql_account['account_id']); unset($sql_account['account_id']);
} }
if (($account_id = $accounts_sql->save($sql_account, true)) > 0) if (($account_id = $sql_account['account_id'] = $accounts_sql->save($sql_account, true)) > 0)
{ {
// run addaccount hook to create eg. home-directory or mail account
Api\Hooks::process($sql_account+array(
'location' => 'addaccount'
),False,True); // called for every app now, not only enabled ones)
$logger("Successful created user '$account[account_lid]' (#$account[account_id]". $logger("Successful created user '$account[account_lid]' (#$account[account_id]".
($account['account_id'] != $account_id ? " as #$account_id" : '').')', 'detail'); ($account['account_id'] != $account_id ? " as #$account_id" : '').')', 'detail');
} }
@ -152,6 +157,11 @@ class Import
{ {
if ($accounts_sql->save($to_update) > 0) if ($accounts_sql->save($to_update) > 0)
{ {
// run editaccount hook to create eg. home-directory or mail account
Api\Hooks::process($to_update+array(
'location' => 'editaccount'
),False,True); // called for every app now, not only enabled ones)
$logger("Successful updated user '$account[account_lid]' (#$account_id): " . $logger("Successful updated user '$account[account_lid]' (#$account_id): " .
json_encode($diff, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), 'detail'); json_encode($diff, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), 'detail');
if (!$new) $new = false; if (!$new) $new = false;
@ -212,7 +222,7 @@ class Import
} }
} }
// if requested, also set memberships // if requested, also set memberships
if ($type === 'users_groups') if ($type === 'users+groups')
{ {
// we need to convert the account_id's of memberships, in case we use different ones in SQL // we need to convert the account_id's of memberships, in case we use different ones in SQL
$accounts_sql->set_memberships(array_filter(array_map(static function($account_lid) use ($groups) $accounts_sql->set_memberships(array_filter(array_map(static function($account_lid) use ($groups)
@ -327,8 +337,13 @@ class Import
{ {
unset($group['account_id']); unset($group['account_id']);
} }
if (($sql_id = $accounts_sql->save($group, true)) < 0) if (($sql_id = $group['account_id'] = $accounts_sql->save($group, true)) < 0)
{ {
// run addgroup hook to create eg. home-directory or mail account
Api\Hooks::process($group+array(
'location' => 'addgroup'
),False,True); // called for every app now, not only enabled ones)
$logger("Successful created group '$group[account_lid]' (#$account_id".($sql_id != $account_id ? " as #$sql_id" : '').')', 'detail'); $logger("Successful created group '$group[account_lid]' (#$account_id".($sql_id != $account_id ? " as #$sql_id" : '').')', 'detail');
$created++; $created++;
} }
@ -355,6 +370,10 @@ class Import
{ {
if ($accounts_sql->save($group, true) > 0) if ($accounts_sql->save($group, true) > 0)
{ {
Api\Hooks::process($group+array(
'location' => 'editgroup'
),False,True); // called for every app now, not only enabled ones)
$logger("Successful updated group '$group[account_lid]' (#$sql_id): " . $logger("Successful updated group '$group[account_lid]' (#$sql_id): " .
json_encode($diff, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE), 'detail'); json_encode($diff, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE), 'detail');
$updated++; $updated++;

View File

@ -466,8 +466,8 @@
<td>{lang_What_to_import?}:</td> <td>{lang_What_to_import?}:</td>
<td> <td>
<select name="newsettings[account_import_type]"> <select name="newsettings[account_import_type]">
<option value="users" {selected_account_import_source_user}>{lang_just_users}</option> <option value="users" {selected_account_import_type_users}>{lang_just_users}</option>
<option value="users_groups" {selected_account_import_source_users_groups}>{lang_users,_groups_and_memberships}</option> <option value="users+groups" {selected_account_import_type_users+groups}>{lang_users,_groups_and_memberships}</option>
</select> </select>
</td> </td>
</tr> </tr>