Code

Updated mail methods.
[gosa.git] / gosa-plugins / mail / personal / mail / class_mail-methods-cyrus.inc
index dc1bc39c8bad24c5ded282d1d304c48d79854a01..8816e39fb5a7657c2b39e98127006b04d3f3d337 100644 (file)
@@ -25,15 +25,22 @@ class mailMethodCyrus extends mailMethod{
   protected function init()
   {
     mailMethod::init();
-    $this->ServerList = $this->config->data['SERVERS']['IMAP']; 
+    if(isset($this->config->data['SERVERS']['IMAP'])){
+      $this->ServerList = $this->config->data['SERVERS']['IMAP']; 
+    }
   }
 
   
   public function connect()
   {
     mailMethod::connect();
-    if (!isset($this->ServerList[$this->MailServer])){
+
+    if(!count($this->ServerList)){
+      $this->error = _("There are no IMAP compatible mail servers defined!");
+      @DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__,
+          "<b>IMAP: No mail servers configured, check systems->server->service->imap.</b>","");
+      return(FALSE);
+    }elseif (!isset($this->ServerList[$this->MailServer])){
       $this->error = _("Mail server for this account is invalid!");
       @DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__,
           "<b>IMAP: The selected mail server '".$this->MailServer."' is invalid.</b>",""); 
@@ -56,9 +63,15 @@ class mailMethodCyrus extends mailMethod{
     /* Mailbox reachable? */
     if ($this->imap_handle === FALSE){
       $this->error = imap_last_error();
+
+      @DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__,"<b>Failed</b> :".imap_last_error(),
+        "<b>IMAP:</b> ".$cfg['admin']."@".$cfg['connect']);
+
       return (FALSE);
       $this->connected = FALSE;
     }
+    @DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__,"<b>successful</b>",
+        "<b>IMAP:</b> ".$cfg['admin']."@".$cfg['connect']);
     $this->connected = TRUE;
 
     return (TRUE);
@@ -107,10 +120,16 @@ class mailMethodCyrus extends mailMethod{
       return(FALSE);
     }
 
+    $this->reset_error();
+
     /* Load quota settings */
     $result = array("quotaUsage"=>"","gosaMailQuota"=>"");
     $quota_value = @imap_get_quota($this->imap_handle, $this->account_id);
 
+    /* Reset error queue, imap_qet_quota() will fail if the quota wasn't set yet.
+     */
+    imap_errors();
+
     if(is_array($quota_value) && count($quota_value)) {
       if (isset($quota_value["STORAGE"]) && is_array($quota_value["STORAGE"])){
 
@@ -273,10 +292,10 @@ class mailMethodCyrus extends mailMethod{
        And prepare replacements 
      */ 
     if(preg_match("/\@/",$this->account_id)){
-      $search = preg_replace("/\@/","*@",$this->account_id);
+      $search = preg_replace("/\@/","/*@",$this->account_id);
       $with_domain = TRUE;
     }else{
-      $search = $this->account_id."*";
+      $search = $this->account_id."/*";
       $with_domain = FALSE;
     }
     $folder = $this->account_id;
@@ -285,10 +304,17 @@ class mailMethodCyrus extends mailMethod{
     }
 
     /* Contact imap server */
-    $list = @imap_listmailbox($this->imap_handle, $cfg["connect"], $search);
+    $list = @imap_listmailbox($this->imap_handle, $cfg["connect"], $this->account_id);
+    $list2 = @imap_listmailbox($this->imap_handle, $cfg["connect"], $search);
 
     /* Create list of returned folder names */
     if (is_array($list)){
+
+      /* Merge in subfolders */
+      if(is_array($list2)){
+        $list = array_merge($list,$list2);
+      }
+
       foreach ($list as $val){
         $str = trim(preg_replace("/^\{[^\}]*+\}/","",$val));
         if($with_domain){
@@ -372,7 +398,6 @@ class mailMethodCyrus extends mailMethod{
     $folders= $this->getMailboxList();
     foreach ($folders as $subfolder){
       $folder_id = $this->create_folder_id($subfolder);
-      echo $folder_id."<br>";
 
       /* Remove all acl's for this folder */
       $users= @imap_getacl ($this->imap_handle, $folder_id);