Code

Removed whitespace before updatebase
[gosa.git] / plugins / admin / groups / class_groupMail.inc
1 <?php
3 class mailgroup extends plugin
4 {
5   /* CLI vars */
6   var $cli_summary= "Manage mail groups/shared folders";
7   var $cli_description= "Some longer text\nfor help";
8   var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
9   var $method= "mailMethod";
11   /* plugin specific values */
12   var $mail= "";
13   var $uid= "";
14   var $cn= "";
15   var $gosaMailAlternateAddress= array();
16   var $gosaMailForwardingAddress= array();
17   var $gosaMailDeliveryMode= "[L        ]";
18   var $gosaMailServer= "";
19   var $gosaMailQuota= "";
20   var $gosaMailMaxSize= "";
21   var $gosaVacationMessage= "";
22   var $gosaSpamSortLevel= "";
23   var $gosaSpamMailbox= "";
25   var $quotaUsage= 0;
26   var $forward_dialog= FALSE;
27   var $members= array();
28   var $mailusers= array();
29   var $perms= array();
30   var $imapacl= array('anyone' => 'p', '%members%' => 'lrsp', '' => 'p');
32   /* Helper */
33   var $indexed_acl= array();
34   var $indexed_user= array();
36   /* attribute list for save action */
37   var $attributes= array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize",
38       "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox",
39       "gosaVacationMessage");
40   var $objectclasses= array("gosaMailAccount");
43   /* constructor, if 'dn' is set, the node loads the given
44      'dn' from LDAP */
45   function mailgroup ($config, $dn= NULL, $ui= NULL)
46   {
47     /* Configuration is fine, allways */
48     $this->config= $config;
50     /* Load bases attributes */
51     plugin::plugin($config, $dn);
53     /* Set mailMethod to the one defined in gosa.conf */
54     if (isset($this->config->current['MAILMETHOD'])){
55       $method= $this->config->current['MAILMETHOD'];
56       if (class_exists("mailMethod$method")){
57         $this->method= "mailMethod$method";
58       } else {
59         print_red(sprintf(_("There is no mail method '%s' specified in your gosa.conf available."), $method));
60       }
61     }
63     /* Convert cn to uid in case of existing entries */
64     if (isset($this->attrs['cn'][0])){
65       $this->uid= $this->attrs['cn'][0];
66     }
68     if ($dn != NULL){
70       /* Load attributes containing arrays */
71       foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){
72         if (isset($this->attrs["$val"]["count"])){
73           for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){
74             array_push($this->$val, $this->attrs["$val"][$i]);
75           }
76         }
77       }
79       /* Only do IMAP actions if gosaMailServer attribute is set */
80       if (isset ($this->attrs["gosaMailServer"][0])){
81         $method= new $this->method($this->config);
82         if ($method->connect($this->attrs["gosaMailServer"][0])){
83           $quota= $method->getQuota($this->uid);
85           /* Maybe the entry is not saved in new style, get
86              permissions from IMAP and convert them to acl attributes */
87           if (!isset($this->attrs['acl'])){
88             $this->imapacl=  $method->getSharedFolderPermissions($this->uid);
90             /* Need to filter what a member acl could be... */
91             $vote= array();
92             $peak= 0;
93             $leader= "";
94             foreach ($this->imapacl as $user => $acl){
96               if ($user != "anyone" ){
97                 if (!isset($vote[$acl])){
98                   $vote[$acl]= 1;
99                 } else {
100                   $vote[$acl]++;
101                 }
102                 if ($vote[$acl] > $peak){
103                   $leader= $acl;
104                   $peek= $vote[$acl];
105                 }
106               }
108             }
110             /* Highest count wins as %members%, remove all members
111                with the same acl */
112             $this->imapacl['%members%']= $leader;
113             foreach ($this->imapacl as $user => $acl){
114               if ($this->acl == $leader && in_array($user, $this->attrs['memberUid'])){
115                 unset($this->imapacl[$user]);
116               }
117             }
118             
119           }
120          
121  
122           /* Update quota values */
123           if ($quota['gosaMailQuota'] == 2147483647){
124             $this->quotaUsage= "";
125             $this->gosaMailQuota= "";
126           } else {
127             $this->quotaUsage= $quota['quotaUsage'];
128             $this->gosaMailQuota= $quota['gosaMailQuota'];
129           }
130           $method->disconnect();
131         }
133         /* Adapt attributes if needed */
134         $method->fixAttributesOnLoad($this);
135       }
136     }
138     /* Get global filter config */
139     if (!is_global("gmailfilter")){
140       $ui= get_userinfo();
141       $base= get_base_from_people($ui->dn);
142       $gmailfilter= array( "depselect"       => $base,
143           "muser"            => "",
144           "regex"           => "*");
145       register_global("gmailfilter", $gmailfilter);
146     }
148     /* Load permissions */
149     if(preg_match("/kolab/i",$this->config->current['MAILMETHOD'])){
152       /* In case of kolab, we save the permissions in this style 
154             mailaddressfromuser rights
156          But we need the userID, so we search for a user, with this mail address.
157        */
158       $ldap = $this->config->get_ldap_link();
159       if (isset($this->attrs['acl'])){
160         for ($i= 0; $i<$this->attrs['acl']['count']; $i++){
161           list($user, $permission)= split(' ', $this->attrs['acl'][$i]);
162           
163           /* Skip entry anyone and %members %*/
164           if ($user != "anyone" && $user != "%members%"){
165             $mail = $ldap->search("(&(objectClass=person)(|(mail=".$user.")(uid=".$user.")))",array("uid"));
166             $mail = $ldap->fetch();
167             if(isset($mail['uid'][0])){
168               $user = $mail['uid'][0];
169             }
170           }
171       
172           /* Add to list */
173           $this->imapacl[$user]= $permission;
175           #fixme  What is that ?
176           if ($user != "anyone" && $user != "%members%"){
177             unset($this->imapacl['']);
178           }
179         }
180       }
181     }else{
182       if (isset($this->attrs['acl'])){
183         for ($i= 0; $i<$this->attrs['acl']['count']; $i++){
184           list($user, $permission)= split(' ', $this->attrs['acl'][$i]);
185           $this->imapacl[$user]= $permission;
186           if ($user != "anyone" && $user != "%members%"){
187             unset($this->imapacl['']);
188           }
189         }
190       }
191     }
193     /* Fill translations */
194     $this->perms["lrs"]= _("read");
195     $this->perms["lrsp"]= _("post");
196     $this->perms["p"]= _("external post");
197     $this->perms["lrsip"]= _("append");
198     $this->perms["lrswipcd"]= _("write");
199   }
202   function execute()
203   {
204         /* Call parent execute */
205         plugin::execute();
207     /* Load templating engine */
208     $smarty= get_smarty();
209     if ($_SESSION['js']==FALSE){
210       $smarty->assign("javascript", "false");
211     } else {
212       $smarty->assign("javascript", "true");
213     }
215     /* Do we need to flip is_account state? */
216     if (isset($_POST['modify_state'])){
217       $this->is_account= !$this->is_account;
218     }
220     /* Do we represent a valid account? */
221     if (!$this->is_account && $this->parent == NULL){
222       $display= "<img alt=\"\" src=\"images/stop.png\" align=middle>&nbsp;<b>".
223         _("This 'dn' has no valid mail extensions.")."</b>";
224       return ($display);
225     }
227     /* Show tab dialog headers */
228     $display= "";
229     if ($this->parent != NULL){
230       if ($this->is_account){
231         $display= $this->show_header(_("Remove mail account"),
232             _("This account has mail features enabled. You can disable them by clicking below."));
233       } else {
234         $display= $this->show_header(_("Create mail account"),
235             _("This account has mail features disabled. You can enable them by clicking below."));
236         return ($display);
237       }
238     }
240     /* Add ACL? */
241     foreach ($this->indexed_user as $nr => $user){
242       if (isset($_POST["add_$nr"])){
243         $this->imapacl[""]= "l";
244       }
245       if (isset($_POST["del_$nr"])){
246         unset ($this->imapacl[$user]);
247       }
248     }
250     /* Trigger forward add dialog? */
251     if (isset($_POST['add_local_forwarder'])){
252       $this->forward_dialog= TRUE;
253       $this->dialog= TRUE;
254     }
256     /* Cancel forward add dialog? */
257     if (isset($_POST['add_locals_cancel'])){
258       $this->forward_dialog= FALSE;
259       $this->dialog= FALSE;
260     }
262     /* Finished adding of locals? */
263     if (isset($_POST['add_locals_finish'])){
264       if (count ($_POST['local_list']) &&
265           chkacl ($this->acl, "gosaMailForwardingAddress") == ""){
267         /* Walk through list of forwarders, ignore own addresses */
268         foreach ($_POST['local_list'] as $val){
269           if (!in_array ($val, $this->gosaMailAlternateAddress) &&
270               $val != $this->mail){
272             $this->addForwarder($val);
273           }
274         }
275       }
276       $this->forward_dialog= FALSE;
277       $this->dialog= FALSE;
278     }
280     /* Add forward email addresses */
281     if (isset($_POST['add_forwarder'])){
282       if ($_POST['forward_address'] != ""){
284         /* Valid email address specified? */
285         $address= $_POST['forward_address'];
286         if (!is_email($address)){
288           print_red (_("You're trying to add an invalid email address ".
289                 "to the list of forwarders."));
291         } elseif ($address == $this->mail
292             || in_array($address, $this->gosaMailAlternateAddress)) {
294           print_red (_("Adding your one of your own addresses to the forwarders makes no sense."));
296         } else {
298           /* Add it */
299           if (chkacl ($this->acl, "gosaMailForwardingAddress") == ""){
300             $this->addForwarder ($address);
301           }
303         }
304       }
305     }
307     /* Delete forward email addresses */
308     if (isset($_POST['delete_forwarder'])){
309       if (count($_POST['forwarder_list']) 
310           && chkacl ($this->acl, "gosaMailForwardingAddress") == ""){
312         $this->delForwarder ($_POST['forwarder_list']);
313       }
314     }
316     /* Add alternate email addresses */
317     if (isset($_POST['add_alternate'])){
318       if ($_POST['alternate_address'] != "" &&
319           chkacl ($this->acl, "gosaMailAlternateAddress") == ""){
321         if (!is_email($_POST['alternate_address'])){
322           print_red (_("You're trying to add an invalid email address to the list of alternate addresses."));
324         } elseif (($user= $this->addAlternate ($_POST['alternate_address'])) != ""){
325           $ui= get_userinfo();
326           if ($user != $ui->username){
327             print_red (_("The address you're trying to add is already used by user")." '$user'.");
328           }
329         }
330       }
331     }
333     /* Delete alternate email addresses */
334     if (isset($_POST['delete_alternate']) && isset ($_POST['alternates_list'])){
335       if (count($_POST['alternates_list']) &&
336           chkacl ($this->acl, "gosaMailAlternateAddress") == ""){
338         $this->delAlternate ($_POST['alternates_list']);
339       }
340     }
342     /* Show forward add dialog */
343     if ($this->forward_dialog){
344       $ldap= $this->config->get_ldap_link();
346       /* Save data */
347       $gmailfilter= get_global("gmailfilter");
348       foreach( array("depselect", "muser", "regex") as $type){
349         if (isset($_POST[$type])){
350           $gmailfilter[$type]= $_POST[$type];
351         }
352       }
353       if (isset($_GET['search'])){
354         $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*";
355         if ($s == "**"){
356           $s= "*";
357         }
358         $gmailfilter['regex']= $s;
359       }
360       register_global("gmailfilter", $gmailfilter);
362       /* Get actual list */
363       $mailusers= array ();
364       if ($gmailfilter['regex'] != '*' && $gmailfilter['regex'] != ""){
365         $regex= $gmailfilter['regex'];
366         $filter= "(|(mail=$regex)(gosaMailAlternateAddress=$regex))";
367       } else {
368         $filter= "";
369       }
370       if ($gmailfilter['muser'] != ""){
371         $user= $gmailfilter['muser'];
372         $filter= "$filter(|(uid=$user)(cn=$user)(givenName=$user)(sn=$user))";
373       }
375       /* Add already present people to the filter */
376       $exclude= "";
377       foreach ($this->gosaMailForwardingAddress as $mail){
378         $exclude.= "(mail=$mail)";
379       }
380       if ($exclude != ""){
381         $filter.= "(!(|$exclude))";
382       }
384       $acl= array($this->config->current['BASE'] => ":all");
385       $res= get_list($acl, "(&(objectClass=gosaMailAccount)$filter)", TRUE, $gmailfilter['depselect'], array("sn", "mail", "givenName"), TRUE);
386       $ldap->cd($gmailfilter['depselect']);
387       $ldap->search ("(&(objectClass=gosaMailAccount)$filter)", array("sn", "mail", "givenName"));
388       error_reporting (0);
389       while ($attrs= $ldap->fetch()){
390         if(preg_match('/%/', $attrs['mail'][0])){
391           continue;
392         }
393         $name= $this->make_name($attrs);
394         $mailusers[$attrs['mail'][0]]= $name."&lt;".
395           $attrs['mail'][0]."&gt;";
396       }
397       error_reporting (E_ALL);
398       natcasesort ($mailusers);
399       reset ($mailusers);
401       /* Show dialog */
402       $smarty->assign("search_image", get_template_path('images/search.png'));
403       $smarty->assign("usearch_image", get_template_path('images/search_user.png'));
404       $smarty->assign("tree_image", get_template_path('images/tree.png'));
405       $smarty->assign("infoimage", get_template_path('images/info.png'));
406       $smarty->assign("launchimage", get_template_path('images/small_filter.png'));
407       $smarty->assign("mailusers", $mailusers);
408       $smarty->assign("deplist", $this->config->idepartments);
409       $smarty->assign("apply", apply_filter());
410       $smarty->assign("alphabet", generate_alphabet());
411       $smarty->assign("hint", print_sizelimit_warning());
412       foreach( array("depselect", "muser", "regex") as $type){
413         $smarty->assign("$type", $gmailfilter[$type]);
414       }
415       $smarty->assign("hint", print_sizelimit_warning());
416       $display.= $smarty->fetch (get_template_path('mail_locals.tpl', TRUE));
417       return ($display);
418     }
420     /* Assemble normal permissions */
421     $smarty->assign("permissionsACL", chkacl($this->acl, "permissions"));
422     if (isset($this->imapacl['anyone'])){
423       $smarty->assign("default_permissions", $this->imapacl['anyone']);
424     }
425     if (isset($this->imapacl['%members%'])){
426       $smarty->assign("member_permissions", $this->imapacl['%members%']);
427     }
429     /* Assemble extra attributes */
430     $perm= chkacl($this->acl, "permissions");
431     $tmp= "";
432     $nr= 0;
433     $count= count($this->imapacl);
434     $this->indexed_user= array();
435     $this->indexed_acl= array();
436     foreach($this->imapacl as $user => $acl){
437       if ($user != "anyone" && $user != "%members%"){
438         $tmp.= "<tr><td><input name=\"user_$nr\" size=20 maxlength=60 ".
439                "value=\"$user\" $perm></td><td><select size=\"1\" name=\"perm_$nr\" $perm>";
440         foreach ($this->perms as $key => $value){
441           if ($acl == $key){
442             $tmp.= "<option value=$key selected>$value</option>";
443           } else {
444             $tmp.= "<option value=$key>$value</option>";
445           }
446         }
447         $tmp.= "</select>&nbsp;";
448         if ($nr == $count - 1){
449           $tmp.= "<input type=submit value=\""._("Add")."\" ".
450                  "name=\"add_$nr\" $perm>";
451         }
452         if ($count > 3){
453           $tmp.= "<input type=submit value=\""._("Remove")."\" ".
454                  "name=\"del_$nr\" $perm></td></tr>";
455         }
456       }
457       $this->indexed_user[$nr]= $user;
458       $this->indexed_acl[$nr++]= $acl;
459     }
460     $smarty->assign("plusattributes", $tmp);
462     /* Show main page */
463     $mailserver= array();
464     foreach ($this->config->data['SERVERS']['IMAP'] as $key => $val){
465       $mailserver[]= $key;
466     }
467     $smarty->assign("mailServers", $mailserver);
468     foreach(array("gosaMailServer", "gosaMailQuota", "perms", "mail",
469           "gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){
470       $smarty->assign("$val", $this->$val);
471       $smarty->assign("$val"."ACL", chkacl($this->acl, "$val"));
472     }
473     if (is_numeric($this->gosaMailQuota) && $this->gosaMailQuota != 0){
474       $smarty->assign("quotausage", progressbar(round(($this->quotaUsage * 100)/ $this->gosaMailQuota),100,15,true));
475       $smarty->assign("quotadefined", "true");
476     } else {
477       $smarty->assign("quotadefined", "false");
478     }
480     $display.= $smarty->fetch (get_template_path('mail.tpl', TRUE));
481     return ($display);
482   }
485   /* remove object from parent */
486   function remove_from_parent()
487   {
488     /* include global link_info */
489     $ldap= $this->config->get_ldap_link();
491     /* Remove and write to LDAP */
492     plugin::remove_from_parent();
494     /* Zero arrays */
495     $this->attrs['gosaMailAlternateAddress']= array();
496     $this->attrs['gosaMailForwardingAddress']= array();
497     $this->attrs['gosaSharedFolderTarget']= array();
499     /* Keep uid */
500     unset ($this->attrs['uid']);
501     $ldap->cd($this->dn);
502     $ldap->modify($this->attrs);
503     show_ldap_error($ldap->get_error());
505     /* Connect to IMAP server for account deletion */
506     if ($this->is_account){
507       $method= new $this->method($this->config);
508       if ($method->connect($this->attrs["gosaMailServer"][0])){
509         /* Remove account from IMAP server */
510         $method->deleteMailbox($this->uid);
511         $method->disconnect();
512       }
513       $method->fixAttributesOnRemove($this);
514     }
516     /* Optionally execute a command after we're done */
517     $this->handle_post_events("remove");
518   }
521   /* Save data to object */
522   function save_object()
523   {
524     /* Assemble mail delivery mode
525        The mode field in ldap consists of values between braces, this must
526        be called when 'mail' is set, because checkboxes may not be set when
527        we're in some other dialog.
529        Example for gosaMailDeliveryMode [LR        ]
530        L: Local delivery
531        R: Reject when exceeding mailsize limit
532        S: Use spam filter
533        V: Use vacation message
534        C: Use custom sieve script
535        I: Only insider delivery */
536     if (isset($_POST['mailedit'])){
538       /* Save ldap attributes */
539       plugin::save_object();
541       $tmp= "";
542       if (!isset($_POST["drop_own_mails"])){
543         $tmp.= "L";
544       }
545       if (isset($_POST["use_mailsize_limit"])){
546         $tmp.= "R";
547       }
548       if (isset($_POST["use_spam_filter"])){
549         $tmp.= "S";
550       }
551       if (isset($_POST["use_vacation"])){
552         $tmp.= "V";
553       }
554       if (isset($_POST["own_script"])){
555         $tmp.= "C";
556       }
557       if (isset($_POST["only_local"])){
558         $tmp.= "I";
559       }
560       $tmp= "[$tmp]";
562       if (chkacl ($this->acl, "gosaMailDeliveryMode") == ""){
563         $this->gosaMailDeliveryMode= $tmp;
564       }
566       /* Collect data and re-assign it to the imapacl array */
567       if (chkacl($this->acl, "permissions") == ""){
568         $this->imapacl= array();
569         $this->imapacl['%members%']= $_POST['member_permissions'];
570         $this->imapacl['anyone']= $_POST['default_permissions'];
571         foreach ($this->indexed_user as $nr => $user){
572           if (!isset($_POST["user_$nr"])){
573             continue;
574           }
575           if ($_POST["user_$nr"] != $user || 
576               $_POST["perm_$nr"] != $this->indexed_acl[$nr]){
577             $this->is_modified= TRUE;
578           }
579           $this->imapacl[$_POST["user_$nr"]]= $_POST["perm_$nr"];
580         }
581       }
582     }
584   }
587   /* Save data to LDAP, depending on is_account we save or delete */
588   function save()
589   {
590     $ldap= $this->config->get_ldap_link();
592     /* Call parents save to prepare $this->attrs */
593     plugin::save();
595     /* Save arrays */
596     $this->attrs['gosaMailAlternateAddress']= $this->gosaMailAlternateAddress;
597     $this->attrs['gosaMailForwardingAddress']= $this->gosaMailForwardingAddress;
599     /* Save shared folder target */
600     $this->attrs['gosaSharedFolderTarget']= "share+".$this->uid;
602     if(preg_match("/kolab/i",$this->config->current['MAILMETHOD'])){
603       /* Save acl's */
604       $this->attrs['acl']= array();
605       foreach ($this->imapacl as $user => $acl){
606         if ($user == ""){
607           continue;
608         }
609         $ldap->search("(&(objectClass=person)(uid=".$user."))",array("mail"));
610         $mail = $ldap->fetch();
611         if($mail){
612           if(isset($mail['mail'][0])){
613             $this->attrs['acl'][]= $mail['mail'][0]." $acl";
614           }
615         }else{
616           $this->attrs['acl'][]= "$user $acl";
617         }
618       }
619     }else{
620       /* Save acl's */
621       $this->attrs['acl']= array();
622       foreach ($this->imapacl as $user => $acl){
623         if ($user == ""){
624           continue;
625         }
626         $this->attrs['acl'][]= "$user $acl";
627       }
628     }
629     /* Save data to LDAP */
630     $ldap->cd($this->dn);
631     $ldap->modify($this->attrs);
632     show_ldap_error($ldap->get_error());
633     /* Only do IMAP actions if we are not a template */
634     if (!$this->is_template){
635       $method= new $this->method($this->config);
636       $method->fixAttributesOnStore($this);
637       if ($method->connect($this->gosaMailServer)){
638         $method->updateMailbox($this->uid);
639         $method->setQuota($this->uid, $this->gosaMailQuota);
641         /* Exchange '%member%' pseudo entry */
642         $memberacl= $this->imapacl['%members%'];
643         unset ($this->imapacl['%members%']);
644         foreach ($this->members as $user){
645           if (!isset($this->imapacl[$user])){
646             $this->imapacl[$user]= $memberacl;
647           }
648         }
649         
650         $method->setSharedFolderPermissions($this->uid, $this->imapacl);
651         $method->disconnect();
652       }
653     }
655     /* Optionally execute a command after we're done */
656     if ($this->initially_was_account == $this->is_account){
657       if ($this->is_modified){
658         $this->handle_post_events("mofify");
659       }
660     } else {
661       $this->handle_post_events("add");
662     }
663   }
665   /* Check formular input */
666   function check()
667   {
668     $ldap= $this->config->get_ldap_link();
670     $message= array();
672     /* must: mail */
673     if ($this->mail == ""){
674       $message[]= _("The required field 'Primary address' is not set.");
675     }
676     if (!is_email($this->mail)){
677       $message[]= _("Please enter a valid email addres in 'Primary address' field.");
678     }
679     $ldap->cd($this->config->current['BASE']);
680     $ldap->search ("(&(!(objectClass=gosaUserTemplate))(objectClass=gosaMailAccount)(|(mail=".$this->mail.")(gosaMailAlternateAddress=".$this->mail."))(!(uid=".$this->cn."))(!(cn=".$this->cn.")))",array("uid"));
681     if ($ldap->count() != 0){
682       $message[]= _("The primary address you've entered is already in use.");
683     }
685     /* Check quota */
686     if ($this->gosaMailQuota != '' && chkacl ($this->acl, "gosaMailQuota") == ""){
687       if (!is_numeric($this->gosaMailQuota)) {
688         $message[]= _("Value in 'Quota size' is not valid.");
689       } else {
690         $this->gosaMailQuota= (int) $this->gosaMailQuota;
691       }
692     }
694     /* Check rejectsize for integer */
695     if ($this->gosaMailMaxSize != '' && chkacl ($this->acl, "gosaMailQuota") == ""){
696       if (!is_numeric($this->gosaMailMaxSize)){
697         $message[]= _("Please specify a vaild mail size for mails to be rejected.");
698       } else {
699         $this->gosaMailMaxSize= (int) $this->gosaMailMaxSize;
700       }
701     }
703     /* Need gosaMailMaxSize if use_mailsize_limit is checked */
704     if (is_integer(strpos($this->gosaMailDeliveryMode, "reject")) && $this->gosaMailMaxSize == ""){
705       $message[]= _("You need to set the maximum mail size in order to reject anything.");
706     }
707     
708     if(ord($this->imapacl['anyone'][0])==194){
709       $message[] = _("Please choose valid permission settings. Default permission can't be emtpy.");
710     }
712     if(empty($this->gosaMailServer)){
713       $message[] = _("Please select a valid mail server.");
714     }
716     return ($message);
717   }
719   /* Adapt from template, using 'dn' */
720   function adapt_from_template($dn)
721   {
722     plugin::adapt_from_template($dn);
724     foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){
725       $this->$val= array();
726       if (isset($this->attrs["$val"]["count"])){
727         for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){
728           $value= $this->attrs["$val"][$i];
729           foreach (array("sn", "givenName", "uid") as $repl){
730             if (preg_match("/%$repl/i", $value)){
731               $value= preg_replace ("/%$repl/i", $this->parent->$repl, $value);
732             }
733           }
734           array_push($this->$val, $value);
735         }
736       }
737     }
738   }
740   /* Add entry to forwarder list */
741   function addForwarder($address)
742   {
743     $this->gosaMailForwardingAddress[]= $address;
744     $this->gosaMailForwardingAddress= array_unique ($this->gosaMailForwardingAddress);
746     sort ($this->gosaMailForwardingAddress);
747     reset ($this->gosaMailForwardingAddress);
748     $this->is_modified= TRUE;
749   }
751   /* Remove list of addresses from forwarder list */
752   function delForwarder($addresses)
753   {
754     $this->gosaMailForwardingAddress= array_remove_entries ($addresses,
755                                       $this->gosaMailForwardingAddress);
756     $this->is_modified= TRUE;
757   }
761   function addAlternate($address)
762   {
763     $ldap= $this->config->get_ldap_link();
765     $address= strtolower($address);
767     /* Is this address already assigned in LDAP? */
768     $ldap->cd ($this->config->current['BASE']);
769     $ldap->search ("(&(objectClass=gosaMailAccount)(|(mail=$address)"."(gosaMailAlternateAddress=$address)))",array("uid"));
771     if ($ldap->count() > 0){
772       $attrs= $ldap->fetch ();
773       return ($attrs["uid"][0]);
774     }
776     /* Add to list of alternates */
777     if (!in_array($address, $this->gosaMailAlternateAddress)){
778       $this->gosaMailAlternateAddress[]= $address;
779     }
781     sort ($this->gosaMailAlternateAddress);
782     reset ($this->gosaMailAlternateAddress);
783     $this->is_modified= TRUE;
785     return ("");
786   }
789   function delAlternate($addresses)
790   {
791     $this->gosaMailAlternateAddress= array_remove_entries ($addresses,
792                                      $this->gosaMailAlternateAddress);
793     $this->is_modified= TRUE;
794   }
797   function make_name($attrs)
798   {
799     $name= "";
800     if (isset($attrs['sn'][0])){
801       $name= $attrs['sn'][0];
802     }
803     if (isset($attrs['givenName'][0])){
804       if ($name != ""){
805         $name.= ", ".$attrs['givenName'][0];
806       } else {
807         $name.= $attrs['givenName'][0];
808       }
809     }
810     if ($name != ""){
811       $name.= " ";
812     }
814     return ($name);
815   }
819 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
820 ?>