From 1e150c979a94b77b9d6db3bd94617e83c693129c Mon Sep 17 00:00:00 2001 From: ebullient Date: Mon, 26 Jan 2004 07:00:48 +0000 Subject: [PATCH] PARTIAL integration of delete_move_next. I've got the toolbar changed around, and delete/move/next functions mostly integrated (commented out redundant hooks in the plugin). The processing of delete/move is not quite right ... the plugin is doing some odd things to remove the element from the msgs/msort arrays. Marc? Thoughts on how/where best to finish delete processing? Right now it's still borrowing the code from the plugin to finish the delete. Comments on the layout? (why I committed as is). If you want to play with the not quite finished delete action, uncomment the lines in read_body.php that handle deleted/moved messages (around lines 785 - 809), and then in delete_move_next/setup.php, comment the first two 'action' hooks. I'll finish up the options work and the delete manipulation tomorrow. Wanted feedback on the link placement, etc. ASAP. This was one thing we wanted in before frameless SM... so once this goes in (pending any other urgent things), we'll cut the dev release. My apologies for not getting to this sooner. :-/ git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@6439 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- plugins/delete_move_next/setup.php | 6 +- src/read_body.php | 321 ++++++++++++++++++++--------- 2 files changed, 226 insertions(+), 101 deletions(-) diff --git a/plugins/delete_move_next/setup.php b/plugins/delete_move_next/setup.php index 8d1baf52..98ea5dc3 100644 --- a/plugins/delete_move_next/setup.php +++ b/plugins/delete_move_next/setup.php @@ -24,8 +24,8 @@ function squirrelmail_plugin_init_delete_move_next() { $squirrelmail_plugin_hooks['html_top']['delete_move_next'] = 'delete_move_next_action'; $squirrelmail_plugin_hooks['right_main_after_header']['delete_move_next'] = 'delete_move_next_action'; - $squirrelmail_plugin_hooks['read_body_bottom']['delete_move_next'] = 'delete_move_next_read_b'; - $squirrelmail_plugin_hooks['read_body_menu_bottom']['delete_move_next'] = 'delete_move_next_read_t'; +// $squirrelmail_plugin_hooks['read_body_bottom']['delete_move_next'] = 'delete_move_next_read_b'; +// $squirrelmail_plugin_hooks['read_body_menu_bottom']['delete_move_next'] = 'delete_move_next_read_t'; $squirrelmail_plugin_hooks['options_display_inside']['delete_move_next'] = 'delete_move_next_display_inside'; $squirrelmail_plugin_hooks['options_display_save']['delete_move_next'] = 'delete_move_next_display_save'; $squirrelmail_plugin_hooks['loading_prefs']['delete_move_next'] = 'delete_move_next_loading_prefs'; @@ -382,4 +382,4 @@ function delete_move_next_loading_prefs() { } -?> \ No newline at end of file +?> diff --git a/src/read_body.php b/src/read_body.php index d8019b33..4e8c628d 100644 --- a/src/read_body.php +++ b/src/read_body.php @@ -30,9 +30,9 @@ require_once(SM_PATH . 'functions/mailbox_display.php'); /** * Given an IMAP message id number, this will look it up in the cached - * and sorted msgs array and return the index. Used for finding the next - * and previous messages. + * and sorted msgs array and return the index of the next message * + * @param int $passed_id The current message UID * @return the index of the next valid message from the array */ function findNextMessage($passed_id) { @@ -72,7 +72,13 @@ function findNextMessage($passed_id) { return $result; } -/** returns the index of the previous message from the array. */ +/** + * Given an IMAP message id number, this will look it up in the cached + * and sorted msgs array and return the index of the previous message + * + * @param int $passed_id The current message UID + * @return the index of the next valid message from the array + */ function findPreviousMessage($numMessages, $passed_id) { global $msort, $sort, $msgs, $thread_sort_messages, @@ -112,9 +118,11 @@ function findPreviousMessage($numMessages, $passed_id) { /** * Displays a link to a page where the message is displayed more * "printer friendly". + * @param string $mailbox Name of current mailbox + * @param int $passed_id */ -function printer_friendly_link($mailbox, $passed_id, $passed_ent_id, $color) { - global $javascript_on; +function printer_friendly_link($mailbox, $passed_id, $passed_ent_id) { + global $javascript_on, $color; $params = '?passed_ent_id=' . $passed_ent_id . '&mailbox=' . urlencode($mailbox) . @@ -469,85 +477,41 @@ function formatEnvheader($mailbox, $passed_id, $passed_ent_id, $message, echo ''; } -function formatMenubar($mailbox, $passed_id, $passed_ent_id, $message, $mbx_response) { +/** + * Format message toolbar + * + * @param string $mailbox Name of current mailbox + * @param int $passed_id UID of current message + * @param int $passed_ent_id Id of entity within message + * @param object $message Current message object + * @param object $mbx_response + */ +function formatMenubar($mailbox, $passed_id, $passed_ent_id, $message, $mbx_response, $nav_on_top = TRUE) { global $base_uri, $draft_folder, $where, $what, $color, $sort, - $startMessage, $PHP_SELF, $save_as_draft, - $enable_forward_as_attachment; + $startMessage, $PHP_SELF, $save_as_draft, $uid_support, + $enable_forward_as_attachment, $imapConnection, $lastTargetMailbox, + $delete_move_next_t, $delete_move_next_b; $topbar_delimiter = ' | '; + $double_delimiter = '    '; $urlMailbox = urlencode($mailbox); - $s = '' . - html_tag( 'td', '', 'left', '', 'width="33%"' ) . ''; - - $msgs_url = $base_uri . 'src/'; - if (isset($where) && isset($what)) { - $msgs_url .= 'search.php?where=' . urlencode($where) . - '&what=' . urlencode($what) . '&mailbox=' . $urlMailbox; - $msgs_str = _("Search results"); - } else { - $msgs_url .= 'right_main.php?sort=' . $sort . '&startMessage=' . - $startMessage . '&mailbox=' . $urlMailbox; - $msgs_str = _("Message List"); - } - $s .= '' . $msgs_str . ''; - - $delete_url = $base_uri . 'src/delete_message.php?mailbox=' . $urlMailbox . - '&message=' . $passed_id . '&'; - if (!(isset($passed_ent_id) && $passed_ent_id)) { - if ($where && $what) { - $delete_url .= 'where=' . urlencode($where) . '&what=' . urlencode($what); - } else { - $delete_url .= 'sort=' . $sort . '&startMessage=' . $startMessage; - } - $s .= $topbar_delimiter; - $s .= '' . _("Delete") . ''; - } $comp_uri = 'src/compose.php' . - '?passed_id=' . $passed_id . - '&mailbox=' . $urlMailbox . - '&startMessage=' . $startMessage . - (isset($passed_ent_id)?'&passed_ent_id='.$passed_ent_id:''); + '?passed_id=' . $passed_id . + '&mailbox=' . $urlMailbox . + '&startMessage=' . $startMessage . + (isset($passed_ent_id)?'&passed_ent_id='.$passed_ent_id:''); - if (($mailbox == $draft_folder) && ($save_as_draft)) { - $comp_alt_uri = $comp_uri . '&smaction=draft'; - $comp_alt_string = _("Resume Draft"); - } else if (handleAsSent($mailbox)) { - $comp_alt_uri = $comp_uri . '&smaction=edit_as_new'; - $comp_alt_string = _("Edit Message as New"); - } - if (isset($comp_alt_uri)) { - $s .= $topbar_delimiter; - $s .= makeComposeLink($comp_alt_uri, $comp_alt_string); - } + $msgs_url = $base_uri . 'src/'; - $s .= ''; + + + // BEGIN MENU ROW - DELETE/REPLY/FORWARD/MOVE/etc. + $menu_row = '' . "\n" . - html_tag( 'td', '', 'right', '', 'width="33%" nowrap' ) . ''; $comp_action_uri = $comp_uri . '&smaction=forward'; - $s .= makeComposeLink($comp_action_uri, _("Forward")); + $menu_row .= $topbar_delimiter; + $menu_row .= makeComposeLink($comp_action_uri, _("Forward")); if ($enable_forward_as_attachment) { $comp_action_uri = $comp_uri . '&smaction=forward_as_attachment'; - $s .= $topbar_delimiter; - $s .= makeComposeLink($comp_action_uri, _("Forward as Attachment")); + $menu_row .= $topbar_delimiter; + $menu_row .= makeComposeLink($comp_action_uri, _("Forward as Attachment")); } - $comp_action_uri = $comp_uri . '&smaction=reply'; - $s .= $topbar_delimiter; - $s .= makeComposeLink($comp_action_uri, _("Reply")); + // Add top move link + $menu_row .= ''; - $comp_action_uri = $comp_uri . '&smaction=reply_all'; - $s .= $topbar_delimiter; - $s .= makeComposeLink($comp_action_uri, _("Reply All")); - $s .= '
'; + // BEGIN NAV ROW - PREV/NEXT, DEL PREV/NEXT, LINKS TO INDEX, etc. + $nav_row = '
'; - if (!(isset($where) && isset($what)) && !$passed_ent_id) { - $prev = findPreviousMessage($mbx_response['EXISTS'], $passed_id); - $next = findNextMessage($passed_id); - if ($prev != -1) { - $uri = $base_uri . 'src/read_body.php?passed_id='.$prev. - '&mailbox='.$urlMailbox.'&sort='.$sort. - '&startMessage='.$startMessage.'&show_more=0'; - $s .= ''._("Previous").''; - } else { - $s .= _("Previous"); - } - $s .= $topbar_delimiter; - if ($next != -1) { - $uri = $base_uri . 'src/read_body.php?passed_id='.$next. - '&mailbox='.$urlMailbox.'&sort='.$sort. - '&startMessage='.$startMessage.'&show_more=0'; - $s .= ''._("Next").''; - } else { - $s .= _("Next"); - } - } else if (isset($passed_ent_id) && $passed_ent_id) { - /* code for navigating through attached message/rfc822 messages */ + // Create Prev & Next links + // Handle nested entities first (i.e. Mime Attach parts) + if (isset($passed_ent_id) && $passed_ent_id) { + // code for navigating through attached message/rfc822 messages $url = set_url_var($PHP_SELF, 'passed_ent_id',0); - $s .= ''._("View Message").''; $entities = array(); $entity_count = array(); $c = 0; @@ -559,52 +523,177 @@ function formatMenubar($mailbox, $passed_id, $passed_ent_id, $message, $mbx_resp $entities[$ent->entity_id] = $c; } } + $prev_link = _("Previous"); - $next_link = _("Next"); if($entities[$passed_ent_id] > 1) { $prev_ent_id = $entity_count[$entities[$passed_ent_id] - 1]; $prev_link = '' . $prev_link . ''; } + + $next_link = _("Next"); if($entities[$passed_ent_id] < $c) { $next_ent_id = $entity_count[$entities[$passed_ent_id] + 1]; $next_link = '' . $next_link . ''; } - $s .= $topbar_delimiter . $prev_link; + $par_ent_id = $message->parent->entity_id; + $up_link = ''; if ($par_ent_id) { $par_ent_id = substr($par_ent_id,0,-2); - $s .= $topbar_delimiter; - $url = set_url_var($PHP_SELF, 'passed_ent_id',$par_ent_id); - $s .= ''._("Up").''; + if ( $par_ent_id != 0 ) { + $up_link = $topbar_delimiter; + $url = set_url_var($PHP_SELF, 'passed_ent_id',$par_ent_id); + $up_link .= ''._("Up").''; + } + } + + $nav_row .= $prev_link . $up_link . $topbar_delimiter . $next_link; + $nav_row .= $double_delimiter . ''._("View Message").''; + + // Prev/Next links for regular messages + } else if ( !(isset($where) && isset($what)) ) { + $prev = findPreviousMessage($mbx_response['EXISTS'], $passed_id); + $next = findNextMessage($passed_id); + + $prev_link = _("Previous"); + if ($prev >= 0) { + $uri = $base_uri . 'src/read_body.php?passed_id='.$prev. + '&mailbox='.$urlMailbox.'&sort='.$sort. + '&startMessage='.$startMessage.'&show_more=0'; + $prev_link = ''.$prev_link.''; } - $s .= $topbar_delimiter . $next_link; + + $next_link = _("Next"); + if ($next >= 0) { + $uri = $base_uri . 'src/read_body.php?passed_id='.$next. + '&mailbox='.$urlMailbox.'&sort='.$sort. + '&startMessage='.$startMessage.'&show_more=0'; + $next_link = ''.$next_link.''; + } + + $nav_row .= $prev_link . $topbar_delimiter . $next_link; + + // Only bother with Delete & Prev and Delete & Next IF + // we have UID support, and top display is enabled. + + if ( $uid_support && $delete_move_next_t == 'on' ) { + $prev_link = _("Delete & Prev"); + if ($prev >= 0) { + $uri = $base_uri . 'src/read_body.php?passed_id='.$prev. + '&mailbox='.$urlMailbox.'&sort='.$sort. + '&startMessage='.$startMessage.'&show_more=0'. + '&delete_id='.$passed_id; + $prev_link = ''.$prev_link.''; + } + + $next_link = _("Delete & Next"); + if ($next >= 0) { + $uri = $base_uri . 'src/read_body.php?passed_id='.$next. + '&mailbox='.$urlMailbox.'&sort='.$sort. + '&startMessage='.$startMessage.'&show_more=0'. + '&delete_id='.$passed_id; + $next_link = ''.$next_link.''; + } + $nav_row .= $double_delimiter . $prev_link . $topbar_delimiter . $next_link; + } + } + + // Start with Search Results or Message List link. + if (isset($where) && isset($what)) { + $msgs_url .= 'search.php?where=' . urlencode($where) . + '&what=' . urlencode($what) . '&mailbox=' . $urlMailbox; + $msgs_str = _("Search Results"); + } else { + $msgs_url .= 'right_main.php?sort=' . $sort . '&startMessage=' . + $startMessage . '&mailbox=' . $urlMailbox; + $msgs_str = _("Message List"); + } + $nav_row .= $double_delimiter . + '' . $msgs_str . ''; + + $nav_row .= '
'; + + // If Draft folder - create Resume link + if (($mailbox == $draft_folder) && ($save_as_draft)) { + $comp_alt_uri = $comp_uri . '&smaction=draft'; + $comp_alt_string = _("Resume Draft"); + } else if (handleAsSent($mailbox)) { + // If in Sent folder, edit as new + $comp_alt_uri = $comp_uri . '&smaction=edit_as_new'; + $comp_alt_string = _("Edit Message as New"); + } + + // Show Alt URI for Draft/Sent + if (isset($comp_alt_uri)) { + $menu_row .= $topbar_delimiter; + $menu_row .= makeComposeLink($comp_alt_uri, $comp_alt_string); + $menu_row .= $topbar_delimiter; + } + + $delete_link = _("Delete"); + if (!(isset($passed_ent_id) && $passed_ent_id)) { + $delete_url = $base_uri . 'src/delete_message.php?mailbox=' . $urlMailbox . + '&message=' . $passed_id . '&'; + + if ($where && $what) { + $delete_url .= 'where=' . urlencode($where) . '&what=' . urlencode($what); + } else { + $delete_url .= 'sort=' . $sort . '&startMessage=' . $startMessage; + } + $delete_link = '' . $delete_link . ''; } + $menu_row .= $delete_link; + + $comp_action_uri = $comp_uri . '&smaction=reply'; + $menu_row .= $topbar_delimiter; + $menu_row .= makeComposeLink($comp_action_uri, _("Reply")); + + $comp_action_uri = $comp_uri . '&smaction=reply_all'; + $menu_row .= $topbar_delimiter; + $menu_row .= makeComposeLink($comp_action_uri, _("Reply All")); + - $s .= ''; + if (!(isset($passed_ent_id) && $passed_ent_id)) { + $menu_row .= '
'. + ''. + ''._("Move to:") . + ' '. + ''. + '
'; + } + $menu_row .= '
'; + // echo rows, with hooks do_hook('read_body_menu_top'); - echo $s; + echo ''; + echo $nav_on_top ? $nav_row . $menu_row : $menu_row . $nav_row; + echo '
'."\n"; do_hook('read_body_menu_bottom'); } @@ -622,7 +711,7 @@ function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) { /* Output the printer friendly link if we are in subtle mode. */ $s .= ' | ' . - printer_friendly_link($mailbox, $passed_id, $passed_ent_id, $color); + printer_friendly_link($mailbox, $passed_id, $passed_ent_id); echo $s; do_hook("read_body_header_right"); $s = "\n" . @@ -668,9 +757,6 @@ if ( sqgetGlobalVar('view_hdr', $temp, SQ_GET) ) { $view_hdr = (int) $temp; } -/** POST VARS */ -sqgetGlobalVar('move_id', $move_id, SQ_POST); - /** GET/POST VARS */ sqgetGlobalVar('passed_ent_id', $passed_ent_id); sqgetGlobalVar('mailbox', $mailbox); @@ -686,11 +772,43 @@ if ( sqgetGlobalVar('startMessage', $temp) ) { } /* end of get globals */ -global $uid_support, $sqimap_capabilities; +global $uid_support, $sqimap_capabilities, $auto_expunge, $lastTargetMailbox; $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); $mbx_response = sqimap_mailbox_select($imapConnection, $mailbox, false, false, true); +/** + * Process Delete from delete-move-next + * but only if delete_id was set + */ +if ( sqgetGlobalVar('delete_id', $delete_id, SQ_GET) ) { +// sqimap_messages_delete($imapConnection, $delete_id, $delete_id, $mailbox); + +// if ($auto_expunge) { +// sqimap_mailbox_expunge($imapConnection, $mailbox, true); +// } +} + +/** + * Process Move from delete-move-next + * but only if move_id and target_mailbox were set + */ +if ( sqgetGlobalVar('move_id', $move_id, SQ_POST) && + sqgetGlobalVar('targetMailbox', $targetMailbox, SQ_POST) ) { + // Move message +// sqimap_messages_copy($imapConnection, $move_id, $move_id, $targetMailbox); +// sqimap_messages_flag($imapConnection, $move_id, $move_id, 'Deleted', true); + +// if ($auto_expunge) { +// sqimap_mailbox_expunge($imapConnection, $mailbox, true); +// } + +// if ($targetMailbox != $lastTargetMailbox) { +// $lastTargetMailbox = $targetMailbox; +// sqsession_register('lastTargetMailbox' , $lastTargetMailbox); +// } +} + /** * $message contains all information about the message @@ -832,6 +950,13 @@ if (($attachment_common_show_images) && } } +// If a bar at the bottom is also wanted, print menu bar again, +// only upside down. +if ($delete_move_next_b != 'off') { + formatMenuBar($mailbox, $passed_id, $passed_ent_id, $message, $mbx_response, FALSE); +} + + do_hook('read_body_bottom'); do_hook('html_bottom'); sqimap_logout($imapConnection); -- 2.25.1