X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fread_body.php;h=7998c13cd3d879e1d7ec7d0b3a8ed804e75b84de;hp=74f4e96008221366fbf291aaebe35eabb28d1fb7;hb=b89ceca684cc0923439c7a3abc570b761fdcf216;hpb=6c84ba1ec45ab854c37b6f65c5b4d84ab1c7aad4
diff --git a/src/read_body.php b/src/read_body.php
index 74f4e960..7998c13c 100644
--- a/src/read_body.php
+++ b/src/read_body.php
@@ -29,6 +29,7 @@ require_once(SM_PATH . 'functions/url_parser.php');
require_once(SM_PATH . 'functions/html.php');
require_once(SM_PATH . 'functions/global.php');
require_once(SM_PATH . 'functions/identity.php');
+include_once(SM_PATH . 'functions/arrays.php');
require_once(SM_PATH . 'functions/mailbox_display.php');
/**
@@ -45,18 +46,12 @@ function findNextMessage($uidset,$passed_id='backwards') {
if ($passed_id=='backwards' || !is_array($uidset)) { // check for backwards compattibilty gpg plugin
$passed_id = $uidset;
}
- $result = -1;
- $count = count($uidset) - 1;
- foreach($uidset as $key=>$value) {
- if ($passed_id == $value) {
- if ($key == $count) {
- break;
- }
- $result = $uidset[$key + 1];
- break;
- }
+ $result = sqm_array_get_value_by_offset($uidset,$passed_id,1);
+ if ($result === false) {
+ return -1;
+ } else {
+ return $result;
}
- return $result;
}
/**
@@ -71,17 +66,12 @@ function findPreviousMessage($uidset, $passed_id) {
if (!is_array($uidset)) {
return -1;
}
- $result = -1;
- foreach($uidset as $key=>$value) {
- if ($passed_id == $value) {
- if ($key != 0) {
- $result = $uidset[$key - 1];
- }
- break;
- }
+ $result = sqm_array_get_value_by_offset($uidset,$passed_id,-1);
+ if ($result === false) {
+ return -1;
+ } else {
+ return $result;
}
-
- return $result;
}
/**
@@ -93,9 +83,16 @@ function findPreviousMessage($uidset, $passed_id) {
function printer_friendly_link($mailbox, $passed_id, $passed_ent_id) {
global $javascript_on;
+ /* hackydiehack */
+ if( !sqgetGlobalVar('view_unsafe_images', $view_unsafe_images, SQ_GET) ) {
+ $view_unsafe_images = false;
+ } else {
+ $view_unsafe_images = true;
+ }
$params = '?passed_ent_id=' . urlencode($passed_ent_id) .
'&mailbox=' . urlencode($mailbox) .
- '&passed_id=' . urlencode($passed_id);
+ '&passed_id=' . urlencode($passed_id).
+ '&view_unsafe_images='. (bool) $view_unsafe_images;
$print_text = _("View Printable Version");
@@ -267,7 +264,7 @@ function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) {
}
if (!$success) {
$msg = $deliver->dlv_msg . '
' .
- _("Server replied: ") . $deliver->dlv_ret_nr . ' '.
+ _("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' .
$deliver->dlv_server_msg;
require_once(SM_PATH . 'functions/display_messages.php');
plain_error_message($msg, $color);
@@ -462,7 +459,7 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed
$startMessage, $PHP_SELF, $save_as_draft,
$enable_forward_as_attachment, $imapConnection, $lastTargetMailbox,
$username, $delete_prev_next_display,
- $compose_new_win, $javascript_on;
+ $compose_new_win, $javascript_on, $compose_width, $compose_height;
//FIXME cleanup argument list, use $aMailbox where possible
$mailbox = $aMailbox['NAME'];
@@ -494,7 +491,7 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed
}
$prev_link = _("Previous");
- if($entities[$passed_ent_id] > 1) {
+ if(isset($entities[$passed_ent_id]) && $entities[$passed_ent_id] > 1) {
$prev_ent_id = $entity_count[$entities[$passed_ent_id] - 1];
$prev_link = '';
+}
+
+
/***************************/
/* Main of read_body.php */
/***************************/
@@ -757,6 +775,10 @@ sqgetGlobalVar('sendreceipt', $sendreceipt, SQ_GET);
if (!sqgetGlobalVar('where', $where, SQ_GET) ) {
$where = 'right_main.php';
}
+/*
+ * Used as entry key to the list of uid's cached in the mailbox cache
+ * we use the cached uid's to get the next and prev message.
+ */
if (!sqgetGlobalVar('what', $what, SQ_GET) ){
$what = 0;
}
@@ -773,6 +795,12 @@ if ( sqgetGlobalVar('view_hdr', $temp, SQ_GET) ) {
$view_hdr = (int) $temp;
}
+if ( sqgetGlobalVar('account', $temp, SQ_GET) ) {
+ $iAccount = (int) $temp;
+} else {
+ $iAccount = 0;
+}
+
/** GET/POST VARS */
sqgetGlobalVar('passed_ent_id', $passed_ent_id);
sqgetGlobalVar('mailbox', $mailbox);
@@ -797,7 +825,23 @@ sqgetGlobalVar('mailbox_cache',$mailbox_cache,SQ_SESSION);
global $sqimap_capabilities, $lastTargetMailbox;
$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
-$aMailbox = sqm_api_mailbox_select($imapConnection, $mailbox,array('setindex' => $what),array());
+$aMailbox = sqm_api_mailbox_select($imapConnection, $iAccount, $mailbox,array('setindex' => $what, 'offset' => $startMessage),array());
+
+/**
+ * Check if cache is still valid, $what contains the key
+ * which gives us acces to the array with uid's. At this moment
+ * 0 is used for a normal message list and search uses 1 as key. This can be
+ * changed / extended in the future.
+ * If on a select of a mailbox we detect that the cache should be invalidated due to
+ * the delete of messages or due to new messages we empty the list with uid's and
+ * that's what we detect below.
+ */
+if (!is_array($aMailbox['UIDSET'][$what])) {
+ fetchMessageHeaders($imapConnection, $aMailbox);
+}
+
+$iSetIndex = $aMailbox['SETINDEX'];
+$aMailbox['CURRENT_MSG'][$iSetIndex] = $passed_id;
/**
* Update the seen state
@@ -813,8 +857,6 @@ if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'])) {
*/
if ( sqgetGlobalVar('delete_id', $delete_id, SQ_GET) ) {
handleMessageListForm($imapConnection,$aMailbox,$sButton='setDeleted', array($delete_id));
-// sqimap_messages_delete($imapConnection, $delete_id, $delete_id, $mailbox);
-// sqimap_mailbox_expunge_dmn($imapConnection,$aMailbox,$delete_id);
}
/**
@@ -841,11 +883,18 @@ if (isset($passed_ent_id) && $passed_ent_id) {
$rfc822_header = new Rfc822Header();
$rfc822_header->parseHeader($read);
$message->rfc822_header = $rfc822_header;
+} else if ($message->type0 == 'message' && $message->type1 == 'rfc822' && isset($message->entities[0])) {
+ $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[1.HEADER]", true, $response, $msg, TRUE);
+ $rfc822_header = new Rfc822Header();
+ $rfc822_header->parseHeader($read);
+ $message->rfc822_header = $rfc822_header;
} else {
$passed_ent_id = 0;
}
$header = $message->header;
+$header = $message->header;
+
/****************************************/
/* Block for handling incoming url vars */
@@ -888,7 +937,7 @@ for ($i = 0; $i < $cnt; $i++) {
}
}
-displayPageHeader($color, $mailbox);
+displayPageHeader($color, $mailbox,'','');
formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message,false);
formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $color, $FirstTimeSee);
echo '
';
@@ -898,7 +947,7 @@ echo ' ';
echo ' ';
echo ' ';
// echo ' ';
-echo html_tag( 'table' ,'' , 'left', '', 'cellpadding="1" cellspacing="5" border="0"' );
+echo html_tag( 'table' ,'' , 'left', '', 'width="100%" cellpadding="1" cellspacing="5" border="0"' );
echo ' ' . html_tag( 'td', ' '. $messagebody."\n", 'left')
. ' ';
echo ' ';
@@ -954,10 +1003,11 @@ formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message, false, FALSE);
do_hook('read_body_bottom');
sqimap_logout($imapConnection);
-/* sessions are written at the end of the script. it's better to register
- them at the end so we avoid double session_register calls */
-/* add the mailbox to the cache */
-$mailbox_cache[$aMailbox['NAME']] = $aMailbox;
+
+/**
+ * Write mailbox with updated seen flag information back to cache.
+ */
+$mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
sqsession_register($mailbox_cache,'mailbox_cache');
?>
| |