source: trunk/egroupware/felamimail/inc/class.uidisplay.inc.php @ 128

Last change on this file since 128 was 75, checked in by guille, 17 years ago

Se modifico el archivo class.uidisplay.inc.php en la linea 957 para que se vean imagenes remotas con mas de 60 caracteres en la direccion

File size: 47.5 KB
Line 
1<?php
2        /***************************************************************************\
3        * eGroupWare - FeLaMiMail                                                   *
4        * http://www.linux-at-work.de                                               *
5        * http://www.phpgw.de                                                       *
6        * http://www.egroupware.org                                                 *
7        * Written by : Lars Kneschke [lkneschke@linux-at-work.de]                   *
8        * -------------------------------------------------                         *
9        * This program is free software; you can redistribute it and/or modify it   *
10        * under the terms of the GNU General Public License as published by the     *
11        * Free Software Foundation; either version 2 of the License, or (at your    *
12        * option) any later version.                                                *
13        \***************************************************************************/
14       
15        /**
16        * copyright notice for the functions highlightQuotes and _countQuoteChars
17        *
18        * The Text:: class provides common methods for manipulating text.
19        *
20        * $Horde: horde/lib/Text.php,v 1.80 2003/09/16 23:06:15 jan Exp $
21        *
22        * Copyright 1999-2003 Jon Parise <jon@horde.org>
23        *
24        * See the enclosed file COPYING for license information (LGPL). If you
25        * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
26        *
27        */
28       
29        /* $Id: class.uidisplay.inc.php 24409 2007-09-03 20:21:45Z nelius_weiss $ */
30
31        class uidisplay
32        {
33
34                var $public_functions = array
35                (
36                        'display'       => 'True',
37                        'displayBody'   => 'True',
38                        'displayHeader' => 'True',
39                        'displayImage'  => 'True',
40                        'printMessage'  => 'True',
41                        'saveMessage'   => 'True',
42                        'showHeader'    => 'True',
43                        'getAttachment' => 'True',
44                );
45               
46                var $icServerID=0;
47               
48                // the object storing the data about the incoming imap server
49                var $icServer=0;
50               
51                // the non permanent id of the message
52                var $id;
53               
54                // the permanent id of the message
55                var $uid;
56
57                function uidisplay()
58                {
59                        $this->t                =& CreateObject('phpgwapi.Template',EGW_APP_TPL);
60                        $this->displayCharset   = $GLOBALS['egw']->translation->charset();
61                        $this->bofelamimail     =& CreateObject('felamimail.bofelamimail',$this->displayCharset);
62                        $this->bopreferences    =& CreateObject('felamimail.bopreferences');
63                        $this->kses             =& CreateObject('phpgwapi.kses');
64                        $this->botranslation    =& CreateObject('phpgwapi.translation');
65                       
66                        $this->mailPreferences  = $this->bopreferences->getPreferences();
67                       
68                        $this->bofelamimail->openConnection($this->icServerID);
69                       
70                        $this->mailbox          = $this->bofelamimail->sessionData['mailbox'];
71                        $this->sort             = $this->bofelamimail->sessionData['sort'];
72                       
73                        if(isset($_GET['uid'])) {
74                                $this->uid      = (int)$_GET['uid'];
75                        }
76                       
77                        if(isset($_GET['id'])) {
78                                $this->id       = (int)$_GET['id'];
79                        }
80                       
81                        if(isset($this->id) && !isset($this->uid)) {
82                                if($uid = $this->bofelamimail->idToUid($this->mailbox, $this->id)) {
83                                        $this->uid = $uid;
84                                }
85                        }
86                       
87                        if(isset($_GET['part'])) {
88                                $this->partID = (int)$_GET['part'];
89                        }
90
91                        $this->rowColor[0] = $GLOBALS['egw_info']["theme"]["bg01"];
92                        $this->rowColor[1] = $GLOBALS['egw_info']["theme"]["bg02"];
93                }
94               
95                function highlightQuotes($text, $level = 5)
96                {
97                        // Use a global var since the class is called statically.
98                        $GLOBALS['_tmp_maxQuoteChars'] = 0;
99                       
100                        // Tack a newline onto the beginning of the string so that we
101                        // correctly highlight when the first character in the string
102                        // is a quote character.
103                        $text = "\n$text";
104                       
105                        preg_replace_callback("/^\s*((&gt;\s?)+)/m", array(&$this, '_countQuoteChars'), $text);
106                       
107                        // Go through each level of quote block and put the
108                        // appropriate style around it. Important to work downwards so
109                        // blocks with fewer quote chars aren't matched until their
110                        // turn.
111                        for ($i = $GLOBALS['_tmp_maxQuoteChars']; $i > 0; $i--) 
112                        {
113                                $text = preg_replace(
114                                // Finds a quote block across multiple newlines.
115                                "/(\n)( *(&gt;\s?)\{$i}(?! ?&gt;).*?)(\n|$)(?! *(&gt; ?)\{$i})/s",
116                                '\1<span class="quoted' . ((($i - 1) % $level) + 1) . '">\2</span>\4',$text);
117                        }
118                       
119                        /* Unset the global variable. */
120                        unset($GLOBALS['_tmp_maxQuoteChars']);
121                       
122                        /* Remove the leading newline we added above. */
123                        return substr($text, 1);
124                }
125               
126                function _countQuoteChars($matches)
127                {
128                        $num = count(preg_split('/&gt;\s?/', $matches[1])) - 1;
129                        if ($num > $GLOBALS['_tmp_maxQuoteChars']) 
130                        {
131                                $GLOBALS['_tmp_maxQuoteChars'] = $num;
132                        }
133                }
134               
135                function display()
136                {
137                        $partID         = $_GET['part'];
138                        $transformdate  =& CreateObject('felamimail.transformdate');
139                        $htmlFilter     =& CreateObject('felamimail.htmlfilter');
140                        $uiWidgets      =& CreateObject('felamimail.uiwidgets');
141                        // (regis) seems to be necessary to reopen...
142                        $this->bofelamimail->reopen($this->mailbox);
143                        #print "$this->mailbox, $this->uid, $partID<br>";
144                        $headers        = $this->bofelamimail->getMessageHeader($this->uid, $partID);
145                        #_debug_array($headers);exit;
146                        $rawheaders     = $this->bofelamimail->getMessageRawHeader($this->uid, $partID);
147                        $attachments    = $this->bofelamimail->getMessageAttachments($this->uid, $partID);
148                        #_debug_array($attachments); exit;
149                        $envelope       = $this->bofelamimail->getMessageEnvelope($this->uid, $partID);
150
151                        $nextMessage    = $this->bofelamimail->getNextMessage($this->mailbox, $this->uid);
152
153                        $webserverURL   = $GLOBALS['egw_info']['server']['webserver_url'];
154
155                        $nonDisplayAbleCharacters = array('[\016]','[\017]',
156                                        '[\020]','[\021]','[\022]','[\023]','[\024]','[\025]','[\026]','[\027]',
157                                        '[\030]','[\031]','[\032]','[\033]','[\034]','[\035]','[\036]','[\037]');
158
159                        #print "<pre>";print_r($rawheaders);print"</pre>";exit;
160
161                        // add line breaks to $rawheaders
162                        $newRawHeaders = explode("\n",$rawheaders);
163                        reset($newRawHeaders);
164                       
165                        if(isset($headers['ORGANIZATION'])) {
166                                $organization = $this->bofelamimail->decode_header(trim($headers['ORGANIZATION']));
167                        }
168                       
169                        // reset $rawheaders
170                        $rawheaders     = "";
171                        // create it new, with good line breaks
172                        reset($newRawHeaders);
173                        while(list($key,$value) = @each($newRawHeaders)) {
174                                $rawheaders .= wordwrap($value, 90, "\n     ");
175                        }
176                       
177                        $this->bofelamimail->closeConnection();
178                       
179                        $this->display_app_header();
180                        if(!isset($_GET['printable'])) {
181                                $this->t->set_file(array("displayMsg" => "view_message.tpl"));
182                        } else {
183                                $this->t->set_file(array("displayMsg" => "view_message_printable.tpl"));
184                                $this->t->set_var('charset',$GLOBALS['egw']->translation->charset());
185                        }
186
187                        $this->t->set_block('displayMsg','message_main');
188                        $this->t->set_block('displayMsg','message_main_attachment');
189                        $this->t->set_block('displayMsg','message_header');
190                        $this->t->set_block('displayMsg','message_raw_header');
191                        $this->t->set_block('displayMsg','message_navbar');
192                        $this->t->set_block('displayMsg','message_onbehalfof');
193                        $this->t->set_block('displayMsg','message_cc');
194                        $this->t->set_block('displayMsg','message_attachement_row');
195                        $this->t->set_block('displayMsg','previous_message_block');
196                        $this->t->set_block('displayMsg','next_message_block');
197                        $this->t->set_block('displayMsg','message_org');
198
199                        $this->t->egroupware_hack = False;
200                       
201                        $this->translate();
202                       
203//                      if(!isset($_GET['printable']))
204//                      {
205                        // navbar start
206                                // reply url
207                        $linkData = array (
208                                'menuaction'    => 'felamimail.uicompose.reply',
209                                'icServer'      => $this->icServer,
210                                'folder'        => base64_encode($this->mailbox),
211                                'reply_id'      => $this->uid,
212                        );
213                        if($partID != '') {
214                                $linkData['part_id'] = $partID;
215                        }
216                        $replyURL = $GLOBALS['egw']->link('/index.php',$linkData);
217
218                        // reply all url
219                        $linkData = array (
220                                'menuaction'    => 'felamimail.uicompose.replyAll',
221                                'icServer'      => $this->icServer,
222                                'folder'        => base64_encode($this->mailbox),
223                                'reply_id'      => $this->uid,
224                        );
225                        if($partID != '') {
226                                $linkData['part_id'] = $partID;
227                        }
228                        $replyAllURL = $GLOBALS['egw']->link('/index.php',$linkData);
229
230                        // forward url
231                        $linkData = array (
232                                'menuaction'    => 'felamimail.uicompose.forward',
233                                'reply_id'      => $this->uid,
234                                'folder'        => base64_encode($this->mailbox),
235                        );
236                        if($partID != '') {
237                                $linkData['part_id'] = $partID;
238                        }
239                        $forwardURL = $GLOBALS['egw']->link('/index.php',$linkData);   
240
241                        //delete url
242                        $linkData = array (
243                                'menuaction'    => 'felamimail.uifelamimail.deleteMessage',
244                                'icServer'      => $this->icServer,
245                                'folder'        => base64_encode($this->mailbox),
246                                'message'       => $this->uid,
247                        );
248                        $deleteURL = $GLOBALS['egw']->link('/index.php',$linkData);
249
250                        $navbarImages = array(
251                                'mail_reply'    => array(
252                                        'action'        => "window.location.href = '$replyURL'",
253                                        'tooltip'       => lang('reply'),
254                                ),
255                                'mail_replyall' => array(
256                                        'action'        => "window.location.href = '$replyAllURL'",
257                                        'tooltip'       => lang('reply all'),
258                                ),
259                                'mail_forward'  => array(
260                                        'action'        => "window.location.href = '$forwardURL'",
261                                        'tooltip'       => lang('forward'),
262                                ),
263                                'delete'        => array(
264                                        'action'        => "window.location.href = '$deleteURL'",
265                                        'tooltip'       => lang('delete'),
266                                ),
267                        );
268                        foreach($navbarImages as $buttonName => $buttonInfo) {
269                                $navbarButtons .= $uiWidgets->navbarButton($buttonName, $buttonInfo['action'], $buttonInfo['tooltip']);
270                        }
271                        $navbarButtons .= $uiWidgets->navbarSeparator();
272
273                        // print url
274                        $linkData = array (
275                                'menuaction'    => 'felamimail.uidisplay.printMessage',
276                                'uid'           => $this->uid
277                        );
278                        if($partID != '') {
279                                $linkData['part'] = $partID;
280                        }
281                        $printURL = $GLOBALS['egw']->link('/index.php',$linkData);
282                        $to_infologURL = $GLOBALS['egw']->link('/index.php',array(
283                                'menuaction' => 'infolog.uiinfolog.import_mail',
284                                'uid'    => $this->uid,
285                                'mailbox' => $this->mailbox
286                        ));
287
288
289                        // viewheader url
290                        $linkData = array (
291                                'menuaction'    => 'felamimail.uidisplay.displayHeader',
292                                'uid'           => $this->uid
293                        );
294                        if($partID != '') {
295                                $linkData['part'] = $partID;
296                        }
297                        $viewHeaderURL = $GLOBALS['egw']->link('/index.php',$linkData);
298                               
299                        $navbarImages = array();
300
301                        // viewheader url
302                        $linkData = array (
303                                'menuaction'    => 'felamimail.uidisplay.saveMessage',
304                                'uid'           => $this->uid
305                        );
306                        if($partID != '') {
307                                $linkData['part'] = $partID;
308                        }
309                        $saveMessageURL = $GLOBALS['egw']->link('/index.php',$linkData);
310
311                        $navbarImages = array();
312
313                        //print email
314                        $navbarImages = array(
315                                'fileprint' => array(
316                                        'action'        => "window.location.href = '$printURL'",
317                                        'tooltip'       => lang('print it'),
318                                ),
319                                'to_infolog' => array(
320                                        'action'        => "window.open('$to_infologURL','_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes')",
321                                        'tooltip'       => lang('save as infolog'),
322                                ),
323                        );
324                               
325                        // save email as
326                        $navbarImages['fileexport'] = array(
327                                'action'        => "window.location.href = '$saveMessageURL'",
328                                'tooltip'       => lang('save message to disk'),
329                        );
330                               
331                        // view header lines
332                        $navbarImages['kmmsgread'] = array(
333                                'action'        => "fm_displayHeaderLines('$viewHeaderURL')",
334                                'tooltip'       => lang('view header lines'),
335                        );
336                               
337                        foreach($navbarImages as $buttonName => $buttonData) {
338                                $navbarButtons .= $uiWidgets->navbarButton($buttonName, $buttonData['action'], $buttonData['tooltip']);
339                        }
340                        $this->t->set_var('navbarButtonsLeft',$navbarButtons);
341                               
342                        $navbarButtons = '';
343                        $navbarImages  = array();
344                        #_debug_array($nextMessage); exit;
345
346                        if($nextMessage['previous']) {
347                                $linkData = array (
348                                        'menuaction'    => 'felamimail.uidisplay.display',
349                                        'showHeader'    => 'false',
350                                        'uid'           => $nextMessage['previous']
351                                );
352                                $previousURL = $GLOBALS['egw']->link('/index.php',$linkData);
353                                $previousURL = "window.location.href = '$previousURL'";
354                                $navbarImages['up.button']      = array(
355                                        'action'        => $previousURL,
356                                        'tooltip'       => lang('previous message'),
357                                );
358                        } else {
359                                $previousURL = '';
360                        }
361       
362                        if($nextMessage['next']) {
363                                $linkData = array (
364                                        'menuaction'    => 'felamimail.uidisplay.display',
365                                        'showHeader'    => 'false',
366                                        'uid'           => $nextMessage['next']
367                                );
368                                $nextURL = $GLOBALS['egw']->link('/index.php',$linkData);
369                                $nextURL = "window.location.href = '$nextURL'";
370                                $navbarImages['down.button']    = array(
371                                        'action'        => $nextURL,
372                                        'tooltip'       => lang('next message'),
373                                );
374                        } else {
375                                $nextURL = '';
376                        }
377
378                               
379                        foreach($navbarImages as $buttonName => $buttonData) {
380                                $navbarButtons .= $uiWidgets->navbarButton($buttonName, $buttonData['action'], $buttonData['tooltip'], 'right');
381                        }
382
383                        $this->t->set_var('navbarButtonsRight',$navbarButtons);
384                               
385                        $this->t->parse('navbar','message_navbar',True);
386
387                        // navbar end
388                        // header
389                        // sent by a mailinglist??
390                        // parse the from header
391                        if($envelope['FROM'][0] != $envelope['SENDER'][0]) {
392                                $senderAddress = $this->emailAddressToHTML($envelope['SENDER']);
393                                $fromAddress   = $this->emailAddressToHTML($envelope['FROM'], $organization);
394                                $this->t->set_var("from_data",$senderAddress);
395                                $this->t->set_var("onbehalfof_data",$fromAddress);
396                                $this->t->parse('on_behalf_of_part','message_onbehalfof',True);
397                        } else {
398                                $fromAddress   = $this->emailAddressToHTML($envelope['FROM'], $organization);
399                                $this->t->set_var("from_data", $fromAddress);
400                                $this->t->set_var('on_behalf_of_part','');
401                        }
402
403                        // parse the to header
404                        $toAddress = $this->emailAddressToHTML($envelope['TO']);
405                        $this->t->set_var("to_data",$toAddress);
406                       
407                        // parse the cc header
408                        if(count($envelope['CC'])) {
409                                $ccAddress = $this->emailAddressToHTML($envelope['CC']);
410                                $this->t->set_var("cc_data",$ccAddress);
411                                $this->t->parse('cc_data_part','message_cc',True);
412                        } else {
413                                $this->t->set_var("cc_data_part",'');
414                        }
415
416                        $this->t->set_var("date_received",
417                                @htmlspecialchars($GLOBALS['egw']->common->show_date(strtotime($headers['DATE'])),
418                                ENT_QUOTES,$this->displayCharset));
419                       
420                        $this->t->set_var("subject_data",
421                                @htmlspecialchars($this->bofelamimail->decode_header(preg_replace($nonDisplayAbleCharacters,'',$envelope['SUBJECT'])),
422                                ENT_QUOTES,$this->displayCharset));
423
424                        $this->t->parse("header","message_header",True);
425
426                        $this->t->set_var("rawheader",@htmlentities(preg_replace($nonDisplayAbleCharacters,'',$rawheaders),ENT_QUOTES,$this->displayCharset));
427
428                        $linkData = array (
429                                'menuaction'    => 'felamimail.uidisplay.displayBody',
430                                'uid'           => $this->uid,
431                                'part'          => $partID
432                        );
433                        $this->t->set_var('url_displayBody', $GLOBALS['egw']->link('/index.php',$linkData));
434
435                        #$this->t->set_var("signature", $sessionData['signature']);
436
437                        // attachments
438                        if(is_array($attachments) && count($attachments) > 0) {
439                                $this->t->set_var('attachment_count',count($attachments));
440                        } else {
441                                $this->t->set_var('attachment_count','0');
442                        }
443
444                        if (is_array($attachments) && count($attachments) > 0) {
445                                $this->t->set_var('row_color',$this->rowColor[0]);
446                                $this->t->set_var('name',lang('name'));
447                                $this->t->set_var('type',lang('type'));
448                                $this->t->set_var('size',lang('size'));
449                                $this->t->set_var('url_img_save',$GLOBALS['egw']->html->image('felamimail','fileexport', lang('save')));
450                                #$this->t->parse('attachment_rows','attachment_row_bold',True);
451
452                                foreach ($attachments as $key => $value)
453                                {
454                                        $this->t->set_var('row_color',$this->rowColor[($key+1)%2]);
455                                        $this->t->set_var('filename',$value['name'] ? @htmlentities($value['name'], ENT_QUOTES, $this->displayCharset) :
456                                                lang('(no subject)'));
457                                        $this->t->set_var('mimetype',$value['mimeType']);
458                                        $this->t->set_var('size',$value['size']);
459                                        $this->t->set_var('attachment_number',$key);
460
461                                        switch($value['mimeType'])
462                                        {
463                                                case 'MESSAGE/RFC822':
464                                                        $linkData = array
465                                                        (
466                                                                'menuaction'    => 'felamimail.uidisplay.display',
467                                                                'uid'           => $this->uid,
468                                                                'part'          => $value['partID']
469                                                        );
470                                                        $windowName = 'displayMessage_'. $this->uid;
471                                                        $linkView = "egw_openWindowCentered('".$GLOBALS['egw']->link('/index.php',$linkData)."','$windowName',700,egw_getWindowOuterHeight());";
472                                                        break;
473                                                case 'IMAGE/JPEG':
474                                                case 'IMAGE/PNG':
475                                                case 'IMAGE/GIF':
476                                                #case 'application/pdf':
477                                                        $linkData = array
478                                                        (
479                                                                'menuaction'    => 'felamimail.uidisplay.getAttachment',
480                                                                'uid'           => $this->uid,
481                                                                'part'          => $value['partID']
482                                                        );
483                                                        $windowName = 'displayAttachment_'. $this->uid;
484                                                        $linkView = "egw_openWindowCentered('".$GLOBALS['egw']->link('/index.php',$linkData)."','$windowName',800,600);";
485                                                        break;
486                                                default:
487                                                        $linkData = array
488                                                        (
489                                                                'menuaction'    => 'felamimail.uidisplay.getAttachment',
490                                                                'uid'           => $this->uid,
491                                                                'part'          => $value['partID']
492                                                        );
493                                                        $linkView = "window.location.href = '".$GLOBALS['egw']->link('/index.php',$linkData)."';";
494                                                        break;
495                                        }
496                                        $this->t->set_var("link_view",$linkView);
497                                        $this->t->set_var("target",$target);
498
499                                        $linkData = array
500                                        (
501                                                'menuaction'    => 'felamimail.uidisplay.getAttachment',
502                                                'mode'          => 'save',
503                                                'uid'           => $this->uid,
504                                                'part'          => $value['partID']
505                                        );
506                                        $this->t->set_var("link_save",$GLOBALS['egw']->link('/index.php',$linkData));
507                                       
508                                        $this->t->parse('attachment_rows','message_attachement_row',True);
509                                }
510                        } else {
511                                $this->t->set_var('attachment_rows','');
512                        }
513                       
514                        #$this->t->pparse("out","message_attachment_rows");
515
516                        // print it out
517                        if(is_array($attachments) && count($attachments) > 0) {
518                                $this->t->pparse('out','message_main_attachment');
519                        } else {
520                                $this->t->pparse('out','message_main');
521                        }
522
523                }
524
525                function displayBody()
526                {
527                        $partID         = $_GET['part'];
528
529                        $this->bofelamimail->reopen($this->mailbox);
530                        $bodyParts      = $this->bofelamimail->getMessageBody($this->uid,'',$partID);
531
532                        $this->bofelamimail->closeConnection();
533                       
534                        $this->display_app_header();
535                       
536                        $body = $this->getdisplayableBody($bodyParts);
537                       
538                        print '<style type="text/css">
539                                body,html {
540                                height:100%;
541                                width:100%;
542                                padding:0px;
543                                margin:0px;
544                        }
545                        .td_display {
546                                font-family: Verdana, Arial, Helvetica, sans-serif;
547                                font-size: 110%;
548                                background-color: #FFFFFF;
549                        }
550                        </style>
551                        <div style="height:100%;width:100%; background-color:white; padding:0px; margin:0px;"><table width="100%" style="table-layout:fixed"><tr><td class="td_display">';
552
553                        print $body.'</td></tr></table>';
554                       
555                        print "</body></html>";
556                }
557
558                function displayHeader()
559                {
560                        $partID         = $_GET['part'];
561                        $transformdate  =& CreateObject('felamimail.transformdate');
562                        $htmlFilter     =& CreateObject('felamimail.htmlfilter');
563                        $uiWidgets      =& CreateObject('felamimail.uiwidgets');
564                        // (regis) seems to be necessary to reopen...
565                        $this->bofelamimail->reopen($this->mailbox);
566                        #$headers       = $this->bofelamimail->getMessageHeader($this->mailbox, $this->uid, $partID);
567                        $rawheaders     = $this->bofelamimail->getMessageRawHeader($this->uid, $partID);
568
569                        $webserverURL   = $GLOBALS['egw_info']['server']['webserver_url'];
570
571                        #$nonDisplayAbleCharacters = array('[\016]','[\017]',
572                        #               '[\020]','[\021]','[\022]','[\023]','[\024]','[\025]','[\026]','[\027]',
573                        #               '[\030]','[\031]','[\032]','[\033]','[\034]','[\035]','[\036]','[\037]');
574
575                        #print "<pre>";print_r($rawheaders);print"</pre>";exit;
576
577                        // add line breaks to $rawheaders
578                        $newRawHeaders = explode("\n",$rawheaders);
579                        reset($newRawHeaders);
580                       
581                        // reset $rawheaders
582                        $rawheaders     = "";
583                        // create it new, with good line breaks
584                        reset($newRawHeaders);
585                        while(list($key,$value) = @each($newRawHeaders)) {
586                                $rawheaders .= wordwrap($value, 90, "\n     ");
587                        }
588                       
589                        $this->bofelamimail->closeConnection();
590                       
591                        header('Content-type: text/html; charset=iso-8859-1');
592                        print '<pre>'. htmlspecialchars($rawheaders, ENT_QUOTES, 'iso-8859-1') .'</pre>';
593
594                }
595
596                function displayImage()
597                {
598                        $cid    = base64_decode($_GET['cid']);
599                        $partID = urldecode($_GET['partID']);
600
601                        $this->bofelamimail->reopen($this->mailbox);
602
603                        $attachment     = $this->bofelamimail->getAttachmentByCID($this->uid, $cid, $partID);
604
605                        $this->bofelamimail->closeConnection();
606                       
607                        $GLOBALS['egw']->session->commit_session();
608                       
609                        if(is_array($attachment)) {
610                                error_log("Content-Type: ".$attachment['type']."; name=\"". $attachment['filename'] ."\"");
611                                header ("Content-Type: ". strtolower($attachment['type']) ."; name=\"". $attachment['filename'] ."\"");
612                                header ('Content-Disposition: inline; filename="'. $attachment['filename'] .'"');
613                                header("Expires: 0");
614                                // the next headers are for IE and SSL
615                                header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
616                                header("Pragma: public"); 
617                               
618                                echo trim($attachment['attachment']);
619                                exit;
620                        }
621                       
622                        $GLOBALS['egw']->common->egw_exit();
623                       
624                        exit;
625                }
626               
627                function display_app_header()
628                {
629                        if(!@is_object($GLOBALS['egw']->js)) {
630                                $GLOBALS['egw']->js =& CreateObject('phpgwapi.javascript');
631                        }
632
633                        if($_GET['menuaction'] != 'felamimail.uidisplay.printMessage' &&
634                                $_GET['menuaction'] != 'felamimail.uidisplay.displayBody') {
635                                $GLOBALS['egw']->js->validate_file('tabs','tabs');
636                                $GLOBALS['egw']->js->validate_file('jscode','view_message','felamimail');
637                                $GLOBALS['egw']->js->set_onload('javascript:initAll();');
638                        }
639                       
640                        if($_GET['menuaction'] == 'felamimail.uidisplay.printMessage') {
641                                $GLOBALS['egw']->js->set_onload('javascript:window.print()');
642                        }
643                       
644                        if($_GET['menuaction'] == 'felamimail.uidisplay.printMessage' ||
645                                $_GET['menuaction'] == 'felamimail.uidisplay.displayBody') {
646                                $GLOBALS['egw_info']['flags']['nofooter'] = true;
647                        }
648                       
649                        $GLOBALS['egw']->common->egw_header();
650                }
651
652                function emailAddressToHTML($_emailAddress, $_organisation='', $allwaysShowMailAddress=false, $showAddToAdrdessbookLink=true) {
653                        #_debug_array($_emailAddress);
654                        // create some nice formated HTML for senderaddress
655                        #if($_emailAddress['EMAIL'] == 'undisclosed-recipients: ;')
656                        #       return $_emailAddress['EMAIL'];
657                               
658                        #$addressData = imap_rfc822_parse_adrlist
659                        #               ($this->bofelamimail->decode_header($_emailAddress),'');
660                        if(is_array($_emailAddress)) {
661                                $senderAddress = '';
662                                foreach($_emailAddress as $addressData) {
663                                        #_debug_array($addressData);
664                                        if($addressData['MAILBOX_NAME'] == 'NIL') {
665                                                continue;
666                                        }
667                                       
668                                        if(!empty($senderAddress)) $senderAddress .= ', ';
669                                       
670                                        if(strtolower($addressData['MAILBOX_NAME']) == 'undisclosed-recipients') {
671                                                $senderAddress .= 'undisclosed-recipients';
672                                                continue;
673                                        }
674                                       
675                                        if($addressData['PERSONAL_NAME'] != 'NIL') {
676                                                $newSenderAddress = $addressData['RFC822_EMAIL'] != 'NIL' ? $addressData['RFC822_EMAIL'] : $addressData['EMAIL'];
677                                                $newSenderAddress = $this->bofelamimail->decode_header($newSenderAddress);
678                                                $decodedPersonalName = $this->bofelamimail->decode_header($addressData['PERSONAL_NAME']);
679
680                                                $realName =  $decodedPersonalName;
681                                                // add mailaddress
682                                                if ($allwaysShowMailAddress) {
683                                                        $realName .= ' <'.$addressData['EMAIL'].'>';
684                                                }
685                                                // add organization
686                                                if(!empty($_organisation)) {
687                                                        $realName .= ' ('. $_organisation . ')';
688                                                }
689                                               
690                                                $linkData = array (
691                                                        'menuaction'    => 'felamimail.uicompose.compose',
692                                                        'send_to'       => base64_encode($newSenderAddress)
693                                                );
694                                                $link = $GLOBALS['egw']->link('/index.php',$linkData);
695                                                $senderAddress .= sprintf('<a href="%s" title="%s">%s</a>',
696                                                                        $link,
697                                                                        @htmlentities($newSenderAddress,ENT_QUOTES,$this->displayCharset),
698                                                                        @htmlentities($realName, ENT_QUOTES, $this->displayCharset));
699
700                                                $linkData = array (
701                                                        'menuaction'            => 'addressbook.uicontacts.edit',
702                                                        'presets[email]'        => @htmlentities($addressData['EMAIL'], ENT_QUOTES, $this->displayCharset),
703                                                        'presets[org_name]'     => @htmlentities($_organisation, ENT_QUOTES, $this->displayCharset),
704                                                        'referer'               => $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']
705                                                );
706                                               
707                                                if($spacePos = strrpos($decodedPersonalName, ' ')) {
708                                                        $linkData['presets[n_family]']  = @htmlentities(substr($decodedPersonalName, $spacePos+1), ENT_QUOTES, $this->displayCharset);
709                                                        $linkData['presets[n_given]']   = @htmlentities(substr($decodedPersonalName, 0, $spacePos), ENT_QUOTES, $this->displayCharset);
710                                                } else {
711                                                        $linkData['presets[n_family]']  = @htmlentities($decodedPersonalName, ENT_QUOTES, $this->displayCharset);
712                                                }
713                                               
714                                                if ($showAddToAdrdessbookLink) {
715                                                        $urlAddToAddressbook = $GLOBALS['egw']->link('/index.php',$linkData);
716                                                        $onClick = "window.open(this,this.target,'dependent=yes,width=850,height=440,location=no,menubar=no,toolbar=no,scrollbars=yes,status=yes'); return false;";
717                                                        $image = $GLOBALS['egw']->common->image('felamimail','sm_envelope');
718                                                        $senderAddress .= sprintf('<a href="%s" onClick="%s">
719                                                                <img src="%s" width="10" height="8" border="0"
720                                                                align="absmiddle" alt="%s"
721                                                                title="%s"></a>',
722                                                                $urlAddToAddressbook,
723                                                                $onClick,
724                                                                $image,
725                                                                lang('add to addressbook'),
726                                                                lang('add to addressbook'));
727                                                }
728                                        } else {
729                                                $linkData = array (
730                                                        'menuaction'    => 'felamimail.uicompose.compose',
731                                                        'send_to'       => base64_encode($addressData['EMAIL'])
732                                                );
733                                                $link = $GLOBALS['egw']->link('/index.php',$linkData);
734                                                $senderAddress .= sprintf('<a href="%s">%s</a>',
735                                                                        $link,@htmlentities($addressData['EMAIL'], ENT_QUOTES, $this->displayCharset));
736                                                //TODO: This uses old addressbook code, which should be removed in Version 1.4
737                                                //Please use addressbook.uicontacts.edit with proper paramenters
738                                                $linkData = array
739                                                (
740                                                        'menuaction'            => 'addressbook.uicontacts.edit',
741                                                        'presets[email]'        => @htmlentities($addressData['EMAIL'], ENT_QUOTES, $this->displayCharset),
742                                                        'presets[org_name]'     => @htmlentities($_organisation, ENT_QUOTES, $this->displayCharset),
743                                                        'referer'               => $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']
744                                                );
745
746                                                if ($showAddToAdrdessbookLink) {
747                                                        $urlAddToAddressbook = $GLOBALS['egw']->link('/index.php',$linkData);
748                                                        $onClick = "window.open(this,this.target,'dependent=yes,width=850,height=440,location=no,menubar=no,toolbar=no,scrollbars=yes,status=yes'); return false;";
749                                                        $image = $GLOBALS['egw']->common->image('felamimail','sm_envelope');
750                                                        $senderAddress .= sprintf('<a href="%s" onClick="%s">
751                                                                <img src="%s" width="10" height="8" border="0"
752                                                                align="absmiddle" alt="%s"
753                                                                title="%s"></a>',
754                                                                $urlAddToAddressbook,
755                                                                $onClick,
756                                                                $image,
757                                                                lang('add to addressbook'),
758                                                                lang('add to addressbook'));
759                                                }
760                                        }
761                                }
762                               
763                                return $senderAddress;
764                        }
765                       
766                        // if something goes wrong, just return the original address
767                        return $_emailAddress;
768                }
769               
770                function getAttachment()
771                {
772                       
773                        $part           = $_GET['part'];
774                       
775                        $this->bofelamimail->reopen($this->mailbox);
776                        $attachment     = $this->bofelamimail->getAttachment($this->uid,$part);
777                        $this->bofelamimail->closeConnection();
778                       
779                        $GLOBALS['egw']->session->commit_session();
780                       
781                        header ("Content-Type: ".$attachment['type']."; name=\"". $attachment['filename'] ."\"");
782                        if($_GET['mode'] == "save") {
783                                // ask for download
784                                header ("Content-Disposition: attachment; filename=\"". $attachment['filename'] ."\"");
785                        } else {
786                                // display it
787                                header ("Content-Disposition: inline; filename=\"". $attachment['filename'] ."\"");
788                        }
789                        header("Expires: 0");
790                        // the next headers are for IE and SSL
791                        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
792                        header("Pragma: public"); 
793
794                        echo $attachment['attachment'];
795                       
796                        $GLOBALS['egw']->common->egw_exit();
797                        exit;
798                }
799               
800                function getdisplayableBody($_bodyParts)
801                {
802                        $bodyParts      = $_bodyParts;
803
804                        $webserverURL   = $GLOBALS['egw_info']['server']['webserver_url'];
805
806                        $nonDisplayAbleCharacters = array('[\016]','[\017]',
807                                        '[\020]','[\021]','[\022]','[\023]','[\024]','[\025]','[\026]','[\027]',
808                                        '[\030]','[\031]','[\032]','[\033]','[\034]','[\035]','[\036]','[\037]');
809
810                        $this->kses->AddProtocol('cid');
811                        $this->kses->AddHTML(
812                                'p', array(
813                                        'align' => array('minlen' =>   1, 'maxlen' =>  10)
814                                )
815                        );
816                        $this->kses->AddHTML("tbody");
817                        $this->kses->AddHTML("tt");
818                        $this->kses->AddHTML("br");
819                        $this->kses->AddHTML("b");
820                        $this->kses->AddHTML("u");
821                        $this->kses->AddHTML("s");
822                        $this->kses->AddHTML("i");
823                        $this->kses->AddHTML('em');
824                        $this->kses->AddHTML("strong");
825                        $this->kses->AddHTML("strike");
826                        $this->kses->AddHTML("center");
827                        $this->kses->AddHTML(
828                                "font",array(
829                                        "color" => array('maxlen' => 10)
830                                )
831                        );
832                        $this->kses->AddHTML(
833                                "hr",array(
834                                        "class"         => array('maxlen' => 20),
835                                        "style"         => array('minlen' => 1),
836                                )
837                        );
838                        $this->kses->AddHTML(
839                                "div",array(
840                                        'align' => array('maxlen' => 10)
841                                )
842                        );
843                        $this->kses->AddHTML("ul");
844                        $this->kses->AddHTML(
845                                "ol",array(
846                                        "type"  => array('maxlen' => 20)
847                                )
848                        );
849                        $this->kses->AddHTML("li");
850                        $this->kses->AddHTML("h1");
851                        $this->kses->AddHTML("h2");
852                        $this->kses->AddHTML(
853                                "style",array(
854                                        "type"  => array('maxlen' => 20)
855                                )
856                        );
857                        $this->kses->AddHTML("select");
858                        $this->kses->AddHTML(
859                                "option",array(
860                                        "value" => array('maxlen' => 45),
861                                        "selected" => array()
862                                )
863                        );
864
865                        $this->kses->AddHTML(
866                                "a", array(
867                                        "href"          => array('maxlen' => 145, 'minlen' => 10),
868                                        "name"          => array('minlen' => 2),
869                                        'target'        => array('maxlen' => 10)
870                                )
871                        );
872
873                        $this->kses->AddHTML(
874                                "pre", array(
875                                        "wrap" => array('maxlen' => 10)
876                                )
877                        );
878                       
879                        //      Allows 'td' tag with colspan|rowspan|class|style|width|nowrap attributes,
880                        //              colspan has minval of   2       and maxval of 5
881                        //              rowspan has minval of   3       and maxval of 6
882                        //              class   has minlen of   1 char  and maxlen of   10 chars
883                        //              style   has minlen of  10 chars and maxlen of 100 chars
884                        //              width   has maxval of 100
885                        //              nowrap  is valueless
886                        $this->kses->AddHTML(
887                                "table",array(
888                                        "class"   => array("minlen" =>   1, 'maxlen' =>  20),
889                                        "border"   => array("minlen" =>   1, 'maxlen' =>  10),
890                                        "cellpadding"   => array("minlen" =>   0, 'maxlen' =>  10),
891                                        "cellspacing"   => array("minlen" =>   0, 'maxlen' =>  10),
892                                        "width"   => array("maxlen" => 5),
893                                        "style"   => array('minlen' =>  10, 'maxlen' => 100),
894                                        "bgcolor"   => array('maxlen' =>  10),
895                                        "align"   => array('maxlen' =>  10),
896                                        "valign"   => array('maxlen' =>  10),
897                                        "bordercolor"   => array('maxlen' =>  10)
898                                )
899                        );
900                        $this->kses->AddHTML(
901                                "tr",array(
902                                        "colspan"       => array('minval' =>   2, 'maxval' =>   5),
903                                        "rowspan"       => array('minval' =>   3, 'maxval' =>   6),
904                                        "class"         => array("minlen" =>   1, 'maxlen' =>  20),
905                                        "width"         => array("maxlen" => 5),
906                                        "style"         => array('minlen' =>  10, 'maxlen' => 100),
907                                        "align"         => array('maxlen' =>  10),
908                                        'bgcolor'       => array('maxlen' => 10),
909                                        "valign"        => array('maxlen' =>  10),
910                                        "nowrap"        => array('valueless' => 'y')
911                                )
912                        );
913                        $this->kses->AddHTML(
914                                "td",array(
915                                        "colspan" => array('minval' =>   2, 'maxval' =>   5),
916                                        "rowspan" => array('minval' =>   3, 'maxval' =>   6),
917                                        "class"   => array("minlen" =>   1, 'maxlen' =>  20),
918                                        "width"   => array("maxlen" => 5),
919                                        "style"   => array('minlen' =>  10, 'maxlen' => 100),
920                                        "align"   => array('maxlen' =>  10),
921                                        'bgcolor' => array('maxlen' => 10),
922                                        "valign"   => array('maxlen' =>  10),
923                                        "nowrap"  => array('valueless' => 'y')
924                                )
925                        );
926                        $this->kses->AddHTML(
927                                "th",array(
928                                        "colspan" => array('minval' =>   2, 'maxval' =>   5),
929                                        "rowspan" => array('minval' =>   3, 'maxval' =>   6),
930                                        "class"   => array("minlen" =>   1, 'maxlen' =>  20),
931                                        "width"   => array("maxlen" => 5),
932                                        "style"   => array('minlen' =>  10, 'maxlen' => 100),
933                                        "align"   => array('maxlen' =>  10),
934                                        "valign"   => array('maxlen' =>  10),
935                                        "nowrap"  => array('valueless' => 'y')
936                                )
937                        );
938                        $this->kses->AddHTML(
939                                "span",array(
940                                        "class"   => array("minlen" =>   1, 'maxlen' =>  20)
941                                )
942                        );
943                        $this->kses->AddHTML(
944                                "blockquote",array(
945                                        "class" => array("minlen" =>   1, 'maxlen' =>  20),
946                                        "style" => array("minlen" =>   1),
947                                        "cite"  => array('maxlen' => 30),
948                                        "type"  => array('maxlen' => 10),
949                                        "dir"   => array("minlen" =>   1, 'maxlen' =>  10)
950                                )
951                        );
952//                      se modifico el valor de src maxlen para que se puedan ver imagenes remotas con mas de
953//                      60 caracteres en la direccion
954
955                        $this->kses->AddHTML(
956                                'img',array(
957                                        "src"           => array("minlen" =>   4, 'maxlen' =>  260, $GLOBALS['egw_info']['user']['preferences']['felamimail']['allowExternalIMGs'] ? '' : 'match' => '/^cid:.*/'),
958                                        "align"         => array("minlen" =>   1),
959                                        "border"        => array('maxlen' => 30),
960                                )
961                        );
962
963                        $body = '';
964
965                        #_debug_array($bodyParts); exit;
966
967                        foreach($bodyParts as $singleBodyPart) {
968                                if(!empty($body)) {
969                                        $body .= '<hr style="border:dotted 1px silver;">';
970                                }
971                                $singleBodyPart['body'] = $this->botranslation->convert(
972                                        $singleBodyPart['body'],
973                                        strtolower($singleBodyPart['charSet'])
974                                );
975
976                                if($singleBodyPart['mimeType'] == 'text/plain')
977                                {
978                                        $newBody        = $singleBodyPart['body'];
979
980                                        $newBody        = @htmlentities($singleBodyPart['body'],ENT_QUOTES,$this->displayCharset);
981                                        #$newBody       = $this->bofelamimail->wordwrap($newBody, 90, "\n");
982                                       
983                                        // search http[s] links and make them as links available again
984                                        // to understand what's going on here, have a look at
985                                        // http://www.php.net/manual/en/function.preg-replace.php
986
987                                        // create links for websites
988                                        $newBody = preg_replace("/((http(s?):\/\/)|(www\.))([\w,\-,\/,\?,\=,\.,&amp;,!\n,!&gt;,\%,@,\*,#,:,~,\+]+)/ie", 
989                                                "'<a href=\"$webserverURL/redirect.php?go='.@htmlentities(urlencode('http$3://$4$5'),ENT_QUOTES,\"$this->displayCharset\").'\" target=\"_blank\"><font color=\"blue\">$2$4$5</font></a>'", $newBody);
990                       
991                                        // create links for ftp sites
992                                        $newBody = preg_replace("/((ftp:\/\/)|(ftp\.))([\w\.,-.,\/.,\?.,\=.,&amp;]+)/i",
993                                                "<a href=\"ftp://$3$4\" target=\"_blank\"><font color=\"blue\">ftp://$3$4</font></a>", $newBody);
994
995                                        // create links for email addresses
996                                        $linkData = array
997                                        (
998                                                'menuaction'    => 'felamimail.uicompose.compose'
999                                        );
1000                                        $link = $GLOBALS['egw']->link('/index.php',$linkData);
1001                                        $newBody = preg_replace("/(?<=\s{1}|&lt;)(([\w\.,-.,_.,0-9.]+)(@)([\w\.,-.,_.,0-9.]+))/ie", 
1002                                                "'<a href=\"$link&send_to='.base64_encode('$0').'\"><font color=\"blue\">$0</font></a>'", $newBody);
1003
1004                                        $newBody        = $this->highlightQuotes($newBody);
1005                                        $newBody        = nl2br($newBody);
1006                                }
1007                                else
1008                                {
1009                                        $newBody        = $singleBodyPart['body'];
1010                                        $newBody        = $this->highlightQuotes($newBody);
1011                                        $newBody        = $this->kses->Parse($newBody);
1012
1013                                        // create links for websites
1014                                        #$newBody = preg_replace("/(?<!\>)((http(s?):\/\/)|(www\.))([\w,\-,\/,\?,\=,\.,&amp;,!\n,\%,@,\*,#,:,~,\+]+)/ie",
1015                                        #       "'<a href=\"$webserverURL/redirect.php?go='.htmlentities(urlencode('http$3://$4$5'),ENT_QUOTES,\"$this->displayCharset\").'\" target=\"_blank\"><font color=\"blue\">$2$4$5</font></a>'", $newBody);
1016                                        $newBody = preg_replace("/(?<!>|\/|\")((http(s?):\/\/)|(www\.))([\w,\-,\/,\?,\=,\.,&amp;,!\n,\%,@,\*,#,:,~,\+]+)/ie", 
1017                                                "'<a href=\"$webserverURL/redirect.php?go='.@htmlentities(urlencode('http$3://$4$5'),ENT_QUOTES,\"$this->displayCharset\").'\" target=\"_blank\"><font color=\"blue\">$2$4$5</font></a>'", $newBody);
1018
1019                                        // create links for websites
1020                                        $newBody = preg_replace("/href=(\"|\')((http(s?):\/\/)|(www\.))([\w,\-,\/,\?,\=,\.,&amp;,!\n,\%,@,\(,\),\*,#,:,~,\+]+)(\"|\')/ie", 
1021                                                "'href=\"$webserverURL/redirect.php?go='.@htmlentities(urlencode('http$4://$5$6'),ENT_QUOTES,\"$this->displayCharset\").'\" target=\"_blank\"'", $newBody);
1022
1023                                        // create links for ftp sites
1024                                        $newBody = preg_replace("/href=(\"|\')((ftp:\/\/)|(ftp\.))([\w\.,-.,\/.,\?.,\=.,&amp;]+)(\"|\')/i", 
1025                                                "href=\"ftp://$4$5\" target=\"_blank\"", $newBody);
1026
1027                                        // create links for inline images
1028                                        $linkData = array (
1029                                                'menuaction'    => 'felamimail.uidisplay.displayImage',
1030                                                'uid'           => $this->uid,
1031                                        );
1032                                        $imageURL = $GLOBALS['egw']->link('/index.php', $linkData);
1033                                        $newBody = preg_replace("/(\"|\')cid:(.*)(\"|\')/iUe", 
1034                                                "'\"$imageURL&cid='.base64_encode('$2').'&partID='.urlencode($this->partID).'\"'", $newBody);
1035
1036                                        // create links for email addresses
1037                                        $linkData = array
1038                                        (
1039                                                'menuaction'    => 'felamimail.uicompose.compose'
1040                                        );
1041                                        $link = $GLOBALS['egw']->link('/index.php',$linkData);
1042                                        $newBody = preg_replace("/href=(\"|\')mailto:([\w,\-,\/,\?,\=,\.,&amp;,!\n,\%,@,\*,#,:,~,\+]+)(\"|\')/ie", 
1043                                                "'href=\"$link&send_to='.base64_encode('$2').'\"'", $newBody);
1044                                        #print "<pre>".htmlentities($newBody)."</pre><hr>";
1045
1046                                        $link = $GLOBALS['egw']->link('/index.php',$linkData);
1047                                        #$newBody = preg_replace("/(?<!:)(?<=\s{1}|&lt;)(([\w\.,-.,_.,0-9.]+)(@)([\w\.,-.,_.,0-9.]+))/ie",
1048                                        $newBody = preg_replace("/(?<!:)(([\w\.,-.,_.,0-9.]+)(@)([\w\.,-.,_.,0-9.]+))/ie", 
1049                                                "'<a href=\"$link&send_to='.base64_encode('$0').'\"><font color=\"blue\">$0</font></a>'", $newBody);
1050                                }
1051                                $body .= $newBody;
1052                                #print "<hr><pre>$body</pre><hr>";
1053                        }
1054                       
1055                        // create links for windows shares
1056                        // \\\\\\\\ == '\\' in real life!! :)
1057                        $body = preg_replace("/(\\\\\\\\)([\w,\\\\,-]+)/i", 
1058                                "<a href=\"file:$1$2\" target=\"_blank\"><font color=\"blue\">$1$2</font></a>", $body);
1059                       
1060                        $body = preg_replace($nonDisplayAbleCharacters,'',$body);
1061                       
1062                        return $body;
1063                }
1064
1065                function printMessage()
1066                {
1067                        $partID         = $_GET['part'];
1068                        $transformdate  =& CreateObject('felamimail.transformdate');
1069                        $htmlFilter     =& CreateObject('felamimail.htmlfilter');
1070                        $uiWidgets      =& CreateObject('felamimail.uiwidgets');
1071                        // (regis) seems to be necessary to reopen...
1072                        $this->bofelamimail->reopen($this->mailbox);
1073#                       print "$this->mailbox, $this->uid, $partID<br>";
1074                        $headers        = $this->bofelamimail->getMessageHeader($this->uid, $partID);
1075                        $envelope   = $this->bofelamimail->getMessageEnvelope($this->uid, $partID);
1076#                       _debug_array($headers);exit;
1077                        $rawheaders     = $this->bofelamimail->getMessageRawHeader($this->uid, $partID);
1078                        $bodyParts      = $this->bofelamimail->getMessageBody($this->uid,'',$partID);
1079                        $attachments    = $this->bofelamimail->getMessageAttachments($this->uid,$partID);
1080#                       _debug_array($nextMessage); exit;
1081
1082                        $webserverURL   = $GLOBALS['egw_info']['server']['webserver_url'];
1083
1084                        $nonDisplayAbleCharacters = array('[\016]','[\017]',
1085                                        '[\020]','[\021]','[\022]','[\023]','[\024]','[\025]','[\026]','[\027]',
1086                                        '[\030]','[\031]','[\032]','[\033]','[\034]','[\035]','[\036]','[\037]');
1087
1088                        #print "<pre>";print_r($rawheaders);print"</pre>";exit;
1089
1090                        // add line breaks to $rawheaders
1091                        $newRawHeaders = explode("\n",$rawheaders);
1092                        reset($newRawHeaders);
1093                       
1094                        // find the Organization header
1095                        // the header can also span multiple rows
1096                        while(is_array($newRawHeaders) && list($key,$value) = each($newRawHeaders)) {
1097                                #print $value."<br>";
1098                                if(preg_match("/Organization: (.*)/",$value,$matches)) {
1099                                        $organization = $this->bofelamimail->decode_header(chop($matches[1]));
1100                                        continue;
1101                                }
1102                                if(!empty($organization) && preg_match("/^\s+(.*)/",$value,$matches)) {
1103                                        $organization .= $this->bofelamimail->decode_header(chop($matches[1]));
1104                                        break;
1105                                } elseif(!empty($organization)) {
1106                                        break;
1107                                }
1108                        }
1109                       
1110                        $this->bofelamimail->closeConnection();
1111                       
1112                        $this->display_app_header();
1113                        $this->t->set_file(array("displayMsg" => "view_message_printable.tpl"));
1114                #       $this->t->set_var('charset',$GLOBALS['egw']->translation->charset());
1115
1116                        $this->t->set_block('displayMsg','message_main');
1117                #       $this->t->set_block('displayMsg','message_main_attachment');
1118                        $this->t->set_block('displayMsg','message_header');
1119                #       $this->t->set_block('displayMsg','message_raw_header');
1120                #       $this->t->set_block('displayMsg','message_navbar');
1121                        $this->t->set_block('displayMsg','message_onbehalfof');
1122                        $this->t->set_block('displayMsg','message_cc');
1123                        $this->t->set_block('displayMsg','message_attachement_row');
1124                #       $this->t->set_block('displayMsg','previous_message_block');
1125                #       $this->t->set_block('displayMsg','next_message_block');
1126                        $this->t->set_block('displayMsg','message_org');
1127
1128                #       $this->t->egroupware_hack = False;
1129                       
1130                        $this->translate();
1131                       
1132                        if($envelope['FROM'][0] != $envelope['SENDER'][0]) {
1133                                $senderAddress = $this->emailAddressToHTML($envelope['SENDER'], '', true, false);
1134                                $fromAddress   = $this->emailAddressToHTML($envelope['FROM'], $organization, true, false);
1135                                $this->t->set_var("from_data",$senderAddress);
1136                                $this->t->set_var("onbehalfof_data",$fromAddress);
1137                                $this->t->parse('on_behalf_of_part','message_onbehalfof',True);
1138                        } else {
1139                                $fromAddress   = $this->emailAddressToHTML($envelope['FROM'], $organization, true, false);
1140                                $this->t->set_var("from_data", $fromAddress);
1141                                $this->t->set_var('on_behalf_of_part','');
1142                        }
1143
1144                        // parse the to header
1145                        $toAddress = $this->emailAddressToHTML($envelope['TO'], '', true, false);
1146                        $this->t->set_var("to_data",$toAddress);
1147                       
1148                        // parse the cc header
1149                        if(count($envelope['CC'])) {
1150                                $ccAddress = $this->emailAddressToHTML($envelope['CC'], '', true, false);
1151                                $this->t->set_var("cc_data",$ccAddress);
1152                                $this->t->parse('cc_data_part','message_cc',True);
1153                        } else {
1154                                $this->t->set_var("cc_data_part",'');
1155                        }
1156
1157                        $this->t->set_var("date_data", 
1158                                @htmlspecialchars($GLOBALS['egw']->common->show_date(strtotime($headers['DATE'])), ENT_QUOTES,$this->displayCharset));
1159                        $this->t->set_var("subject_data",
1160                                @htmlspecialchars($this->bofelamimail->decode_header(preg_replace($nonDisplayAbleCharacters, '', $envelope['SUBJECT'])), ENT_QUOTES, $this->displayCharset));
1161
1162                        //if(isset($organization)) exit;
1163                        $this->t->parse("header","message_header",True);
1164                       
1165                        $this->t->set_var('body', $this->getdisplayableBody($bodyParts));
1166
1167                        // attachments
1168                        if(is_array($attachments))
1169                                $this->t->set_var('attachment_count',count($attachments));
1170                        else
1171                                $this->t->set_var('attachment_count','0');
1172
1173                        if (is_array($attachments) && count($attachments) > 0) {
1174                                $this->t->set_var('row_color',$this->rowColor[0]);
1175                                $this->t->set_var('name',lang('name'));
1176                                $this->t->set_var('type',lang('type'));
1177                                $this->t->set_var('size',lang('size'));
1178                                $this->t->set_var('url_img_save',$GLOBALS['egw']->common->image('felamimail','fileexport'));
1179                                #$this->t->parse('attachment_rows','attachment_row_bold',True);
1180                                foreach ($attachments as $key => $value) {
1181                                        $this->t->set_var('row_color',$this->rowColor[($key+1)%2]);
1182                                        $this->t->set_var('filename',@htmlentities($this->bofelamimail->decode_header($value['name']),ENT_QUOTES,$this->displayCharset));
1183                                        $this->t->set_var('mimetype',$value['mimeType']);
1184                                        $this->t->set_var('size',$value['size']);
1185                                        $this->t->set_var('attachment_number',$key);
1186
1187                                        switch($value['mimeType'])
1188                                        {
1189                                                case 'message/rfc822':
1190                                                        $linkData = array
1191                                                        (
1192                                                                'menuaction'    => 'felamimail.uidisplay.display',
1193                                                                'uid'           => $this->uid,
1194                                                                'part'          => $value['partID']
1195                                                        );
1196                                                        $windowName = 'displayMessage_'.$this->uid;
1197                                                        $linkView = "egw_openWindowCentered('".$GLOBALS['egw']->link('/index.php',$linkData)."','$windowName',700,egw_getWindowOuterHeight());";
1198                                                        break;
1199                                                case 'image/jpeg':
1200                                                case 'image/png':
1201                                                case 'image/gif':
1202                                                #case 'application/pdf':
1203                                                        $linkData = array
1204                                                        (
1205                                                                'menuaction'    => 'felamimail.uidisplay.getAttachment',
1206                                                                'uid'           => $this->uid,
1207                                                                'part'          => $value['partID']
1208                                                        );
1209                                                        $windowName = 'displayAttachment_'.$this->uid;
1210                                                        $linkView = "egw_openWindowCentered('".$GLOBALS['egw']->link('/index.php',$linkData)."','$windowName',800,600);";
1211                                                        break;
1212                                                default:
1213                                                        $linkData = array
1214                                                        (
1215                                                                'menuaction'    => 'felamimail.uidisplay.getAttachment',
1216                                                                'uid'           => $this->uid,
1217                                                                'part'          => $value['partID']
1218                                                        );
1219                                                        $linkView = "window.location.href = '".$GLOBALS['egw']->link('/index.php',$linkData)."';";
1220                                                        break;
1221                                        }
1222                                        $this->t->set_var("link_view",$linkView);
1223                                        $this->t->set_var("target",$target);
1224
1225                                        $linkData = array
1226                                        (
1227                                                'menuaction'    => 'felamimail.uidisplay.getAttachment',
1228                                                'mode'          => 'save',
1229                                                'uid'           => $this->uid,
1230                                                'part'          => $value['partID']
1231                                        );
1232                                        $this->t->set_var("link_save",$GLOBALS['egw']->link('/index.php',$linkData));
1233                                       
1234                                        $this->t->parse('attachment_rows','message_attachement_row',True);
1235                                }
1236                        }
1237                        else
1238                        {
1239                                $this->t->set_var('attachment_rows','');
1240                        }
1241                       
1242                        #$this->t->pparse("out","message_attachment_rows");
1243
1244                        // print it out
1245                #       if(is_array($attachments)) {
1246                #               $this->t->pparse('out','message_main_attachment');
1247                #       } else {
1248                                $this->t->pparse('out','message_main');
1249                #       }
1250                        print "</body></html>";
1251
1252                }
1253
1254                function saveMessage() 
1255                {
1256                        $partID         = $_GET['part'];
1257                        // (regis) seems to be necessary to reopen...
1258                        $this->bofelamimail->reopen($this->mailbox);
1259
1260                        $message = $this->bofelamimail->getMessageRawBody($this->uid, $partID);
1261                        $headers = $this->bofelamimail->getMessageHeader($this->uid, $partID);
1262                       
1263                        $this->bofelamimail->closeConnection();
1264                       
1265                        $GLOBALS['egw']->session->commit_session();
1266                       
1267                        header ("Content-Type: message/rfc822; name=\"". $headers['SUBJECT'] .".eml\"");
1268                        header ("Content-Disposition: attachment; filename=\"". $headers['SUBJECT'] .".eml\"");
1269                        header("Expires: 0");
1270                        // the next headers are for IE and SSL
1271                        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
1272                        header("Pragma: public"); 
1273
1274                        echo $message;
1275                       
1276                        $GLOBALS['egw']->common->egw_exit();
1277                        exit;
1278                }
1279
1280                function showHeader()
1281                {
1282                        if($this->bofelamimail->sessionData['showHeader'] == 'True')
1283                        {
1284                                $this->bofelamimail->sessionData['showHeader'] = 'False';
1285                        }
1286                        else
1287                        {
1288                                $this->bofelamimail->sessionData['showHeader'] = 'True';
1289                        }
1290                        $this->bofelamimail->saveSessionData();
1291                       
1292                        $this->display();
1293                }
1294               
1295                function translate()
1296                {
1297                        $this->t->set_var("lang_message_list",lang('Message List'));
1298                        $this->t->set_var("lang_to",lang('to'));
1299                        $this->t->set_var("lang_cc",lang('cc'));
1300                        $this->t->set_var("lang_bcc",lang('bcc'));
1301                        $this->t->set_var("lang_from",lang('from'));
1302                        $this->t->set_var("lang_reply_to",lang('reply to'));
1303                        $this->t->set_var("lang_subject",lang('subject'));
1304                        $this->t->set_var("lang_addressbook",lang('addressbook'));
1305                        $this->t->set_var("lang_search",lang('search'));
1306                        $this->t->set_var("lang_send",lang('send'));
1307                        $this->t->set_var("lang_back_to_folder",lang('back to folder'));
1308                        $this->t->set_var("lang_attachments",lang('attachments'));
1309                        $this->t->set_var("lang_add",lang('add'));
1310                        $this->t->set_var("lang_remove",lang('remove'));
1311                        $this->t->set_var("lang_priority",lang('priority'));
1312                        $this->t->set_var("lang_normal",lang('normal'));
1313                        $this->t->set_var("lang_high",lang('high'));
1314                        $this->t->set_var("lang_low",lang('low'));
1315                        $this->t->set_var("lang_signature",lang('signature'));
1316                        $this->t->set_var("lang_compose",lang('compose'));
1317                        $this->t->set_var("lang_date",lang('date'));
1318                        $this->t->set_var("lang_view",lang('view'));
1319                        $this->t->set_var("lang_organization",lang('organization'));
1320                        $this->t->set_var("lang_save",lang('save'));
1321                        $this->t->set_var("lang_printable",lang('print it'));
1322                        $this->t->set_var("lang_reply",lang('reply'));
1323                        $this->t->set_var("lang_reply_all",lang('reply all'));
1324                        $this->t->set_var("lang_forward",lang('forward'));
1325                        $this->t->set_var("lang_delete",lang('delete'));
1326                        $this->t->set_var("lang_previous_message",lang('previous message'));
1327                        $this->t->set_var("lang_next_message",lang('next message'));
1328                        $this->t->set_var("lang_organisation",lang('organisation'));
1329                        $this->t->set_var("lang_on_behalf_of",lang('on behalf of'));
1330                        $this->t->set_var("lang_Message", lang('Message'));
1331                        $this->t->set_var("lang_Attachment", lang('attachments'));
1332                        $this->t->set_var("lang_Header_Lines", lang('Header Lines'));
1333
1334                        $this->t->set_var("th_bg",$GLOBALS['egw_info']["theme"]["th_bg"]);
1335                        $this->t->set_var("bg01",$GLOBALS['egw_info']["theme"]["bg01"]);
1336                        $this->t->set_var("bg02",$GLOBALS['egw_info']["theme"]["bg02"]);
1337                        $this->t->set_var("bg03",$GLOBALS['egw_info']["theme"]["bg03"]);
1338                }
1339}
1340
1341?>
Note: See TracBrowser for help on using the repository browser.