X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fgroups%2Fclass_groupMail.inc;h=b4bdc2962562fe5a5a8d1c9cd3ae86f04cccd983;hb=8d25a981707ac7e708aca0ed6216c5379a1228f8;hp=32ae8a21dde9d536b81a00172b9da46d6a323425;hpb=8e377b062f516e80dc563022e969d52a4bb89b2b;p=gosa.git diff --git a/plugins/admin/groups/class_groupMail.inc b/plugins/admin/groups/class_groupMail.inc index 32ae8a21d..b4bdc2962 100644 --- a/plugins/admin/groups/class_groupMail.inc +++ b/plugins/admin/groups/class_groupMail.inc @@ -9,6 +9,7 @@ class mailgroup extends plugin var $uid = ""; // User id var $cn = ""; // cn + var $orig_cn = ""; // cn var $method = "mailMethod"; // Used Mail method var $mmethod = ""; // Contains the gosa.conf MAILMETHOD @@ -40,14 +41,18 @@ class mailgroup extends plugin var $perms = array(); var $gosaMailDeliveryMode = "[L ]"; // var $gosaMailMaxSize = ""; // - + + var $remove_folder_from_imap = true; /* Helper */ var $indexed_acl= array(); var $indexed_user= array(); + /* Copy & paste */ + var $CopyPasteVars = array("quotaUsage","imapacl"); + /* attribute list for save action */ - var $attributes= array( "mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize", + var $attributes= array( "mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize", "gosaMailAlternateAddress", "gosaMailForwardingAddress", "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox", "acl","gosaSharedFolderTarget", "gosaVacationMessage"); @@ -55,11 +60,14 @@ class mailgroup extends plugin var $objectclasses= array("gosaMailAccount"); - function mailgroup ($config, $dn= NULL, $ui= NULL) + function mailgroup ($config, $dn= NULL, $parent= NULL) { /* Initialise all available attributes ... if possible */ - plugin::plugin($config, $dn); + plugin::plugin($config, $dn, $parent); + + /* Save initial cn */ + $this->orig_cn = $this->cn; /* Set mailMethod to the one defined in gosa.conf */ @@ -112,10 +120,7 @@ class mailgroup extends plugin $method= new $this->method($this->config); if ($method->connect($this->attrs["gosaMailServer"][0])){ - - /* get Quota - */ - $quota= $method->getQuota($this->uid); + /* Maybe the entry is not saved in new style, get permissions from IMAP and convert them to acl attributes */ @@ -154,21 +159,30 @@ class mailgroup extends plugin } } // ENDE ! isset ($this->attrs['acl']) + + /* Adapt attributes if needed */ + $method->fixAttributesOnLoad($this); + + /* get Quota */ + $quota= $method->getQuota($this->uid); /* Update quota values */ - if ($quota['gosaMailQuota'] == 2147483647){ - $this->quotaUsage= ""; - $this->gosaMailQuota= ""; - } else { - $this->quotaUsage= $quota['quotaUsage']; - $this->gosaMailQuota= $quota['gosaMailQuota']; + if(is_array($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->uid)); } $method->disconnect(); } // ENDE $method->connect($this->attrs["gosaMailServer"][0])){ - /* Adapt attributes if needed */ - $method->fixAttributesOnLoad($this); - } // ENDE gosaMailServer } // ENDE dn != "new" @@ -269,6 +283,11 @@ class mailgroup extends plugin } } + /* Load Mailserver + */ + if(isset($this->attrs['gosaMailServer'][0])){ + $this->gosaMailServer = $this->attrs['gosaMailServer'][0]; + } /* Fill translations */ $this->perms["lrs"]= _("read"); $this->perms["lrsp"]= _("post"); @@ -284,6 +303,7 @@ class mailgroup extends plugin /* Load templating engine */ $smarty= get_smarty(); + $display = ""; if ($_SESSION['js']==FALSE){ $smarty->assign("javascript", "false"); } else { @@ -297,7 +317,8 @@ class mailgroup extends plugin /* Do we represent a valid account? */ if (!$this->is_account && $this->parent == NULL){ - $display= "\"\" ". + + $display.= "\"\" ". _("This 'dn' has no valid mail extensions.").""; return ($display); } @@ -309,8 +330,23 @@ class mailgroup extends plugin $display= $this->show_header(_("Remove mail account"), _("This account has mail features enabled. You can disable them by clicking below.")); } else { - $display= $this->show_header(_("Create mail account"), + $display.= $this->show_header(_("Create mail account"), _("This account has mail features disabled. You can enable them by clicking below.")); + + /* Show checkbox that allows us to remove imap entry too*/ + if($this->initially_was_account){ + + $c = ""; + if($this->remove_folder_from_imap){ + $c= " checked "; + } + + $display .= "

Shared folder delete options

