diff --git a/plugins/personal/mail/class_mailAccount.inc b/plugins/personal/mail/class_mailAccount.inc
index 365252c3d8ed75a1a8162b0f82a9968455b5379c..7673aa45e2ee21cf4102f251176eee6c4ca06589 100644 (file)
*/
/* Load sieve support */
-@require_once ("class_sieve.inc");
+require_once ("class_sieve.inc");
/* Load mail methods */
global $BASE_DIR;
class mailAccount extends plugin
{
/* Definitions */
- var $plHeadline= "Mail";
- var $plDescription= "This does something";
- var $method= "mailMethod";
+ var $plHeadline = "Mail";
+ var $plDescription = "This does something";
+ var $method = "mailMethod";
/* CLI vars */
- var $cli_summary= "Manage users mail account";
- var $cli_description= "Some longer text\nfor help";
- var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
+ var $cli_summary = "Manage users mail account";
+ var $cli_description = "Some longer text\nfor help";
+ var $cli_parameters = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
/* plugin specific values */
- var $mail= "";
- var $uid= "";
- 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 $folder_prefix= "";
- var $mailboxList= array();
- var $default_permissions= "none";
- var $member_permissions= "post";
- var $members= array();
- var $admins= array();
- var $vacations= array();
- var $perms= array( "lrs" => "read", "lrsp" => "post", "lrsip" => "append",
- "lrswipcd" => "write", "lrswipcda" => "all" );
+ var $mail = "";
+ var $uid = "";
+ 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 $folder_prefix = "";
+ var $mailboxList = array();
+ var $default_permissions = "none";
+ var $member_permissions = "post";
+ var $members = array();
+ var $admins = array();
+ var $vacations = array();
+ var $perms = array( "lrs" => "read",
+ "lrsp" => "post",
+ "lrsip" => "append",
+ "lrswipcd" => "write",
+ "lrswipcda" => "all" );
/* attribute list for save action */
- var $attributes= array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize",
- "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox",
- "gosaVacationMessage", "uid");
+ var $attributes= array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize","gosaMailForwardingAddress",
+ "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox","gosaMailAlternateAddress",
+ "gosaVacationMessage", "gosaMailAlternateAddress", "gosaMailForwardingAddress");
var $objectclasses= array("gosaMailAccount");
'dn' from LDAP */
function mailAccount ($config, $dn= 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->attrs['uid'])){
+ $this->uid = $this->attrs['uid'][0];
+ }
+
+ if(is_array($this->gosaMailServer) && isset($this->gosaMailServer[0])){
+ $this->gosaMailServer = $this->gosaMailServer[0];
+ }
+
+ /* Save initial account state */
+ $this->initially_was_account= $this->is_account;
+
+ /* 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")){
}
}
- /* Preset folder prefix. Will change it later to respect
+
+ /* Create the account prefix user. user/
+ Preset folder prefix. Will change it later to respect
altnamespace. */
if (isset($this->config->current['CYRUSUNIXSTYLE']) && $this->config->current['CYRUSUNIXSTYLE'] == "true"){
$this->folder_prefix= "user/";
$this->folder_prefix= "user.";
}
- if ($dn != NULL){
+
+ /* This is not a new account, parse additional attributes */
+ if (($dn != NULL) && ($dn != "new") && $this->is_account){
/* 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]);
}
}
+
/* Only do IMAP actions if gosaMailServer attribute is set */
if (isset ($this->attrs["gosaMailServer"][0])){
- $method= new $this->method($this->config);
- $id= $method->uattrib;
+
+ $method = new $this->method($this->config);
+ $id = $method->uattrib;
+
+ /* Adapt attributes if needed */
+ $method->fixAttributesOnLoad($this);
+
+ /* FixAttributesOnLoad possibly creates an array out of gosaMailServer.
+ If the mail tab wasn't opened once before saving, the account can't be saved */
+ if(is_array($this->gosaMailServer)){
+ $this->gosaMailServer = $this->gosaMailServer[0];
+ }
+
if ($method->connect($this->attrs["gosaMailServer"][0])){
+
+ /* Update quota values */
$quota= $method->getQuota($this->folder_prefix.$this->$id);
- $this->quotaUsage= $quota['quotaUsage'];
- $this->gosaMailQuota= $quota['gosaMailQuota'];
- $this->mailboxList= $method->getMailboxList(
- $this->folder_prefix.$this->$id,
- $this->$id);
+
+ if($quota){
+ if ($quota['gosaMailQuota'] == 2147483647){
+ $this->quotaUsage = "";
+ $this->gosaMailQuota = "";
+ } else {
+ $this->quotaUsage = $quota['quotaUsage'];
+ $this->gosaMailQuota = $quota['gosaMailQuota'];
+ }
+ }else{
+ $this->quotaUsage = "";
+ $this->gosaMailQuota = "";
+ print_red(sprintf(_("Can't get quota information for '%s'."),$this->folder_prefix.$this->$id));
+ }
+
+ /* Get mailboxes / folder like INBOX ..*/
+ $this->mailboxList= $method->getMailboxList($this->folder_prefix.$this->$id,$this->$id);
+
$method->disconnect();
+ }else{
+ /* Could not connect to ldap.
+ */
+ if (isset($this->attrs['gosaMailQuota'][0])){
+ $this->gosaMailQuota = $this->attrs['gosaMailQuota'][0];
+ }
}
-
- /* Adapt attributes if needed */
- $method->fixAttributesOnLoad($this);
}
}
}
}
+
+ /* Create filter */
+
/* Get global filter config */
if (!is_global("mailfilter")){
$ui= get_userinfo();
"regex" => "*");
register_global("mailfilter", $mailfilter);
}
-
- /* Save initial account state */
- $this->initially_was_account= $this->is_account;
}
function execute()
{
+ /* Call parent execute */
+ plugin::execute();
+
+ /* Initialise vars */
+
/* Load templating engine */
$smarty= get_smarty();
$display= "";
+ /* Get available mailserver */
+ $mailserver= array();
+ foreach ($this->config->data['SERVERS']['IMAP'] as $key => $val){
+ $mailserver[]= $key;
+ }
+
+ /* Handle account state */
+
/* 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= "<img src=\"images/stop.png\" align=center> <b>".
+ $display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\"> <b>".
_("This account has no mail extensions.")."</b>";
+
$display.= back_to_main();
return ($display);
}
$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."));
+ $display= $this->show_header(_("Create mail account"), _("This account has mail features disabled. You can enable them by clicking below."));
return ($display);
}
}
+
+ /* Forwarder subdialog */
+
/* Trigger forward add dialog? */
if (isset($_POST['add_local_forwarder'])){
$this->forward_dialog= TRUE;
}
}
+
+ /* Alternate address handling */
+
/* Add alternate email addresses */
if (isset($_POST['add_alternate'])){
if ($_POST['alternate_address'] != "" &&
}
}
+
+ /* Vacation message */
+
/* Import vacation message? */
if (isset($_POST["import_vacation"]) && isset($this->vacation[$_POST["vacation_template"]])){
$contents= "";
$this->gosaVacationMessage= htmlspecialchars($contents);
}
+
+ /* Display forward dialog if requested above */
+
/* Show forward add dialog */
if ($this->forward_dialog){
$ldap= $this->config->get_ldap_link();
}
$acl= array($this->config->current['BASE'] => ":all");
- $res= get_list($acl, "(&(objectClass=gosaMailAccount)$filter)", TRUE, $mailfilter['depselect'], array("sn", "mail", "givenName"), TRUE);
+ $res= get_list("(&(objectClass=gosaMailAccount)$filter)", $acl, $mailfilter['depselect'],
+ array("sn", "mail", "givenName"), GL_SIZELIMIT | GL_SUBSEARCH);
$ldap->cd($mailfilter['depselect']);
$ldap->search ("(&(objectClass=gosaMailAccount)$filter)", array("sn", "mail", "givenName"));
error_reporting (0);
/* 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'));
return ($display);
}
- /* Show main page */
- $mailserver= array();
- foreach ($this->config->data['SERVERS']['IMAP'] as $key => $val){
- $mailserver[]= $key;
- }
+ /* Display mail account tab */
+
$smarty->assign("mailServers", $mailserver);
foreach(array("gosaMailServer", "gosaMailQuota", "perms", "mail",
"gosaMailAlternateAddress", "gosaMailForwardingAddress",
"gosaVacationMessage", "gosaMailDeliveryMode",
"gosaMailMaxSize", "gosaSpamSortLevel", "gosaSpamMailbox") as $val){
+
$smarty->assign("$val", $this->$val);
$smarty->assign("$val"."ACL", chkacl($this->acl, "$val"));
}
+
if (is_numeric($this->gosaMailQuota) && $this->gosaMailQuota != 0){
- $smarty->assign("quotausage", $this->quotaUsage * 100 / $this->gosaMailQuota);
+ $smarty->assign("quotausage", progressbar(round(($this->quotaUsage * 100)/ $this->gosaMailQuota),100,15,true));
$smarty->assign("quotadefined", "true");
} else {
$smarty->assign("quotadefined", "false");
$smarty->assign("mailACL", "disabled");
}
- /* Fill checkboxes */
+
if (!preg_match("/L/", $this->gosaMailDeliveryMode)) {
$smarty->assign("drop_own_mails", "checked");
+ } else {
+ $smarty->assign("drop_own_mails", "");
+ }
+
+ $types = array(
+ "V"=>"use_vacation",
+ "S"=>"use_spam_filter",
+ "R"=>"use_mailsize_limit",
+ "I"=>"only_local",
+ "C"=>"own_script");
+
+ /* Fill checkboxes */
+ foreach($types as $option => $varname){
+ if (preg_match("/".$option."/", $this->gosaMailDeliveryMode)) {
+ $smarty->assign($varname, "checked");
+ } else {
+ $smarty->assign($varname, "");
+ }
}
+
if (preg_match("/V/", $this->gosaMailDeliveryMode)) {
$smarty->assign("use_vacation", "checked");
+ } else {
+ $smarty->assign("use_vacation", "");
}
if (preg_match("/S/", $this->gosaMailDeliveryMode)) {
$smarty->assign("use_spam_filter", "checked");
+ } else {
+ $smarty->assign("use_spam_filter", "");
}
if (preg_match("/R/", $this->gosaMailDeliveryMode)) {
$smarty->assign("use_mailsize_limit", "checked");
+ } else {
+ $smarty->assign("use_mailsize_limit", "");
}
if (preg_match("/I/", $this->gosaMailDeliveryMode)) {
$smarty->assign("only_local", "checked");
+ } else {
+ $smarty->assign("only_local", "");
}
if (preg_match("/C/", $this->gosaMailDeliveryMode)) {
$smarty->assign("own_script", "checked");
+ } else {
+ $smarty->assign("own_script", "");
}
/* Have vacation templates? */
+ $smarty->assign("template", "");
if (count($this->vacation)){
$smarty->assign("show_templates", "true");
$smarty->assign("vacationtemplates", $this->vacation);
if (isset($_POST['vacation_template'])){
$smarty->assign("template", $_POST['vacation_template']);
}
+ } else {
+ $smarty->assign("show_templates", "false");
}
/* Fill spam selector */
$method= new $this->method($this->config);
$method->fixAttributesOnRemove($this);
- /* Mailmethod wants us to remove the entry from LDAP. Keep uid! */
- unset ($this->attrs['uid']);
- @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__,
- $this->attributes, "Save");
+ @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__,$this->attributes, "Save");
$ldap->cd($this->dn);
- $ldap->modify($this->attrs);
- show_ldap_error($ldap->get_error());
+ $this->cleanup();
+ $ldap->modify ($this->attrs);
+
+ show_ldap_error($ldap->get_error(), sprintf(_("Removing of user/mail account with dn '%s' failed."),$this->dn));
/* Connect to IMAP server for account deletion */
if ($this->gosaMailServer != ""){
/* Adapt attributes if needed */
$method= new $this->method($this->config);
$id= $method->uattrib;
+
$method->fixAttributesOnStore($this);
+ /* Remove Mailquota if = "" or "0" */
+ if((isset($this->attrs['gosaMailQuota']))&&(!$this->attrs['gosaMailQuota'])) {
+ $this->attrs['gosaMailQuota']=0;
+ }
+
+ if(empty($this->attrs['gosaSpamMailbox'])){
+ unset($this->attrs['gosaSpamMailbox']);
+ }
+
+ $this->attrs['mail'] = strtolower($this->attrs['mail']);
+
/* Save data to LDAP */
$ldap->cd($this->dn);
- $ldap->modify($this->attrs);
- show_ldap_error($ldap->get_error());
+ $this->cleanup();
+ $ldap->modify ($this->attrs);
+
+ show_ldap_error($ldap->get_error(), sprintf(_("Saving of user/mail account with dn '%s' failed."),$this->dn));
/* Only do IMAP actions if we are not a template */
if (!$this->is_template){
+
if ($method->connect($this->gosaMailServer)){
$method->updateMailbox($this->folder_prefix.$this->$id);
+
$method->setQuota($this->folder_prefix.$this->$id, $this->gosaMailQuota);
$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");
+ $this->handle_post_events("modify");
}
} else {
$this->handle_post_events("add");
}
+
/* Check formular input */
function check()
{
+ if(!$this->is_account) return(array());
+
$ldap= $this->config->get_ldap_link();
- $message= array();
+ /* Call common method to give check the hook */
+ $message= plugin::check();
+
+ if(empty($this->gosaMailServer)){
+ $message[]= _("There is no valid mailserver specified, please add one in the system setup.");
+ }
/* must: mail */
if ($this->mail == ""){
}
}
$ldap->cd($this->config->current['BASE']);
- $ldap->search ("(&(objectClass=gosaMailAccount)(!(objectClass=gosaUserTemplate))(|(mail=".$this->mail.")(gosaMailAlternateAddress=".
- $this->mail."))(!(uid=".$this->uid."))(!(cn=".$this->uid.")))", array("uid"));
+ $ldap->search ("(&(!(objectClass=gosaUserTemplate))(objectClass=gosaMailAccount)(|(mail=".$this->mail.")(gosaMailAlternateAddress=".$this->mail."))(!(uid=".$this->uid."))(!(cn=".$this->uid.")))", array("uid"));
if ($ldap->count() != 0){
$message[]= _("The primary address you've entered is already in use.");
}
$message[]= _("You need to set the maximum mail size in order to reject anything.");
}
+ if((preg_match("/S/", $this->gosaMailDeliveryMode))&&(empty($this->gosaSpamMailbox))) {
+ $message[]= _("You specified Spam settings, but there is no Folder specified.");
+ }
+
return ($message);
}
+
/* Adapt from template, using 'dn' */
function adapt_from_template($dn)
{
$this->mail= strtolower(rewrite($this->mail));
}
+
/* Add entry to forwarder list */
function addForwarder($address)
{
$this->gosaMailForwardingAddress[]= $address;
$this->gosaMailForwardingAddress= array_unique ($this->gosaMailForwardingAddress);
-
sort ($this->gosaMailForwardingAddress);
reset ($this->gosaMailForwardingAddress);
$this->is_modified= TRUE;
}
+
/* Remove list of addresses from forwarder list */
function delForwarder($addresses)
{
}
-
+ /* Add given mail address to the list of alternate adresses ,
+ check if this mal address is used, skip adding in this case */
function addAlternate($address)
{
$ldap= $this->config->get_ldap_link();
-
$address= strtolower($address);
-
+
/* Is this address already assigned in LDAP? */
$ldap->cd ($this->config->current['BASE']);
- $ldap->search ("(&(objectClass=gosaMailAccount)(|(mail=$address)".
- "(gosaMailAlternateAddress=$address)))", array("uid"));
+ $ldap->search ("(&(objectClass=gosaMailAccount)(|(mail=$address)"."(gosaMailAlternateAddress=$address)))", array("uid"));
if ($ldap->count() > 0){
$attrs= $ldap->fetch ();
sort ($this->gosaMailAlternateAddress);
reset ($this->gosaMailAlternateAddress);
-
return ("");
}
return ($name);
}
+
+ /* Create the mail part for the copy & paste dialog */
+ function getCopyDialog()
+ {
+ if(!$this->is_account) return("");
+ $smarty = get_smarty();
+ $smarty->assign("mail",$this->mail);
+ $smarty->assign("gosaMailAlternateAddress",$this->gosaMailAlternateAddress);
+ $smarty->assign("gosaMailForwardingAddress",$this->gosaMailForwardingAddress);
+ $str = $smarty->fetch(get_template_path("copypaste.tpl",TRUE, dirname(__FILE__)));
+
+ $ret = array();
+ $ret['status'] = "";
+ $ret['string'] = $str;
+ return($ret);
+ }
+
+ function saveCopyDialog()
+ {
+ if(!$this->is_account) return;
+
+ /* Execute to save mailAlternateAddress && gosaMailForwardingAddress */
+ $this->execute();
+
+ if(isset($_POST['mail'])){
+ $this->mail = $_POST['mail'];
+ }
+
+ }
+
+ function allow_remove()
+ {
+ if (isset($this->config->current['MAILMETHOD'])){
+ $method= $this->config->current['MAILMETHOD'];
+ if(preg_match("/kolab/i",$method)){
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->config->current['BASE']);
+ $ldap->cat($this->dn);
+ if($ldap->count()){
+ $attrs = $ldap->fetch();
+ if(isset($attrs['kolabDeleteFlag'])){
+ return(_("Waiting for kolab to remove mail properties."));
+ }elseif(in_array("gosaMailAccount",$attrs['objectClass'])){
+ return(_("Please remove the mail account first, to allow kolab to call its remove methods."));
+ }
+ }
+ }
+ }
+ }
+
+
+ function plInfo()
+ {
+ return (array("plDescription" => _("Mail settings"),
+ "plSelfModify" => TRUE,
+ "plDepends" => array("objectClass" => "gosaAccount"),
+
+ "mail" => _("Mail address"),
+ "gosaMailServer" => _("Mail server"),
+ "gosaMailQuota" => _("Quota sizw"),
+ "gosaMailMaxSize" => _("Mail max size"),
+ "gosaMailForwardingAddress" => _("Forwarding address"),
+ "gosaMailDeliveryMode_L" => "FIXME"._("Local delivery"), // This is flag of gosaMailDeliveryMode
+ "gosaMailDeliveryMode_R" => "FIXME"._("Reject due to mailsize"), // This is flag of gosaMailDeliveryMode
+ "gosaMailDeliveryMode_s" => "FIXME"._("Use spam filter"), // This is flag of gosaMailDeliveryMode
+ "gosaMailDeliveryMode_V" => "FIXME"._("Add vacation information"), // This is flag of gosaMailDeliveryMode
+ "gosaMailDeliveryMode_C" => "FIXME"._("Use custom sieve script"), // This is flag of gosaMailDeliveryMode
+ "gosaMailDeliveryMode_I" => "FIXME"._("Only insider delivery"), // This is flag of gosaMailDeliveryMode
+ "gosaSpamSortLevel" => _("Spam level"),
+ "gosaSpamMailbox" => _("Spam mail box"),
+ "gosaMailAlternateAddress" => _("Mail alternative addresses"),
+
+ "gosaVacationMessage" => _("Vocation message"),
+ "gosaMailForwardingAddress" => _("Forwarding address")));
+
+ }
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: