Ignore:
Timestamp:
04/24/12 17:07:07 (12 years ago)
Author:
niltonneto
Message:

Ticket #2507 - Modificada implementação para alinhamento com projeto de camada REST.

Location:
sandbox/webservice/api/rest
Files:
2 added
1 copied

Legend:

Unmodified
Added
Removed
  • sandbox/webservice/api/rest/mail/Mail.php

    r5707 r6019  
    11<?php 
    22 
    3 include_once("Expresso.php"); 
     3class Mail extends Expresso { 
     4        protected $defaultFolders; 
     5        protected $imap; 
    46 
    5 class Mail extends Expresso { 
    6         private $defaultFolders; 
    7         private $imap; 
    8          
    9         private function formatMailObject($str) { 
     7        protected function formatMailObject($str) { 
    108                $str = html_entity_decode($str); 
    119                $str = preg_replace('/[<>\'"]/', '', $str); 
     
    3634         
    3735                 
    38         private function getImap(){ 
     36        protected function getImap(){ 
    3937                if($this->imap == null) { 
    4038                        $boemailadmin   = CreateObject('emailadmin.bo'); 
     
    6462                        $this->loadLang( $GLOBALS['phpgw_info']['user']['preferences']['common']['lang']);                                                                                                               
    6563                        $_SESSION['phpgw_info']['expressomail']['user']['userid'] = $GLOBALS['phpgw_info']['user']['userid']; 
    66                         $_SESSION['phpgw_info']['expressomail']['user']['passwd'] = $GLOBALS['phpgw_info']['user']['passwd'];                    
     64                        $_SESSION['phpgw_info']['expressomail']['user']['passwd'] = $GLOBALS['phpgw_info']['user']['passwd']; 
     65                         
     66                         
    6767                        $this->imap = CreateObject("expressoMail1_2.imap_functions"); 
    6868                         
     
    9090        } 
    9191                 
    92         public function getUserFolders($params){ 
    93                 if($this->isLoggedIn($params)) { 
    94                         $imap_folders =  $this->getImap()->get_folders_list(); 
    95                 } 
    96                 if(!$imap_folders){ 
    97                         return $this->getResponse(); 
    98                 } 
    9992                 
    100                 $all_folders    = array(); 
    101                 $user_folders   = array(); 
    102                 $shared_folders = array(); 
    103                          
    104                 foreach ($imap_folders as $i => $imap_folder) { 
    105                         if(is_int($i)) { 
    106                                 $folder = array(); 
    107                                 $folder['folderName']     = mb_convert_encoding($imap_folder['folder_name'], "UTF8", "ISO_8859-1"); 
    108                                 if($folder['folderName'] == 'INBOX') { 
    109                                         $folder['folderName'] = $this->getImap()->functions->getLang("Inbox"); 
    110                                 } 
    111                                 $folder['folderParentID'] = mb_convert_encoding($imap_folder['folder_parent'],'UTF8','ISO-8859-1'); 
    112                                 $folder['folderHasChildren'] = $imap_folder['folder_hasChildren']; 
    113                                 $folder['qtdUnreadMessages'] = $imap_folder['folder_unseen']; 
    114                                 $folder['qtdMessages'] = $this->getImap()->get_num_msgs(array("folder" => $imap_folder['folder_id'])); 
    115                                 $folder['folderID'] = mb_convert_encoding($imap_folder['folder_id'],'UTF8','ISO-8859-1'); 
    116                                                                                                                          
    117                                 if(substr($folder['folderID'], 0, 4) == 'user'){ 
    118                                         $folder['folderType'] = "6"; 
    119                                         $shared_folders[] = $folder; 
    120                                 }else if(array_key_exists($folder['folderID'], $this->defaultFolders) !== false) { 
    121                                         $folder_type = $this->defaultFolders[$folder['folderID']];                                               
    122                                         $folder['folderType'] = $folder_type; 
    123                                         $default_folders[] = $folder; 
    124                                 } 
    125                                 else{    
    126                                         $folder['folderType'] = "5"; 
    127                                         $user_folders[] = $folder; 
    128                                 } 
    129                         } 
    130                 } 
    131                  
    132                 $all_folders = array_merge($default_folders, $user_folders, $shared_folders); 
    133                 $quota_folders = $this->getImap()->get_quota_folders(); 
    134                 $search = $params['search'] ? mb_convert_encoding($params['search'],"ISO_8859-1", "UTF8") : null; 
    135                 foreach($all_folders as $i => $folder){ 
    136                         $folder_name = mb_convert_encoding($folder['folderName'],"ISO_8859-1", "UTF8"); 
    137                         $folder_id   = mb_convert_encoding($folder['folderID'],"ISO_8859-1", "UTF8"); 
    138                         if($folder_id == 'INBOX') {                              
    139                                 $j = $this->getImap()->functions->getLang("Inbox");  
    140                         }else { 
    141                                 $j = str_replace("INBOX".$this->getImap()->imap_delimiter,"",$folder_id);                        
    142                         } 
    143                         $all_folders[$i]['diskSizeUsed']        = $quota_folders[$j]['quota_used']; 
    144                         $all_folders[$i]['diskSizePercent'] = $quota_folders[$j]['quota_percent']/100; 
    145                         if($search != null && stristr($folder_name, $search) == null){ 
    146                                 unset($all_folders[$i]); 
    147                         } 
    148                 } 
    149                          
    150                 $this->result = array ( 
    151                         'folders' => array_values($all_folders), 
    152                         'diskSizeUsed'     => $quota_folders['quota_root']['quota_used']*1024,  
    153                         'diskSizeLimit'    => $quota_folders['quota_root']['quota_limit']*1024, 
    154                         'diskSizePercent'  => $quota_folders['quota_root']['quota_percent']/100 
    155                 ); 
    156                          
    157                 return $this->getResponse(); 
    158         }        
    15993         
    160         private function getMessage($params){ 
    161                  
    162                 $params['folderID']; 
    163                 $params['msgID']; 
    164                 $msg_number = $params['msg_number']; 
    165                 $msg_folder = ($params['msg_folder']); 
    166                  
     94        protected function getMessage(){                                 
    16795                $info_msg = $this -> getImap()-> get_info_msg( 
    168                                 array( 'msg_folder'      => urlencode($params['folderID']), 
    169                                                 'msg_number' => $params['msgID']                                 
     96                                array( 'msg_folder'      => urlencode($this->getParam('folderID')), 
     97                                                'msg_number' => $this->getParam('msgID')                                 
    17098                                )); 
    17199                 
     
    215143                return $msg;             
    216144        } 
    217         /* 
    218          * TODO: Implementar método para carregar mensagens 
    219          */ 
    220         public function getUserMessages($params){                
    221  
    222                 if($this->isLoggedIn($params)) { 
    223                          
    224                         if($params['folderID'] && $params['msgID'] > 0) { 
    225                                 $msg = $this->getMessage($params); 
    226                                 $this->result = array ( 'messages' => array($msg)); 
    227                                 return $this->getResponse(); 
    228                         } 
    229                          
    230                         $max_email_per_page = intval($params['resultsPerPage'] ? $params['resultsPerPage'] :  
    231                                         $this->getImap()->prefs['max_email_per_page']); 
    232                          
    233                         $current_page = intval($params['page'] ? $params['page'] : 1); 
    234                          
    235                         $msg_range_begin = ($max_email_per_page * ($current_page - 1)) + 1; 
    236                         $msg_range_end = $msg_range_begin + ($max_email_per_page  - 1);                  
    237                          
    238                         $this->getImap()->prefs['preview_msg_subject'] = "1"; 
    239                          
    240                          
    241                         $imap_msgs = $this->getImap()-> get_range_msgs2(         
    242                                         array(  "folder"                        => $params['folderID'],  
    243                                                         "msg_range_begin"       => $msg_range_begin, 
    244                                                         "msg_range_end"         => $msg_range_end, 
    245                                                         "search_box_type"       => "ALL", 
    246                                                         "sort_box_reverse"      => "1", 
    247                                                         "sort_box_type"         => "SORTARRIVAL"                                         
    248                                         )); 
    249                 } 
    250                 if(!$imap_msgs){ 
    251                         return $this->getResponse(); 
    252                 } 
    253145                 
    254                 $all_msgs = array(); 
    255  
    256                 foreach($imap_msgs as $i => $imap_msg) {                         
    257                         if(!is_int($i)) { 
    258                                 continue; 
    259                         } 
    260                         $msg = array(); 
    261                         $msg['msgID'] = $imap_msg['msg_number']; 
    262                         $msg['folderID'] =  $imap_msgs['folder']; 
    263                         $msg['msgDate'] = gmdate('d/m/Y H:i', $imap_msg['timestamp']);                   
    264                         $msg['msgFrom']['fullName'] = $imap_msg['from']['name']; 
    265                         $msg['msgFrom']['mailAddress'] = $imap_msg['from']['email'];                     
    266                         $msg['msgTo'][0]['fullName'] = $imap_msg['to']['name'];  
    267                         $msg['msgTo'][0]['mailAddress'] = $imap_msg['to']['email'];                                      
    268                         $msg['msgReplyTo'][0] = $this->formatMailObject($imap_msg['reply_toaddress']); 
    269                         $msg['msgSubject']  = mb_convert_encoding($imap_msg['subject'],"UTF8", "ISO_8859-1"); 
    270                          
    271                         $msg['msgHasAttachments'] = $imap_msg['attachment'] ? "1" : "0"; 
    272  
    273                         $msg['msgFlagged']      = $imap_msg['Flagged'] == "F" ? "1" : "0"; 
    274                         $msg['msgForwarded']= $imap_msg['Forwarded'] == "F" ? "1" : "0"; 
    275                         $msg['msgAnswered'] = $imap_msg['Answered'] == "A" ? "1" : "0"; 
    276                         $msg['msgDraft']        = $imap_msg['Draft'] == "X" ? "1" : "0";                                                                                                 
    277                         $msg['msgSeen']         = $imap_msg['Unseen'] == "U" ? "0" : "1"; 
    278                          
    279                         $msg['ContentType']     = $imap_msg['ContentType']; 
    280                         $msg['msgSize']         = $imap_msg['Size']; 
    281                                                  
    282                         $msg['msgBodyResume'] = $imap_msg['msg_sample']['body']; 
    283  
    284                         if($this->expressoVersion != "2.2") { 
    285                                 $msg['msgBodyResume'] =  base64_decode($msg['msgBodyResume']); 
    286                         } 
    287  
    288                         $msg['msgBodyResume'] = substr($msg['msgBodyResume'], 2); 
    289                         $msg['msgBodyResume'] = str_replace("\r\n", "", $msg['msgBodyResume']);                  
    290                         $msg['msgBodyResume'] = str_replace(chr(160)," ", $msg['msgBodyResume']); 
    291                         $msg['msgBodyResume'] = preg_replace('/\s\s+/', '', $msg['msgBodyResume']); 
    292                         $msg['msgBodyResume'] = mb_convert_encoding($msg['msgBodyResume'],"UTF8", "ISO_8859-1");             
    293              
    294                         $all_msgs[] = $msg; 
    295                 } 
    296                 $this->result = array ( 
    297                         'messages'        => $all_msgs, 
    298                         'timeZone'        => $imap_msgs['offsetToGMT'], 
    299                         'totalUnseen' => $imap_msgs['tot_unseen']                        
    300                 );               
    301                                                          
    302                 return $this->getResponse(); 
    303         } 
    304146} 
Note: See TracChangeset for help on using the changeset viewer.