"Eins ist toll", "zwei" => "Zwei ist noch besser"); var $method= "mailMethod"; /* plugin specific values */ var $mail= ""; var $uid= ""; var $cn= ""; 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 $members= array(); var $mailusers= array(); var $perms= array(); var $imapacl= array('anyone' => 'p', '%members%' => 'lrsp', '' => 'p'); /* Helper */ var $indexed_acl= array(); var $indexed_user= array(); /* attribute list for save action */ var $attributes= array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize", "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox", "gosaVacationMessage"); var $objectclasses= array("gosaMailAccount"); /* constructor, if 'dn' is set, the node loads the given 'dn' from LDAP */ function mailgroup ($config, $dn= NULL, $ui= 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->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)); } } /* Convert cn to uid in case of existing entries */ if (isset($this->attrs['cn'][0])){ $this->uid= $this->attrs['cn'][0]; } if ($dn != NULL){ /* Load attributes containing arrays */ foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){ if (isset($this->attrs["$val"]["count"])){ for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){ array_push($this->$val, $this->attrs["$val"][$i]); } } } /* Only do IMAP actions if gosaMailServer attribute is set */ if (isset ($this->attrs["gosaMailServer"][0])){ $method= new $this->method($this->config); if ($method->connect($this->attrs["gosaMailServer"][0])){ $quota= $method->getQuota($this->uid); /* Maybe the entry is not saved in new style, get permissions from IMAP and convert them to acl attributes */ if (!isset($this->attrs['acl'])){ $this->imapacl= $method->getSharedFolderPermissions($this->uid); /* Need to filter what a member acl could be... */ $vote= array(); $peak= 0; $leader= ""; foreach ($this->imapacl as $user => $acl){ if ($user != "anyone" ){ if (!isset($vote[$acl])){ $vote[$acl]= 1; } else { $vote[$acl]++; } if ($vote[$acl] > $peak){ $leader= $acl; $peek= $vote[$acl]; } } } /* Highest count wins as %members%, remove all members with the same acl */ $this->imapacl['%members%']= $leader; foreach ($this->imapacl as $user => $acl){ if ($this->acl == $leader && in_array($user, $this->attrs['memberUid'])){ unset($this->imapacl[$user]); } } } /* Update quota values */ if ($quota['gosaMailQuota'] == 2147483647){ $this->quotaUsage= ""; $this->gosaMailQuota= ""; } else { $this->quotaUsage= $quota['quotaUsage']; $this->gosaMailQuota= $quota['gosaMailQuota']; } $method->disconnect(); } /* Adapt attributes if needed */ $method->fixAttributesOnLoad($this); } } /* Get global filter config */ if (!is_global("gmailfilter")){ $ui= get_userinfo(); $base= get_base_from_people($ui->dn); $gmailfilter= array( "depselect" => $base, "muser" => "", "regex" => "*"); register_global("gmailfilter", $gmailfilter); } /* 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"); $this->perms["p"]= _("external post"); $this->perms["lrsip"]= _("append"); $this->perms["lrswipcd"]= _("write"); } function execute() { /* Call parent execute */ plugin::execute(); /* Load templating engine */ $smarty= get_smarty(); if ($_SESSION['js']==FALSE){ $smarty->assign("javascript", "false"); } else { $smarty->assign("javascript", "true"); } /* Do we need to flip is_account state? */ if (isset($_POST['modify_state'])){ $this->is_account= !$this->is_account; } /* Do we represent a valid account? */ if (!$this->is_account && $this->parent == NULL){ $display= " ". _("This 'dn' has no valid mail extensions.").""; return ($display); } /* Show tab dialog headers */ $display= ""; if ($this->parent != NULL){ if ($this->is_account){ $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"), _("This account has mail features disabled. You can enable them by clicking below.")); return ($display); } } /* Add ACL? */ foreach ($this->indexed_user as $nr => $user){ if (isset($_POST["add_$nr"])){ $this->imapacl[""]= "l"; } if (isset($_POST["del_$nr"])){ unset ($this->imapacl[$user]); } } /* Trigger forward add dialog? */ if (isset($_POST['add_local_forwarder'])){ $this->forward_dialog= TRUE; $this->dialog= TRUE; } /* Cancel forward add dialog? */ if (isset($_POST['add_locals_cancel'])){ $this->forward_dialog= FALSE; $this->dialog= FALSE; } /* Finished adding of locals? */ if (isset($_POST['add_locals_finish'])){ if (count ($_POST['local_list']) && chkacl ($this->acl, "gosaMailForwardingAddress") == ""){ /* Walk through list of forwarders, ignore own addresses */ foreach ($_POST['local_list'] as $val){ if (!in_array ($val, $this->gosaMailAlternateAddress) && $val != $this->mail){ $this->addForwarder($val); } } } $this->forward_dialog= FALSE; $this->dialog= FALSE; } /* Add forward email addresses */ if (isset($_POST['add_forwarder'])){ if ($_POST['forward_address'] != ""){ /* Valid email address specified? */ $address= $_POST['forward_address']; if (!is_email($address)){ print_red (_("You're trying to add an invalid email address ". "to the list of forwarders.")); } elseif ($address == $this->mail || in_array($address, $this->gosaMailAlternateAddress)) { print_red (_("Adding your one of your own addresses to the forwarders makes no sense.")); } else { /* Add it */ if (chkacl ($this->acl, "gosaMailForwardingAddress") == ""){ $this->addForwarder ($address); } } } } /* Delete forward email addresses */ if (isset($_POST['delete_forwarder'])){ if (count($_POST['forwarder_list']) && chkacl ($this->acl, "gosaMailForwardingAddress") == ""){ $this->delForwarder ($_POST['forwarder_list']); } } /* Add alternate email addresses */ if (isset($_POST['add_alternate'])){ if ($_POST['alternate_address'] != "" && chkacl ($this->acl, "gosaMailAlternateAddress") == ""){ if (!is_email($_POST['alternate_address'])){ print_red (_("You're trying to add an invalid email address to the list of alternate addresses.")); } elseif (($user= $this->addAlternate ($_POST['alternate_address'])) != ""){ $ui= get_userinfo(); if ($user != $ui->username){ print_red (_("The address you're trying to add is already used by user")." '$user'."); } } } } /* Delete alternate email addresses */ if (isset($_POST['delete_alternate']) && isset ($_POST['alternates_list'])){ if (count($_POST['alternates_list']) && chkacl ($this->acl, "gosaMailAlternateAddress") == ""){ $this->delAlternate ($_POST['alternates_list']); } } /* Show forward add dialog */ if ($this->forward_dialog){ $ldap= $this->config->get_ldap_link(); /* Save data */ $gmailfilter= get_global("gmailfilter"); foreach( array("depselect", "muser", "regex") as $type){ if (isset($_POST[$type])){ $gmailfilter[$type]= $_POST[$type]; } } if (isset($_GET['search'])){ $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*"; if ($s == "**"){ $s= "*"; } $gmailfilter['regex']= $s; } register_global("gmailfilter", $gmailfilter); /* Get actual list */ $mailusers= array (); if ($gmailfilter['regex'] != '*' && $gmailfilter['regex'] != ""){ $regex= $gmailfilter['regex']; $filter= "(|(mail=$regex)(gosaMailAlternateAddress=$regex))"; } else { $filter= ""; } if ($gmailfilter['muser'] != ""){ $user= $gmailfilter['muser']; $filter= "$filter(|(uid=$user)(cn=$user)(givenName=$user)(sn=$user))"; } /* Add already present people to the filter */ $exclude= ""; foreach ($this->gosaMailForwardingAddress as $mail){ $exclude.= "(mail=$mail)"; } if ($exclude != ""){ $filter.= "(!(|$exclude))"; } $acl= array($this->config->current['BASE'] => ":all"); $res= get_list($acl, "(&(objectClass=gosaMailAccount)$filter)", TRUE, $gmailfilter['depselect'], array("sn", "mail", "givenName"), TRUE); $ldap->cd($gmailfilter['depselect']); $ldap->search ("(&(objectClass=gosaMailAccount)$filter)", array("sn", "mail", "givenName")); error_reporting (0); while ($attrs= $ldap->fetch()){ if(preg_match('/%/', $attrs['mail'][0])){ continue; } $name= $this->make_name($attrs); $mailusers[$attrs['mail'][0]]= $name."<". $attrs['mail'][0].">"; } error_reporting (E_ALL); natcasesort ($mailusers); reset ($mailusers); /* Show dialog */ $smarty->assign("search_image", get_template_path('images/search.png')); $smarty->assign("usearch_image", get_template_path('images/search_user.png')); $smarty->assign("tree_image", get_template_path('images/tree.png')); $smarty->assign("infoimage", get_template_path('images/info.png')); $smarty->assign("launchimage", get_template_path('images/small_filter.png')); $smarty->assign("mailusers", $mailusers); $smarty->assign("deplist", $this->config->idepartments); $smarty->assign("apply", apply_filter()); $smarty->assign("alphabet", generate_alphabet()); $smarty->assign("hint", print_sizelimit_warning()); foreach( array("depselect", "muser", "regex") as $type){ $smarty->assign("$type", $gmailfilter[$type]); } $smarty->assign("hint", print_sizelimit_warning()); $display.= $smarty->fetch (get_template_path('mail_locals.tpl', TRUE)); return ($display); } /* Assemble normal permissions */ $smarty->assign("permissionsACL", chkacl($this->acl, "permissions")); if (isset($this->imapacl['anyone'])){ $smarty->assign("default_permissions", $this->imapacl['anyone']); } if (isset($this->imapacl['%members%'])){ $smarty->assign("member_permissions", $this->imapacl['%members%']); } /* Assemble extra attributes */ $perm= chkacl($this->acl, "permissions"); $tmp= ""; $nr= 0; $count= count($this->imapacl); $this->indexed_user= array(); $this->indexed_acl= array(); foreach($this->imapacl as $user => $acl){ if ($user != "anyone" && $user != "%members%"){ $tmp.= "