diff --git a/gosa-plugins/mail/personal/mail/class_mailAccount.inc b/gosa-plugins/mail/personal/mail/class_mailAccount.inc
index b0d992cdda1bde5fbbca1749695ef0a8512080d4..d5b87ef2e9c3b370544a1e09cc4c8c86e754d48d 100644 (file)
/* If the doamin part is selectable, we have to split the mail address
*/
- if($this->mailMethod->domainSelectionEnabled()){
- $this->mailDomainPart = preg_replace("/^[^@]*+@/","",$this->mail);
- $this->mail = preg_replace("/@.*$/","\\1",$this->mail);
- if(!in_array($this->mailDomainPart,$this->mailDomainParts)){
- $this->mailDomainParts[] = $this->mailDomainPart;
+ if(!(!$this->mailMethod->isModifyableMail() && $this->is_account)){
+ if($this->mailMethod->domainSelectionEnabled()){
+ $this->mailDomainPart = preg_replace("/^[^@]*+@/","",$this->mail);
+ $this->mail = preg_replace("/@.*$/","\\1",$this->mail);
+ if(!in_array($this->mailDomainPart,$this->mailDomainParts)){
+ $this->mailDomainParts[] = $this->mailDomainPart;
+ }
}
}
function execute()
{
+
/* Call parent execute */
$display = plugin::execute();
SMARTY- Assign smarty variables
****************/
$smarty = get_smarty();
+ $smarty->assign("initially_was_account", $this->initially_was_account);
+ $smarty->assign("isModifyableMail", $this->mailMethod->isModifyableMail());
+ $smarty->assign("mailEqualsCN", $this->mailMethod->mailEqualsCN());
+
$SkipWrite = (!isset($this->parent) || !$this->parent) && !session::is_set('edit');
$tmp = $this->plInfo();
foreach($tmp['plProvidedAcls'] as $name => $transl){
if (isset($_POST['mailTab'])){
/* Save ldap attributes */
+ $mail = $this->mail;
plugin::save_object();
- /* Get posted mail domain part, if necessary
- */
- if($this->mailMethod->domainSelectionEnabled() && isset($_POST['MailDomain'])){
- if(in_array(get_post('MailDomain'), $this->mailDomainParts)){
- $this->mailDomainPart = get_post('MailDomain');
+ if(!$this->mailMethod->isModifyableMail() && $this->initially_was_account){
+ $this->mail = $mail;
+ }else{
+
+ /* Get posted mail domain part, if necessary
+ */
+ if($this->mailMethod->domainSelectionEnabled() && isset($_POST['MailDomain'])){
+ if(in_array(get_post('MailDomain'), $this->mailDomainParts)){
+ $this->mailDomainPart = get_post('MailDomain');
+ }
}
}
$this->mail = $this->mail."@".$this->mailDomainPart;
}
+ /* Update sharedFolder dependencies.
+ Open each shared folder and remove this account.
+ Then Save the group to ensure that all necessary
+ actions will be taken (imap acls updated aso.).
+ */
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->config->current['BASE']);
+ $ldap->search("(&(objectClass=posixGroup)(objectClass=gosaMailAccount)(memberUid=".$this->uid."))",array("dn"));
+ while($attrs = $ldap->fetch()){
+ $grp = new grouptabs($this->config, $this->config->data['TABS']['GROUPTABS'], $attrs['dn']);
+ if(isset($grp->by_object['mailgroup']) && isset($grp->by_object['group'])){
+ $grp->by_object['group']->removeUser($this->uid);
+
+ /* Do not save the complete group! This will quit the complete membership
+ */
+ $grp->by_object['mailgroup']->save();
+ }
+ }
+
/* Remove GOsa attributes */
plugin::remove_from_parent();
msg_dialog::display(_("Mail error"), sprintf(_("Cannot remove mailbox! Error was: %s."),
$this->mailMethod->get_error()), ERROR_DIALOG);
}
- if(!$this->mailMethod->updateSharedFolder()){
- msg_dialog::display(_("Mail error"), sprintf(_("Cannot update shared folder permissions! Error was: %s."),
- $this->mailMethod->get_error()), ERROR_DIALOG);
- }
}
}
$this->mailMethod->disconnect();
$ldap= $this->config->get_ldap_link();
/* If domain part was selectable, contruct mail address */
- if($this->mailMethod->domainSelectionEnabled()){
- $this->mail = $this->mail."@".$this->mailDomainPart;
+ if(!(!$this->mailMethod->isModifyableMail() && $this->initially_was_account)){
+
+ if($this->mailMethod->domainSelectionEnabled()){
+ $this->mail = $this->mail."@".$this->mailDomainPart;
+ }
+
+ /* Enforce lowercase mail address and trim whitespaces
+ */
+ $this->mail = trim(strtolower($this->mail));
}
-
- /* Enforce lowercase mail address and trim whitespaces
- */
- $this->mail = trim(strtolower($this->mail));
+
/* Call parents save to prepare $this->attrs */
plugin::save();
if (!is_integer(strpos($this->gosaMailDeliveryMode, "C"))){
-
/* Do not write sieve settings if this account is new and
doesn't seem to exist.
*/
}
}
}else{
-
echo "Check sieve management here";
-
@DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__,
"User uses an own sieve script, skipping sieve update.".$str."</b>","");
}
+ }
+ }
+ $this->mailMethod->disconnect();
- if(!$this->mailMethod->updateSharedFolder()){
- msg_dialog::display(_("Mail error"), sprintf(_("Cannot update shared folder permissions! Error was: %s."),
- $this->mailMethod->get_error()), ERROR_DIALOG);
+ /* Update sharedFolder dependencies.
+ Open each shared folder and remove this account.
+ Then Save the group to ensure that all necessary
+ actions will be taken (imap acls updated aso.).
+ */
+ if(!$this->initially_was_account){
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->config->current['BASE']);
+ $ldap->search("(&(objectClass=posixGroup)(objectClass=gosaMailAccount)(memberUid=".$this->uid."))",array("dn"));
+ while($attrs = $ldap->fetch()){
+ $grp = new grouptabs($this->config, $this->config->data['TABS']['GROUPTABS'], $attrs['dn']);
+ if(isset($grp->by_object['mailgroup'])){
+ /* Do not save the complete group! This will quit the complete membership
+ */
+ $grp->by_object['mailgroup']->save();
}
}
}
- $this->mailMethod->disconnect();
/* Optionally execute a command after we're done */
if ($this->initially_was_account == $this->is_account){
/* Mail address checks */
$mail = $this->mail;
- if($this->mailMethod->domainSelectionEnabled()){
- $mail.= "@".$this->mailDomainPart;
- }
+ if(!(!$this->mailMethod->isModifyableMail() && $this->initially_was_account)){
- if (empty($mail)){
- $message[]= msgPool::required(_("Primary address"));
- }
- if ($this->is_template){
- if (!tests::is_email($mail, TRUE)){
- $message[]= msgPool::invalid(_("Mail address"),"","","%givenName.%sn@your-domain.com");
+ if($this->mailMethod->domainSelectionEnabled()){
+ $mail.= "@".$this->mailDomainPart;
}
- } else {
- if (!tests::is_email($mail)){
- $message[]= msgPool::invalid(_("Mail address"),"","","your-address@your-domain.com");
+
+ if (empty($mail)){
+ $message[]= msgPool::required(_("Primary address"));
+ }
+ if ($this->is_template){
+ if (!tests::is_email($mail, TRUE)){
+ $message[]= msgPool::invalid(_("Mail address"),"","","%givenName.%sn@your-domain.com");
+ }
+ } else {
+ if (!tests::is_email($mail)){
+ $message[]= msgPool::invalid(_("Mail address"),"","","your-address@your-domain.com");
+ }
}
- }
- /* Check if this mail address is already in use */
- $ldap->cd($this->config->current['BASE']);
- $filter = "(&(!(objectClass=gosaUserTemplate))(!(uid=".$this->uid."))".
- "(objectClass=gosaMailAccount)".
- "(|(mail=".$mail.")(alias=".$mail.")(gosaMailAlternateAddress=".$mail.")))";
- $ldap->search($filter,array("uid"));
- if ($ldap->count() != 0){
- $message[]= msgPool::duplicated(_("Mail address"));
+ /* Check if this mail address is already in use */
+ $ldap->cd($this->config->current['BASE']);
+ $filter = "(&(!(objectClass=gosaUserTemplate))(!(uid=".$this->uid."))".
+ "(objectClass=gosaMailAccount)".
+ "(|(mail=".$mail.")(alias=".$mail.")(gosaMailAlternateAddress=".$mail.")))";
+ $ldap->search($filter,array("uid"));
+ if ($ldap->count() != 0){
+ $message[]= msgPool::duplicated(_("Mail address"));
+ }
}
}
+ function allow_remove()
+ {
+ $resason = "";
+ if(!$this->mailMethod->allow_remove($reason)){
+ return($reason);
+ }
+ return("");
+ }
+
+
+
/*! \brief ACL settings
*/
static function plInfo()