+ "; + $display .= _("Remove the shared folder and all its contents after saving this account"); + } + return ($display); } } @@ -460,7 +496,8 @@ class mailgroup extends plugin } $acl= array($this->config->current['BASE'] => ":all"); - $res= get_list($acl, "(&(objectClass=gosaMailAccount)$filter)", TRUE, $gmailfilter['depselect'], array("sn", "mail", "givenName"), TRUE); + $res= get_list("(&(objectClass=gosaMailAccount)$filter)", $acl, $gmailfilter['depselect'], + array("sn", "mail", "givenName"), GL_SUBSEARCH | GL_SIZELIMIT); $ldap->cd($gmailfilter['depselect']); $ldap->search ("(&(objectClass=gosaMailAccount)$filter)", array("sn", "mail", "givenName")); error_reporting (0); @@ -569,7 +606,6 @@ class mailgroup extends plugin */ if(isset($this->config->current['MAILMETHOD'])&&preg_match("/kolab/i",$this->config->current['MAILMETHOD'])){ $this->attributes[]="acl"; - $this->attributes[]="kolabHomeServer"; $this->objectclasses[] = "kolabSharedFolder"; } /* include global link_info */ @@ -583,24 +619,24 @@ class mailgroup extends plugin $this->attrs['gosaMailForwardingAddress']= array(); $this->attrs['gosaSharedFolderTarget']= array(); - /* Keep uid */ - unset ($this->attrs['uid']); - $ldap->cd($this->dn); - $this->cleanup(); - $ldap->modify ($this->attrs); - - show_ldap_error($ldap->get_error()); - /* Connect to IMAP server for account deletion */ - if ($this->is_account){ + if ($this->initially_was_account){ + $method= new $this->method($this->config); - if ($method->connect($this->attrs["gosaMailServer"][0])){ + $method->fixAttributesOnRemove($this); + if ($method->connect($this->gosaMailServer) && $this->remove_folder_from_imap){ + /* Remove account from IMAP server */ $method->deleteMailbox($this->uid); $method->disconnect(); } - $method->fixAttributesOnRemove($this); } + /* Keep uid */ + unset ($this->attrs['uid']); + + $ldap->cd($this->dn); + $ldap->modify ($this->attrs); + show_ldap_error($ldap->get_error(), _("Removing group mail settings failed")); /* Optionally execute a command after we're done */ $this->handle_post_events("remove"); @@ -610,6 +646,16 @@ class mailgroup extends plugin /* Save data to object */ function save_object() { + + /* Check if user wants to remove the shared folder from imap too */ + if($this->initially_was_account && !$this->is_account){ + if(isset($_POST['remove_folder_from_imap'])){ + $this->remove_folder_from_imap = true; + }else{ + $this->remove_folder_from_imap = false; + } + } + /* Assemble mail delivery mode The mode field in ldap consists of values between braces, this must be called when 'mail' is set, because checkboxes may not be set when @@ -686,9 +732,7 @@ I: Only insider delivery */ /* Save arrays */ $this->attrs['gosaMailAlternateAddress'] = $this->gosaMailAlternateAddress; $this->attrs['gosaMailForwardingAddress'] = $this->gosaMailForwardingAddress; - - /* Save shared folder target */ - $this->attrs['gosaSharedFolderTarget']= "share+".$this->uid; + $this->attrs['gosaSharedFolderTarget'] = "share+".$this->uid; if(preg_match("/kolab/i",$this->mmethod)){ /* Save acl's */ @@ -742,11 +786,6 @@ I: Only insider delivery */ /* Exchange '%member%' pseudo entry */ $memberacl= $this->imapacl['%members%']; - if(empty($memberacl)){ - print_a($this); - exit(); - } - foreach ($this->members as $user){ if(preg_match("/kolab/i",$this->mmethod)){ $ldap->cd($this->config->current['BASE']); @@ -771,13 +810,12 @@ I: Only insider delivery */ $ldap->cd($this->dn); $this->cleanup(); $ldap->modify ($this->attrs); - - show_ldap_error($ldap->get_error()); + show_ldap_error($ldap->get_error(), _("Saving group mail settings failed")); /* Optionally execute a command after we're done */ if ($this->initially_was_account == $this->is_account){ if ($this->is_modified){ - $this->handle_post_events("mofify"); + $this->handle_post_events("modify"); } } else { $this->handle_post_events("add"); @@ -789,7 +827,12 @@ I: Only insider delivery */ { $ldap= $this->config->get_ldap_link(); - $message= array(); + /* Call common method to give check the hook */ + $message= plugin::check(); + + if(!$this->is_account) return array(); + + //$message[] = $str; /* must: mail */ if ($this->mail == ""){ @@ -800,11 +843,11 @@ I: Only insider delivery */ } $ldap->cd($this->config->current['BASE']); $ldap->search ("(&(!(objectClass=gosaUserTemplate))(objectClass=gosaMailAccount)(|(mail=".$this->mail.")(gosaMailAlternateAddress=". - $this->mail."))(!(uid=".$this->cn."))(!(cn=".$this->cn.")))"); + $this->mail."))(!(uid=".$this->orig_cn."))(!(cn=".$this->orig_cn.")))"); if ($ldap->count() != 0){ $message[]= _("The primary address you've entered is already in use."); } - + /* Check quota */ if ($this->gosaMailQuota != '' && chkacl ($this->acl, "gosaMailQuota") == ""){ if (!is_numeric($this->gosaMailQuota)) { @@ -938,7 +981,40 @@ I: Only insider delivery */ return ($name); } -} + function getCopyDialog() + { + if(!$this->is_account) return(""); + + $smarty = get_smarty(); + $smarty->assign("gosaMailAlternateAddress",$this->gosaMailAlternateAddress); + $smarty->assign("gosaMailForwardingAddress",$this->gosaMailForwardingAddress); + $smarty->assign("mail",$this->mail); + $display= $smarty->fetch (get_template_path('paste_mail.tpl', TRUE)); + $ret = array(); + $ret['string'] = $display; + $ret['status'] = ""; + return($ret); + } + + function saveCopyDialog() + { + if(!$this->is_account) return; + /* Perform ADD / REMOVE ... for mail alternate / mail forwarding addresses + */ + $this->execute(); + if(isset($_POST['mail'])){ + $this->mail = $_POST['mail']; + } + } + + function PrepareForCopyPaste($source) + { + plugin::PrepareForCopyPaste($source); + + /* Reset alternate mail addresses */ + $this->gosaMailAlternateAddress = array(); + } +} // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>