diff --git a/felamimail/inc/class.uidisplay.inc.php b/felamimail/inc/class.uidisplay.inc.php index efb94fed96..c84ea94b4b 100644 --- a/felamimail/inc/class.uidisplay.inc.php +++ b/felamimail/inc/class.uidisplay.inc.php @@ -34,14 +34,15 @@ var $public_functions = array ( - 'display' => 'True', - 'displayBody' => 'True', - 'displayHeader' => 'True', - 'displayImage' => 'True', - 'printMessage' => 'True', - 'saveMessage' => 'True', - 'showHeader' => 'True', - 'getAttachment' => 'True', + 'display' => True, + 'displayBody' => True, + 'displayHeader' => True, + 'displayImage' => True, + 'displayAttachments' => True, + 'printMessage' => True, + 'saveMessage' => True, + 'showHeader' => True, + 'getAttachment' => True, ); var $icServerID=0; @@ -507,7 +508,7 @@ 'mailbox' => base64_encode($this->mailbox), 'is_winmail' => $value['is_winmail'] ); - $windowName = 'displayMessage_'. $this->uid; + $windowName = 'displayMessage_'. $this->uid.'_'.$value['partID']; $linkView = "egw_openWindowCentered('".$GLOBALS['egw']->link('/index.php',$linkData)."','$windowName',700,egw_getWindowOuterHeight());"; break; case 'IMAGE/JPEG': @@ -700,6 +701,193 @@ } + function displayAttachments() + { + $partID = $_GET['part']; + if (!empty($_GET['mailbox'])) $this->mailbox = base64_decode($_GET['mailbox']); + $nonDisplayAbleCharacters = array('[\016]','[\017]', + '[\020]','[\021]','[\022]','[\023]','[\024]','[\025]','[\026]','[\027]', + '[\030]','[\031]','[\032]','[\033]','[\034]','[\035]','[\036]','[\037]'); + + //$transformdate =& CreateObject('felamimail.transformdate'); + //$htmlFilter =& CreateObject('felamimail.htmlfilter'); + // (regis) seems to be necessary to reopen... + $this->bofelamimail->reopen($this->mailbox); + $headers = $this->bofelamimail->getMessageHeader($this->uid, $partID); + $envelope = $this->bofelamimail->getMessageEnvelope($this->uid, $partID); + if (PEAR::isError($headers)) { + print lang("ERROR: Message could not be displayed.")."
"; + print "In Mailbox: $this->mailbox, with ID: $this->uid, and PartID: $partID
"; + print $headers->message."
"; + _debug_array($headers->backtrace[0]); + exit; + } + $attachments = $this->bofelamimail->getMessageAttachments($this->uid, $partID); + #_debug_array($attachments); exit; + + $this->display_app_header(); + $this->t->set_file(array("displayMsg" => "view_attachments.tpl")); + $this->t->set_var('charset',$GLOBALS['egw']->translation->charset()); + $this->t->set_block('displayMsg','message_main_attachment'); + $this->t->set_block('displayMsg','message_attachement_row'); + $this->bofelamimail->closeConnection(); + + $this->t->egroupware_hack = False; + + $this->translate(); + $this->t->set_var("subject_data", + @htmlspecialchars($this->bofelamimail->decode_subject(preg_replace($nonDisplayAbleCharacters,'',$envelope['SUBJECT'])), + ENT_QUOTES,$this->displayCharset)); + + // attachments + if(is_array($attachments) && count($attachments) > 0) { + $this->t->set_var('attachment_count',count($attachments)); + } else { + $this->t->set_var('attachment_count','0'); + } + + if (is_array($attachments) && count($attachments) > 0) { + $this->t->set_var('row_color',$this->rowColor[0]); + $this->t->set_var('name',lang('name')); + $this->t->set_var('type',lang('type')); + $this->t->set_var('size',lang('size')); + $this->t->set_var('url_img_save',html::image('felamimail','fileexport', lang('save'))); + $url_img_vfs = html::image('filemanager','navbar', lang('Filemanager'), ' height="16"'); + $url_img_vfs_save_all = html::image('felamimail','save_all', lang('Save all')); + #$this->t->parse('attachment_rows','attachment_row_bold',True); + + $detectedCharSet=$charset2use=$this->displayCharset; + foreach ($attachments as $key => $value) + { + #$detectedCharSet = mb_detect_encoding($value['name'].'a',strtoupper($this->displayCharset).",UTF-8, ISO-8559-1"); + if (function_exists('mb_convert_variables')) mb_convert_variables("UTF-8","ISO-8559-1",$value['name']); # iso 2 UTF8 + //if (mb_convert_variables("ISO-8859-1","UTF-8",$value['name'])){echo "Juhu utf8 2 ISO\n";}; + //echo $value['name']."\n"; + $filename=htmlentities($value['name'], ENT_QUOTES, $detectedCharSet); + + $this->t->set_var('row_color',$this->rowColor[($key+1)%2]); + $this->t->set_var('filename',($value['name'] ? ( $filename ? $filename : $value['name'] ) : lang('(no subject)'))); + $this->t->set_var('mimetype',mime_magic::mime2label($value['mimeType'])); + $this->t->set_var('size',egw_vfs::hsize($value['size'])); + $this->t->set_var('attachment_number',$key); + + switch(strtoupper($value['mimeType'])) + { + case 'MESSAGE/RFC822': + $linkData = array + ( + 'menuaction' => 'felamimail.uidisplay.display', + 'uid' => $this->uid, + 'part' => $value['partID'], + 'mailbox' => base64_encode($this->mailbox), + 'is_winmail' => $value['is_winmail'] + ); + $windowName = 'displayMessage_'. $this->uid.'_'.$value['partID']; + $linkView = "egw_openWindowCentered('".$GLOBALS['egw']->link('/index.php',$linkData)."','$windowName',700,screen.availHeight-50);"; + break; + case 'IMAGE/JPEG': + case 'IMAGE/PNG': + case 'IMAGE/GIF': + case 'IMAGE/BMP': + case 'APPLICATION/PDF': + case 'TEXT/PLAIN': + case 'TEXT/HTML': + case 'TEXT/CALENDAR': + case 'TEXT/X-VCARD': + $linkData = array + ( + 'menuaction' => 'felamimail.uidisplay.getAttachment', + 'uid' => $this->uid, + 'part' => $value['partID'], + 'is_winmail' => $value['is_winmail'], + 'mailbox' => base64_encode($this->mailbox), + ); + $windowName = 'displayAttachment_'. $this->uid; + $reg = '800x600'; + // handle calendar/vcard + if (strtoupper($value['mimeType'])=='TEXT/CALENDAR') + { + $windowName = 'displayEvent_'. $this->uid; + $reg2 = egw_link::get_registry('calendar','view_popup'); + } + if (strtoupper($value['mimeType'])=='TEXT/X-VCARD') + { + $windowName = 'displayContact_'. $this->uid; + $reg2 = egw_link::get_registry('addressbook','add_popup'); + } + // apply to action + list($width,$height) = explode('x',(!empty($reg2) ? $reg2 : $reg)); + $linkView = "egw_openWindowCentered('".$GLOBALS['egw']->link('/index.php',$linkData)."','$windowName',$width,$height);"; + break; + default: + $linkData = array + ( + 'menuaction' => 'felamimail.uidisplay.getAttachment', + 'uid' => $this->uid, + 'part' => $value['partID'], + 'is_winmail' => $value['is_winmail'], + 'mailbox' => base64_encode($this->mailbox), + ); + $linkView = "window.location.href = '".$GLOBALS['egw']->link('/index.php',$linkData)."';"; + break; + } + $this->t->set_var("link_view",$linkView); + $this->t->set_var("target",$target); + + $linkData = array + ( + 'menuaction' => 'felamimail.uidisplay.getAttachment', + 'mode' => 'save', + 'uid' => $this->uid, + 'part' => $value['partID'], + 'is_winmail' => $value['is_winmail'], + 'mailbox' => base64_encode($this->mailbox), + ); + $this->t->set_var("link_save",$GLOBALS['egw']->link('/index.php',$linkData)); + + if ($GLOBALS['egw_info']['user']['apps']['filemanager']) + { + $link_vfs_save = egw::link('/index.php',array( + 'menuaction' => 'filemanager.filemanager_select.select', + 'mode' => 'saveas', + 'name' => $value['name'], + 'mime' => strtolower($value['mimeType']), + 'method' => 'felamimail.uidisplay.vfsSaveAttachment', + 'id' => $this->mailbox.'::'.$this->uid.'::'.$value['partID'].'::'.$value['is_winmail'], + 'label' => lang('Save'), + )); + $vfs_save = "$url_img_vfs"; + // add save-all icon for first attachment + if (!$key && count($attachments) > 1) + { + foreach ($attachments as $key => $value) + { + $ids["id[$key]"] = $this->mailbox.'::'.$this->uid.'::'.$value['partID'].'::'.$value['is_winmail'].'::'.$value['name']; + } + $link_vfs_save = egw::link('/index.php',array( + 'menuaction' => 'filemanager.filemanager_select.select', + 'mode' => 'select-dir', + 'method' => 'felamimail.uidisplay.vfsSaveAttachment', + 'label' => lang('Save all'), + )+$ids); + $vfs_save .= "\n$url_img_vfs_save_all"; + } + $this->t->set_var('vfs_save',$vfs_save); + } + else + { + $this->t->set_var('vfs_save',''); + } + $this->t->parse('attachment_rows','message_attachement_row',True); + } + } else { + $this->t->set_var('attachment_rows',''); + } + + $this->t->pparse('out','message_main_attachment'); + + } + function displayImage() { $cid = base64_decode($_GET['cid']); @@ -736,6 +924,7 @@ { if ($_GET['menuaction'] != 'felamimail.uidisplay.printMessage' && $_GET['menuaction'] != 'felamimail.uidisplay.displayBody' && + $_GET['menuaction'] != 'felamimail.uidisplay.displayAttachments' && empty($printing)) { $GLOBALS['egw']->js->validate_file('tabs','tabs'); @@ -748,7 +937,8 @@ } if($_GET['menuaction'] == 'felamimail.uidisplay.printMessage' || (!empty($printing) && $printing == 1) || - $_GET['menuaction'] == 'felamimail.uidisplay.displayBody') { + $_GET['menuaction'] == 'felamimail.uidisplay.displayBody' || + $_GET['menuaction'] == 'felamimail.uidisplay.displayAttachments' ) { $GLOBALS['egw_info']['flags']['nofooter'] = true; } $GLOBALS['egw_info']['flags']['include_xajax'] = True; diff --git a/felamimail/inc/class.uiwidgets.inc.php b/felamimail/inc/class.uiwidgets.inc.php index 11623d9f34..9506897db2 100644 --- a/felamimail/inc/class.uiwidgets.inc.php +++ b/felamimail/inc/class.uiwidgets.inc.php @@ -570,6 +570,13 @@ 'uid' => $headerData['uid'], 'id' => $headerData['id'], ); + $linkDataAttachments = array ( + 'menuaction' => 'felamimail.uidisplay.displayAttachments', + 'showHeader' => 'false', + 'mailbox' => base64_encode($_folderName), + 'uid' => $headerData['uid'], + 'id' => $headerData['id'], + ); $windowName = 'displayMessage_'.$headerData['uid']; if($headerData['mimetype'] == 'multipart/mixed' || $headerData['mimetype'] == 'multipart/related' || @@ -578,7 +585,7 @@ $image = html::image('felamimail','attach'); $image = "link('/index.php',$linkData)."', '".$windowName."', this); return false;\" + onclick=\"fm_readAttachments('".$GLOBALS['egw']->link('/index.php',$linkDataAttachments)."', '".$windowName."', this); return false;\" title=\"".$headerData['subject']."\">".$image.""; $windowName = ($_readInNewWindow == 1 ? 'displayMessage' : 'displayMessage_'.$header['uid']); diff --git a/felamimail/js/jscode/viewMainScreen.js b/felamimail/js/jscode/viewMainScreen.js index 21aeb88ece..32e5dabd0b 100644 --- a/felamimail/js/jscode/viewMainScreen.js +++ b/felamimail/js/jscode/viewMainScreen.js @@ -454,6 +454,10 @@ function fm_readMessage(_url, _windowName, _node) { xajax_doXMLHTTP("felamimail.ajaxfelamimail.refreshFolder"); } +function fm_readAttachments(_url, _windowName, _node) { + egw_openWindowCentered(_url, _windowName, 750, 220); +} + function fm_clearSearch() { var inputQuickSearch = document.getElementById('quickSearch'); var status = document.getElementById('status').value; diff --git a/felamimail/templates/default/view_attachments.tpl b/felamimail/templates/default/view_attachments.tpl new file mode 100644 index 0000000000..2a47f421ec --- /dev/null +++ b/felamimail/templates/default/view_attachments.tpl @@ -0,0 +1,34 @@ + + +
+ {subject_data} +
+
+ +{attachment_rows} +
+
+ + + + + + + {filename} + + + {mimetype} + + + {size} + +   + + {url_img_save} + {vfs_save} + + + +