forked from extern/egroupware
* Admin: fix fatal error in admin >> bulk password reset
This commit is contained in:
parent
a71d0d7a80
commit
df39e04e95
@ -5,7 +5,7 @@
|
||||
* @link http://www.egroupware.org
|
||||
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @package admin
|
||||
* @copyright (c) 2011 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @copyright (c) 2011-14 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
* @version $Id$
|
||||
*/
|
||||
@ -54,8 +54,8 @@ class admin_passwordreset
|
||||
/**
|
||||
* Reset passwords
|
||||
*
|
||||
* @param array $content=null
|
||||
* @param string $msg=''
|
||||
* @param array $content =null
|
||||
* @param string $msg =''
|
||||
*/
|
||||
function index(array $content=null, $msg='')
|
||||
{
|
||||
@ -105,6 +105,7 @@ class admin_passwordreset
|
||||
}
|
||||
$change_pw = $content['random_pw'] || $content['hash'] && $content['hash'] != $current_hash;
|
||||
$changed = array();
|
||||
$emailadmin = null;
|
||||
foreach($content['users'] as $account_id)
|
||||
{
|
||||
if (($account = $GLOBALS['egw']->accounts->read($account_id)))
|
||||
@ -156,8 +157,12 @@ class admin_passwordreset
|
||||
{
|
||||
if (!isset($emailadmin))
|
||||
{
|
||||
$emailadmin = new emailadmin_bo();
|
||||
$domain = $GLOBALS['egw_info']['server']['mail_suffix'];
|
||||
$emailadmin = emailadmin_account::get_default();
|
||||
if (!emailadmin_account::is_multiple($emailadmin))
|
||||
{
|
||||
$msg = lang('No default account found!');
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (($userData = $emailadmin->getUserData ($account_id)))
|
||||
{
|
||||
@ -171,11 +176,11 @@ class admin_passwordreset
|
||||
}
|
||||
if (strpos($content['mail']['domain'], '.') !== false)
|
||||
{
|
||||
$userData['mailLocalAddress'] = preg_replace('/@'.preg_quote($domain).'$/', '@'.$content['mail']['domain'], $userData['mailLocalAddress']);
|
||||
$userData['mailLocalAddress'] = preg_replace('/@'.preg_quote($emailadmin->acc_domain).'$/', '@'.$content['mail']['domain'], $userData['mailLocalAddress']);
|
||||
|
||||
foreach($userData['mailAlternateAddress'] as &$alias)
|
||||
{
|
||||
$alias = preg_replace('/@'.preg_quote($domain).'$/', '@'.$content['mail']['domain'], $alias);
|
||||
$alias = preg_replace('/@'.preg_quote($emailadmin->acc_domain).'$/', '@'.$content['mail']['domain'], $alias);
|
||||
}
|
||||
}
|
||||
$emailadmin->saveUserData($account_id, $userData);
|
||||
@ -215,6 +220,7 @@ class admin_passwordreset
|
||||
}
|
||||
catch (phpmailerException $e)
|
||||
{
|
||||
unset ($e);
|
||||
$msg .= lang('Notifying account "%1" %2 failed!',$account['account_lid'],$account['account_email']).
|
||||
': '.strip_tags(str_replace('<p>',"\n",$send->ErrorInfo))."\n";
|
||||
}
|
||||
@ -247,7 +253,7 @@ class admin_passwordreset
|
||||
|
||||
$GLOBALS['egw_info']['flags']['app_header'] = lang('Bulk password reset');
|
||||
|
||||
$tmpl = new etemplate('admin.passwordreset');
|
||||
$tmpl = new etemplate_new('admin.passwordreset');
|
||||
$tmpl->exec('admin.admin_passwordreset.index',$content,$sel_options,$readonlys,array(
|
||||
'changed' => $changed,
|
||||
));
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- $Id$ -->
|
||||
<overlay>
|
||||
<template id="admin.passwordreset" template="" lang="" group="0" version="1.9.001">
|
||||
<template id="admin.passwordreset" template="" lang="" group="0" version="14.1">
|
||||
<grid>
|
||||
<columns>
|
||||
<column/>
|
||||
@ -9,11 +9,6 @@
|
||||
<column/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row disabled="!@msg">
|
||||
<description id="msg" span="all" class="redItalic"/>
|
||||
<description/>
|
||||
<description/>
|
||||
</row>
|
||||
<row>
|
||||
<description value="Select users"/>
|
||||
<description/>
|
||||
@ -32,7 +27,7 @@
|
||||
<menulist>
|
||||
<menupopup type="select-bool" label="Can change password" id="changepassword" onchange="var mustchange=document.getElementById(form::name('mustchangepassword')); if (this.value=='0' && mustchange.value) mustchange.value='0';" options="Leave unchanged"/>
|
||||
</menulist>
|
||||
<hbox options="0,0">
|
||||
<hbox>
|
||||
<menulist>
|
||||
<menupopup label="Change password hash to" id="hash" options="Leave unchanged"/>
|
||||
</menulist>
|
||||
@ -52,8 +47,8 @@
|
||||
<row valign="top">
|
||||
<groupbox>
|
||||
<caption label="Notification mail"/>
|
||||
<textbox blur="Subject" id="subject" size="64"/>
|
||||
<textbox multiline="true" id="body" rows="15" cols="64"/>
|
||||
<textbox blur="Subject" id="subject" size="64" class="et2_fullWidth"/>
|
||||
<textbox multiline="true" id="body" rows="15" cols="64" class="et2_fullWidth"/>
|
||||
</groupbox>
|
||||
<vbox>
|
||||
<description value="Available placeholders" class="gray"/>
|
||||
|
@ -1318,12 +1318,13 @@ class emailadmin_account implements ArrayAccess
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ID of default mail account for either IMAP or SMTP
|
||||
* Get default mail account object either for IMAP or SMTP
|
||||
*
|
||||
* @param boolean $smtp =false false: usable for IMAP, true: usable for SMTP
|
||||
* @return int
|
||||
* @param boolean $return_id =false true: return acc_id, false return account object
|
||||
* @return emailadmin_account|null
|
||||
*/
|
||||
static function get_default_acc_id($smtp=false)
|
||||
static function get_default($smtp=false, $return_id=false)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -1356,7 +1357,8 @@ class emailadmin_account implements ArrayAccess
|
||||
// continue if we have either no imap username or password
|
||||
if (!$account->is_imap()) continue;
|
||||
}
|
||||
return $acc_id;
|
||||
return $return_id ? $acc_id : (isset($account) && $account->acc_id == $acc_id ?
|
||||
$account : new emailadmin_account($params));
|
||||
}
|
||||
}
|
||||
catch (Exception $e)
|
||||
@ -1366,6 +1368,17 @@ class emailadmin_account implements ArrayAccess
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ID of default mail account for either IMAP or SMTP
|
||||
*
|
||||
* @param boolean $smtp =false false: usable for IMAP, true: usable for SMTP
|
||||
* @return int
|
||||
*/
|
||||
static function get_default_acc_id($smtp=false)
|
||||
{
|
||||
return self::get_default($smtp, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* build an identity name
|
||||
*
|
||||
|
@ -1,241 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* EGroupware EMailAdmin: Business logic
|
||||
*
|
||||
* @link http://www.stylite.de
|
||||
* @package emailadmin
|
||||
* @author Ralf Becker <rb@stylite.de>
|
||||
* @author Klaus Leithoff <kl@stylite.de>
|
||||
* @author Lars Kneschke
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
* @version $Id$
|
||||
*/
|
||||
|
||||
/**
|
||||
* Business logic
|
||||
*/
|
||||
class emailadmin_bo
|
||||
{
|
||||
/**
|
||||
* Name of app the table is registered
|
||||
*/
|
||||
const APP = 'emailadmin';
|
||||
|
||||
static $sessionData = array();
|
||||
#var $userSessionData;
|
||||
var $LDAPData;
|
||||
|
||||
//var $SMTPServerType = array(); // holds a list of config options
|
||||
static $SMTPServerType = array(
|
||||
'emailadmin_smtp' => array(
|
||||
'description' => 'standard SMTP-Server',
|
||||
'classname' => 'emailadmin_smtp'
|
||||
),
|
||||
);
|
||||
//var $IMAPServerType = array(); // holds a list of config options
|
||||
static $IMAPServerType = array(
|
||||
'defaultimap' => array(
|
||||
'description' => 'standard IMAP server',
|
||||
'protocol' => 'imap',
|
||||
'classname' => 'defaultimap'
|
||||
)
|
||||
);
|
||||
|
||||
var $imapClass; // holds the imap/pop3 class
|
||||
var $smtpClass; // holds the smtp class
|
||||
var $tracking; // holds the tracking object
|
||||
|
||||
/**
|
||||
* @var emailadmin_so
|
||||
*/
|
||||
var $soemailadmin;
|
||||
|
||||
function __construct($_profileID=false,$_restoreSesssion=true)
|
||||
{
|
||||
//error_log(__METHOD__.function_backtrace());
|
||||
if (!is_object($GLOBALS['emailadmin_bo']))
|
||||
{
|
||||
$GLOBALS['emailadmin_bo'] = $this;
|
||||
}
|
||||
//init with all servertypes and translate the standard entry description
|
||||
self::$SMTPServerType = self::getSMTPServerTypes();
|
||||
self::$IMAPServerType = self::getIMAPServerTypes();
|
||||
self::$SMTPServerType['emailadmin_smtp']['description'] = lang('standard SMTP-Server');
|
||||
self::$IMAPServerType['defaultimap']['description'] = lang('standard IMAP Server');
|
||||
if ($_restoreSesssion) // && !(is_array(self::$sessionData) && (count(self::$sessionData)>0)) )
|
||||
{
|
||||
$this->restoreSessionData();
|
||||
}
|
||||
if ($_restoreSesssion===false) // && (is_array(self::$sessionData) && (count(self::$sessionData)>0)) )
|
||||
{
|
||||
// make sure session data will be created new
|
||||
self::$sessionData = array();
|
||||
self::saveSessionData();
|
||||
}
|
||||
#_debug_array(self::$sessionData);
|
||||
}
|
||||
|
||||
function getAccountEmailAddress($_accountName, $_profileID)
|
||||
{
|
||||
$profileData = $this->getProfile($_profileID);
|
||||
|
||||
#$smtpClass = self::$SMTPServerType[$profileData['smtpType']]['classname'];
|
||||
if ($profileData['smtpType']=='defaultsmtp') $profileData['smtpType']='emailadmin_smtp';
|
||||
$smtpClass = CreateObject('emailadmin.'.self::$SMTPServerType[$profileData['smtpType']]['classname']);
|
||||
|
||||
#return empty($smtpClass) ? False : ExecMethod("emailadmin.$smtpClass.getAccountEmailAddress",$_accountName,3,$profileData);
|
||||
return is_object($smtpClass) ? $smtpClass->getAccountEmailAddress($_accountName) : False;
|
||||
}
|
||||
|
||||
function getMailboxString($_folderName)
|
||||
{
|
||||
if (is_object($this->imapClass))
|
||||
{
|
||||
return ExecMethod("emailadmin.".$this->imapClass.".getMailboxString",$_folderName,3,$this->profileData);
|
||||
return $this->imapClass->getMailboxString($_folderName);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of supported SMTP servers
|
||||
*
|
||||
* Calls hook "smtp_server_types" to allow applications to supply own server-types
|
||||
*
|
||||
* @return array classname => label pairs
|
||||
* @deprecated use emailadmin_base::getSMTPServerTypes()
|
||||
*/
|
||||
static public function getSMTPServerTypes($extended=true)
|
||||
{
|
||||
return emailadmin_base::getSMTPServerTypes($extended);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of supported IMAP servers
|
||||
*
|
||||
* Calls hook "imap_server_types" to allow applications to supply own server-types
|
||||
*
|
||||
* @param boolean $extended=true
|
||||
* @return array classname => label pairs
|
||||
* @deprecated use emailadmin_base::getIMAPServerTypes()
|
||||
*/
|
||||
static public function getIMAPServerTypes($extended=true)
|
||||
{
|
||||
return emailadmin_base::getIMAPServerTypes($extended);
|
||||
}
|
||||
|
||||
/**
|
||||
* Query user data from incomming (IMAP) and outgoing (SMTP) mail-server
|
||||
*
|
||||
* @param int $_accountID
|
||||
* @return array
|
||||
*/
|
||||
function getUserData($_accountID)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
function restoreSessionData()
|
||||
{
|
||||
$GLOBALS['egw_info']['flags']['autoload'] = array(__CLASS__,'autoload');
|
||||
|
||||
//echo function_backtrace()."<br>";
|
||||
//unserializing the sessiondata, since they are serialized for objects sake
|
||||
self::$sessionData = (array) unserialize($GLOBALS['egw']->session->appsession('session_data','emailadmin'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Autoload classes from emailadmin, 'til they get autoloading conform names
|
||||
*
|
||||
* @param string $class
|
||||
*/
|
||||
static function autoload($class)
|
||||
{
|
||||
if (strlen($class)<100)
|
||||
{
|
||||
if (file_exists($file=EGW_INCLUDE_ROOT.'/emailadmin/inc/class.'.$class.'.inc.php'))
|
||||
{
|
||||
include_once($file);
|
||||
}
|
||||
elseif (strpos($class,'activesync')===0)
|
||||
{
|
||||
//temporary solution/hack to fix the false loading of activesync stuff, even as we may not need it for ui
|
||||
//but trying to load it blocks the mail app
|
||||
//error_log(__METHOD__.__LINE__.' '.$class);
|
||||
include_once(EGW_INCLUDE_ROOT.'/activesync/backend/egw.php');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy)
|
||||
{
|
||||
if (is_object($this->smtpClass))
|
||||
{
|
||||
#$smtpClass = CreateObject('emailadmin.'.$this->smtpClass,$this->profileID);
|
||||
#$smtpClass->saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy);
|
||||
$this->smtpClass->saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* called by the validation hook in setup
|
||||
*
|
||||
* @param array $settings following keys: mail_server, mail_server_type {IMAP|IMAPS|POP-3|POP-3S},
|
||||
* mail_login_type {standard|vmailmgr}, mail_suffix (domain), smtp_server, smtp_port, smtp_auth_user, smtp_auth_passwd
|
||||
*/
|
||||
function setDefaultProfile($settings)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
function saveSessionData()
|
||||
{
|
||||
// serializing the session data, for the sake of objects
|
||||
if (is_object($GLOBALS['egw']->session)) // otherwise setup(-cli) fails
|
||||
{
|
||||
$GLOBALS['egw']->session->appsession('session_data','emailadmin',serialize(self::$sessionData));
|
||||
}
|
||||
#$GLOBALS['egw']->session->appsession('user_session_data','',$this->userSessionData);
|
||||
}
|
||||
|
||||
function updateAccount($_hookValues) {
|
||||
if (is_object($this->imapClass)) {
|
||||
#ExecMethod("emailadmin.".$this->imapClass.".updateAccount",$_hookValues,3,$this->profileData);
|
||||
$this->imapClass->updateAccount($_hookValues);
|
||||
}
|
||||
|
||||
if (is_object($this->smtpClass)) {
|
||||
#ExecMethod("emailadmin.".$this->smtpClass.".updateAccount",$_hookValues,3,$this->profileData);
|
||||
$this->smtpClass->updateAccount($_hookValues);
|
||||
}
|
||||
self::$sessionData = array();
|
||||
$this->saveSessionData();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ID of default new account profile
|
||||
*
|
||||
* @return int
|
||||
* @deprecated use emailadmin_account::get_default_acc_id()
|
||||
*/
|
||||
static function getDefaultAccID()
|
||||
{
|
||||
return emailadmin_account::get_default_acc_id();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ID of User specific default new account profile
|
||||
*
|
||||
* @return int
|
||||
* @deprecated use emailadmin_account::get_default_acc_id()
|
||||
*/
|
||||
static function getUserDefaultAccID()
|
||||
{
|
||||
return emailadmin_account::get_default_acc_id();
|
||||
}
|
||||
}
|
@ -179,7 +179,7 @@ class emailadmin_imapbase
|
||||
{
|
||||
//$_restoreSession=false;
|
||||
if (is_null($_reuseCache)) $_reuseCache = $_restoreSession;
|
||||
//error_log(__METHOD__.' ('.__LINE__.') '.' RestoreSession:'.$_restoreSession.' ProfileId:'.$_profileID.'/'.emailadmin_bo::getUserDefaultAccID().' for user:'.$GLOBALS['egw_info']['user']['account_lid'].' called from:'.function_backtrace());
|
||||
//error_log(__METHOD__.' ('.__LINE__.') '.' RestoreSession:'.$_restoreSession.' ProfileId:'.$_profileID.'/'.emailadmin_account::get_default_acc_id().' for user:'.$GLOBALS['egw_info']['user']['account_lid'].' called from:'.function_backtrace());
|
||||
//error_log(__METHOD__.' ('.__LINE__.') '.array2string($_oldImapServerObject));
|
||||
if ($_oldImapServerObject instanceof emailadmin_imap)
|
||||
{
|
||||
@ -202,7 +202,7 @@ class emailadmin_imapbase
|
||||
}
|
||||
else
|
||||
{
|
||||
$profileID = emailadmin_bo::getUserDefaultAccID();
|
||||
$profileID = emailadmin_account::get_default_acc_id();
|
||||
}
|
||||
if ($profileID!=$_profileID) $_restoreSession==false;
|
||||
$_profileID=$profileID;
|
||||
@ -247,7 +247,7 @@ class emailadmin_imapbase
|
||||
self::$instances[$_profileID]->htmlOptions = self::$instances[$_profileID]->mailPreferences['htmlOptions'];
|
||||
} catch (egw_exception $e)
|
||||
{
|
||||
$newprofileID = emailadmin_bo::getUserDefaultAccID();
|
||||
$newprofileID = emailadmin_account::get_default_acc_id();
|
||||
// try loading the default profile for the user
|
||||
error_log(__METHOD__.' ('.__LINE__.') '." Loading the Profile for ProfileID ".$_profileID.' failed for icServer; '.$e->getMessage().' Trigger new instance for Default-Profile '.$newprofileID.'. called from:'.function_backtrace());
|
||||
if ($newprofileID)
|
||||
@ -284,7 +284,7 @@ class emailadmin_imapbase
|
||||
}
|
||||
else
|
||||
{
|
||||
$oldProfileID = emailadmin_bo::getUserDefaultAccID();
|
||||
$oldProfileID = emailadmin_account::get_default_acc_id();
|
||||
}
|
||||
if ($_testConnection)
|
||||
{
|
||||
@ -294,7 +294,7 @@ class emailadmin_imapbase
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
if ($_profileID != emailadmin_bo::getUserDefaultAccID()) $_profileID = emailadmin_bo::getUserDefaultAccID();
|
||||
if ($_profileID != emailadmin_account::get_default_acc_id()) $_profileID = emailadmin_account::get_default_acc_id();
|
||||
error_log(__METHOD__.__LINE__.' '.$e->getMessage());
|
||||
return false;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user