Make all submit button names unique on compose screen
authorpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Tue, 23 Dec 2008 02:59:14 +0000 (02:59 +0000)
committerpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Tue, 23 Dec 2008 02:59:14 +0000 (02:59 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@13383 7612ce4b-ef26-0410-bec9-ea0150e637f0

ChangeLog
functions/forms.php
src/compose.php
templates/default/compose_body.tpl
templates/default/compose_buttons.tpl

index 3616289b87444791973339d20931a46f95183137..e2fe6db61dbd2aa1fbb19443740aba8a80a70b85 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -267,6 +267,7 @@ Version 1.5.2 - SVN
     option widgets.
   - Add informational type option widget
   - Add password type option widget
+  - Make all submit button names unique on compose screen
 
 Version 1.5.1 (branched on 2006-02-12)
 --------------------------------------
index e49b8a6979d2243057cb1886f3388c9be6558cf2..4dc55237988d4a39d63badddad043ca39d3b88e9 100644 (file)
@@ -336,3 +336,39 @@ function addForm($sAction, $sMethod = 'post', $sName = '', $sEnctype = '', $sCha
     return $oTemplate->fetch('form.tpl');
 }
 
+/**
+  * Creates unique widget names
+  *
+  * Names are formatted as such: "send1", "send2", "send3", etc.,
+  * where "send" in this example is what was given for $base_name
+  *
+  * @param string  $base_name    The name upon which to base the
+  *                              returned widget name.
+  * @param boolean $return_count When TRUE, this function will
+  *                              return the last number used to
+  *                              create a widget name for $base_name
+  *                              (OPTIONAL; default = FALSE).
+  *
+  * @return mixed When $return_output is FALSE, a string containing
+  *               the unique widget name; otherwise an integer with
+  *               the last number used to create the last widget
+  *               name for the given $base_name (where 0 (zero) means
+  *               that no such widgets have been created yet).
+  *
+  * @since 1.4.18 and 1.5.2
+  *
+  */
+function unique_widget_name($base_name, $return_count=FALSE)
+{
+   static $counts = array();
+
+   if (!isset($counts[$base_name]))
+      $counts[$base_name] = 0;
+
+   if ($return_count)
+      return $counts[$base_name];
+
+   ++$counts[$base_name];
+   return $base_name . $counts[$base_name];
+}
+
index b2101d4f727232c3ef8af0d8094231b56167c66e..ed6c0e6a1f8d11281027a1eeddd165b9553fb54e 100644 (file)
@@ -60,7 +60,9 @@ sqsession_unregister('compose_messages');
 $oErrorHandler->setDelayedErrors(true);
 
 /** SESSION/POST/GET VARS */
-sqgetGlobalVar('send', $send, SQ_POST);
+sqgetGlobalVar('send_button_count', $send_button_count, SQ_POST, 1, SQ_TYPE_INT);
+for ($i = 1; $i <= $send_button_count; $i++)
+   if (sqgetGlobalVar('send' . $i, $send, SQ_POST)) break;
 // Send can only be achieved by setting $_POST var. If Send = true then
 // retrieve other form fields from $_POST
 if (isset($send) && $send) {
index f94c32075eff778d41b5c3dfa8ba6d2aae881eff..ac19ed7f8c2011a70a4f125b25bdd6dc07448311 100644 (file)
@@ -32,11 +32,12 @@ extract($t);
         ?>
  <tr>
   <td class="bottomSend">
-   <input type="submit" name="send" value="<?php echo _("Send"); ?>" />
+   <input type="submit" name="<?php echo unique_widget_name('send'); ?>" value="<?php echo _("Send"); ?>" />
   </td>
  </tr>
         <?php
     }
  ?>
 </table>
-</div>
\ No newline at end of file
+</div>
+<input type="hidden" name="send_button_count" value="<?php echo unique_widget_name('send', TRUE); ?>" />
index d4848ab9f291fd04ead920f0c41d02cd2da38195..cf2468d4803ccea952ae45a1cfacca68541f782b 100644 (file)
@@ -70,7 +70,7 @@ extract($t);
         <?php
     }
    ?>
-   <input type="submit" name="send" value="<?php echo _("Send"); ?>" />&nbsp;
+   <input type="submit" name="<?php echo unique_widget_name('send'); ?>" value="<?php echo _("Send"); ?>" />&nbsp;
    <?php if (!empty($plugin_output['compose_button_row'])) echo $plugin_output['compose_button_row']; ?>
   </td>
  </tr>