Refactor message list template, move hooks out of template, add hook for plugin acces...
authorpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sun, 31 Dec 2006 23:48:11 +0000 (23:48 +0000)
committerpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sun, 31 Dec 2006 23:48:11 +0000 (23:48 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@12040 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/mailbox_display.php
templates/default/message_list.tpl

index 6fcd104dfb3dcc5b64ac747e19e97c09770d86b5..0f50c06eddd0d933b75718a806c9b324d075e4a2 100644 (file)
@@ -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;
+
 }
 
 
index 73e6345ab93547a9b363d662ea1bcac46d39f468..a8623307935564670181d86986e9fb80892cc9aa 100644 (file)
@@ -57,6 +57,8 @@
  *    $use_icons
  *    $alt_index_colors
  *    $fancy_index_highlite
+ *    $aSortSupported
+ *    $show_label_columns
  *    $compact_paginator
  *    $aErrors
  *
  * @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)"),
-                    '<em>'.$pageOffset.'</em>', '<em>'.$end_msg.'</em>', $iNumberOfMessages);
+                           '<em>' . $pageOffset . '</em>',
+                           '<em>' . $end_msg . '</em>',
+                           $iNumberOfMessages);
 } else if ($pageOffset == $end_msg) {
-    $msg_cnt_str = sprintf(_("Viewing Message: %s (%s total)"), '<em>'.$pageOffset.'</em>', $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)"),
+                           '<em>' . $pageOffset . '</em>',
+                           $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];
 
+
 ?>
 <div id="message_list">
 <form id="<?php echo $form_name;?>" name="<?php echo $form_name;?>" method="post" action="<?php echo $php_self;?>">
@@ -157,8 +125,10 @@ $clickedColor = (empty($color[16])) ? $color[2] : $color[16];
               <td class="links_paginator">
 <!-- paginator and thread link string -->
                   <?php
-                      /**
-                       * because the template is included in the display function we refer to $oTemplate with $this
+                     /**
+                       * The following line gets the output from a separate 
+                       * template altogether (called "paginator.tpl").
+                       * $this is the Template class object.
                        */
                       $paginator_str = $this->fetch('paginator.tpl');
                       echo $paginator_str . $thread_link_str ."\n"; ?>
@@ -182,68 +152,61 @@ $clickedColor = (empty($color[16])) ? $color[2] : $color[16];
               <td class="message_control_buttons">
 
 <?php
-        foreach ($aFormElements as $key => $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
-?>
-                  <input type="submit" name="<?php echo $key; ?>" value="<?php echo $value[0]; ?>" class="message_control_button" />&nbsp;
-<?php
+                if ($widget_name != 'moveButton' && $widget_name != 'copyButton' && $widget_name != 'delete' && $widget_name != 'undeleteButton') { // add these later in another table cell
+                    echo '<input type="submit" name="' . $widget_name . '" value="' . $widget_attrs['value'] . '" class="message_control_button" />&nbsp;';
                 }
                 break;
             case 'checkbox':
-                if ($key != 'bypass_trash') {
-?>
-                  <input type="checkbox" name="<?php echo $key; ?>" id="<?php echo $key; ?>" /><label for="<?php echo $key; ?>"><?php echo $value[0]; ?></label>&nbsp;
-<?php
+                if ($widget_name != 'bypass_trash') {
+                    echo '<input type="checkbox" name="' . $widget_name . '" id="' . $widget_name . '" /><label for="' . $widget_name . '">' . $widget_attrs['value'] . '</label>&nbsp;';
                 }
                 break;
             case 'hidden':
-                 echo '<input type="hidden" name="'.$key.'" value="'. $value[0]."\">\n";
-                 break;
+                echo '<input type="hidden" name="'.$widget_name.'" value="'. $widget_attrs['value']."\">\n";
+                break;
             default: break;
             }
         }
 ?>
               </td>
               <td class="message_control_delete">
-
-
 <?php
         if (isset($aFormElements['delete'])) {
-?>
-                  <input type="submit" name="delete" value="<?php echo $aFormElements['delete'][0]; ?>" class="message_control_button" />&nbsp;
- <?php
+            echo '<input type="submit" name="delete" value="' . $aFormElements['delete']['value'] . '" class="message_control_button" />&nbsp;';
             if (isset($aFormElements['bypass_trash'])) {
-?>
-                  <input type="checkbox" name="bypass_trash" id="bypass_trash" /><label for="bypass_trash"><?php echo $aFormElements['bypass_trash'][0]; ?></label>&nbsp;
-<?php
+                echo '<input type="checkbox" name="bypass_trash" id="bypass_trash" /><label for="bypass_trash">' . $aFormElements['bypass_trash']['value'] . '</label>&nbsp;';
             }
             if (isset($aFormElements['undeleteButton'])) {
-?>
-                  <input type="submit" name="undeleteButton" value="<?php echo $aFormElements['undeleteButton'][0]; ?>" class="message_control_button" />&nbsp;
-<?php
+                echo '<input type="submit" name="undeleteButton" value="' . $aFormElements['undeleteButton']['value'] . '" class="message_control_button" />&nbsp;';
             }
 ?>
+
               </td>
+
 <?php
         } // if (isset($aFormElements['delete']))
         if (isset($aFormElements['moveButton']) || isset($aFormElements['copyButton'])) {
 ?>
               <td class="message_control_move">
                     <select name="targetMailbox">
-                       <?php echo $aFormElements['targetMailbox'][0];?>
+                       <?php echo $aFormElements['targetMailbox']['options_list'];?>
                     </select>
-<?php         if (isset($aFormElements['moveButton'])) { ?>
-                  <input type="submit" name="moveButton" value="<?php echo $aFormElements['moveButton'][0]; ?>" class="message_control_button" />
-<?php         }
-              if (isset($aFormElements['copyButton'])) { ?>
-                  <input type="submit" name="copyButton" value="<?php echo $aFormElements['copyButton'][0]; ?>" class="message_control_button" />
-<?php         } ?>
+<?php         
+            if (isset($aFormElements['moveButton'])) { 
+                echo '<input type="submit" name="moveButton" value="' . $aFormElements['moveButton']['value'] . '" class="message_control_button" />';
+            }
+            if (isset($aFormElements['copyButton'])) {
+                echo '<input type="submit" name="copyButton" value="' . $aFormElements['copyButton']['value'] . '" class="message_control_button" />';
+            } 
+?>
+
               </td>
 
 <?php
-        } // if (isset($aFormElements['move']))
+        } // if (isset($aFormElements['moveButton']) || isset($aFormElements['copyButton']))
 ?>
             </tr>
           </table>
@@ -254,10 +217,7 @@ $clickedColor = (empty($color[16])) ? $color[2] : $color[16];
     } // if (count($aFormElements))
 ?>
     </table>
-<?php
-    //FIXME: no hooks in templates!
-    do_hook('mailbox_form_before', $null);
-?>
+<?php if (!empty($plugin_output['mailbox_form_before'])) echo $plugin_output['mailbox_form_before']; ?>
     </td>
   </tr>
   <tr><td class="spacer"></td></tr>
@@ -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.
  */
 ?>
+
               <tr class="headerRow">
+
 <?php
     $aWidth = calcMessageListColumnWidth($aOrder);
     foreach($aOrder as $iCol) {
 ?>
+
                     <td style="width:<?php echo $aWidth[$iCol]; ?>%">
+
 <?php
         switch ($iCol) {
           case SQM_COL_CHECK: