fix mass activation of mail-accounts to cope with (multiple) default accounts, different from the one of the current admin-user

This commit is contained in:
ralf 2024-04-10 11:58:53 +02:00
parent 8d4134f683
commit 6d62f6b1d0
3 changed files with 16 additions and 17 deletions

View File

@ -1766,7 +1766,7 @@ class admin_mail
* @param array $_data account an array of data called via long task running dialog * @param array $_data account an array of data called via long task running dialog
* $_data:array ( * $_data:array (
* id => account_id, * id => account_id,
* qouta => quotaLimit, * quota => quotaLimit,
* domain => mailLocalAddress, * domain => mailLocalAddress,
* status => mail activation status('active'|'') * status => mail activation status('active'|'')
* ) * )
@ -1781,24 +1781,22 @@ class admin_mail
$response = Api\Json\Response::get(); $response = Api\Json\Response::get();
if (($account = $GLOBALS['egw']->accounts->read($_data['id']))) if (($account = $GLOBALS['egw']->accounts->read($_data['id'])))
{ {
if ($_data['quota'] !== '' || $_data['accountStatus'] !== '' if ($_data['quota'] !== '' || $_data['accountStatus'] !== '' || strpos($_data['domain'], '.'))
|| strpos($_data['domain'], '.'))
{ {
$emailadmin = Mail\Account::get_default(); $ea_account = Mail\Account::get_default(false, false, false, false, $_data['id']);
if (!Mail\Account::is_multiple($emailadmin)) if (!Mail\Account::is_multiple($ea_account))
{ {
$msg = lang('No default account found!'); $msg = lang('No default account found!');
return $response->data($msg); return $response->data($msg);
} }
$ea_account = Mail\Account::read($emailadmin->acc_id, $_data['id']);
if (($userData = $ea_account->getUserData())) if (($userData = $ea_account->getUserData()))
{ {
$userData = array( $userData = array(
'acc_smtp_type' => $ea_account->acc_smtp_type, 'acc_smtp_type' => $ea_account->acc_smtp_type,
'accountStatus' => $_data['status'], 'accountStatus' => $_data['status'],
'quotaLimit' => $_data['qouta']? $_data['qouta']: $userData['qoutaLimit'], 'quotaLimit' => $_data['quota'] ?: $userData['quotaLimit'],
'mailLocalAddress' => $userData['mailLocalAddress'] 'mailLocalAddress' => $userData['mailLocalAddress'],
); );
if (strpos($_data['domain'], '.') !== false) if (strpos($_data['domain'], '.') !== false)
@ -1810,15 +1808,15 @@ class admin_mail
$alias = preg_replace('/@'.preg_quote($ea_account->acc_domain, '/').'$/', '@'.$_data['domain'], $alias); $alias = preg_replace('/@'.preg_quote($ea_account->acc_domain, '/').'$/', '@'.$_data['domain'], $alias);
} }
} }
// fullfill the saveUserData requirements // fulfill the saveUserData requirements
$userData += $ea_account->params; $userData += $ea_account->params;
$ea_account->saveUserData($_data['id'], $userData); $ea_account->saveUserData($_data['id'], $userData);
$msg = '#'.$_data['id'].' '.$account['account_fullname']. ' '.($userData['accountStatus'] == 'active'? lang('activated'):lang('deactivated')); $msg = $account['account_fullname'].' ('.'#'.$_data['id'].'): '.
($userData['accountStatus'] === 'active' ? lang('activated') : lang('deactivated'));
} }
else else
{ {
$msg = lang('No profile defined for user %1', '#'.$_data['id'].' '.$account['account_fullname']."\n"); $msg = lang('No profile defined for user %1', '#'.$_data['id'].' '.$account['account_fullname']."\n");
} }
} }
} }

View File

@ -1251,7 +1251,7 @@ class AdminApp extends EgwApp
for (var i=0;i< Object.keys(_selected).length;i++) for (var i=0;i< Object.keys(_selected).length;i++)
{ {
accounts[i] = [{id:_selected[i]['id'].split('::')[1],qouta:"", domain:"", status:_action.id == 'active'?_action.id:''}, this.et2._inst.etemplate_exec_id]; accounts[i] = [{id:_selected[i]['id'].split('::')[1],quota:"", domain:"", status:_action.id == 'active'?_action.id:''}, this.et2._inst.etemplate_exec_id];
} }
var callbackDialog = function (btn){ var callbackDialog = function (btn){
if(btn === Et2Dialog.YES_BUTTON) if(btn === Et2Dialog.YES_BUTTON)

View File

@ -1595,13 +1595,14 @@ class Account implements \ArrayAccess
* @param boolean $return_id =false true: return acc_id, false return account object * @param boolean $return_id =false true: return acc_id, false return account object
* @param boolean $log_no_default =true true: error_log if no default found, false be silent * @param boolean $log_no_default =true true: error_log if no default found, false be silent
* @param boolean $user_context =true false: we have no user context, need a smtp-only account or one without password * @param boolean $user_context =true false: we have no user context, need a smtp-only account or one without password
* @param boolean|int $current_user true: search only for current user, false search for all, or integer account_id to search for
* @return Account|int|null * @return Account|int|null
*/ */
static function get_default($smtp=false, $return_id=false, $log_no_default=true, $user_context=true) static function get_default($smtp=false, $return_id=false, $log_no_default=true, $user_context=true, $current_user=true)
{ {
try try
{ {
foreach(self::search(true, 'params') as $acc_id => $params) foreach(self::search($current_user, 'params') as $acc_id => $params)
{ {
if ($smtp) if ($smtp)
{ {
@ -1627,12 +1628,12 @@ class Account implements \ArrayAccess
else else
{ {
if (!$params['acc_imap_host'] || !$params['acc_imap_port']) continue; if (!$params['acc_imap_host'] || !$params['acc_imap_port']) continue;
$account = new Account($params); $account = new Account($params, is_bool($current_user) ? null : $current_user);
// continue if we have either no imap username or password // continue if we have either no imap username or password
if (!$account->is_imap()) continue; if (!$account->is_imap()) continue;
} }
return $return_id ? $acc_id : (isset($account) && $account->acc_id == $acc_id ? return $return_id ? $acc_id : (isset($account) && $account->acc_id == $acc_id ?
$account : new Account($params)); $account : new Account($params, is_bool($current_user) ? null : $current_user));
} }
} }
catch (\Exception $e) catch (\Exception $e)