From 4127171c46d6990dfdc6fd4a4cda39299ff1fbfd Mon Sep 17 00:00:00 2001 From: pdontthink Date: Sun, 31 Dec 2006 23:48:11 +0000 Subject: [PATCH] Refactor message list template, move hooks out of template, add hook for plugin access to message list controls, change message list control array to use associative (string) array keys for easier groking git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@12040 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/mailbox_display.php | 87 +++++++++++++++++-- templates/default/message_list.tpl | 132 +++++++++++------------------ 2 files changed, 126 insertions(+), 93 deletions(-) diff --git a/functions/mailbox_display.php b/functions/mailbox_display.php index 6fcd104d..0f50c06e 100644 --- a/functions/mailbox_display.php +++ b/functions/mailbox_display.php @@ -1089,23 +1089,30 @@ function showMessagesForMailbox($imapConnection, &$aMailbox,$aProps, &$iError) { case 'undeleteButton': case 'expungeButton': case 'forward': - $aFormElements[$k] = array($aButtonStrings[$k],'submit'); + $aFormElements[$k] + = array('value' => $aButtonStrings[$k], 'type' => 'submit'); break; case 'bypass_trash': - $aFormElements[$k] = array($aButtonStrings[$k],'checkbox'); + $aFormElements[$k] + = array('value' => $aButtonStrings[$k], 'type' => 'checkbox'); break; case 'moveButton': case 'copyButton': - $aFormElements['targetMailbox'] = - array(sqimap_mailbox_option_list($imapConnection, array(strtolower($lastTargetMailbox)), 0, $boxes),'select'); - $aFormElements['mailbox'] = array($aMailbox['NAME'],'hidden'); - $aFormElements['startMessage'] = array($aMailbox['PAGEOFFSET'],'hidden'); - $aFormElements[$k] = array($aButtonStrings[$k],'submit'); + $aFormElements['targetMailbox'] + = array('options_list' => sqimap_mailbox_option_list($imapConnection, array(strtolower($lastTargetMailbox)), 0, $boxes), + 'type' => 'select'); + $aFormElements['mailbox'] + = array('value' => $aMailbox['NAME'], 'type' => 'hidden'); + $aFormElements['startMessage'] + = array('value' => $aMailbox['PAGEOFFSET'], 'type' => 'hidden'); + $aFormElements[$k] + = array('value' => $aButtonStrings[$k], 'type' => 'submit'); break; } } - $aFormElements['account'] = array($iAccount,'hidden'); + $aFormElements['account'] = array('value' => $iAccount,'type' => 'hidden'); } + do_hook('message_list_controls', $aFormElements); /* * This is the beginning of the message list table. @@ -1121,7 +1128,8 @@ function showMessagesForMailbox($imapConnection, &$aMailbox,$aProps, &$iError) { /* finally set the template vars */ - // FIX ME, before we support multiple templates we must review the names of the vars +// FIXME, before we support multiple templates we must review the names of the vars +// BUMP! $aTemplate['color'] = $color; @@ -1154,7 +1162,68 @@ function showMessagesForMailbox($imapConnection, &$aMailbox,$aProps, &$iError) { $aTemplate['fancy_index_highlite'] = $fancy_index_highlite; + /** + * Set up sort possibilities; one could argue that this is best + * placed in the template, but most template authors won't understand + * or need to understand it, so some advanced templates can override + * it if they do something different. + */ + if (!($aTemplate['sort'] & SQSORT_THREAD) && $aTemplate['enablesort']) { + $aTemplate['aSortSupported'] + = array(SQM_COL_SUBJ => array(SQSORT_SUBJ_ASC , SQSORT_SUBJ_DESC), + SQM_COL_DATE => array(SQSORT_DATE_DESC , SQSORT_DATE_ASC), + SQM_COL_INT_DATE => array(SQSORT_INT_DATE_DESC, SQSORT_INT_DATE_ASC), + SQM_COL_FROM => array(SQSORT_FROM_ASC , SQSORT_FROM_DESC), + SQM_COL_TO => array(SQSORT_TO_ASC , SQSORT_TO_DESC), + SQM_COL_CC => array(SQSORT_CC_ASC , SQSORT_CC_DESC), + SQM_COL_SIZE => array(SQSORT_SIZE_ASC , SQSORT_SIZE_DESC)); + } else { + $aTemplate['aSortSupported'] = array(); + } + + + /** + * Figure out which columns should serve as labels for checkbox: + * we try to grab the two columns before and after the checkbox, + * except the subject column, since it is the link that opens + * the message view + * + * if $javascript_on is set, then the highlighting code takes + * care of this; just skip it + * + * This code also might be more appropriate in a template file, but + * we are moving this complex stuff out of the way of template + * authors; advanced template sets are always free to override + * the resultant values. + * + */ + $show_label_columns = array(); + $index_order_part = array(); + if (!($aTemplate['javascript_on'] && $aTemplate['fancy_index_highlite'])) { + $get_next_two = 0; + $last_order_part = 0; + $last_last_order_part = 0; + foreach ($aTemplate['aOrder'] as $index_order_part) { + if ($index_order_part == SQM_COL_CHECK) { + $get_next_two = 1; + if ($last_last_order_part != SQM_COL_SUBJ) + $show_label_columns[] = $last_last_order_part; + if ($last_order_part != SQM_COL_SUBJ) + $show_label_columns[] = $last_order_part; + + } else if ($get_next_two > 0 && $get_next_two < 3 && $index_order_part != SQM_COL_SUBJ) { + $show_label_columns[] = $index_order_part; + $get_next_two++; + } + $last_last_order_part = $last_order_part; + $last_order_part = $index_order_part; + } + } + $aTemplate['show_label_columns'] = $show_label_columns; + + return $aTemplate; + } diff --git a/templates/default/message_list.tpl b/templates/default/message_list.tpl index 73e6345a..a8623307 100644 --- a/templates/default/message_list.tpl +++ b/templates/default/message_list.tpl @@ -57,6 +57,8 @@ * $use_icons * $alt_index_colors * $fancy_index_highlite + * $aSortSupported + * $show_label_columns * $compact_paginator * $aErrors * @@ -67,75 +69,40 @@ * @subpackage templates */ + /** add required includes */ include_once(SM_PATH . 'functions/template/message_list_util.php'); + /* retrieve the template vars */ extract($t); + if (!empty($plugin_output['mailbox_index_before'])) echo $plugin_output['mailbox_index_before']; + /** * Calculate string "Viewing message x to y (z total)" */ $msg_cnt_str = ''; if ($pageOffset < $end_msg) { $msg_cnt_str = sprintf(_("Viewing Messages: %s to %s (%s total)"), - ''.$pageOffset.'', ''.$end_msg.'', $iNumberOfMessages); + '' . $pageOffset . '', + '' . $end_msg . '', + $iNumberOfMessages); } else if ($pageOffset == $end_msg) { - $msg_cnt_str = sprintf(_("Viewing Message: %s (%s total)"), ''.$pageOffset.'', $iNumberOfMessages); -} - - - -if (!($sort & SQSORT_THREAD) && $enablesort) { - $aSortSupported = array(SQM_COL_SUBJ => array(SQSORT_SUBJ_ASC , SQSORT_SUBJ_DESC), - SQM_COL_DATE => array(SQSORT_DATE_DESC , SQSORT_DATE_ASC), - SQM_COL_INT_DATE => array(SQSORT_INT_DATE_DESC, SQSORT_INT_DATE_ASC), - SQM_COL_FROM => array(SQSORT_FROM_ASC , SQSORT_FROM_DESC), - SQM_COL_TO => array(SQSORT_TO_ASC , SQSORT_TO_DESC), - SQM_COL_CC => array(SQSORT_CC_ASC , SQSORT_CC_DESC), - SQM_COL_SIZE => array(SQSORT_SIZE_ASC , SQSORT_SIZE_DESC)); -} else { - $aSortSupported = array(); + $msg_cnt_str = sprintf(_("Viewing Message: %s (%s total)"), + '' . $pageOffset . '', + $iNumberOfMessages); } -// figure out which columns should serve as labels for checkbox: -// we try to grab the two columns before and after the checkbox, -// except the subject column, since it is the link that opens -// the message view -// -// if $javascript_on is set, then the highlighting code takes -// care of this; just skip it -// -$show_label_columns = array(); -$index_order_part = array(); -if (!($javascript_on && $fancy_index_highlite)) { - $get_next_two = 0; - $last_order_part = 0; - $last_last_order_part = 0; - foreach ($aOrder as $index_order_part) { - if ($index_order_part == SQM_COL_CHECK) { - $get_next_two = 1; - if ($last_last_order_part != SQM_COL_SUBJ) - $show_label_columns[] = $last_last_order_part; - if ($last_order_part != SQM_COL_SUBJ) - $show_label_columns[] = $last_order_part; - - } else if ($get_next_two > 0 && $get_next_two < 3 && $index_order_part != SQM_COL_SUBJ) { - $show_label_columns[] = $index_order_part; - $get_next_two++; - } - $last_last_order_part = $last_order_part; - $last_order_part = $index_order_part; - } -} /** * All icon functionality is now handled through $icon_theme_path. * $icon_theme_path will contain the path to the user-selected theme. If it is * NULL, the user and/or admin have turned off icons. -*/ + */ + // set this to an empty string to turn off extra // highlighting of checked rows @@ -143,6 +110,7 @@ if (!($javascript_on && $fancy_index_highlite)) { //$clickedColor = ''; $clickedColor = (empty($color[16])) ? $color[2] : $color[16]; + ?>
@@ -157,8 +125,10 @@ $clickedColor = (empty($color[16])) ? $color[2] : $color[16]; fetch('paginator.tpl'); echo $paginator_str . $thread_link_str ."\n"; ?> @@ -182,68 +152,61 @@ $clickedColor = (empty($color[16])) ? $color[2] : $color[16]; $value) { - switch ($value[1]) { + foreach ($aFormElements as $widget_name => $widget_attrs) { + switch ($widget_attrs['type']) { case 'submit': - if ($key != 'moveButton' && $key != 'copyButton' && $key != 'delete' && $key != 'undeleteButton') { // add move in a different table cell -?> -   - '; } break; case 'checkbox': - if ($key != 'bypass_trash') { -?> -   - '; } break; case 'hidden': - echo '\n"; - break; + echo '\n"; + break; default: break; } } ?> - - -   -  '; if (isset($aFormElements['bypass_trash'])) { -?> -   - '; } if (isset($aFormElements['undeleteButton'])) { -?> -   - '; } ?> + + - - - - - +'; + } + if (isset($aFormElements['copyButton'])) { + echo ''; + } +?> + @@ -254,10 +217,7 @@ $clickedColor = (empty($color[16])) ? $color[2] : $color[16]; } // if (count($aFormElements)) ?> - + @@ -275,12 +235,16 @@ $clickedColor = (empty($color[16])) ? $color[2] : $color[16]; * this issue. We will use TR/TD w/ another CSS class to work around this. */ ?> + + + +