egroupware_official/emailadmin/inc/class.emailadmin_hooks.inc.php
Ralf Becker 3e40eaf0cb * API/Addressbook/EMailAdmin: full support for active directory as account storage, tested with Samba4 and win2008r2
Trunk commits r42507, r42545, r42556, r42557, r42612, r42630
plugin to support Active Directory to store email configuration (in proxyAddresses attribute, no Exchange schema and support!), also fully autodetecting plugins now in emailadmin/inc directory
2013-06-06 07:21:42 +00:00

166 lines
5.0 KiB
PHP

<?php
/**
* eGroupWare - eMailAdmin hooks
*
* @link http://www.egroupware.org
* @package emailadmin
* @author Klaus Leithoff <leithoff-AT-stylite.de>
* @copyright (c) 2008-8 by leithoff-At-stylite.de
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
/**
* diverse static emailadmin hooks
*/
class emailadmin_hooks
{
// hook to plug in into admin (managable) applications list
static function admin()
{
// Only Modify the $file and $title variables.....
$title = $appname = 'emailadmin';
$file = Array(
'Site Configuration' => $GLOBALS['egw']->link('/index.php','menuaction=emailadmin.emailadmin_ui.index')
);
//Do not modify below this line
display_section($appname,$title,$file);
}
/**
* Hook called if account emailadim settings has to be modified
*
* @param array $data
* @param int $data['account_id'] numerical id
*/
static function edit_user($data)
{
//echo "called hook and function<br>".function_backtrace()."<br>";
//_debug_array($data);
if ($data['account_id'] && // can't set it on add
$GLOBALS['egw_info']['user']['apps']['emailadmin'])
{
$GLOBALS['menuData'][] = array(
'description' => 'eMailAdmin: User assigned Profile',
'url' => '/index.php',
'extradata' => 'menuaction=emailadmin.emailadmin_ui.index'
);
}
}
/**
* Hook called after group emailadim settings has to be modified
*
* @param array $data
* @param int $data['account_id'] numerical id
*/
static function edit_group($data)
{
#echo "called hook and function<br>";
#_debug_array($data);
# somehow the $data var seems to be quite sparsely populated, so we dont check any further
if (#!empty($data['account_id']) && $data['account_id'] < 0 && // can't set it on add
$GLOBALS['egw_info']['user']['apps']['emailadmin'])
{
$GLOBALS['menuData'][] = array(
'description' => 'eMailAdmin: Group assigned Profile',
'url' => '/index.php',
'extradata' => 'menuaction=emailadmin.emailadmin_ui.index'
);
}
}
/**
* Hook called before an account get deleted
*
* @param array $data
* @param int $data['account_id'] numerical id
* @param string $data['account_lid'] account-name
* @param int $data['new_owner'] account-id of new owner, or false if data should get deleted
*/
static function deleteaccount(array $data)
{
if((int)$data['account_id'] > 0 &&
$GLOBALS['egw_info']['user']['apps']['emailadmin'])
{
$boemailadmin = new emailadmin_bo();
$profileList = $boemailadmin->getProfileList($profileID,$appName,$groupID,(int) $data['account_id']);
if (is_array($profileList)) {
foreach ($profileList as $key => $value) {
$boemailadmin->delete($value['profileID']);
}
}
}
}
/**
* Hook called before a group get deleted
*
* @param array $data
* @param int $data['account_id'] numerical id
* @param string $data['account_name'] account-name
*/
static function deletegroup(array $data)
{
if ((int)$data['account_id'] < 0 &&
$GLOBALS['egw_info']['user']['apps']['emailadmin'])
{
$boemailadmin = new emailadmin_bo();
$profileList = $boemailadmin->getProfileList($profileID,$appName,(int) $data['account_id'],$accountID);
if (is_array($profileList)) {
foreach ($profileList as $key => $value) {
$boemailadmin->soemailadmin->deleteProfile($value['profileID']);
}
}
}
}
/**
* Detect imap and smtp server plugins from EMailAdmin's inc directory
*
* @param string|array $data location string or array with key 'location' and other params
* @return array
*/
public static function server_types($data)
{
$location = is_array($data) ? $data['location'] : $data;
$extended = is_array($data) ? $data['extended'] : false;
$types = array();
foreach(scandir($dir=EGW_INCLUDE_ROOT.'/emailadmin/inc') as $file)
{
if (!preg_match('/^class\.([^.]*(smtp|imap|postfix|dovecot|dbmail)[^.*]*)\.inc\.php$/', $file, $matches)) continue;
$class_name = $matches[1];
include_once($dir.'/'.$file);
if (!class_exists($class_name)) continue;
$is_imap = $class_name == 'defaultimap' || is_subclass_of($class_name, 'defaultimap');
$is_smtp = $class_name == 'emailadmin_smtp' || is_subclass_of($class_name, 'emailadmin_smtp') && $class_name != 'defaultsmtp';
if ($is_smtp && $location == 'smtp_server_types' || $is_imap && $location == 'imap_server_types')
{
$type = array(
'classname' => $class_name,
'description' => is_callable($function=$class_name.'::description') ? call_user_func($function) : $class_name,
);
if ($is_imap) $type['protocol'] = 'imap';
$types[$class_name] = $type;
}
}
if (!$extended)
{
foreach($types as $class_name => &$type)
{
$type = $type['description'];
}
}
//error_log(__METHOD__."(".array2string($data).") returning ".array2string($types));
return $types;
}
}