* @copyright (c) 2009-10 by Klaus Leithoff * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @version $Id$ */ /** * a class containing javascript enhanced html widgets */ class uiwidgets { var $charset; var $bofelamimail; /** * the contructor * */ function uiwidgets() { $template = CreateObject('phpgwapi.Template',common::get_tpl_dir('felamimail')); $this->template = $template; $this->template->set_file(array("body" => 'uiwidgets.tpl')); $this->charset = $GLOBALS['egw']->translation->charset(); $this->bofelamimail =& CreateObject('felamimail.bofelamimail',$GLOBALS['egw']->translation->charset()); if (!is_object($GLOBALS['egw']->html)) { $GLOBALS['egw']->html = CreateObject('phpgwapi.html'); } } function encodeFolderName($_folderName) { return $GLOBALS['egw']->translation->convert($_folderName, 'UTF7-IMAP', $this->charset); } /** * create a folder tree * * this function will create a foldertree based on javascript * on click the sorounding form gets submitted * * @param _folders array containing the list of folders * @param _selected string containing the selected folder * @param _selectedFolderCount integer contains the count of unread messages in the selected folder * @param _topFolderName string containing the top folder name * @param _topFolderDescription string containing the description for the top folder * @param _formName string name of the sorounding form * @param _hiddenVar string hidden form value, transports the selected folder * @param _useDisplayCharset bool use displaycharset for foldernames (used by uisieve only) * * @return string the html code, to be added into the template */ function createHTMLFolder($_folders, $_selected, $_selectedFolderCount, $_topFolderName, $_topFolderDescription, $_divName, $_displayCheckBox, $_useDisplayCharset = false) { $preferences = $this->bofelamimail->mailPreferences; //_debug_array(bofelamimail::$autoFolders); $userDefinedFunctionFolders = array(); if (isset($preferences->preferences['trashFolder']) && $preferences->preferences['trashFolder'] != 'none') $userDefinedFunctionFolders['Trash'] = $preferences->preferences['trashFolder']; if (isset($preferences->preferences['sentFolder']) && $preferences->preferences['sentFolder'] != 'none') $userDefinedFunctionFolders['Sent'] = $preferences->preferences['sentFolder']; if (isset($preferences->preferences['draftFolder']) && $preferences->preferences['draftFolder'] != 'none') $userDefinedFunctionFolders['Drafts'] = $preferences->preferences['draftFolder']; if (isset($preferences->preferences['templateFolder']) && $preferences->preferences['templateFolder'] != 'none') $userDefinedFunctionFolders['Templates'] = $preferences->preferences['templateFolder']; // create a list of all folders, also the ones which are not subscribed foreach($_folders as $key => $obj) { $folderParts = explode($obj->delimiter,$key); if(is_array($folderParts)) { $partCount = count($folderParts); $string = ''; for($i = 0; $i < $partCount-1; $i++) { if(!empty($string)) $string .= $obj->delimiter; $string .= $folderParts[$i]; if(!$allFolders[$string]) { $allFolders[$string] = clone($obj); $allFolders[$string]->folderName = $string; $allFolders[$string]->shortFolderName = array_pop(explode($obj->delimiter, $string)); $allFolders[$string]->displayName = $this->encodeFolderName($allFolders[$string]->folderName); $allFolders[$string]->shortDisplayName = $this->encodeFolderName($allFolders[$string]->shortFolderName); } } } $allFolders[$key] = $obj; } $folderImageDir = $GLOBALS['egw_info']['server']['webserver_url'].'/phpgwapi/templates/default/images'; // careful! "d = new..." MUST be on a new line!!! $folder_tree_new = ''; $folder_tree_new .= ""; return $folder_tree_new; } function createSignatureTable($_signatureList) { $linkData = array ( 'menuaction' => 'felamimail.uipreferences.editSignature' ); $urlEditSignature = $GLOBALS['egw']->link('/index.php',$linkData); if(is_array($_signatureList) && !empty($_signatureList)) { foreach($_signatureList as $signature) { $description = ($signature['fm_defaultsignature'] == true) ? $signature['fm_description'] .' ('. lang('default') .')' : $signature['fm_description']; $tableRows[] = array( '1' => $signature['fm_signatureid'] != -1 ? html::checkbox('signatureID', false, $signature['fm_signatureid']) : '', '.1' => 'style="width:30px"', '2' => ''. @htmlspecialchars($description, ENT_QUOTES, $this->charset) .'', ); } return html::table($tableRows, 'style="width:100%;"'); } return ''; } function createAccountDataTable($_identities) { $linkData = array ( 'menuaction' => 'felamimail.uipreferences.editAccountData' ); $urlEditAccountData = $GLOBALS['egw']->link('/index.php',$linkData); if(is_array($_identities) && !empty($_identities)) { foreach($_identities as $identity) { $description = $identity['id'].":".$identity['realName']." ".$identity['organization']." <".$identity['emailAddress'].">"; $description = ($identity['default'] == true) ? $description .' ('. lang('default') .')' : $description; $tableRows[] = array( '1' => $identity['id'] != -1 ? html::checkbox('accountID', false, $identity['id']) : '', '.1' => 'style="width:30px"', '2' => ''. @htmlspecialchars($description, ENT_QUOTES, $this->charset) .'', ); } return html::table($tableRows, 'style="width:100%;"'); } return ''; } // $_folderType 0: normal imap folder 1: sent folder 2: draft folder 3: template folder // $_rowStyle felamimail or outlook function messageTable($_headers, $_folderType, $_folderName, $_readInNewWindow, $_rowStyle='felamimail',$messageToBePreviewed=0) { //error_log(__METHOD__.' preview Message:'.$messageToBePreviewed); $this->t = CreateObject('phpgwapi.Template',EGW_APP_TPL); $this->t->set_file(array("body" => 'mainscreen.tpl')); $this->t->set_block('body','header_row_felamimail'); $this->t->set_block('body','header_row_outlook'); $this->t->set_block('body','message_table'); $timestamp7DaysAgo = mktime(date("H"), date("i"), date("s"), date("m"), date("d")-7, date("Y")); $timestampNow = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")); $dateToday = date("Y-m-d"); $i=0; $firstuid = null; foreach((array)$_headers['header'] as $header) { //_debug_array($header); #if($i<10) {$i++;continue;} #if($i>20) {continue;} $i++; // create the listing of subjects $maxSubjectLength = 60; $maxAddressLength = 20; $maxSubjectLengthBold = 50; $maxAddressLengthBold = 14; $flags = ""; if(!empty($header['recent'])) $flags .= "R"; if(!empty($header['flagged'])) $flags .= "F"; if(!empty($header['answered'])) $flags .= "A"; if(!empty($header['forwarded'])) $flags .= "W"; if(!empty($header['deleted'])) $flags .= "D"; if(!empty($header['seen'])) $flags .= "S"; $this->t->set_var('row_text', ''); // the status icon if($header['deleted']) { $this->t->set_var('image_url',html::image('felamimail','kmmsgdel')); } elseif($header['recent']) { $this->t->set_var('image_url',html::image('felamimail','kmmsgnew')); } elseif($header['forwarded']) { $this->t->set_var('image_url',html::image('felamimail','kmmsgforwarded')); } elseif($header['answered']) { $this->t->set_var('image_url',html::image('felamimail','kmmsgreplied')); } elseif($header['seen']) { $this->t->set_var('image_url',html::image('felamimail','kmmsgread')); } else { $this->t->set_var('image_url',html::image('felamimail','kmmsgunseen')); } // the css for this row if($header['deleted']) { $this->t->set_var('row_css_class','header_row_D'); } elseif($header['recent'] && !$header['seen']) { $this->t->set_var('row_css_class','header_row_R'); } elseif($header['flagged']) { if($header['seen']) { $this->t->set_var('row_css_class','header_row_FS'); } else { $this->t->set_var('row_css_class','header_row_F'); } } elseif($header['seen']) { $this->t->set_var('row_css_class','header_row_S'); } else { $this->t->set_var('row_css_class','header_row_'); } // filter out undisplayable characters $search = array('[\016]','[\017]', '[\020]','[\021]','[\022]','[\023]','[\024]','[\025]','[\026]','[\027]', '[\030]','[\031]','[\032]','[\033]','[\034]','[\035]','[\036]','[\037]'); $replace = ''; $header['subject'] = preg_replace($search,$replace,$header['subject']); $headerSubject = @htmlentities($header['subject'],ENT_QUOTES | ENT_IGNORE,$this->charset,false); if (empty($headerSubject)) $headerSubject = @htmlentities($GLOBALS['egw']->translation->convert($header['subject'], bofelamimail::detect_encoding($header['subject']), $this->charset),ENT_QUOTES | ENT_IGNORE,$this->charset,false); $header['subject'] = $headerSubject; // curly brackets get messed up by the template! $header['subject'] = str_replace(array('{','}'),array('{','}'),$header['subject']); if (!empty($header['subject'])) { // make the subject shorter if it is to long $fullSubject = $header['subject']; #if(strlen($header['subject']) > $maxSubjectLength) #{ # $header['subject'] = substr($header['subject'],0,$maxSubjectLength)."..."; #} $this->t->set_var('header_subject', $header['subject']); #$this->t->set_var('attachments', $header['attachment']); $this->t->set_var('full_subject', $fullSubject); } else { $this->t->set_var('header_subject', @htmlspecialchars('('. lang('no subject') .')', ENT_QUOTES, $this->charset)); } //_debug_array($header); if($header['mimetype'] == 'multipart/mixed' || $header['mimetype'] == 'multipart/signed' || $header['mimetype'] == 'multipart/related' || $header['mimetype'] == 'text/calendar' || substr($header['mimetype'],0,11) == 'application' || substr($header['mimetype'],0,5) == 'audio' || substr($header['mimetype'],0,5) == 'video') { $image = html::image('felamimail','attach'); if ($header['mimetype'] != 'multipart/mixed' && $header['mimetype'] != 'multipart/signed' ) { if ($this->bofelamimail->icServer->_connected != 1) { $this->bofelamimail->openConnection(0); // connect to the current server $this->bofelamimail->reopen($_folderName); } $attachments = $this->bofelamimail->getMessageAttachments($header['uid']); if (count($attachments)<1) $image = ' '; } $this->t->set_var('attachment_image', $image); } else { $this->t->set_var('attachment_image', ' '); } // show priority flag if ($header['priority'] < 3) { $image = html::image('felamimail','prio_high'); } elseif ($header['priority'] > 3) { $image = html::image('felamimail','prio_low'); } else { $image = ''; } $this->t->set_var('prio_image', $image); if ($_folderType > 0) { // sent or drafts or template folder $header2add = @htmlentities($header['to_address'],ENT_QUOTES | ENT_IGNORE,$this->charset,false); if (empty($header2add)) $header2add = @htmlentities($GLOBALS['egw']->translation->convert($header['to_address'], bofelamimail::detect_encoding($header['to_address']), $this->charset),ENT_QUOTES | ENT_IGNORE,$this->charset,false); $header['to_address'] = $header2add; if (!empty($header['to_name'])) { $header2name = @htmlentities($header['to_name'],ENT_QUOTES | ENT_IGNORE,$this->charset,false); if (empty($header2name)) $header2name = @htmlentities($GLOBALS['egw']->translation->convert($header['to_name'], bofelamimail::detect_encoding($header['to_name']), $this->charset),ENT_QUOTES | ENT_IGNORE,$this->charset,false); $header['to_name'] = $header2name; $sender_name = $header['to_name']; $full_address = $header['to_name'].' <'.$header['to_address'].'>'; } else { $sender_name = $header['to_address']; $full_address = $header['to_address']; } } else { $header2add = @htmlentities($header['sender_address'],ENT_QUOTES | ENT_IGNORE,$this->charset,false); if (empty($header2add)) $header2add = @htmlentities($GLOBALS['egw']->translation->convert($header['sender_address'], bofelamimail::detect_encoding($header['sender_address']), $this->charset),ENT_QUOTES | ENT_IGNORE,$this->charset,false); $header['sender_address'] = $header2add; if (!empty($header['sender_name'])) { $header2name = @htmlentities($header['sender_name'],ENT_QUOTES | ENT_IGNORE,$this->charset,false); if (empty($header2name)) $header2name = @htmlentities($GLOBALS['egw']->translation->convert($header['sender_name'], bofelamimail::detect_encoding($header['sender_name']), $this->charset),ENT_QUOTES | ENT_IGNORE,$this->charset,false); $header['sender_name'] = $header2name; $sender_name = $header['sender_name']; $full_address = $header['sender_name'].' <'.$header['sender_address'].'>'; } else { $sender_name = $header['sender_address']; $full_address = $header['sender_address']; } } $this->t->set_var('sender_name', @htmlspecialchars($sender_name, ENT_QUOTES | ENT_IGNORE, $this->charset,false)); $this->t->set_var('full_address', @htmlspecialchars($full_address, ENT_QUOTES | ENT_IGNORE, $this->charset,false)); $this->t->set_var('message_counter', $i); $this->t->set_var('message_uid', $header['uid']); if ($dateToday == bofelamimail::_strtotime($header['date'],'Y-m-d')) { $this->t->set_var('date', bofelamimail::_strtotime($header['date'],'H:i:s')); //$GLOBALS['egw']->common->show_date($header['date'],'H:i:s')); } else { $this->t->set_var('date', bofelamimail::_strtotime($header['date'],$GLOBALS['egw_info']['user']['preferences']['common']['dateformat'])); } $this->t->set_var('datetime', bofelamimail::_strtotime($header['date'],$GLOBALS['egw_info']['user']['preferences']['common']['dateformat']). ' - '.bofelamimail::_strtotime($header['date'],'H:i:s')); $this->t->set_var('size', $this->show_readable_size($header['size'])); if ($firstuid === null) { //_debug_array($header); $firstuid = $selecteduid = $header['uid']; $firstheader = $header; } if ($messageToBePreviewed>0 && $GLOBALS['egw_info']['user']['preferences']['felamimail']['PreViewFrameHeight']>0 && $messageToBePreviewed == $header['uid']) { //error_log(__METHOD__.$header['uid']); $selecteduid = $header['uid']; $firstheader = $header; } if($_folderType == 2 || $_folderType == 3) { $linkData = array ( 'menuaction' => 'felamimail.uicompose.composeFromDraft', 'icServer' => 0, 'folder' => base64_encode($_folderName), 'uid' => $header['uid'], 'id' => $header['id'], ); $this->t->set_var('url_read_message', $GLOBALS['egw']->link('/index.php',$linkData)); $windowName = 'composeFromDraft_'.$header['uid']; $this->t->set_var('read_message_windowName', $windowName); $this->t->set_var('preview_message_windowName', $windowName); } else { # _debug_array($header); $linkData = array ( 'menuaction' => 'felamimail.uidisplay.display', 'showHeader' => 'false', 'mailbox' => base64_encode($_folderName), 'uid' => $header['uid'], 'id' => $header['id'], ); $this->t->set_var('url_read_message', $GLOBALS['egw']->link('/index.php',$linkData)); $windowName = ($_readInNewWindow == 1 ? 'displayMessage' : 'displayMessage_'.$header['uid']); $this->t->set_var('read_message_windowName', $windowName); if ($GLOBALS['egw_info']['user']['preferences']['felamimail']['PreViewFrameHeight']>0) $windowName = 'MessagePreview_'.$header['uid'].'_'.$_folderType; $this->t->set_var('preview_message_windowName', $windowName); } if($_folderType > 0) { // sent or draft or template folder if(!empty($header['to_name'])) { list($mailbox, $host) = explode('@',$header['to_address']); $senderAddress = imap_rfc822_write_address($mailbox, $host, $header['to_name']); } else { $senderAddress = $header['to_address']; } } else { if(!empty($header['sender_name'])) { list($mailbox, $host) = explode('@',$header['sender_address']); $senderAddress = imap_rfc822_write_address($mailbox, $host, $header['sender_name']); } else { $senderAddress = $header['sender_address']; } } $linkData = array ( 'menuaction' => 'felamimail.uicompose.compose', 'send_to' => base64_encode($senderAddress) ); $windowName = 'compose'.$header['uid']; $this->t->set_var('url_compose',"egw_openWindowCentered('".$GLOBALS['egw']->link('/index.php',$linkData)."','$windowName',700,egw_getWindowOuterHeight());"); /* $linkData = array ( 'menuaction' => 'addressbook.addressbook_ui.edit', 'presets[email]' => urlencode($header['sender_address']), 'presets[n_given]' => urlencode($header['sender_name']), 'referer' => urlencode($_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']) ); //TODO: url_add_to_addressbook isn't in any of the templates. //If you want to use it, you need to adopt syntax to the new addressbook (popup) $this->t->set_var('url_add_to_addressbook',$GLOBALS['egw']->link('/index.php',$linkData)); */ $this->t->set_var('msg_icon_sm',$msg_icon_sm); $this->t->set_var('phpgw_images',EGW_IMAGES); switch($_rowStyle) { case 'outlook': $this->t->parse('message_rows','header_row_outlook',True); break; default: $this->t->parse('message_rows','header_row_felamimail',True); break; } } if ($GLOBALS['egw_info']['user']['preferences']['felamimail']['PreViewFrameHeight']>0) { $this->t->set_var('selected_style'.$selecteduid,'style="background-color:#ddddFF;"'); } else { $this->t->set_var('selected_style'.$selecteduid,''); } $IFRAMEBody = $this->updateMessagePreview($firstheader,$_folderType,$_folderName); $this->t->set_var('IFrameForPreview',$IFRAMEBody); $this->t->set_var('messagelist_height',($GLOBALS['egw_info']['user']['preferences']['felamimail']['PreViewFrameHeight']>0 ? ($GLOBALS['egw_info']['user']['preferences']['felamimail']['PreViewFrameHeight']).'px':'auto')); $this->t->parse("out","message_table"); return $this->t->get('out','message_table'); } function updateMessagePreview($headerData,$_folderType,$_folderName,$_icServer=0) { // IFrame for Preview .... if ($headerData['uid'] && $GLOBALS['egw_info']['user']['preferences']['felamimail']['PreViewFrameHeight']>0) { $jscall =''; $this->bofelamimail->openConnection($_icServer); $this->bofelamimail->reopen($_folderName); $flags = $this->bofelamimail->getFlags($headerData['uid']); if ($this->bofelamimail->getNotifyFlags($headerData['uid']) === null) { $headers = $this->bofelamimail->getMessageHeader($headerData['uid']); if ( isset($headers['DISPOSITION-NOTIFICATION-TO']) ) { $sent_not = $this->bofelamimail->decode_header(trim($headers['DISPOSITION-NOTIFICATION-TO'])); } else if ( isset($headers['RETURN-RECEIPT-TO']) ) { $sent_not = $this->bofelamimail->decode_header(trim($headers['RETURN-RECEIPT-TO'])); } else if ( isset($headers['X-CONFIRM-READING-TO']) ) { $sent_not = $this->bofelamimail->decode_header(trim($headers['X-CONFIRM-READING-TO'])); } else $sent_not = ""; if ( $sent_not != "" && strpos( array2string($flags),'Seen')===false) { $jscall= " onload='javascript:sendNotifyMS(".$headerData['uid'].")'"; } } //if (strpos( array2string($flags),'Seen')===false) $this->bofelamimail->flagMessages('read', $headerData['uid']); if ($_folderType > 0) { // sent or drafts or template folder if (!empty($headerData['to_name'])) { $sender_name = $headerData['to_name']; $sender_address = $headerData['to_address']; $full_address = $headerData['to_name'].' <'.$headerData['to_address'].'>'; } else { $sender_name = $headerData['to_address']; $sender_address = $headerData['to_address']; $full_address = $headerData['to_address']; } } else { if (!empty($headerData['sender_name'])) { $sender_name = $headerData['sender_name']; $sender_address = $headerData['sender_address']; $full_address = $headerData['sender_name'].' <'.$headerData['sender_address'].'>'; } else { $sender_name = $headerData['sender_address']; $sender_address = $headerData['sender_address']; $full_address = $headerData['sender_address']; } } //$fromAddress = uidisplay::emailAddressToHTML(array('PERSONAL_NAME'=>$sender_name,'EMAIL'=>$sender_address,'RFC822_EMAIL'=>$full_address),''); if ($GLOBALS['egw_info']['user']['apps']['addressbook']) { $addresslinkData = array ( 'menuaction' => 'addressbook.addressbook_ui.edit', 'presets[email]' => $sender_address, 'referer' => $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'] ); $decodedPersonalName = $sender_name; if (!empty($decodedPersonalName)) { if($spacePos = strrpos($decodedPersonalName, ' ')) { $addresslinkData['presets[n_family]'] = substr($decodedPersonalName, $spacePos+1); $addresslinkData['presets[n_given]'] = substr($decodedPersonalName, 0, $spacePos); } else { $addresslinkData['presets[n_family]'] = $decodedPersonalName; } $addresslinkData['presets[n_fn]'] = $decodedPersonalName; } $urlAddToAddressbook = $GLOBALS['egw']->link('/index.php',$addresslinkData); $onClick = "window.open(this,this.target,'dependent=yes,width=850,height=440,location=no,menubar=no,toolbar=no,scrollbars=yes,status=yes'); return false;"; $image = $GLOBALS['egw']->common->image('felamimail','sm_envelope'); $fromAddress .= sprintf(' %s', $urlAddToAddressbook, $onClick, $image, lang('add to addressbook'), lang('add to addressbook')); } $linkData = array ( 'menuaction' => 'felamimail.uidisplay.display', 'showHeader' => 'false', 'mailbox' => base64_encode($_folderName), '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/signed' || $headerData['mimetype'] == 'multipart/related' || $headerData['mimetype'] == 'text/calendar' || substr($headerData['mimetype'],0,11) == 'application' || substr($headerData['mimetype'],0,5) == 'audio' || substr($headerData['mimetype'],0,5) == 'video') { $image = html::image('felamimail','attach'); $image = "link('/index.php',$linkDataAttachments)."', '".$windowName."', this); return false;\" title=\"".$headerData['subject']."\">".$image.""; if ($headerData['mimetype'] != 'multipart/mixed' && $header['mimetype'] != 'multipart/signed' ) { $attachments = $this->bofelamimail->getMessageAttachments($headerData['uid']); if (count($attachments)<1) $image = ' '; } $windowName = ($_readInNewWindow == 1 ? 'displayMessage' : 'displayMessage_'.$header['uid']); } else { $image = ''; } $subject = "link('/index.php',$linkData)."', '".$windowName."', this); return false;\" title=\"".$headerData['subject']."\">".$headerData['subject'].""; $IFrameHeight = $GLOBALS['egw_info']['user']['preferences']['felamimail']['PreViewFrameHeight']; $linkData = array ( 'menuaction' => 'felamimail.uidisplay.displayBody', 'uid' => $headerData['uid'], 'mailbox' => base64_encode($_folderName) ); //_debug_array($GLOBALS['egw']->link('/index.php',$linkData)); $IFRAMEBody = "
".($_folderType > 0?lang('to'):lang('from')).':'.$full_address.' '.($fromAddress?$fromAddress:'') .'
'. lang('date').':'.bofelamimail::_strtotime($headerData['date'],$GLOBALS['egw_info']['user']['preferences']['common']['dateformat']). ' - '.bofelamimail::_strtotime($headerData['date'],'H:i:s')."
".lang('subject').":".$subject."
$image ".$this->navbarSeparator().$this->displayMessageActions($headerData, $_folderName, $_icServer,true)."
"; } else { $IFRAMEBody = " "; } return $IFRAMEBody; } function displayMessageActions($_headerData, $_folderName, $_icServer, $_forceNewWindow=false) { if ($_forceNewWindow) { list($fm_width,$fm_height) = explode('x',egw_link::get_registry('felamimail','view_popup')); } // navbar start // compose as new URL $linkData = array ( 'menuaction' => 'felamimail.uicompose.composeAsNew', 'icServer' => $_icServer, 'folder' => base64_encode($_folderName), 'reply_id' => $_headerData['uid'], ); if($_headerData['partid'] != '') { $linkData['part_id'] = $_headerData['partid']; } $asnewURL = $GLOBALS['egw']->link('/index.php',$linkData); // reply url $linkData = array ( 'menuaction' => 'felamimail.uicompose.reply', 'icServer' => $_icServer, 'folder' => base64_encode($_folderName), 'reply_id' => $_headerData['uid'], ); if($_headerData['partid'] != '') { $linkData['part_id'] = $_headerData['partid']; } $replyURL = $GLOBALS['egw']->link('/index.php',$linkData); // reply all url $linkData = array ( 'menuaction' => 'felamimail.uicompose.replyAll', 'icServer' => $_icServer, 'folder' => base64_encode($_folderName), 'reply_id' => $_headerData['uid'], ); if($_headerData['partid'] != '') { $linkData['part_id'] = $_headerData['partid']; } $replyAllURL = $GLOBALS['egw']->link('/index.php',$linkData); // forward url $linkData = array ( 'menuaction' => 'felamimail.uicompose.forward', 'reply_id' => $_headerData['uid'], 'folder' => base64_encode($_folderName), ); if($_headerData['partid'] != '') { $linkData['part_id'] = $_headerData['partid']; } $forwardURL = $GLOBALS['egw']->link('/index.php',$linkData); //delete url $linkData = array ( 'menuaction' => 'felamimail.uifelamimail.deleteMessage', 'icServer' => $_icServer, 'folder' => base64_encode($_folderName), 'message' => $_headerData['uid'], ); $deleteURL = $GLOBALS['egw']->link('/index.php',$linkData); $navbarImages = array( 'new' => array( 'action' => ($_forceNewWindow ? "egw_openWindowCentered('$asnewURL','composeasnew_".$_headerData['uid']."',".$fm_width.",".$fm_height.");": "window.location.href = '$asnewURL'"), 'tooltip' => lang('compose as new'), ), 'mail_reply' => array( 'action' => ($_forceNewWindow ? "egw_openWindowCentered('$replyURL','reply_".$_headerData['uid']."',".$fm_width.",".$fm_height.");": "window.location.href = '$replyURL'"), 'tooltip' => lang('reply'), ), 'mail_replyall' => array( 'action' => ($_forceNewWindow ? "egw_openWindowCentered('$replyAllURL','replyAll_".$_headerData['uid']."',".$fm_width.",".$fm_height.");": "window.location.href = '$replyAllURL'"), 'tooltip' => lang('reply all'), ), 'mail_forward' => array( 'action' => ($_forceNewWindow ? "egw_openWindowCentered('$forwardURL','forward_".$_headerData['uid']."',".$fm_width.",".$fm_height.");": "window.location.href = '$forwardURL'"), 'tooltip' => lang('forward'), ), 'delete' => array( 'action' => ($_forceNewWindow ? "window.open('$deleteURL','_blank','dependent=yes,width=100,height=100,toolbar=no,scrollbars=no,status=no')": "window.location.href = '$deleteURL'"), 'tooltip' => lang('delete'), ), ); foreach($navbarImages as $buttonName => $buttonInfo) { $navbarButtons .= $this->navbarButton($buttonName, $buttonInfo['action'], $buttonInfo['tooltip']); } $navbarButtons .= $this->navbarSeparator(); // print url $linkData = array ( 'menuaction' => 'felamimail.uidisplay.printMessage', 'uid' => $_headerData['uid'], 'folder' => base64_encode($_folderName), ); if($_headerData['partid'] != '') { $linkData['part'] = $_headerData['partid']; } $printURL = $GLOBALS['egw']->link('/index.php',$linkData); // infolog URL $linkData = array( 'menuaction' => 'infolog.infolog_ui.import_mail', 'uid' => $_headerData['uid'], 'mailbox' => base64_encode($_folderName) ); if($_headerData['partid'] != '') { $linkData['part'] = $_headerData['partid']; } $to_infologURL = $GLOBALS['egw']->link('/index.php',$linkData); $linkData = array( 'menuaction' => 'tracker.tracker_ui.import_mail', 'uid' => $_headerData['uid'], 'mailbox' => base64_encode($_folderName) ); if($_headerData['partid'] != '') { $linkData['part'] = $_headerData['partid']; } $to_trackerURL = $GLOBALS['egw']->link('/index.php',$linkData); // viewheader url $linkData = array ( 'menuaction' => 'felamimail.uidisplay.displayHeader', 'uid' => $_headerData['uid'], 'mailbox' => base64_encode($_folderName) ); if($_headerData['partid'] != '') { $linkData['part'] = $_headerData['partid']; } $viewHeaderURL = $GLOBALS['egw']->link('/index.php',$linkData); $navbarImages = array(); // save message url $linkData = array ( 'menuaction' => 'felamimail.uidisplay.saveMessage', 'uid' => $_headerData['uid'], 'mailbox' => base64_encode($_folderName) ); if($_headerData['partid'] != '') { $linkData['part'] = $_headerData['partid']; } $saveMessageURL = $GLOBALS['egw']->link('/index.php',$linkData); $navbarImages = array(); //print email $navbarImages = array( 'fileprint' => array( 'action' => ($_forceNewWindow ? "egw_openWindowCentered('$printURL','forward_".$_headerData['uid']."',".$fm_width.",".$fm_height.");": "window.location.href = '$printURL'"), 'tooltip' => lang('print it'), ), ); if ($GLOBALS['egw_info']['user']['apps']['infolog']) { list($i_width,$i_height) = explode('x',egw_link::get_registry('infolog','add_popup')); $navbarImages['to_infolog'] = array( 'action' => "window.open('$to_infologURL','_blank','dependent=yes,width=".$i_width.",height=".$i_height.",scrollbars=yes,status=yes')", 'tooltip' => lang('save as infolog')); } if ($GLOBALS['egw_info']['user']['apps']['tracker']) { list($i_width,$i_height) = explode('x',egw_link::get_registry('tracker','add_popup')); $navbarImages['to_tracker'] = array( 'action' => "egw_openWindowCentered('$to_trackerURL','_blank',".$i_width.",".$i_height.")", 'tooltip' => lang('save as tracker')); } // save email as $navbarImages['fileexport'] = array( 'action' => ($_forceNewWindow ? "window.open('$saveMessageURL','_blank','dependent=yes,width=100,height=100,scrollbars=yes,status=yes')": "window.location.href = '$saveMessageURL'"), 'tooltip' => lang('save message to disk'), ); // view header lines $navbarImages['kmmsgread'] = array( 'action' => "fm_displayHeaderLines('$viewHeaderURL')", 'tooltip' => lang('view header lines'), ); foreach($navbarImages as $buttonName => $buttonData) { $navbarButtons .= $this->navbarButton($buttonName, $buttonData['action'], $buttonData['tooltip']); } return $navbarButtons; } /** * create multiselectbox * * this function will create a multiselect box. Hard to describe! :) * * @param _selectedValues Array of values for already selected values(the left selectbox) * @param _predefinedValues Array of values for predefined values(the right selectbox) * @param _valueName name for the variable containing the selected values * @param _boxWidth the width of the multiselectbox( example: 100px, 100%) * * @returns the html code, to be added into the template */ function multiSelectBox($_selectedValues, $_predefinedValues, $_valueName, $_boxWidth="100%") { $this->template->set_block('body','multiSelectBox'); if(is_array($_selectedValues)) { foreach($_selectedValues as $key => $value) { $options .= ""; } $this->template->set_var('multiSelectBox_selected_options',$options); } $options = ''; if(is_array($_predefinedValues)) { foreach($_predefinedValues as $key => $value) { if($key != $_selectedValues["$key"]) $options .= ""; } $this->template->set_var('multiSelectBox_predefinded_options',$options); } $this->template->set_var('multiSelectBox_valueName', $_valueName); $this->template->set_var('multiSelectBox_boxWidth', $_boxWidth); return $this->template->fp('out','multiSelectBox'); } function navbarButton($_imageName, $_imageAction, $_toolTip='', $_float='left') { $image = $GLOBALS['egw']->common->image('felamimail',$_imageName); $float = $_float == 'right' ? 'right' : 'left'; return ""; } function navbarSeparator() { return ''; } /* Returns a string showing the size of the message/attachment */ function show_readable_size($bytes, $_mode='short') { $bytes /= 1024; $type = 'k'; if ($bytes / 1024 > 1) { $bytes /= 1024; $type = 'M'; } if ($bytes < 10) { $bytes *= 10; settype($bytes, 'integer'); $bytes /= 10; } else settype($bytes, 'integer'); return $bytes . ' ' . $type ; } function tableView($_headValues, $_tableWidth="100%") { $this->template->set_block('body','tableView'); $this->template->set_block('body','tableViewHead'); if(is_array($_headValues)) { foreach($_headValues as $head) { $this->template->set_var('tableHeadContent',$head); $this->template->parse('tableView_Head','tableViewHead',True); } } if(is_array($this->tableViewRows)) { foreach($this->tableViewRows as $tableRow) { $rowData .= ""; foreach($tableRow as $tableData) { switch($tableData['type']) { default: $rowData .= ''.$tableData['text'].''; break; } } $rowData .= ""; } } $this->template->set_var('tableView_width', $_tableWidth); $this->template->set_var('tableView_Rows', $rowData); return $this->template->fp('out','tableView'); } function tableViewAddRow() { $this->tableViewRows[] = array(); end($this->tableViewRows); return key($this->tableViewRows); } function tableViewAddTextCell($_rowID,$_text) { $this->tableViewRows[$_rowID][]= array ( 'type' => 'text', 'text' => $_text ); } function quotaDisplay($_usage, $_limit) { $this->t = CreateObject('phpgwapi.Template',EGW_APP_TPL); $this->t->set_file(array("body" => 'mainscreen.tpl')); $this->t->set_block('body','quota_block'); if($_limit == 0) { $quotaPercent=100; } else { $quotaPercent=round(($_usage*100)/$_limit); } $quotaLimit=$this->show_readable_size($_limit*1024); $quotaUsage=$this->show_readable_size($_usage*1024); $this->t->set_var('leftWidth',$quotaPercent); if($quotaPercent > 90 && $_limit>0) { $this->t->set_var('quotaBG','red'); } elseif($quotaPercent > 80 && $_limit>0) { $this->t->set_var('quotaBG','yellow'); } else { $this->t->set_var('quotaBG','#66ff66'); } if($_limit > 0) { $quotaText = $quotaUsage .'/'.$quotaLimit; } else { $quotaText = $quotaUsage; } if($quotaPercent > 50) { $this->t->set_var('quotaUsage_left', $quotaText); $this->t->set_var('quotaUsage_right',''); } else { $this->t->set_var('quotaUsage_left',''); $this->t->set_var('quotaUsage_right', $quotaText); } $this->t->parse('out','quota_block'); return $this->t->get('out','quota_block'); } } ?>