X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fgroups%2Fclass_groupMail.inc;h=874391ba46e3a63685c5273964036bf4bdc9bf94;hb=9ff9ad0e14edc40f165433911935c437aa0ad427;hp=a09c263cd5cedbb8838df1d07746b0ce95a7e680;hpb=decbebcdec179f978e83a3b649c60025da5f632b;p=gosa.git diff --git a/plugins/admin/groups/class_groupMail.inc b/plugins/admin/groups/class_groupMail.inc index a09c263cd..874391ba4 100644 --- a/plugins/admin/groups/class_groupMail.inc +++ b/plugins/admin/groups/class_groupMail.inc @@ -21,21 +21,22 @@ class mailgroup extends plugin var $gosaVacationMessage= ""; var $gosaSpamSortLevel= ""; var $gosaSpamMailbox= ""; - + var $gosaSharedFolderTarget; var $quotaUsage= 0; var $forward_dialog= FALSE; var $members= array(); var $mailusers= array(); var $perms= array(); var $imapacl= array('anyone' => 'p', '%members%' => 'lrsp', '' => 'p'); + var $mmethod= ""; /* Helper */ var $indexed_acl= array(); var $indexed_user= array(); /* attribute list for save action */ - var $attributes= array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize", - "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox", + var $attributes= array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize","gosaMailAlternateAddress","gosaMailForwardingAddress", + "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox","acl","gosaSharedFolderTarget", "gosaVacationMessage"); var $objectclasses= array("gosaMailAccount"); @@ -52,13 +53,21 @@ class mailgroup extends plugin /* 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")){ - $this->method= "mailMethod$method"; - } else { - print_red(sprintf(_("There is no mail method '%s' specified in your gosa.conf available."), $method)); - } + $this->mmethod= $this->config->current['MAILMETHOD']; } + + if (class_exists("mailMethod$this->mmethod")){ + $this->method= "mailMethod$this->mmethod"; + } else { + print_red(sprintf(_("There is no mail method '%s' specified in your gosa.conf available."), $this->mmethod)); + } + + /* Load Mailserver string, only in case of kolab ???? */ + if(preg_match("/kolab/i",$this->mmethod)){ + if(isset($this->attrs['gosaMailServer'][0])){ + $this->gosaMailServer = $this->attrs['gosaMailServer'][0]; + } + } /* Convert cn to uid in case of existing entries */ if (isset($this->attrs['cn'][0])){ @@ -69,6 +78,7 @@ class mailgroup extends plugin /* Load attributes containing arrays */ foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){ + $this->$val = array(); if (isset($this->attrs["$val"]["count"])){ for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){ array_push($this->$val, $this->attrs["$val"][$i]); @@ -115,9 +125,9 @@ class mailgroup extends plugin unset($this->imapacl[$user]); } } - + } - + /* Update quota values */ if ($quota['gosaMailQuota'] == 2147483647){ $this->quotaUsage= ""; @@ -145,16 +155,77 @@ class mailgroup extends plugin } /* Load permissions */ - if (isset($this->attrs['acl'])){ - for ($i= 0; $i<$this->attrs['acl']['count']; $i++){ - list($user, $permission)= split(' ', $this->attrs['acl'][$i]); - $this->imapacl[$user]= $permission; - if ($user != "anyone" && $user != "%members%"){ - unset($this->imapacl['']); + $tmp = array(); + if(preg_match("/kolab/i",$this->mmethod)){ + $ldap = $this->config->get_ldap_link(); + if (isset($this->attrs['acl'])){ + for ($i= 0; $i<$this->attrs['acl']['count']; $i++){ + list($user, $permission)= split(' ', $this->attrs['acl'][$i]); + + /* Add to list */ + $this->imapacl[$user]= $permission; + + /* Get all user permissions sorted by acl, to detect the most used acl + This acl is then used for %members% + */ + $tmp[$permission][] = $user; + + /* There is an entry in $this->imapacl like this this ... + $this->attrs['imapacl']['anyone'] = "p"; + $this->attrs['imapacl']['%members%'] = "lprs"; + $this->attrs['imapacl'][''] = ""; <------ This is used to diplay an empty + Field for special acls in our template. + If there is at least one special acl in out imapacl, + we don't need this entry anymore, because it is already displayed. + */ + if ($user != "anyone" && $user != "%members%"){ + unset($this->imapacl['']); + } } } - } + /* In this section we dectect which acl is tho most used + This will be used as %members% acl + */ + $tmp2 = array(); + foreach($tmp as $acl => $user){ + $tmp2[count($tmp[$acl])]=$acl; + } + /* Most used at last */ + ksort($tmp2); + + /* Assign last (most used acl) to %members% acl */ + $this->imapacl['%members%']=array_pop($tmp2); + + /* Open ldap connection */ + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + + /* Remove those users, that use %members% acl && are member of this group. */ + foreach($this->imapacl as $mail => $permission){ + $ldap->search("(&(objectClass=person)(mail=".$mail."))",array("uid")); + $atr = $ldap->fetch(); + if((isset($atr['uid'][0]))&&(in_array($atr['uid'][0],$this->attrs['memberUid']))&&($permission == $this->imapacl['%members%'])){ + unset($this->imapacl[$mail]); + } + } + + /* Append an empty entry, for special acl handling */ + if(count($this->imapacl)==2){ + $this->imapacl[''] =""; + } + }else{ + /* Load permissions */ + if (isset($this->attrs['acl'])){ + for ($i= 0; $i<$this->attrs['acl']['count']; $i++){ + list($user, $permission)= split(' ', $this->attrs['acl'][$i]); + $this->imapacl[$user]= $permission; + if ($user != "anyone" && $user != "%members%"){ + unset($this->imapacl['']); + } + } + } + } /* Fill translations */ $this->perms["lrs"]= _("read"); $this->perms["lrsp"]= _("post"); @@ -166,8 +237,8 @@ class mailgroup extends plugin function execute() { - /* Call parent execute */ - plugin::execute(); + /* Call parent execute */ + //plugin::execute(); /* Load templating engine */ $smarty= get_smarty(); @@ -271,7 +342,7 @@ class mailgroup extends plugin /* Delete forward email addresses */ if (isset($_POST['delete_forwarder'])){ - if (count($_POST['forwarder_list']) + if (count($_POST['forwarder_list']) && chkacl ($this->acl, "gosaMailForwardingAddress") == ""){ $this->delForwarder ($_POST['forwarder_list']); @@ -387,6 +458,7 @@ class mailgroup extends plugin if (isset($this->imapacl['anyone'])){ $smarty->assign("default_permissions", $this->imapacl['anyone']); } + $smarty->assign("member_permissions", "lrsp"); if (isset($this->imapacl['%members%'])){ $smarty->assign("member_permissions", $this->imapacl['%members%']); } @@ -436,7 +508,7 @@ class mailgroup extends plugin $smarty->assign("$val"."ACL", chkacl($this->acl, "$val")); } if (is_numeric($this->gosaMailQuota) && $this->gosaMailQuota != 0){ - $smarty->assign("quotausage", progressbar(round(($this->quotaUsage * 100)/ $this->gosaMailQuota,100,15,true))); + $smarty->assign("quotausage", progressbar(round(($this->quotaUsage * 100)/ $this->gosaMailQuota),100,15,true)); $smarty->assign("quotadefined", "true"); } else { $smarty->assign("quotadefined", "false"); @@ -450,6 +522,14 @@ class mailgroup extends plugin /* remove object from parent */ function remove_from_parent() { + /* Added these ObjectClass and Attributes, because they were not + removed correctly, only in case of kolab ... + */ + 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 */ $ldap= $this->config->get_ldap_link(); @@ -464,7 +544,9 @@ class mailgroup extends plugin /* Keep uid */ unset ($this->attrs['uid']); $ldap->cd($this->dn); - $ldap->modify($this->attrs); + $this->cleanup(); +$ldap->modify ($this->attrs); + show_ldap_error($ldap->get_error()); /* Connect to IMAP server for account deletion */ @@ -537,7 +619,7 @@ class mailgroup extends plugin if (!isset($_POST["user_$nr"])){ continue; } - if ($_POST["user_$nr"] != $user || + if ($_POST["user_$nr"] != $user || $_POST["perm_$nr"] != $this->indexed_acl[$nr]){ $this->is_modified= TRUE; } @@ -549,22 +631,35 @@ class mailgroup extends plugin } - /* Save data to LDAP, depending on is_account we save or delete */ + /* + Backup for function save + Änderungen : fixAttributesOnStore($this) wurde erst nach dem this->cleanup(); +$ldap->modify + + Ausgeführt, deshalb wurden die gemappten Attribute auch nicht + gespeichert. + + Von : Fabian Hickert + Datum : 15.12.2005 + + Alter Quellcode : + + /* Save data to LDAP, depending on is_account we save or delete * / function save() { $ldap= $this->config->get_ldap_link(); - /* Call parents save to prepare $this->attrs */ + /* Call parents save to prepare $this->attrs * / plugin::save(); - /* Save arrays */ + /* Save arrays * / $this->attrs['gosaMailAlternateAddress']= $this->gosaMailAlternateAddress; $this->attrs['gosaMailForwardingAddress']= $this->gosaMailForwardingAddress; - /* Save shared folder target */ + /* Save shared folder target * / $this->attrs['gosaSharedFolderTarget']= "share+".$this->uid; - /* Save acl's */ + /* Save acl's * / $this->attrs['acl']= array(); foreach ($this->imapacl as $user => $acl){ if ($user == ""){ @@ -573,13 +668,108 @@ class mailgroup extends plugin $this->attrs['acl'][]= "$user $acl"; } - /* Save data to LDAP */ + /* Save data to LDAP * / $ldap->cd($this->dn); - $ldap->modify($this->attrs); + $this->cleanup(); +$ldap->modify ($this->attrs); + show_ldap_error($ldap->get_error()); - /* Only do IMAP actions if we are not a template */ + /* Only do IMAP actions if we are not a template * / if (!$this->is_template){ + $method= new $this->method($this->config); + $method->fixAttributesOnStore($this); + if ($method->connect($this->gosaMailServer)){ + $method->updateMailbox($this->uid); + $method->setQuota($this->uid, $this->gosaMailQuota); + + /* Exchange '%member%' pseudo entry * / + $memberacl= $this->imapacl['%members%']; + unset ($this->imapacl['%members%']); + foreach ($this->members as $user){ + if (!isset($this->imapacl[$user])){ + $this->imapacl[$user]= $memberacl; + } + } + + $method->setSharedFolderPermissions($this->uid, $this->imapacl); + $method->disconnect(); + } + } + + /* 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"); + } + } else { + $this->handle_post_events("add"); + } + } + + ENDE Alter Quellcode + */ + + + + + + + + + /* Save data to LDAP, depending on is_account we save or delete */ + function save() + { + $ldap= $this->config->get_ldap_link(); + + /* Call parents save to prepare $this->attrs */ + plugin::save(); + + /* Save arrays */ + $this->attrs['gosaMailAlternateAddress']= $this->gosaMailAlternateAddress; + $this->attrs['gosaMailForwardingAddress']= $this->gosaMailForwardingAddress; + + /* Save shared folder target */ + $this->attrs['gosaSharedFolderTarget']= "share+".$this->uid; + + if(preg_match("/kolab/i",$this->mmethod)){ + /* Save acl's */ + $this->attrs['acl']= array(); + foreach ($this->imapacl as $user => $acl){ + if ($user == ""){ + continue; + } + $ldap->search("(&(objectClass=person)(uid=".$user."))",array("mail")); + $mail = $ldap->fetch(); + if($mail){ + if(isset($mail['mail'][0])){ + $this->attrs['acl'][]= $mail['mail'][0]." $acl"; + } + }else{ + $this->attrs['acl'][]= "$user $acl"; + } + } + }else{ + /* Save acl's */ + $this->attrs['acl']= array(); + foreach ($this->imapacl as $user => $acl){ + if ($user == ""){ + continue; + } + $this->attrs['acl'][]= "$user $acl"; + } + } + + /* Only do IMAP actions if we are not a template */ + if(preg_match("/kolab/i",$this->mmethod)){ + if (empty($this->gosaMailServer)||is_array($this->gosaMailServer)){ + if(isset($this->attrs['gosaMailServer'][0])){ + $this->gosaMailServer = $this->attrs['gosaMailServer'][0]; + } + } + } + + if ((!$this->is_template)&&(!empty($this->gosaMailServer))){ $method= new $this->method($this->config); $method->fixAttributesOnStore($this); if ($method->connect($this->gosaMailServer)){ @@ -594,12 +784,19 @@ class mailgroup extends plugin $this->imapacl[$user]= $memberacl; } } - + $method->setSharedFolderPermissions($this->uid, $this->imapacl); $method->disconnect(); } } + /* Save data to LDAP */ + $ldap->cd($this->dn); + $this->cleanup(); +$ldap->modify ($this->attrs); + + show_ldap_error($ldap->get_error()); + /* Optionally execute a command after we're done */ if ($this->initially_was_account == $this->is_account){ if ($this->is_modified){ @@ -653,7 +850,7 @@ class mailgroup extends plugin if (is_integer(strpos($this->gosaMailDeliveryMode, "reject")) && $this->gosaMailMaxSize == ""){ $message[]= _("You need to set the maximum mail size in order to reject anything."); } - + if(ord($this->imapacl['anyone'][0])==194){ $message[] = _("Please choose valid permission settings. Default permission can't be emtpy."); }