Changeset 5989 for trunk/prototype/services/ImapServiceAdapter.php
- Timestamp:
- 04/20/12 18:14:09 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/services/ImapServiceAdapter.php
r5960 r5989 676 676 case 'followupflagged': 677 677 { 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 passada690 */691 678 $map = array( 692 679 'folderName' => array(), … … 694 681 'messageId' => array() 695 682 ); 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); 703 741 $this->mbox = false; 704 742 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; 744 752 } 745 753 } … … 748 756 } 749 757 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 } 752 764 753 765 public function update( $URI, $data, $criteria = false )
Note: See TracChangeset
for help on using the changeset viewer.