diff --git a/plugins/personal/mail/class_mailAccount.inc b/plugins/personal/mail/class_mailAccount.inc
index 73ce759dfd631d174a0bb96bec300d6b4a3cbf98..bff7beeb0397a48690f7a5d1a423d8b8a2cdf9d8 100644 (file)
class mailAccount extends plugin
{
/* Definitions */
- var $plHeadline= "Mail";
- var $plDescription= "This does something";
- var $method= "mailMethod";
+ var $plHeadline = "Mail";
+ var $plDescription = "This does something";
+ var $method = "mailMethod";
/* CLI vars */
- var $cli_summary= "Manage users mail account";
- var $cli_description= "Some longer text\nfor help";
- var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
+ var $cli_summary = "Manage users mail account";
+ var $cli_description = "Some longer text\nfor help";
+ var $cli_parameters = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
/* plugin specific values */
- var $mail= "";
- var $uid= "";
- var $gosaMailAlternateAddress= array();
- var $gosaMailForwardingAddress= array();
- var $gosaMailDeliveryMode= "[L ]";
- var $gosaMailServer= "";
- var $gosaMailQuota= "";
- var $gosaMailMaxSize= "";
- var $gosaVacationMessage= "";
- var $gosaSpamSortLevel= "";
- var $gosaSpamMailbox= "";
-
- var $quotaUsage= 0;
- var $forward_dialog= FALSE;
- var $folder_prefix= "";
- var $mailboxList= array();
- var $default_permissions= "none";
- var $member_permissions= "post";
- var $members= array();
- var $admins= array();
- var $vacations= array();
- var $perms= array( "lrs" => "read", "lrsp" => "post", "lrsip" => "append",
- "lrswipcd" => "write", "lrswipcda" => "all" );
+ var $mail = "";
+ var $uid = "";
+ var $gosaMailAlternateAddress = array();
+ var $gosaMailForwardingAddress = array();
+ var $gosaMailDeliveryMode = "[L ]";
+ var $gosaMailServer = "";
+ var $gosaMailQuota = "";
+ var $gosaMailMaxSize = "";
+ var $gosaVacationMessage = "";
+ var $gosaSpamSortLevel = "";
+ var $gosaSpamMailbox = "";
+
+ var $quotaUsage = 0;
+ var $forward_dialog = FALSE;
+ var $folder_prefix = "";
+ var $mailboxList = array();
+ var $default_permissions = "none";
+ var $member_permissions = "post";
+ var $members = array();
+ var $admins = array();
+ var $vacations = array();
+ var $perms = array( "lrs" => "read",
+ "lrsp" => "post",
+ "lrsip" => "append",
+ "lrswipcd" => "write",
+ "lrswipcda" => "all" );
/* attribute list for save action */
var $attributes= array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize","gosaMailForwardingAddress",
"gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox","gosaMailAlternateAddress",
- "gosaVacationMessage", "uid", "gosaMailAlternateAddress", "gosaMailForwardingAddress");
+ "gosaVacationMessage", "gosaMailAlternateAddress", "gosaMailForwardingAddress");
var $objectclasses= array("gosaMailAccount");
'dn' from LDAP */
function mailAccount ($config, $dn= NULL)
{
- /* Configuration is fine, allways */
- $this->config= $config;
-
/* Load bases attributes */
plugin::plugin($config, $dn);
- /* Set mailMethod to the one defined in gosa.conf */
+ if(isset($this->attrs['uid'])){
+ $this->uid = $this->attrs['uid'][0];
+ }
+
+ if(is_array($this->gosaMailServer) && isset($this->gosaMailServer[0])){
+ $this->gosaMailServer = $this->gosaMailServer[0];
+ }
+
+ /* Save initial account state */
+ $this->initially_was_account= $this->is_account;
+
+ /* Set mailMethod to the one defined in gosa.conf */
if (isset($this->config->current['MAILMETHOD'])){
$method= $this->config->current['MAILMETHOD'];
if (class_exists("mailMethod$method")){
}
}
- /* Preset folder prefix. Will change it later to respect
+
+ /* Create the account prefix user. user/
+ Preset folder prefix. Will change it later to respect
altnamespace. */
if (isset($this->config->current['CYRUSUNIXSTYLE']) && $this->config->current['CYRUSUNIXSTYLE'] == "true"){
$this->folder_prefix= "user/";
$this->folder_prefix= "user.";
}
- if ($dn != NULL){
+
+ /* This is not a new account, parse additional attributes */
+ if (($dn != NULL) && ($dn != "new") && $this->is_account){
/* Load attributes containing arrays */
foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){
}
}
+
/* Only do IMAP actions if gosaMailServer attribute is set */
if (isset ($this->attrs["gosaMailServer"][0])){
- $method= new $this->method($this->config);
- $id= $method->uattrib;
+
+ $method = new $this->method($this->config);
+ $id = $method->uattrib;
+
+ /* Adapt attributes if needed */
+ $method->fixAttributesOnLoad($this);
if ($method->connect($this->attrs["gosaMailServer"][0])){
- $quota= $method->getQuota($this->folder_prefix.$this->$id);
/* Update quota values */
- if ($quota['gosaMailQuota'] == 2147483647){
- $this->quotaUsage= "";
- $this->gosaMailQuota= "";
- } else {
- $this->quotaUsage= $quota['quotaUsage'];
- $this->gosaMailQuota= $quota['gosaMailQuota'];
+ $quota= $method->getQuota($this->folder_prefix.$this->$id);
+
+ if($quota){
+ if ($quota['gosaMailQuota'] == 2147483647){
+ $this->quotaUsage = "";
+ $this->gosaMailQuota = "";
+ } else {
+ $this->quotaUsage = $quota['quotaUsage'];
+ $this->gosaMailQuota = $quota['gosaMailQuota'];
+ }
+ }else{
+ $this->quotaUsage = "";
+ $this->gosaMailQuota = "";
+ print_red(sprintf(_("Can't get quota information for '%s'."),$this->folder_prefix.$this->$id));
}
- $this->mailboxList= $method->getMailboxList(
- $this->folder_prefix.$this->$id,
- $this->$id);
+
+ /* Get mailboxes / folder like INBOX ..*/
+ $this->mailboxList= $method->getMailboxList($this->folder_prefix.$this->$id,$this->$id);
+
$method->disconnect();
+ }else{
+ /* Could not connect to ldap.
+ */
+ if (isset($this->attrs['gosaMailQuota'][0])){
+ $this->gosaMailQuota = $this->attrs['gosaMailQuota'][0];
+ }
}
-
- /* Adapt attributes if needed */
- $method->fixAttributesOnLoad($this);
}
}
+
+ /* Get vacation message */
+
/* Fill vacation array */
$this->vacation= array();
if (isset($this->config->current['VACATIONDIR'])){
}
}
+
+ /* Create filter */
+
/* Get global filter config */
if (!is_global("mailfilter")){
$ui= get_userinfo();
"regex" => "*");
register_global("mailfilter", $mailfilter);
}
-
- /* Save initial account state */
- $this->initially_was_account= $this->is_account;
}
function execute()
{
- /* Call parent execute */
- plugin::execute();
+ /* Call parent execute */
+ plugin::execute();
+
+ /* Initialise vars */
/* Load templating engine */
$smarty= get_smarty();
$display= "";
+ /* Get available mailserver */
$mailserver= array();
foreach ($this->config->data['SERVERS']['IMAP'] as $key => $val){
$mailserver[]= $key;
}
+ /* Handle account state */
+
/* Do we need to flip is_account state? */
if (isset($_POST['modify_state'])){
$this->is_account= !$this->is_account;
}
- /* Show main page */
- $mailserver= array();
- foreach ($this->config->data['SERVERS']['IMAP'] as $key => $val){
- $mailserver[]= $key;
- }
-
/* Do we represent a valid account? */
if (!$this->is_account && $this->parent == NULL){
$display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\"> <b>".
}
}
+
+ /* Forwarder subdialog */
+
/* Trigger forward add dialog? */
if (isset($_POST['add_local_forwarder'])){
$this->forward_dialog= TRUE;
}
}
+
+ /* Alternate address handling */
+
/* Add alternate email addresses */
if (isset($_POST['add_alternate'])){
if ($_POST['alternate_address'] != "" &&
}
}
+
+ /* Vocation message */
+
/* Import vacation message? */
if (isset($_POST["import_vacation"]) && isset($this->vacation[$_POST["vacation_template"]])){
$contents= "";
$this->gosaVacationMessage= htmlspecialchars($contents);
}
+
+ /* Display forward dialog if requested above */
+
/* Show forward add dialog */
if ($this->forward_dialog){
$ldap= $this->config->get_ldap_link();
}
$acl= array($this->config->current['BASE'] => ":all");
- $res= get_list($acl, "(&(objectClass=gosaMailAccount)$filter)", TRUE, $mailfilter['depselect'], array("sn", "mail", "givenName"), TRUE);
+ $res= get_list("(&(objectClass=gosaMailAccount)$filter)", $acl, $mailfilter['depselect'],
+ array("sn", "mail", "givenName"), GL_SIZELIMIT | GL_SUBSEARCH);
$ldap->cd($mailfilter['depselect']);
$ldap->search ("(&(objectClass=gosaMailAccount)$filter)", array("sn", "mail", "givenName"));
error_reporting (0);
return ($display);
}
+ /* Display mail account tab */
+
$smarty->assign("mailServers", $mailserver);
foreach(array("gosaMailServer", "gosaMailQuota", "perms", "mail",
"gosaMailAlternateAddress", "gosaMailForwardingAddress",
$smarty->assign("mailACL", "disabled");
}
- /* Fill checkboxes */
+
if (!preg_match("/L/", $this->gosaMailDeliveryMode)) {
$smarty->assign("drop_own_mails", "checked");
} else {
$smarty->assign("drop_own_mails", "");
}
+
+ $types = array(
+ "V"=>"use_vacation",
+ "S"=>"use_spam_filter",
+ "R"=>"use_mailsize_limit",
+ "I"=>"only_local",
+ "C"=>"own_script");
+
+ /* Fill checkboxes */
+ foreach($types as $option => $varname){
+ if (preg_match("/".$option."/", $this->gosaMailDeliveryMode)) {
+ $smarty->assign($varname, "checked");
+ } else {
+ $smarty->assign($varname, "");
+ }
+ }
+
if (preg_match("/V/", $this->gosaMailDeliveryMode)) {
$smarty->assign("use_vacation", "checked");
} else {
$method= new $this->method($this->config);
$method->fixAttributesOnRemove($this);
- /* Mailmethod wants us to remove the entry from LDAP. Keep uid! */
- #fixme: || kolab || is differs here, you can't delete all attrs specified in this plugin ....
- #fixme: there are some attributes we have to keep, i think.
- unset ($this->attrs['uid']);
-
-
-
- @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__,
- $this->attributes, "Save");
+ @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__,$this->attributes, "Save");
$ldap->cd($this->dn);
$this->cleanup();
-$ldap->modify ($this->attrs);
+ $ldap->modify ($this->attrs);
- show_ldap_error($ldap->get_error());
+ show_ldap_error($ldap->get_error(), _("Removing mail account failed"));
/* Connect to IMAP server for account deletion */
if ($this->gosaMailServer != ""){
/* Adapt attributes if needed */
$method= new $this->method($this->config);
$id= $method->uattrib;
+
$method->fixAttributesOnStore($this);
- /* Remove Mailquota if = "" */
- if((isset($this->attrs['gosaMailQuota']))&&($this->attrs['gosaMailQuota']=="")) {
- $this->attrs['gosaMailQuota']=array();
+ /* Remove Mailquota if = "" or "0" */
+ if((isset($this->attrs['gosaMailQuota']))&&(!$this->attrs['gosaMailQuota'])) {
+ $this->attrs['gosaMailQuota']=0;
}
if(empty($this->attrs['gosaSpamMailbox'])){
unset($this->attrs['gosaSpamMailbox']);
}
+ $this->attrs['mail'] = strtolower($this->attrs['mail']);
+
/* Save data to LDAP */
$ldap->cd($this->dn);
$this->cleanup();
-$ldap->modify ($this->attrs);
+ $ldap->modify ($this->attrs);
- show_ldap_error($ldap->get_error());
+ show_ldap_error($ldap->get_error(), _("Saving mail account failed"));
/* Only do IMAP actions if we are not a template */
if (!$this->is_template){
+
if ($method->connect($this->gosaMailServer)){
$method->updateMailbox($this->folder_prefix.$this->$id);
+
$method->setQuota($this->folder_prefix.$this->$id, $this->gosaMailQuota);
$method->disconnect();
}
+
/* Check formular input */
function check()
{
+ if(!$this->is_account) return(array());
+
$ldap= $this->config->get_ldap_link();
- $message= array();
+ /* Call common method to give check the hook */
+ $message= plugin::check();
if(empty($this->gosaMailServer)){
$message[]= _("There is no valid mailserver specified, please add one in the system setup.");
return ($message);
}
+
/* Adapt from template, using 'dn' */
function adapt_from_template($dn)
{
$this->mail= strtolower(rewrite($this->mail));
}
+
/* Add entry to forwarder list */
function addForwarder($address)
{
$this->gosaMailForwardingAddress[]= $address;
$this->gosaMailForwardingAddress= array_unique ($this->gosaMailForwardingAddress);
-
sort ($this->gosaMailForwardingAddress);
reset ($this->gosaMailForwardingAddress);
$this->is_modified= TRUE;
}
+
/* Remove list of addresses from forwarder list */
function delForwarder($addresses)
{
}
-
+ /* Add given mail address to the list of alternate adresses ,
+ check if this mal address is used, skip adding in this case */
function addAlternate($address)
{
$ldap= $this->config->get_ldap_link();
-
$address= strtolower($address);
-
+
/* Is this address already assigned in LDAP? */
$ldap->cd ($this->config->current['BASE']);
$ldap->search ("(&(objectClass=gosaMailAccount)(|(mail=$address)"."(gosaMailAlternateAddress=$address)))", array("uid"));
sort ($this->gosaMailAlternateAddress);
reset ($this->gosaMailAlternateAddress);
-
return ("");
}
return ($name);
}
+
+ /* Create the mail part for the copy & paste dialog */
+ function getCopyDialog()
+ {
+ if(!$this->is_account) return("");
+ $smarty = get_smarty();
+ $smarty->assign("mail",$this->mail);
+ $smarty->assign("gosaMailAlternateAddress",$this->gosaMailAlternateAddress);
+ $smarty->assign("gosaMailForwardingAddress",$this->gosaMailForwardingAddress);
+ $str = $smarty->fetch(get_template_path("copypaste.tpl",TRUE, dirname(__FILE__)));
+
+ $ret = array();
+ $ret['status'] = "";
+ $ret['string'] = $str;
+ return($ret);
+ }
+
+ function saveCopyDialog()
+ {
+ if(!$this->is_account) return;
+
+ /* Execute to save mailAlternateAddress && gosaMailForwardingAddress */
+ $this->execute();
+
+ if(isset($_POST['mail'])){
+ $this->mail = $_POST['mail'];
+ }
+
+ }
+
+ function allow_remove()
+ {
+ if (isset($this->config->current['MAILMETHOD'])){
+ $method= $this->config->current['MAILMETHOD'];
+ if(preg_match("/kolab/i",$method)){
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->config->current['BASE']);
+ $ldap->cat($this->dn);
+ if($ldap->count()){
+ $attrs = $ldap->fetch();
+ if(isset($attrs['kolabDeleteFlag'])){
+ return(_("Waiting for kolab to remove mail properties."));
+ }elseif(in_array("gosaMailAccount",$attrs['objectClass'])){
+ return(_("Please remove the mail account first, to allow kolab to call its remove methods."));
+ }
+ }
+ }
+ }
+ }
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: