"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 */
$this->quotaUsage= $quota['quotaUsage'];
$this->gosaMailQuota= $quota['gosaMailQuota'];
$method->disconnect();
}
}
}
/* 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()
{
/* 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("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.= "