Ignore:
Timestamp:
04/20/12 18:14:09 (12 years ago)
Author:
adriano
Message:

Ticket #2633 - correcao nos interceptors de consistencia para a funcionalidade de sinalizadores

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/prototype/services/ImapServiceAdapter.php

    r5960 r5989  
    676676                        case 'followupflagged': 
    677677                        { 
    678                          
    679                                 /**  
    680                                  * identifica se o formato de ID é "folder/subfolder/subsubfolder/<messageNumber>" ou "<message-id>" 
    681                                  */ 
    682                                 $folderName = $messageNumber = false; 
    683                                 if(!($messageHasId = preg_match('/<.*>/', $URI['id']))) { 
    684                                         $folderName = dirname($URI['id']); 
    685                                         $messageNumber = basename($URI['id']); 
    686                                 } 
    687                                  
    688                                 /** 
    689                                  * TODO - efetuar o parsing do $criteria e obter a pasta passada 
    690                                  */ 
    691678                                $map = array( 
    692679                                        'folderName' => array(), 
     
    694681                                        'messageId' => array() 
    695682                                ); 
    696                          
    697                                 if ($folderName && $messageNumber) { 
    698  
    699                                         $this->mbox = $this->open_mbox($folderName); 
    700                                         $s = imap_clearflag_full($this->mbox, $messageNumber, '$Followupflagged', ST_UID); 
    701  
    702                                         imap_close($this->mbox, CL_EXPUNGE); 
     683                                 
     684                                self::parseFilter($criteria["filter"], &$map); 
     685                                 
     686                                if (!$map['folderName']) { 
     687                                        $folders = array (); 
     688                                         
     689                                        $folder_list = $this->get_folders_list(); 
     690                                        foreach ($folder_list as $folder) 
     691                                                if (isset($folder['folder_id']))  
     692                                                        $folders[] = $folder['folder_id']; 
     693                                        $map['folderName'] = $folders; 
     694                                } 
     695 
     696                                $messagesIds = $map['messageId']; 
     697 
     698                                foreach ($map['folderName'] as $folder) { 
     699                                        $messages = array(); 
     700                                         
     701                                        $this->mbox = $this->open_mbox($folder); 
     702                                 
     703                                        /** 
     704                                         * Se é uma busca por messageId 
     705                                         */ 
     706                                        if (!empty($map['messageId'])) { 
     707                                                         
     708                                                foreach ($messagesIds as $k => $v) { 
     709                                                        $r = imap_search($this->mbox, 'UNDELETED KEYWORD "$Followupflagged" TEXT "'.$v.'"', SE_UID); 
     710 
     711                                                        if ($r) { 
     712                                                                $messages = $messages + $r; 
     713                                                                unset($messagesIds[$k]);         
     714                                                        } 
     715                                                } 
     716 
     717                                        /** 
     718                                         * Se é uma busca por messageNumber. 
     719                                         * Lembrando que, neste caso, só deve ser suportada uma única pasta no filtro. 
     720                                         */ 
     721                                        } else { 
     722                                                $messages = imap_search($this->mbox, 'UNDELETED KEYWORD "$Followupflagged"', SE_UID); 
     723                                        } 
     724 
     725                                        /** 
     726                                         * Se é uma busca por messageId, deve ser comparado com os messageNumbers  
     727                                         * passados no filtro, se houverem. 
     728                                         */ 
     729                                        if (!empty($map['messageNumber'])) { 
     730                                                foreach ($messages as $k => $m) 
     731                                                        if (!in_array($m, $map['messageNumber'])) 
     732                                                                unset($messages[$k]); 
     733                                        } 
     734 
     735                                        $s = true; 
     736                                        foreach ($messages as $k => $m) {                                                
     737                                                $s = imap_clearflag_full($this->mbox, $m, '$Followupflagged', ST_UID) && $s; 
     738                                        } 
     739 
     740                                        imap_close($this->mbox); 
    703741                                        $this->mbox = false; 
    704742                                         
    705                                         return $s; 
    706                                 } else { 
    707                                         /** 
    708                                          * Busca pela mensagem com o messageId dado. Se uma pasta foi passada, busca nela, 
    709                                          * senão busca em todas. 
    710                                          */ 
    711                                          
    712                                         $folders = array (); 
    713                                         if (isset($map['folderName'])) { 
    714                                                 $folders = $map['folderName']; 
    715                                         } else { 
    716                                                 $folder_list = $this->get_folders_list(); 
    717                                                 foreach ($folder_list as $folder) 
    718                                                         if (isset($folder['folder_id']))  
    719                                                                 $folders[] = $folder['folder_id']; 
    720                                         } 
    721                                          
    722                                         foreach ($folders as $folder) { 
    723                                                  
    724                                                 $this->mbox = $this->open_mbox($folder); 
    725                                                 if ($messages = imap_search($this->mbox, 'TEXT "'.$URI['id'].'"', SE_UID)) { 
    726                                                          
    727                                                         $s = imap_clearflag_full($this->mbox, $messages[0], '$Followupflagged', ST_UID); 
    728                                                          
    729                                                         imap_close($this->mbox, CL_EXPUNGE); 
    730                                                         $this->mbox = false; 
    731                                                          
    732                                                         /** 
    733                                                          * Stop searching in all folders 
    734                                                          */ 
    735                                                         return $s; 
    736                                                 } 
    737                                                  
    738                                                 imap_close($this->mbox); 
    739                                                 $this->mbox = false; 
    740                                         } 
    741                                 } 
    742                                  
    743                                 return false; 
     743                                        /** 
     744                                         * Se é uma busca por messageId e todos os messageIds foram econstrados: 
     745                                         * Stop searching in all folders 
     746                                         */ 
     747                                        if (!empty($map['messageId']) && empty($messagesIds)) 
     748                                                break; 
     749                                } 
     750                                 
     751                                return $s; 
    744752                        } 
    745753                } 
     
    748756        } 
    749757 
    750     public function deleteAll( $URI, $justthese = false, $criteria = false ) // avaliar 
    751     {} 
     758    public function deleteAll( $URI, $justthese = false, $criteria = false ) 
     759    { 
     760                /** 
     761                 * TODO - implementar a deleção de todos os followupflaggeds conforme filtro 
     762                 */ 
     763        } 
    752764 
    753765    public function update( $URI, $data, $criteria = false ) 
Note: See TracChangeset for help on using the changeset viewer.