Add accesskeys accessibility implementation. Need to keep adding other pages, especi...
authorpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 25 Mar 2009 07:53:49 +0000 (07:53 +0000)
committerpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 25 Mar 2009 07:53:49 +0000 (07:53 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@13439 7612ce4b-ef26-0410-bec9-ea0150e637f0

13 files changed:
include/constants.php
include/load_prefs.php
include/options/accessibility.php [new file with mode: 0644]
src/compose.php
src/options.php
src/read_body.php
templates/default/compose_attachments.tpl
templates/default/compose_body.tpl
templates/default/compose_buttons.tpl
templates/default/compose_header.tpl
templates/default/read_menubar_buttons.tpl
templates/default_advanced/compose_body.tpl
templates/default_advanced/read_menubar_buttons.tpl

index bf64918..38a85b5 100644 (file)
@@ -260,3 +260,32 @@ define('SMOPT_SIZE_NORMAL', 5);
 define('SMOPT_SAVE_DEFAULT', 'save_option');
 define('SMOPT_SAVE_NOOP', 'save_option_noop');
 
+// Convenience array of values 'a' through 'z'
+$a_to_z = array(
+              'a' => 'a',
+              'b' => 'b',
+              'c' => 'c',
+              'd' => 'd',
+              'e' => 'e',
+              'f' => 'f',
+              'g' => 'g',
+              'h' => 'h',
+              'i' => 'i',
+              'j' => 'j',
+              'k' => 'k',
+              'l' => 'l',
+              'm' => 'm',
+              'n' => 'n',
+              'o' => 'o',
+              'p' => 'p',
+              'q' => 'q',
+              'r' => 'r',
+              's' => 's',
+              't' => 't',
+              'u' => 'u',
+              'v' => 'v',
+              'w' => 'w',
+              'x' => 'x',
+              'y' => 'y',
+              'z' => 'z',
+          );
index 17a38ab..1045c87 100644 (file)
@@ -350,6 +350,37 @@ $show_recipient_instead = getPref($data_dir, $username, 'show_recipient_instead'
 $delete_prev_next_display = getPref($data_dir, $username, 'delete_prev_next_display', SMPREF_ON);
 
 /**
+ * Access keys
+ * @since 1.5.2
+ */
+$accesskey_read_msg_reply = getPref($data_dir, $username, 'accesskey_read_msg_reply', 'r');
+$accesskey_read_msg_reply_all = getPref($data_dir, $username, 'accesskey_read_msg_reply_all', 'a');
+$accesskey_read_msg_forward = getPref($data_dir, $username, 'accesskey_read_msg_forward', 'f');
+$accesskey_read_msg_as_attach = getPref($data_dir, $username, 'accesskey_read_msg_as_attach', 'h');
+$accesskey_read_msg_delete = getPref($data_dir, $username, 'accesskey_read_msg_delete', 'd');
+$accesskey_read_msg_bypass_trash = getPref($data_dir, $username, 'accesskey_read_msg_bypass_trash', 'b');
+$accesskey_read_msg_move_to = getPref($data_dir, $username, 'accesskey_read_msg_move_to', 't');
+$accesskey_read_msg_move = getPref($data_dir, $username, 'accesskey_read_msg_move', 'm');
+$accesskey_read_msg_copy = getPref($data_dir, $username, 'accesskey_read_msg_copy', 'c');
+
+$accesskey_compose_to = getPref($data_dir, $username, 'accesskey_compose_to', 't');
+$accesskey_compose_cc = getPref($data_dir, $username, 'accesskey_compose_cc', 'c');
+$accesskey_compose_bcc = getPref($data_dir, $username, 'accesskey_compose_bcc', 'NONE');
+$accesskey_compose_subject = getPref($data_dir, $username, 'accesskey_compose_subject', 'j');
+$accesskey_compose_priority = getPref($data_dir, $username, 'accesskey_compose_priority', 'p');
+$accesskey_compose_on_read = getPref($data_dir, $username, 'accesskey_compose_on_read', 'r');
+$accesskey_compose_on_delivery = getPref($data_dir, $username, 'accesskey_compose_on_delivery', 'v');
+$accesskey_compose_signature = getPref($data_dir, $username, 'accesskey_compose_signature', 'g');
+$accesskey_compose_addresses = getPref($data_dir, $username, 'accesskey_compose_addresses', 'a');
+$accesskey_compose_save_draft = getPref($data_dir, $username, 'accesskey_compose_save_draft', 'd');
+$accesskey_compose_send = getPref($data_dir, $username, 'accesskey_compose_send', 's');
+$accesskey_compose_body = getPref($data_dir, $username, 'accesskey_compose_body', 'b');
+$accesskey_compose_attach_browse = getPref($data_dir, $username, 'accesskey_compose_attach_browse', 'w');
+$accesskey_compose_attach = getPref($data_dir, $username, 'accesskey_compose_attach', 'h');
+$accesskey_compose_delete_attach = getPref($data_dir, $username, 'accesskey_compose_delete_attach', 'l');
+
+
+/**
  * Height of iframe that displays html formated emails
  * @since 1.5.1
  */
diff --git a/include/options/accessibility.php b/include/options/accessibility.php
new file mode 100644 (file)
index 0000000..b84f71e
--- /dev/null
@@ -0,0 +1,283 @@
+<?php
+
+/**
+ * options_accessibility.php
+ *
+ * Displays all options concerning accessibility features in SquirrelMail.
+ *
+ * @copyright &copy; 1999-2007 The SquirrelMail Project Team
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ * @version $Id$
+ * @package squirrelmail
+ */
+
+/** Define the group constants for this options page. */
+define('SMOPT_GRP_ACCESSKEYS_READ_MESSAGE', 0);
+define('SMOPT_GRP_ACCESSKEYS_COMPOSE', 1);
+
+/**
+ * This function builds an array with all the information about
+ * the options available to the user, and returns it. The options
+ * are grouped by the groups in which they are displayed.
+ * For each option, the following information is stored:
+ * - name: the internal (variable) name
+ * - caption: the description of the option in the UI
+ * - type: one of SMOPT_TYPE_*
+ * - refresh: one of SMOPT_REFRESH_*
+ * - size: one of SMOPT_SIZE_*
+ * - save: the name of a function to call when saving this option
+ * @return array all option information
+ */
+function load_optpage_data_accessibility() {
+
+    global $a_to_z;
+    $my_a_to_z = array_merge(array('NONE' => _("Not used")), $a_to_z);
+
+    /* Build a simple array into which we will build options. */
+    $optgrps = array();
+    $optvals = array();
+
+    /******************************************************/
+    /* LOAD EACH GROUP OF OPTIONS INTO THE OPTIONS ARRAY. */
+    /******************************************************/
+
+    /*** Load the Access Key Options for the Read Message page into the array ***/
+    $optgrps[SMOPT_GRP_ACCESSKEYS_READ_MESSAGE] = _("Access Keys For Read Message Screen");
+    $optvals[SMOPT_GRP_ACCESSKEYS_READ_MESSAGE] = array();
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_READ_MESSAGE][] = array(
+        'name'    => 'accesskey_read_msg_reply',
+        'caption' => _("Reply"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_READ_MESSAGE][] = array(
+        'name'    => 'accesskey_read_msg_reply_all',
+        'caption' => _("Reply All"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_READ_MESSAGE][] = array(
+        'name'    => 'accesskey_read_msg_forward',
+        'caption' => _("Forward"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_READ_MESSAGE][] = array(
+        'name'    => 'accesskey_read_msg_as_attach',
+        'caption' => _("As Attachment"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_READ_MESSAGE][] = array(
+        'name'    => 'accesskey_read_msg_delete',
+        'caption' => _("Delete"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_READ_MESSAGE][] = array(
+        'name'    => 'accesskey_read_msg_bypass_trash',
+        'caption' => _("Bypass Trash"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_READ_MESSAGE][] = array(
+        'name'    => 'accesskey_read_msg_move_to',
+        'caption' => _("Move To"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_READ_MESSAGE][] = array(
+        'name'    => 'accesskey_read_msg_move',
+        'caption' => _("Move"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_READ_MESSAGE][] = array(
+        'name'    => 'accesskey_read_msg_copy',
+        'caption' => _("Copy"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+
+    /*** Load the Access Key Options for the Compose page into the array ***/
+    $optgrps[SMOPT_GRP_ACCESSKEYS_COMPOSE] = _("Access Keys For Compose Screen");
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE] = array();
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_to',
+        'caption' => _("To"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_cc',
+        'caption' => _("Cc"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_bcc',
+        'caption' => _("Bcc"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_subject',
+        'caption' => _("Subject"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_priority',
+        'caption' => _("Priority"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_on_read',
+        'caption' => _("On Read"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_on_delivery',
+        'caption' => _("On Delivery"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_signature',
+        'caption' => _("Signature"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_addresses',
+        'caption' => _("Addresses"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_save_draft',
+        'caption' => _("Save Draft"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_send',
+        'caption' => _("Send"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_body',
+        'caption' => _("Body"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_attach_browse',
+        'caption' => _("Browse"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_attach',
+        'caption' => _("Attach"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+    $optvals[SMOPT_GRP_ACCESSKEYS_COMPOSE][] = array(
+        'name'    => 'accesskey_compose_delete_attach',
+        'caption' => _("Delete Selected Attachments"),
+        'type'    => SMOPT_TYPE_STRLIST,
+        'refresh' => SMOPT_REFRESH_NONE,
+        'size'    => SMOPT_SIZE_TINY,
+        'posvals' => $my_a_to_z,
+    );
+
+
+    /* Assemble all this together and return it as our result. */
+    $result = array(
+        'grps' => $optgrps,
+        'vals' => $optvals
+    );
+    return ($result);
+}
+
+/******************************************************************/
+/** Define any specialized save functions for this option page. ***/
+/**                                                             ***/
+/** You must add every function that is set in save parameter   ***/
+/******************************************************************/
+
index 189b65a..fcd707f 100644 (file)
@@ -1216,6 +1216,15 @@ function showInputForm ($session, $values=false) {
     $oTemplate->assign('bcc', htmlspecialchars($send_to_bcc));
     $oTemplate->assign('subject', htmlspecialchars($subject));
 
+    // access keys...
+    //
+    global $accesskey_compose_to, $accesskey_compose_cc,
+           $accesskey_compose_bcc, $accesskey_compose_subject;
+    $oTemplate->assign('accesskey_compose_to', $accesskey_compose_to);
+    $oTemplate->assign('accesskey_compose_cc', $accesskey_compose_cc);
+    $oTemplate->assign('accesskey_compose_bcc', $accesskey_compose_bcc);
+    $oTemplate->assign('accesskey_compose_subject', $accesskey_compose_subject);
+
     $oTemplate->display('compose_header.tpl');
 
     if ($location_of_buttons == 'between') {
@@ -1259,6 +1268,12 @@ function showInputForm ($session, $values=false) {
     $oTemplate->assign('body', $body_str);
     $oTemplate->assign('show_bottom_send', $location_of_buttons!='bottom');
 
+    // access keys...
+    //
+    global $accesskey_compose_body, $accesskey_compose_send;
+    $oTemplate->assign('accesskey_compose_body', $accesskey_compose_body);
+    $oTemplate->assign('accesskey_compose_send', $accesskey_compose_send);
+
     $oTemplate->display ('compose_body.tpl');
 
     if ($location_of_buttons == 'bottom') {
@@ -1315,6 +1330,14 @@ function showInputForm ($session, $values=false) {
         $oTemplate->assign('max_file_size', empty($max) ? -1 : $max);
         $oTemplate->assign('attachments', $attach);
 
+        // access keys...
+        //
+        global $accesskey_compose_attach_browse, $accesskey_compose_attach,
+               $accesskey_compose_delete_attach;
+        $oTemplate->assign('accesskey_compose_attach_browse', $accesskey_compose_attach_browse);
+        $oTemplate->assign('accesskey_compose_attach', $accesskey_compose_attach);
+        $oTemplate->assign('accesskey_compose_delete_attach', $accesskey_compose_delete_attach);
+
         $oTemplate->display('compose_attachments.tpl');
     } // End of file_uploads if-block
     /* End of attachment code */
@@ -1368,10 +1391,16 @@ function showComposeButtonRow() {
 
     $mdn_user_support=getPref($data_dir, $username, 'mdn_user_support',$default_use_mdn);
 
+    $address_book_button_attribs = array();
+    global $accesskey_compose_addresses;
+    if ($accesskey_compose_addresses != 'NONE')
+        $address_book_button_attribs['accesskey'] = $accesskey_compose_addresses;
     if ($use_javascript_addr_book && checkForJavascript()) {
-        $addr_book = addButton(_("Addresses"), null, array('onclick' => 'javascript:open_abook();'));
+        $addr_book = addButton(_("Addresses"),
+                               null,
+                               array_merge($address_book_button_attribs, array('onclick' => 'javascript:open_abook();')));
     } else {
-        $addr_book = addSubmit(_("Addresses"), 'html_addr_search');
+        $addr_book = addSubmit(_("Addresses"), 'html_addr_search', $address_book_button_attribs);
     }
 
     $oTemplate->assign('allow_priority', $default_use_priority==1);
@@ -1385,6 +1414,18 @@ function showComposeButtonRow() {
     $oTemplate->assign('drafts_enabled', $save_as_draft);
     $oTemplate->assign('address_book_button', $addr_book);
 
+    // access keys...
+    //
+    global $accesskey_compose_priority, $accesskey_compose_on_read,
+           $accesskey_compose_on_delivery, $accesskey_compose_signature,
+           $accesskey_compose_save_draft, $accesskey_compose_send;
+    $oTemplate->assign('accesskey_compose_priority', $accesskey_compose_priority);
+    $oTemplate->assign('accesskey_compose_on_read', $accesskey_compose_on_read);
+    $oTemplate->assign('accesskey_compose_on_delivery', $accesskey_compose_on_delivery);
+    $oTemplate->assign('accesskey_compose_signature', $accesskey_compose_signature);
+    $oTemplate->assign('accesskey_compose_save_draft', $accesskey_compose_save_draft);
+    $oTemplate->assign('accesskey_compose_send', $accesskey_compose_send);
+
     $oTemplate->display('compose_buttons.tpl');
 }
 
index f11694d..ad4c99c 100644 (file)
@@ -39,6 +39,7 @@ define('SMOPT_PAGE_MAIN', 'main');
 define('SMOPT_PAGE_PERSONAL', 'personal');
 define('SMOPT_PAGE_DISPLAY', 'display');
 define('SMOPT_PAGE_COMPOSE', 'compose');
+define('SMOPT_PAGE_ACCESSIBILITY', 'accessibility');
 define('SMOPT_PAGE_HIGHLIGHT', 'highlight');
 define('SMOPT_PAGE_FOLDER', 'folder');
 define('SMOPT_PAGE_ORDER', 'order');
@@ -149,6 +150,12 @@ switch ($optpage) {
         $optpage_loader = 'load_optpage_data_compose';
         $optpage_loadhook = 'optpage_loadhook_compose';
         break;
+    case SMOPT_PAGE_ACCESSIBILITY:
+        $optpage_name   = _("Accessibility Preferences");
+        $optpage_file   = SM_PATH . 'include/options/accessibility.php';
+        $optpage_loader = 'load_optpage_data_accessibility';
+        $optpage_loadhook = 'optpage_loadhook_accessibility';
+        break;
     case SMOPT_PAGE_HIGHLIGHT:
         $optpage_name   = _("Message Highlighting");
         $optpage_file   = SM_PATH . 'include/options/highlight.php';
@@ -228,6 +235,9 @@ if ($optmode == SMOPT_MODE_SUBMIT) {
         case SMOPT_PAGE_COMPOSE:
             $save_hook_name = 'options_compose_save';
             break;
+        case SMOPT_PAGE_ACCESSIBILITY:
+            $save_hook_name = 'options_accessibility_save';
+            break;
         case SMOPT_PAGE_FOLDER:
             $save_hook_name = 'options_folder_save';
             break;
@@ -361,6 +371,14 @@ if ($optpage == SMOPT_PAGE_MAIN) {
         'js'   => false
     );
 
+    /* Build a section for Accessibility Options. */
+    $optpage_blocks[] = array(
+        'name' => _("Accessibility Preferences"),
+        'url'  => 'options.php?optpage=' . SMOPT_PAGE_ACCESSIBILITY,
+        'desc' => _("You can configure features that improve interface usability."),
+        'js'   => false
+    );
+
     /* Build a section for plugins wanting to register an optionpage. */
     do_hook('optpage_register_block', $null);
 
@@ -407,6 +425,10 @@ if ($optpage == SMOPT_PAGE_MAIN) {
             $bottom_hook_name = 'options_compose_bottom';
             $submit_name = 'submit_compose';
             break;
+        case SMOPT_PAGE_ACCESSIBILITY:
+            $bottom_hook_name = 'options_accessibility_bottom';
+            $submit_name = 'submit_accessibility';
+            break;
         case SMOPT_PAGE_HIGHLIGHT:
             $bottom_hook_name = 'options_highlight_bottom';
             $submit_name = 'submit_highlight';
index fb93be4..12be8ad 100644 (file)
@@ -658,6 +658,21 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed
         $oTemplate->assign('can_be_copied', false);
     }
 
+    // access keys...
+    //
+    global $accesskey_read_msg_reply, $accesskey_read_msg_reply_all,
+           $accesskey_read_msg_forward, $accesskey_read_msg_as_attach,
+           $accesskey_read_msg_delete, $accesskey_read_msg_bypass_trash,
+           $accesskey_read_msg_move_to, $accesskey_read_msg_move;
+    $oTemplate->assign('accesskey_read_msg_reply', $accesskey_read_msg_reply);
+    $oTemplate->assign('accesskey_read_msg_reply_all', $accesskey_read_msg_reply_all);
+    $oTemplate->assign('accesskey_read_msg_forward', $accesskey_read_msg_forward);
+    $oTemplate->assign('accesskey_read_msg_as_attach', $accesskey_read_msg_as_attach);
+    $oTemplate->assign('accesskey_read_msg_delete', $accesskey_read_msg_delete);
+    $oTemplate->assign('accesskey_read_msg_bypass_trash', $accesskey_read_msg_bypass_trash);
+    $oTemplate->assign('accesskey_read_msg_move_to', $accesskey_read_msg_move_to);
+    $oTemplate->assign('accesskey_read_msg_move', $accesskey_read_msg_move);
+
     global $null;
     do_hook('read_body_menu', $null);
 
index 16fbab9..0b96922 100644 (file)
@@ -5,6 +5,9 @@
  * Description
  * 
  * The following variables are available in this template:
+ *    $accesskey_compose_attach_browse - The access key to be used for the Browse button
+ *    $accesskey_compose_attach        - The access key to be used for the Attach button
+ *    $accesskey_compose_delete_attach - The access key to be used for the Delete Attachments button
  *
  * @copyright &copy; 1999-2006 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
@@ -25,9 +28,9 @@ extract($t);
    <?php echo _("New attachment");?>:
   </td>
   <td class="fieldValue">
-   <input type="file" name="attachfile" size="48" />
+   <input type="file" name="attachfile" size="48" <?php if ($accesskey_compose_attach_browse != 'NONE') echo 'accesskey="' . $accesskey_compose_attach_browse . '" '; ?>/>
    &nbsp;
-   <input type="submit" name="attach" value="<?php echo _("Attach"); ?>" />
+   <input type="submit" name="attach" <?php if ($accesskey_compose_attach != 'NONE') echo 'accesskey="' . $accesskey_compose_attach . '" '; ?>value="<?php echo _("Attach"); ?>" />
    &nbsp;
    <?php
     if($max_file_size != -1) {
@@ -40,24 +43,26 @@ extract($t);
   </td>
  </tr>
  <?php
+    $attachment_count = 1;
     foreach ($attachments as $attach) {
         ?>
  <tr class="attachment">
   <td class="fieldName" style="width: 1%">
-   <input type="checkbox" name="delete[]" value="<?php echo $attach['Key']; ?>" />
+   <input type="checkbox" name="delete[]" accesskey="<?php echo ($attachment_count % 10); ?>" value="<?php echo $attach['Key']; ?>" />
   </td>
   <td class="fieldValue">
    <?php echo $attach['FileName']; ?> - <?php echo $attach['ContentType']; ?> (<?php echo humanReadableSize($attach['Size']); ?>)
   </td>
  </tr>
         <?php
+        $attachment_count++;
     }
     
     if (count($attachments) > 0) {
         ?>
  <tr class="header">
   <td colspan="2">
-   <input type="submit" name="do_delete" value="<?php echo _("Delete selected attachments"); ?>" />
+   <input type="submit" name="do_delete" <?php if ($accesskey_compose_delete_attach != 'NONE') echo 'accesskey="' . $accesskey_compose_delete_attach . '" '; ?>value="<?php echo _("Delete Selected Attachments"); ?>" />
   </td>
  </tr>
         <?php
index ac19ed7..4f0e977 100644 (file)
@@ -5,6 +5,8 @@
  * Description
  * 
  * The following variables are available in this template:
+ *    $accesskey_compose_body - The access key to use for the message body textarea
+ *    $accesskey_compose_send - The access key to be use for the Send button
  *
  * @copyright &copy; 1999-2006 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
@@ -24,7 +26,7 @@ extract($t);
 <table cellspacing="0" class="table1">
  <tr>
   <td style="text-align: center">
-   <textarea name="body" id="body" rows="<?php echo $editor_height; ?>" cols="<?php echo $editor_width; ?>" <?php echo $input_onfocus; ?>><?php echo $body; ?></textarea>
+   <textarea name="body" id="body" rows="<?php echo $editor_height; ?>" cols="<?php echo $editor_width; ?>" <?php if ($accesskey_compose_body != 'NONE') echo 'accesskey="' . $accesskey_compose_body . '" '; echo $input_onfocus; ?>><?php echo $body; ?></textarea>
   </td>
  </tr>
  <?php
@@ -32,7 +34,7 @@ extract($t);
         ?>
  <tr>
   <td class="bottomSend">
-   <input type="submit" name="<?php echo unique_widget_name('send'); ?>" value="<?php echo _("Send"); ?>" />
+   <input type="submit" <?php if (!unique_widget_name('send', TRUE) && $accesskey_compose_send != 'NONE') echo 'accesskey="' . $accesskey_compose_send . '" '; ?>name="<?php echo unique_widget_name('send'); ?>" value="<?php echo _("Send"); ?>" />
   </td>
  </tr>
         <?php
index cf2468d..f0ad183 100644 (file)
@@ -5,6 +5,12 @@
  * Description
  * 
  * The following variables are available in this template:
+ *    $accesskey_compose_priority    - The access key to be use for the Priority list
+ *    $accesskey_compose_on_read     - The access key to be use for the On Read checkbox
+ *    $accesskey_compose_on_delivery - The access key to be use for the On Delivery checkbox
+ *    $accesskey_compose_signature   - The access key to be use for the Signature button
+ *    $accesskey_compose_save_draft  - The access key to be use for the Save Draft button
+ *    $accesskey_compose_send        - The access key to be use for the Send button
  *
  * @copyright &copy; 1999-2006 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
@@ -31,7 +37,7 @@ extract($t);
    <label for="mailprio"><?php echo _("Priority"); ?>:</label>
   </td>
   <td class="fieldValue">
-   <select name="mailprio" id="mailprio">
+   <select name="mailprio" id="mailprio"<?php if ($accesskey_compose_priority != 'NONE') echo ' accesskey="' . $accesskey_compose_priority . '"'; ?>>
     <?php
         foreach ($priority_list as $value=>$name) {
             echo '<option value="'.$value.'"'. ($value==$current_priority ? ' selected="selected"' : '') .'>'.$name.'</option>';
@@ -51,9 +57,9 @@ extract($t);
    <?php echo _("Receipts"); ?>:
   </td>
   <td class="fieldValue">
-    <input type="checkbox" name="request_mdn" id="request_mdn" value="1" <?php if ($read_receipt) echo ' checked="checked"'; ?> /><label for="request_mdn"><?php echo _("On Read"); ?></label>
+    <input type="checkbox" name="request_mdn" id="request_mdn" value="1" <?php if ($read_receipt) echo ' checked="checked"'; ?> <?php if ($accesskey_compose_on_read != 'NONE') echo 'accesskey="' . $accesskey_compose_on_read . '" '; ?>/><label for="request_mdn"><?php echo _("On Read"); ?></label>
     &nbsp;
-    <input type="checkbox" name="request_dr" id="request_dr" value="1" <?php if ($delivery_receipt) echo ' checked="checked"'; ?> /><label for="request_dr"><?php echo _("On Delivery"); ?></label>
+    <input type="checkbox" name="request_dr" id="request_dr" value="1" <?php if ($delivery_receipt) echo ' checked="checked"'; ?> <?php if ($accesskey_compose_on_delivery != 'NONE') echo 'accesskey="' . $accesskey_compose_on_delivery . '" '; ?>/><label for="request_dr"><?php echo _("On Delivery"); ?></label>
   </td>
  </tr>
         <?php
@@ -61,16 +67,16 @@ extract($t);
  ?>
  <tr>
   <td colspan="2" class="buttons">
-   <input type="submit" name="sigappend" value="<?php echo _("Signature"); ?>" />&nbsp;
+   <input type="submit" name="sigappend" <?php if ($accesskey_compose_signature != 'NONE') echo 'accesskey="' . $accesskey_compose_signature . '" '; ?>value="<?php echo _("Signature"); ?>" />&nbsp;
    <?php echo $address_book_button; ?>&nbsp;
    <?php
     if ($drafts_enabled) {
         ?>
-   <input type="submit" name="draft" value="<?php echo _("Save Draft"); ?>" />&nbsp;
+   <input type="submit" name="draft" <?php if ($accesskey_compose_save_draft != 'NONE') echo 'accesskey="' . $accesskey_compose_save_draft . '" '; ?>value="<?php echo _("Save Draft"); ?>" />&nbsp;
         <?php
     }
    ?>
-   <input type="submit" name="<?php echo unique_widget_name('send'); ?>" value="<?php echo _("Send"); ?>" />&nbsp;
+   <input type="submit" <?php if (!unique_widget_name('send', TRUE) && $accesskey_compose_send != 'NONE') echo 'accesskey="' . $accesskey_compose_send . '" '; ?>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>
index fa02db9..1c07b70 100644 (file)
@@ -5,6 +5,10 @@
  * Description
  * 
  * The following variables are available in this template:
+ *    $accesskey_compose_to      - The access key to be used for the To field
+ *    $accesskey_compose_cc      - The access key to be used for the Cc field
+ *    $accesskey_compose_bcc     - The access key to be used for the Bcc field
+ *    $accesskey_compose_subject - The access key to be used for the Subject field
  *
  * @copyright &copy; 1999-2006 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
@@ -48,7 +52,7 @@ extract($t);
    <label for="to"><?php echo _("To"); ?>:</label>
   </td>
   <td class="fieldValue">
-   <input type="text" name="send_to" id="to" value="<?php echo $to; ?>" size="50" <?php echo $input_onfocus; ?> />
+   <input type="text" name="send_to" id="to" value="<?php echo $to; ?>" size="50" <?php if ($accesskey_compose_to != 'NONE') echo 'accesskey="' . $accesskey_compose_to . '" '; echo $input_onfocus; ?> />
   </td>
  </tr>
  <tr>
@@ -56,7 +60,7 @@ extract($t);
    <label for="send_to_cc"><?php echo _("Cc"); ?>:</label>
   </td>
   <td class="fieldValue">
-   <input type="text" name="send_to_cc" id="send_to_cc" value="<?php echo $cc; ?>" size="50" <?php echo $input_onfocus; ?> />
+   <input type="text" name="send_to_cc" id="send_to_cc" value="<?php echo $cc; ?>" size="50" <?php if ($accesskey_compose_cc != 'NONE') echo 'accesskey="' . $accesskey_compose_cc . '" '; echo $input_onfocus; ?> />
   </td>
  </tr>
  <tr>
@@ -64,7 +68,7 @@ extract($t);
    <label for="send_to_bcc"><?php echo _("Bcc"); ?>:</label>
   </td>
   <td class="fieldValue">
-   <input type="text" name="send_to_bcc" id="send_to_bcc" value="<?php echo $bcc; ?>" size="50" <?php echo $input_onfocus; ?> />
+   <input type="text" name="send_to_bcc" id="send_to_bcc" value="<?php echo $bcc; ?>" size="50" <?php if ($accesskey_compose_bcc != 'NONE') echo 'accesskey="' . $accesskey_compose_bcc . '" '; echo $input_onfocus; ?> />
   </td>
  </tr>
  <tr>
@@ -72,8 +76,8 @@ extract($t);
    <label for="subject"><?php echo _("Subject"); ?>:</label>
   </td>
   <td class="fieldValue">
-   <input type="text" name="subject" id="subject" value="<?php echo $subject; ?>" size="50" <?php echo $input_onfocus; ?> />
+   <input type="text" name="subject" id="subject" value="<?php echo $subject; ?>" size="50" <?php if ($accesskey_compose_subject != 'NONE') echo 'accesskey="' . $accesskey_compose_subject . '" '; echo $input_onfocus; ?> />
   </td>
  </tr>
 </table>
-</div>
\ No newline at end of file
+</div>
index 6a08edc..3edce9b 100644 (file)
  *    $delete_form_extra - additional input elements needed by the DELETE form
  *    $move_form_extra - additional input elements needed by the MOVE form.
  *    $last_move_target - the last folder that a message was moved/copied to. 
+ *    $accesskey_read_msg_reply        - The accesskey to be used for the Reply button
+ *    $accesskey_read_msg_reply_all    - The accesskey to be used for the Reply All button
+ *    $accesskey_read_msg_forward      - The accesskey to be used for the Forward button
+ *    $accesskey_read_msg_as_attach    - The accesskey to be used for the As Attachment checkbox
+ *    $accesskey_read_msg_delete       - The accesskey to be used for the Delete button
+ *    $accesskey_read_msg_bypass_trash - The accesskey to be used for the Bypass Trash checkbox
+ *    $accesskey_read_msg_move_to      - The accesskey to be used for the folder select list
+ *    $accesskey_read_msg_move         - The accesskey to be used for the Move button
+ *    $accesskey_read_msg_copy         - The accesskey to be used for the Copy button
  *    
  *
  * @copyright &copy; 1999-2006 The SquirrelMail Project Team
@@ -95,14 +104,14 @@ if ($nav_on_top) {
             <?php
         }
     ?>
-    <input type="submit" name="smaction_reply" value="<?php echo _("Reply"); ?>" onclick="<?php echo $button_onclick; ?>" />&nbsp;
-    <input type="submit" name="smaction_reply_all" value="<?php echo _("Reply All"); ?>" onclick="<?php echo $button_onclick; ?>" />
+    <input type="submit" name="smaction_reply" <?php if ($accesskey_read_msg_reply != 'NONE') echo 'accesskey="' . $accesskey_read_msg_reply . '" '; ?>value="<?php echo _("Reply"); ?>" onclick="<?php echo $button_onclick; ?>" />&nbsp;
+    <input type="submit" name="smaction_reply_all" <?php if ($accesskey_read_msg_reply_all != 'NONE') echo 'accesskey="' . $accesskey_read_msg_reply_all . '" '; ?>value="<?php echo _("Reply All"); ?>" onclick="<?php echo $button_onclick; ?>" />
     &nbsp;&nbsp;|&nbsp;&nbsp;
-    <input type="submit" name="smaction_forward" value="<?php echo _("Forward"); ?>" onclick="<?php echo $button_onclick; ?>" />
+    <input type="submit" name="smaction_forward" <?php if ($accesskey_read_msg_forward != 'NONE') echo 'accesskey="' . $accesskey_read_msg_forward . '" '; ?>value="<?php echo _("Forward"); ?>" onclick="<?php echo $button_onclick; ?>" />
     <?php
     if ($forward_as_attachment_enabled) {
         ?>
-    <input type="checkbox" name="smaction_attache" id="smaction_attache" />
+    <input type="checkbox" name="smaction_attache" id="smaction_attache" <?php if ($accesskey_read_msg_as_attach != 'NONE') echo 'accesskey="' . $accesskey_read_msg_as_attach . '" '; ?>/>
     <label for="smaction_attache"><?php echo _("As Attachment"); ?></label>
         <?php
     }
@@ -116,8 +125,8 @@ if ($nav_on_top) {
     <form name="deleteMessageForm" action="<?php echo $move_delete_form_action; ?>" method="post">
      <?php echo $delete_form_extra; ?>
      <small>
-     <input type="submit" name="delete" value="<?php echo _("Delete"); ?>" />
-     <input type="checkbox" name="bypass_trash" id="bypass_trash" /><label for="bypass_trash"><?php echo _("Bypass Trash"); ?></label>
+     <input type="submit" name="delete" <?php if ($accesskey_read_msg_delete != 'NONE') echo 'accesskey="' . $accesskey_read_msg_delete . '" '; ?>value="<?php echo _("Delete"); ?>" />
+     <input type="checkbox" name="bypass_trash" id="bypass_trash" <?php if ($accesskey_read_msg_bypass_trash != 'NONE') echo 'accesskey="' . $accesskey_read_msg_bypass_trash . '" '; ?>/><label for="bypass_trash"><?php echo _("Bypass Trash"); ?></label>
      </small>
     </form>
         <?php
@@ -133,18 +142,18 @@ if ($nav_on_top) {
      <?php echo $move_form_extra; ?>
      <small>
      <?php echo _("Move To"); ?>:
-     <select name="targetMailbox">
+     <select <?php if ($accesskey_read_msg_move_to != 'NONE') echo 'accesskey="' . $accesskey_read_msg_move_to . '" '; ?>name="targetMailbox">
      <?php
         foreach ($mailboxes as $value=>$option) {
             echo '<option value="'. $value .'"' . ($value==$last_move_target ? ' selected="selected"' : '').'>' . $option .'</option>'."\n";
         }
      ?>
      </select>
-     <input type="submit" name="moveButton" value="<?php echo _("Move"); ?>" />
+     <input type="submit" name="moveButton" <?php if ($accesskey_read_msg_move != 'NONE') echo 'accesskey="' . $accesskey_read_msg_move . '" '; ?>value="<?php echo _("Move"); ?>" />
      <?php
         if ($can_be_copied) {
             ?>
-     <input type="submit" name="copyButton" value="<?php echo _("Copy"); ?>" />
+     <input type="submit" name="copyButton" <?php if ($accesskey_read_msg_copy != 'NONE') echo 'accesskey="' . $accesskey_read_msg_copy . '" '; ?>value="<?php echo _("Copy"); ?>" />
             <?php
         }
      ?>
index c16b01b..989db9e 100644 (file)
@@ -5,6 +5,8 @@
  * Description
  * 
  * The following variables are available in this template:
+ *    $accesskey_compose_body - The access key to use for the message body textarea
+ *    $accesskey_compose_send - The access key to be use for the Send button
  *
  * @copyright &copy; 1999-2006 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
@@ -24,7 +26,7 @@ extract($t);
 <table cellspacing="0" class="table1">
  <tr>
   <td style="text-align: center">
-   <textarea name="body" id="body" rows="<?php echo $editor_height; ?>" cols="<?php echo $editor_width; ?>" <?php echo $input_onfocus; ?>><?php echo $body; ?></textarea>
+   <textarea name="body" id="body" rows="<?php echo $editor_height; ?>" cols="<?php echo $editor_width; ?>" <?php if ($accesskey_compose_body != 'NONE') echo 'accesskey="' . $accesskey_compose_body . '" '; echo $input_onfocus; ?>><?php echo $body; ?></textarea>
 
 <?php if (checkForJavascript()) // Display text area resizing handle
 
@@ -41,7 +43,7 @@ extract($t);
         ?>
  <tr>
   <td class="bottomSend">
-   <input type="submit" name="<?php echo unique_widget_name('send'); ?>" value="<?php echo _("Send"); ?>" />
+   <input type="submit" <?php if (!unique_widget_name('send', TRUE) && $accesskey_compose_send != 'NONE') echo 'accesskey="' . $accesskey_compose_send . '" '; ?>name="<?php echo unique_widget_name('send'); ?>" value="<?php echo _("Send"); ?>" />
   </td>
  </tr>
         <?php
index b581ca9..f4ed667 100644 (file)
  *    $delete_form_extra - additional input elements needed by the DELETE form
  *    $move_form_extra - additional input elements needed by the MOVE form.
  *    $last_move_target - the last folder that a message was moved/copied to. 
+ *    $accesskey_read_msg_reply        - The accesskey to be used for the Reply button
+ *    $accesskey_read_msg_reply_all    - The accesskey to be used for the Reply All button
+ *    $accesskey_read_msg_forward      - The accesskey to be used for the Forward button
+ *    $accesskey_read_msg_as_attach    - The accesskey to be used for the As Attachment checkbox
+ *    $accesskey_read_msg_delete       - The accesskey to be used for the Delete button
+ *    $accesskey_read_msg_bypass_trash - The accesskey to be used for the Bypass Trash checkbox
+ *    $accesskey_read_msg_move_to      - The accesskey to be used for the folder select list
+ *    $accesskey_read_msg_move         - The accesskey to be used for the Move button
+ *    $accesskey_read_msg_copy         - The accesskey to be used for the Copy button
  *    
  *
  * @copyright &copy; 1999-2006 The SquirrelMail Project Team
@@ -103,14 +112,14 @@ if ($nav_on_top) {
             <?php
         }
     ?>
-    <input type="submit" name="smaction_reply" value="<?php echo _("Reply"); ?>" onclick="<?php echo $button_onclick; ?>" />&nbsp;
-    <input type="submit" name="smaction_reply_all" value="<?php echo _("Reply All"); ?>" onclick="<?php echo $button_onclick; ?>" />
+    <input type="submit" name="smaction_reply" <?php if ($accesskey_read_msg_reply != 'NONE') echo 'accesskey="' . $accesskey_read_msg_reply . '" '; ?>value="<?php echo _("Reply"); ?>" onclick="<?php echo $button_onclick; ?>" />&nbsp;
+    <input type="submit" name="smaction_reply_all" <?php if ($accesskey_read_msg_reply_all != 'NONE') echo 'accesskey="' . $accesskey_read_msg_reply_all . '" '; ?>value="<?php echo _("Reply All"); ?>" onclick="<?php echo $button_onclick; ?>" />
     &nbsp;&nbsp;|&nbsp;&nbsp;
-    <input type="submit" name="smaction_forward" value="<?php echo _("Forward"); ?>" onclick="<?php echo $button_onclick; ?>" />
+    <input type="submit" name="smaction_forward" <?php if ($accesskey_read_msg_forward != 'NONE') echo 'accesskey="' . $accesskey_read_msg_forward . '" '; ?>value="<?php echo _("Forward"); ?>" onclick="<?php echo $button_onclick; ?>" />
     <?php
     if ($forward_as_attachment_enabled) {
         ?>
-    <input type="checkbox" name="smaction_attache" id="smaction_attache" />
+    <input type="checkbox" name="smaction_attache" id="smaction_attache" <?php if ($accesskey_read_msg_as_attach != 'NONE') echo 'accesskey="' . $accesskey_read_msg_as_attach . '" '; ?>/>
     <label for="smaction_attache"><?php echo _("As Attachment"); ?></label>
         <?php
     }
@@ -124,7 +133,7 @@ if ($nav_on_top) {
     <form name="deleteMessageForm" action="<?php echo $move_delete_form_action; ?>" method="post">
      <?php echo $delete_form_extra; ?>
      <small>
-     <input type="submit" name="delete" value="<?php 
+     <input type="submit" name="delete" <?php if ($accesskey_read_msg_delete != 'NONE') echo 'accesskey="' . $accesskey_read_msg_delete . '" '; ?>value="<?php 
 
 echo _("Delete") .'"';
 
@@ -135,7 +144,7 @@ if ($show_preview_pane && $pp_refresh_message_list)
 
 echo ' />'; ?>
 
-     <input type="checkbox" name="bypass_trash" id="bypass_trash" /><label for="bypass_trash"><?php echo _("Bypass Trash"); ?></label>
+     <input type="checkbox" name="bypass_trash" id="bypass_trash" <?php if ($accesskey_read_msg_bypass_trash != 'NONE') echo 'accesskey="' . $accesskey_read_msg_bypass_trash . '" '; ?>/><label for="bypass_trash"><?php echo _("Bypass Trash"); ?></label>
      </small>
     </form>
         <?php
@@ -151,14 +160,14 @@ echo ' />'; ?>
      <?php echo $move_form_extra; ?>
      <small>
      <?php echo _("Move To"); ?>:
-     <select name="targetMailbox">
+     <select <?php if ($accesskey_read_msg_move_to != 'NONE') echo 'accesskey="' . $accesskey_read_msg_move_to . '" '; ?>name="targetMailbox">
      <?php
         foreach ($mailboxes as $value=>$option) {
             echo '<option value="'. $value .'"' . ($value==$last_move_target ? ' selected="selected"' : '').'>' . $option .'</option>'."\n";
         }
      ?>
      </select>
-     <input type="submit" name="moveButton" value="<?php 
+     <input type="submit" name="moveButton" <?php if ($accesskey_read_msg_move != 'NONE') echo 'accesskey="' . $accesskey_read_msg_move . '" '; ?>value="<?php 
 
 echo _("Move") . '"'; 
 
@@ -172,7 +181,7 @@ echo ' />';
 
         if ($can_be_copied) {
             ?>
-     <input type="submit" name="copyButton" value="<?php echo _("Copy"); ?>" />
+     <input type="submit" name="copyButton" <?php if ($accesskey_read_msg_copy != 'NONE') echo 'accesskey="' . $accesskey_read_msg_copy . '" '; ?>value="<?php echo _("Copy"); ?>" />
             <?php
         }
      ?>