source: sandbox/webservice/api/json-rpc/Mail.php @ 5595

Revision 5595, 14.2 KB checked in by niltonneto, 12 years ago (diff)

Ticket #2507 - Commit inicial de arquivos e pastas no sandbox.

  • Property svn:executable set to *
RevLine 
[5595]1<?php
2
3include_once("Expresso.php");
4
5class Mail extends Expresso {
6        var $defaultFolders;
7        var $imap;
8       
9        private function formatMailObject($str) {
10                $str = html_entity_decode($str);
11                $str = preg_replace('/[<>\'"]/', '', $str);
12                $return = array();           
13                if(preg_match('/[[:alnum:]\._\-]+@[[:alnum:]_\-\.]+/',$str, $matches1) &&
14                        preg_match('/[[:alnum:]\._\-\ ]+/',$str, $matches2)){                                       
15                        return array(                                               
16                        'fullName'        => mb_convert_encoding(str_replace($matches1[0],'', $str), "UTF8", "ISO_8859-1"),
17                                        'mailAddress' => $matches1[0]
18                                        );
19        }
20        else{                   
21                return array('mailAddress' => $str);           
22                }               
23    }
24   
25        private function loadLang($lang_user){         
26                $fn = PHPGW_INCLUDE_ROOT."/expressoMail1_2/setup/phpgw_".$lang_user.'.lang';
27                if (file_exists($fn)){
28                        $fp = fopen($fn,'r');
29                        while ($data = fgets($fp,16000)){
30                                list($message_id,$app_name,$null,$content) = explode("\t",substr($data,0,-1));
31                                $_SESSION['phpgw_info']['expressomail']['lang'][$message_id] = $content;
32                        }
33                        fclose($fp);
34                }
35        }
36       
37               
38        private function getImap(){
39                if($this->imap == null) {
40                        $boemailadmin   = CreateObject('emailadmin.bo');
41                        $emailadmin_profile = $boemailadmin->getProfileList();
42                        $_SESSION['phpgw_info']['expressomail']['email_server'] = $boemailadmin->getProfile($emailadmin_profile[0]['profileID']);
43                       
44                        $preferences = $GLOBALS['phpgw']->preferences->read();
45                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail'] = $preferences['expressoMail'];
46                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['outoffice'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['outoffice'];
47                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number'] = $GLOBALS['phpgw_info']['user']['telephonenumber'];
48                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_cache'] = $current_config['expressoMail_enable_cache'];
49                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_x_origin'] = $current_config['expressoMail_use_x_origin'];
50                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['number_of_contacts'] = $current_config['expressoMail_Number_of_dynamic_contacts'] ? $current_config['expressoMail_Number_of_dynamic_contacts'] : "0";
51                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['notification_domains'] = $current_config['expressoMail_notification_domains'];
52                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['search_result_number'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['search_result_number'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['search_result_number'] : "50";
53                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['search_characters_number'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['search_characters_number'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['search_characters_number'] : "4";                       
54                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['max_attachment_size'] = $current_config['expressoMail_Max_attachment_size'] ? $current_config['expressoMail_Max_attachment_size']."M" : '';
55                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['max_msg_size'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['max_msg_size'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['max_msg_size'] : "0";
56                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['imap_max_folders'] = $current_config['expressoMail_imap_max_folders'];
57                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['max_email_per_page'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['max_email_per_page'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['max_email_per_page'] : "50";
58                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['extended_info']?$_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['extended_info']:'0';
59                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['from_to_sent'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['from_to_sent'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['from_to_sent'] : "0";
60                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['return_recipient_deafault'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['return_recipient_deafault'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['return_recipient_deafault'] : "0";                   
61                        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['quick_search_default'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['quick_search_default'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['quick_search_default'] : 1;
62                       
63                       
64                        $this->loadLang( $GLOBALS['phpgw_info']['user']['preferences']['common']['lang']);                                                                                                             
65                        $_SESSION['phpgw_info']['expressomail']['user']['userid'] = $GLOBALS['phpgw_info']['user']['userid'];
66                        $_SESSION['phpgw_info']['expressomail']['user']['passwd'] = $GLOBALS['phpgw_info']['user']['passwd'];                   
67                        include_once(PHPGW_INCLUDE_ROOT."/expressoMail1_2/inc/class.imap_functions.inc.php");
68                        $this->imap = new imap_functions();
69                       
70                        if($this->defaultFolders == null) {                             
71                                $sent = empty($_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSentFolder']) ?
72                                        $this->imap->functions->getLang("Sent") : $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSentFolder'];
73                                $spam = empty($_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSpamFolder']) ?
74                                        $this->imap->functions->getLang("Spam"): $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSpamFolder'];
75                                $drafts = empty($_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultDraftsFolder']) ?
76                                        $this->imap->functions->getLang("Drafts") : $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultDraftsFolder'];
77                                $trash = empty($_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultTrashFolder']) ?
78                                        $this->imap->functions->getLang("Trash") : $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultTrashFolder'];
79                               
80                                $this->defaultFolders = array (
81                                                'INBOX' => 0,
82                                                'INBOX'.$this->imap->imap_delimiter.$spam   => 2,
83                                                'INBOX'.$this->imap->imap_delimiter.$sent   => 1,
84                                                'INBOX'.$this->imap->imap_delimiter.$drafts => 4,
85                                                'INBOX'.$this->imap->imap_delimiter.$trash   => 3
86                                        );                                     
87                        }
88                }
89                               
90                return $this->imap;
91        }
92               
93        public function getUserFolders($params){
94                if($this->isLoggedIn($params)) {
95                        $imap_folders =  $this->getImap()->get_folders_list();
96                }
97                if(!$imap_folders){
98                        return $this->getResponse();
99                }
100               
101                $all_folders    = array();
102                $user_folders   = array();
103                $shared_folders = array();
104                       
105                foreach ($imap_folders as $i => $imap_folder) {
106                        if(is_int($i)) {
107                                $folder = array();
108                                $folder['folderName']     = mb_convert_encoding($imap_folder['folder_name'], "UTF8", "ISO_8859-1");
109                                if($folder['folderName'] == 'INBOX') {
110                                        $folder['folderName'] = $this->getImap()->functions->getLang("Inbox");
111                                }
112                                $folder['folderParentID'] = mb_convert_encoding($imap_folder['folder_parent'],'UTF8','ISO-8859-1');
113                                $folder['folderHasChildren'] = $imap_folder['folder_hasChildren'];
114                                $folder['qtdUnreadMessages'] = $imap_folder['folder_unseen'];
115                                $folder['qtdMessages'] = $this->getImap()->get_num_msgs(array("folder" => $imap_folder['folder_id']));
116                                $folder['folderID'] = mb_convert_encoding($imap_folder['folder_id'],'UTF8','ISO-8859-1');
117                                                                                                                       
118                                if(substr($folder['folderID'], 0, 4) == 'user'){
119                                        $folder['folderType'] = "6";
120                                        $shared_folders[] = $folder;
121                                }else if(array_key_exists($folder['folderID'], $this->defaultFolders) !== false) {
122                                        $folder_type = $this->defaultFolders[$folder['folderID']];                                             
123                                        $folder['folderType'] = $folder_type;
124                                        $default_folders[] = $folder;
125                                }
126                                else{   
127                                        $folder['folderType'] = "5";
128                                        $user_folders[] = $folder;
129                                }
130                        }
131                }
132               
133                $all_folders = array_merge($default_folders, $user_folders, $shared_folders);
134                $quota_folders = $this->getImap()->get_quota_folders();
135                $soma = 0;
136                foreach($all_folders as $i => $folder){
137                        $folder_name = mb_convert_encoding($folder['folderName'],"ISO_8859-1", "UTF8");
138                        $folder_id   = mb_convert_encoding($folder['folderID'],"ISO_8859-1", "UTF8");
139                        if($folder_id == 'INBOX') {                             
140                                $j = $this->getImap()->functions->getLang("Inbox");
141                        }else {
142                                $j = str_replace("INBOX".$this->getImap()->imap_delimiter,"",$folder_id);                       
143                        }
144                        $all_folders[$i]['diskSizeUsed']        = $quota_folders[$j]['quota_used'];
145                        $all_folders[$i]['diskSizePercent'] = $quota_folders[$j]['quota_percent']/100;
146                        $soma = $soma + $all_folders[$i]['diskSizePercent'];
147                }
148                       
149                $this->result = array (
150                        'debug' => $soma,
151                        'folders' => $all_folders,
152                        'diskSizeUsed'     => $imap_folders['quota_used']*1024,
153                        'diskSizeLimit'    => $imap_folders['quota_limit']*1024,
154                        'diskSizePercent'  => $imap_folders['quota_percent']/100
155                );
156                       
157                return $this->getResponse();
158        }       
159       
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               
167                $info_msg = $this -> getImap()-> get_info_msg(
168                                array( 'msg_folder'      => urlencode($params['folderID']),
169                                                'msg_number' => $params['msgID']                               
170                                ));
171               
172                $msg['msgID']    = $info_msg['msg_number'];
173                $msg['folderID'] = $info_msg['msg_folder'];
174                //$msg['msgDate']        =  $info_msg['fulldate'];
175                $msg['msgDate']  =  $info_msg['msg_day']." ".$info_msg['msg_hour'];
176
177                $msg['msgFrom']['fullName']     = $info_msg['from']['name'];
178                $msg['msgFrom']['mailAddress']  = $info_msg['from']['email'];           
179                $msg['msgSender']['fullName']   = $info_msg['sender']['name'];
180                $msg['msgSender']['mailAddress']= $info_msg['sender']['email'];
181               
182                $toaddresses = explode(",",$info_msg['toaddress2']);
183                if(count($toaddresses) > 1) {                           
184                        foreach ($toaddresses as $i => $toaddress){
185                                $msg['msgTo'][$i] = $this->formatMailObject($toaddress);                       
186                        }
187                }
188                else{
189                        $msg['msgTo'][0] = $this->formatMailObject($info_msg['toaddress2']);
190                }
191                       
192                $ccaddresses = explode(",",$info_msg['cc']);
193                if(count($ccaddresses) > 1) {           
194                        foreach ($ccaddresses as $i => $ccaddress){
195                                $msg['msgCC'][$i] = $this->formatMailObject($ccaddress);
196                        }
197                }
198                else{
199                        $msg['msgCC'][0] = $this->formatMailObject($info_msg['cc']);
200                }
201               
202
203                $msg['msgReplyTo'][0] = $this->formatMailObject($info_msg['reply_toaddress']);                                         
204                $msg['msgSubject']  = mb_convert_encoding($info_msg['subject'],"UTF8", "ISO_8859-1");           
205                $msg['msgHasAttachments'] = $info_msg['attachments'] ? "1" : "0";               
206                $msg['msgAttachments'] = $info_msg['attachments'];             
207                $msg['msgFlagged']      = $info_msg['Flagged'] == "F" ? "1" : "0";
208                $msg['msgForwarded']= $info_msg['Forwarded'] == "F" ? "1" : "0";
209                $msg['msgAnswered'] = $info_msg['Answered'] == "A" ? "1" : "0";
210                $msg['msgDraft']        = $info_msg['Draft'] == "X" ? "1" : "0";
211                $msg['msgSeen']         = $info_msg['Unseen'] == "U" ? "0" : "1";                               
212                $msg['msgSize']         = $info_msg['Size'];
213                $msg['msgBody']     = $info_msg['body'];               
214               
215                return $msg;           
216        }
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                }
253               
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'] = substr(base64_decode($imap_msg['msg_sample']['body']), 2);
283                        $msg['msgBodyResume'] = str_replace("\r\n", "", $msg['msgBodyResume']);                 
284                        $msg['msgBodyResume'] = str_replace(chr(160)," ", $msg['msgBodyResume']);
285                        $msg['msgBodyResume'] = preg_replace('/\s\s+/', '', $msg['msgBodyResume']);
286                        $msg['msgBodyResume'] = mb_convert_encoding($msg['msgBodyResume'],"UTF8", "ISO_8859-1");           
287           
288                        $all_msgs[] = $msg;
289                }
290                $this->result = array (
291                        'messages'        => $all_msgs,
292                        'timeZone'        => $imap_msgs['offsetToGMT'],
293                        'totalUnseen' => $imap_msgs['tot_unseen']                       
294                );             
295                                                       
296                return $this->getResponse();
297        }
298}
Note: See TracBrowser for help on using the repository browser.