Fixed broken GO button in compact paginator (when javascript is off) -- problem was...
authorpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 3 Jan 2007 12:41:18 +0000 (12:41 +0000)
committerpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 3 Jan 2007 12:41:18 +0000 (12:41 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@12055 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/global.php
functions/template/paginator_util.php
src/right_main.php
templates/default/message_list.tpl

index c4a186c..7f7e0cc 100644 (file)
@@ -129,6 +129,84 @@ function sqsession_is_registered ($name) {
     return $result;
 }
 
+
+/**
+  * Retrieves a form variable, from a set of possible similarly named
+  * form variables, based on finding a different, single field.  This
+  * is intended to allow more than one same-named inputs in a single 
+  * <form>, where the submit button that is clicked tells us which 
+  * input we should retrieve.  An example is if we have:
+  *     <select name="startMessage_1">
+  *     <select name="startMessage_2">
+  *     <input type="submit" name="form_submit_1">
+  *     <input type="submit" name="form_submit_2">
+  * and we want to know which one of the select inputs should be 
+  * returned as $startMessage (without the suffix!), this function
+  * decides by looking for either "form_submit_1" or "form_submit_2"
+  * (both should not appear).  In this example, $name should be
+  * "startMessage" and $indicator_field should be "form_submit".
+  *
+  * NOTE that form widgets must be named with the suffix "_1", "_2", "_3"
+  *      and so on, or this function will not work.
+  *
+  * If more than one of the indicator fields is found, the first one
+  * (numerically) will win.
+  *
+  * If an indicator field is found without a matching input field, 
+  * a field without any suffix is searched for (but only if 
+  * $fallback_no_suffix is TRUE), and if not found, FALSE is 
+  * ultimately returned.
+  *
+  * It should also be possible to use the same string for both
+  * $name and $indicator_field to look for the first possible
+  * widget with a suffix that can be found (and possibly fallback
+  * to a widget without a suffix).
+  *
+  * @param string name the name of the var to search
+  * @param mixed value the variable to return
+  * @param string indicator_field the name of the field upon which to base
+  *                               our decision upon (see above)
+  * @param int search constant defining where to look
+  * @param bool fallback_no_suffix whether or not to look for $name with
+  *                                no suffix when nothing else is found
+  * @param mixed default the value to assign to $value when nothing is found
+  * @param int typecast force variable to be cast to given type (please
+  *                     use SQ_TYPE_XXX constants or set to FALSE (default)
+  *                     to leave variable type unmolested)
+  *
+  * @return bool whether variable is found.
+  */
+function sqGetGlobalVarMultiple($name, &$value, $indicator_field, 
+                                $search = SQ_INORDER, 
+                                $fallback_no_suffix=TRUE, $default=NULL, 
+                                $typecast=FALSE) {
+
+    $max_form_search = 15;
+
+    for ($i = 1; $i <= $max_form_search; $i++) {
+        if (sqGetGlobalVar($indicator_field . '_' . $i, $temp, $search)) {
+            return sqGetGlobalVar($name . '_' . $i, $value, $search, $default, $typecast);
+        }
+    }
+
+
+    // no indicator field found; just try without suffix if allowed
+    //
+    if ($fallback_no_suffix) {
+        return sqGetGlobalVar($name, $value, $search, $default, $typecast);
+    }
+
+
+    // no dice, set default and return FALSE
+    //
+    if (!is_null($default)) {
+        $value = $default;
+    }
+    return FALSE;
+
+}
+
+
 /**
  * Search for the var $name in $_SESSION, $_POST, $_GET, $_COOKIE, or $_SERVER
  * and set it in provided var.
@@ -147,9 +225,11 @@ function sqsession_is_registered ($name) {
  * @param string name the name of the var to search
  * @param mixed value the variable to return
  * @param int search constant defining where to look
+ * @param mixed default the value to assign to $value when nothing is found
  * @param int typecast force variable to be cast to given type (please
  *                     use SQ_TYPE_XXX constants or set to FALSE (default)
  *                     to leave variable type unmolested)
+ *
  * @return bool whether variable is found.
  */
 function sqgetGlobalVar($name, &$value, $search = SQ_INORDER, $default = NULL, $typecast = false) {
index 11972d7..2bec25f 100644 (file)
@@ -49,6 +49,14 @@ function get_paginator_link($box, $start_msg, $text) {
 function get_compact_paginator_str($box, $iOffset, $iTotal, $iLimit, $bShowAll, $javascript_on, $page_selector) {
 
     global $oTemplate;
+
+    // keeps count of how many times
+    // the paginator is used, avoids
+    // duplicate naming of <select> 
+    // and GO button
+    static $display_iterations = 0; 
+    $display_iterations++;
+
     sqgetGlobalVar('PHP_SELF',$php_self,SQ_SERVER);
 
     /* Initialize paginator string chunks. */
@@ -123,7 +131,8 @@ function get_compact_paginator_str($box, $iOffset, $iTotal, $iLimit, $bShowAll,
             for ($p = 0; $p < $tot_pgs; $p++) {
                 $options[(($p*$iLimit)+1)] = ($p+1) . "/$tot_pgs";
             }
-            $result .= $spc . addSelect('startMessage', $options, 
+            $result .= $spc . addSelect('startMessage_' . $display_iterations, 
+                                        $options, 
                                         ((($cur_pg-1)*$iLimit)+1), 
                                         TRUE, 
                                         ($javascript_on ? array('onchange' => 'JavaScript:SubmitOnSelect(this, \'' . $pg_url . '&startMessage=\')') : array()));
@@ -135,10 +144,10 @@ function get_compact_paginator_str($box, $iOffset, $iTotal, $iLimit, $bShowAll,
 //       is being removed (but left in case the original author points out why it
 //       should not be) and we'll trust $javascript_on to do the right thing.
 //                $result .= '<noscript language="JavaScript">'
-//                . addSubmit(_("Go"))
+//                . addSubmit(_("Go"), 'paginator_submit_' . $display_iterations)
 //                . '</noscript>';
             } else {
-                $result .= addSubmit(_("Go"));
+                $result .= addSubmit(_("Go"), 'paginator_submit_' . $display_iterations);
             }
         }
     }
index ae8a188..196342a 100644 (file)
@@ -43,7 +43,7 @@ sqgetGlobalVar('note',              $note,              SQ_GET);
 sqgetGlobalVar('mail_sent',         $mail_sent,         SQ_GET);
 
 
-if ( sqgetGlobalVar('startMessage', $temp) ) {
+if ( sqGetGlobalVarMultiple('startMessage', $temp, 'paginator_submit') ) {
     $startMessage = (int) $temp;
 } else {
     $startMessage = 1;
index 5292a09..555563f 100644 (file)
@@ -494,7 +494,7 @@ if ($class != 'even' && $class != 'odd')
               <td>
                 <table class="table_empty" cellspacing="0">
                   <tr>
-                    <td class="links_paginator"><?php echo $paginator_str; ?></td>
+                    <td class="links_paginator"><?php /* technically, should regenerate paginator but we know that the only things that change are these two field names, so str_replace should be faster */ echo str_replace(array('startMessage_1', 'paginator_submit_1'), array('startMessage_2', 'paginator_submit_2'), $paginator_str); ?></td>
                     <td class="message_count"><?php echo $msg_cnt_str; ?></td>
                   </tr>
                 </table>