From 1048a8f2905ecec83ae931f1007d887297681a52 Mon Sep 17 00:00:00 2001 From: cajus Date: Mon, 27 Jun 2005 09:37:22 +0000 Subject: [PATCH] Added first working version for kolab mail distribution lists. git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@871 594d385d-05f5-0310-b6e9-bd551577e9d8 --- TODO | 1 - contrib/openldap/gosa+samba3.schema | 6 +- contrib/openldap/gosa.schema | 5 +- plugins/admin/ogroups/class_mailogroup.inc | 93 +++++++++++++++++++--- plugins/admin/ogroups/tabs_ogroups.inc | 13 +-- 5 files changed, 92 insertions(+), 26 deletions(-) diff --git a/TODO b/TODO index 5cc31f1c8..dba8e8455 100644 --- a/TODO +++ b/TODO @@ -2,7 +2,6 @@ Things to fix before 2.4: ========================= * Finish kolab integration - - mail groups - shared folders diff --git a/contrib/openldap/gosa+samba3.schema b/contrib/openldap/gosa+samba3.schema index 3ce775dea..5fd778443 100644 --- a/contrib/openldap/gosa+samba3.schema +++ b/contrib/openldap/gosa+samba3.schema @@ -270,10 +270,8 @@ objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.11 NAME 'gosaUserTemplate' SUP top AUXI objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.12 NAME 'gosaGroupOfNames' DESC 'GOsa object grouping (v2.4)' - SUP top AUXILIARY - MUST ( member $ cn $ gosaGroupObjects ) - MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description ) ) - + SUP groupOfNames STRUCTURAL + MUST ( member $ cn $ gosaGroupObjects )) objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.13 NAME 'gosaWebdavAccount' DESC 'GOsa webdav enabling account (v2.4)' diff --git a/contrib/openldap/gosa.schema b/contrib/openldap/gosa.schema index 3c6a84bb8..3a73fba44 100644 --- a/contrib/openldap/gosa.schema +++ b/contrib/openldap/gosa.schema @@ -269,9 +269,8 @@ objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.11 NAME 'gosaUserTemplate' SUP top AUXI objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.12 NAME 'gosaGroupOfNames' DESC 'GOsa object grouping (v2.4)' - SUP top AUXILIARY - MUST ( member $ cn $ gosaGroupObjects ) - MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description ) ) + SUP groupOfNames STRUCTURAL + MUST ( member $ cn $ gosaGroupObjects )) objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.13 NAME 'gosaWebdavAccount' DESC 'GOsa webdav enabling account (v2.4)' diff --git a/plugins/admin/ogroups/class_mailogroup.inc b/plugins/admin/ogroups/class_mailogroup.inc index 699934f3f..d4180f603 100644 --- a/plugins/admin/ogroups/class_mailogroup.inc +++ b/plugins/admin/ogroups/class_mailogroup.inc @@ -9,19 +9,39 @@ class mailogroup extends plugin /* attribute list for save action */ var $attributes= array("mail"); var $objectclasses= array("kolabGroupOfNames"); - var $members= array(); + function mailogroup ($config, $dn= NULL) { plugin::plugin($config, $dn); /* Include config object */ $this->config= $config; + + /* Save initial account state */ + $this->initially_was_account= $this->is_account; } + function execute() { + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } + + /* Show tab dialog headers */ + if ($this->parent != NULL){ + if ($this->is_account){ + $display= $this->show_header(_("Remove mail account"), + _("This group has mail features enabled. You can disable them by clicking below.")); + } else { + $display= $this->show_header(_("Create mail account"), _("This group has mail features disabled. You can enable them by clicking below.")); + return ($display); + } + } + /* Initialize templating engine */ $smarty= get_smarty(); @@ -30,30 +50,77 @@ class mailogroup extends plugin $smarty->assign("mailACL", chkacl($this->acl, "mail")); /* Show main page */ - return ($smarty->fetch (get_template_path('mail.tpl', TRUE))); + return ($display.$smarty->fetch (get_template_path('mail.tpl', TRUE))); } + /* Check formular input */ function check() + { + $message= array(); + + if ($this->is_account){ + $ldap= $this->config->get_ldap_link(); + + /* Check if mail address is valid */ + if (!is_email($this->mail) || $this->mail == ""){ + $message[]= _("Please enter a valid email address in 'Primary address' field."); + } + + /* Check if mail address is already in use */ + $ldap->cd($this->config->current['BASE']); + $ldap->search ("(&(!(objectClass=gosaUserTemplate))(|(mail=".$this->mail. ")(gosaMailAlternateAddress=".$this->mail."))(!(cn=".$this->cn.")))", array("uid")); + if ($ldap->count() != 0){ + $message[]= _("The primary address you've entered is already in use."); + } + } + + return ($message); + } + + + function save() { $ldap= $this->config->get_ldap_link(); - $message= array(); + /* Call parents save to prepare $this->attrs */ + plugin::save(); + + /* Save data to LDAP */ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); - /* Check if mail address is valid */ - if (!is_email($this->mail)){ - $message[]= _("Please enter a valid email address in 'Primary address' field."); + /* 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"); } + } + - /* Check if mail address is already in use */ - $ldap->cd($this->config->current['BASE']); - $ldap->search ("(&(!(objectClass=gosaUserTemplate))(|(mail=".$this->mail. ")(gosaMailAlternateAddress=".$this->mail."))(!(cn=".$this->cn.")))", array("uid")); - if ($ldap->count() != 0){ - $message[]= _("The primary address you've entered is already in use."); + /* remove object from parent */ + function remove_from_parent() + { + /* Cancel if there's nothing to do here */ + if (!$this->initially_was_account){ + return; } - - return ($message); + /* include global link_info */ + $ldap= $this->config->get_ldap_link(); + + /* Remove and write to LDAP */ + plugin::remove_from_parent(); + + @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__, + $this->attributes, "Save"); + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + show_ldap_error($ldap->get_error()); } } diff --git a/plugins/admin/ogroups/tabs_ogroups.inc b/plugins/admin/ogroups/tabs_ogroups.inc index 348e316d7..a3007bda9 100644 --- a/plugins/admin/ogroups/tabs_ogroups.inc +++ b/plugins/admin/ogroups/tabs_ogroups.inc @@ -24,16 +24,19 @@ class ogrouptabs extends tabs case "U": /* Add a user tab used for mail distribution lists */ - require_once("class_mailogroup.inc"); - $this->by_name['mailogroup']= _("Mail"); - $this->by_object['mailogroup']= new mailogroup($this->config, $this->dn); - $this->by_object['mailogroup']->parent= &$this; + if (preg_match('/kolab/i', $this->config->current['MAILMETHOD'])){ + require_once("class_mailogroup.inc"); + $this->by_name['mailogroup']= _("Mail"); + $this->by_object['mailogroup']= new mailogroup($this->config, $this->dn); + $this->by_object['mailogroup']->parent= &$this; + } break; } } } + function check() { return (tabs::check(TRUE)); @@ -88,7 +91,7 @@ class ogrouptabs extends tabs $this->dn= 'cn='.$baseobject->cn.','.get_groups_ou().$baseobject->base; } - tabs::save(TRUE); + tabs::save(); } } -- 2.30.2