From e55ab02682caf150359e1d1642022b565e9e65f9 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 05 Mar 2010 07:05:05 -0500
Subject: [PATCH] - Add 'default_charset' option to user preferences (#1485451)

---
 CHANGELOG                             |    1 
 program/steps/settings/func.inc       |   11 +++
 program/localization/en_US/labels.inc |   28 ++++++++-
 program/localization/pl_PL/labels.inc |   19 ++++++
 config/main.inc.php.dist              |    6 +-
 program/include/rcube_template.php    |   74 +++++++++++++++++-------
 program/steps/settings/save_prefs.inc |    3 
 7 files changed, 111 insertions(+), 31 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index d1a73d6..06fc7d6 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG RoundCube Webmail
 ===========================
 
+- Add 'default_charset' option to user preferences (#1485451)
 - Add 'delete_always' option to user preferences
 - Support/Require tls:// prefix in 'smtp_server' option for TLS connections
 - Fix inconsistent behaviour of 'delete_always' option (#1486299)
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index 61736c2..8558c44 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -296,9 +296,6 @@
 // 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask)
 $rcmail_config['mdn_requests'] = 0;
 
-// Use this charset as fallback for message decoding
-$rcmail_config['default_charset'] = 'ISO-8859-1';
-
 // Make use of the built-in spell checker. It is based on GoogieSpell.
 // Since Google only accepts connections over https your PHP installatation
 // requires to be compiled with Open SSL support
@@ -397,6 +394,9 @@
 // USER PREFERENCES
 // ----------------------------------
 
+// Use this charset as fallback for message decoding
+$rcmail_config['default_charset'] = 'ISO-8859-1';
+
 // skin name: folder from skins/
 $rcmail_config['skin'] = 'default';
 
diff --git a/program/include/rcube_template.php b/program/include/rcube_template.php
index 266d21a..a37adc2 100755
--- a/program/include/rcube_template.php
+++ b/program/include/rcube_template.php
@@ -1134,39 +1134,67 @@
      * @param array Named parameters for the select tag
      * @return string HTML code for the gui object
      */
-    static function charset_selector($attrib)
+    function charset_selector($attrib)
     {
         // pass the following attributes to the form class
         $field_attrib = array('name' => '_charset');
         foreach ($attrib as $attr => $value) {
-            if (in_array($attr, array('id', 'class', 'style', 'size', 'tabindex'))) {
+            if (in_array($attr, array('id', 'name', 'class', 'style', 'size', 'tabindex'))) {
                 $field_attrib[$attr] = $value;
             }
         }
+
         $charsets = array(
-            'US-ASCII'     => 'ASCII (English)',
-            'EUC-JP'       => 'EUC-JP (Japanese)',
-            'EUC-KR'       => 'EUC-KR (Korean)',
-            'BIG5'         => 'BIG5 (Chinese)',
-            'GB2312'       => 'GB2312 (Chinese)',
-            'ISO-2022-JP'  => 'ISO-2022-JP (Japanese)',
-            'ISO-8859-1'   => 'ISO-8859-1 (Latin-1)',
-            'ISO-8859-2'   => 'ISO-8895-2 (Central European)',
-            'ISO-8859-7'   => 'ISO-8859-7 (Greek)',
-            'ISO-8859-9'   => 'ISO-8859-9 (Turkish)',
-            'Windows-1251' => 'Windows-1251 (Cyrillic)',
-            'Windows-1252' => 'Windows-1252 (Western)',
-            'Windows-1255' => 'Windows-1255 (Hebrew)',
-            'Windows-1256' => 'Windows-1256 (Arabic)',
-            'Windows-1257' => 'Windows-1257 (Baltic)',
-            'UTF-8'        => 'UTF-8'
-            );
+            'UTF-8'        => 'UTF-8 ('.rcube_label('unicode').')',
+            'US-ASCII'     => 'ASCII ('.rcube_label('english').')',
+            'ISO-8859-1'   => 'ISO-8859-1 ('.rcube_label('westerneuropean').')',
+            'ISO-8859-2'   => 'ISO-8895-2 ('.rcube_label('easterneuropean').')',
+            'ISO-8859-4'   => 'ISO-8895-4 ('.rcube_label('baltic').')',
+            'ISO-8859-5'   => 'ISO-8859-5 ('.rcube_label('cyrillic').')',
+            'ISO-8859-6'   => 'ISO-8859-6 ('.rcube_label('arabic').')',
+            'ISO-8859-7'   => 'ISO-8859-7 ('.rcube_label('greek').')',
+            'ISO-8859-8'   => 'ISO-8859-8 ('.rcube_label('hebrew').')',
+            'ISO-8859-9'   => 'ISO-8859-9 ('.rcube_label('turkish').')',
+            'ISO-8859-10'   => 'ISO-8859-10 ('.rcube_label('nordic').')',
+            'ISO-8859-11'   => 'ISO-8859-11 ('.rcube_label('thai').')',
+            'ISO-8859-13'   => 'ISO-8859-13 ('.rcube_label('baltic').')',
+            'ISO-8859-14'   => 'ISO-8859-14 ('.rcube_label('celtic').')',
+            'ISO-8859-15'   => 'ISO-8859-15 ('.rcube_label('westerneuropean').')',
+            'ISO-8859-16'   => 'ISO-8859-16 ('.rcube_label('southeasterneuropean').')',
+            'WINDOWS-1250' => 'Windows-1250 ('.rcube_label('easterneuropean').')',
+            'WINDOWS-1251' => 'Windows-1251 ('.rcube_label('cyrillic').')',
+            'WINDOWS-1252' => 'Windows-1252 ('.rcube_label('westerneuropean').')',
+            'WINDOWS-1253' => 'Windows-1253 ('.rcube_label('greek').')',
+            'WINDOWS-1254' => 'Windows-1254 ('.rcube_label('turkish').')',
+            'WINDOWS-1255' => 'Windows-1255 ('.rcube_label('hebrew').')',
+            'WINDOWS-1256' => 'Windows-1256 ('.rcube_label('arabic').')',
+            'WINDOWS-1257' => 'Windows-1257 ('.rcube_label('baltic').')',
+            'WINDOWS-1258' => 'Windows-1258 ('.rcube_label('vietnamese').')',
+            'ISO-2022-JP'  => 'ISO-2022-JP ('.rcube_label('japanese').')',
+            'ISO-2022-KR'  => 'ISO-2022-KR ('.rcube_label('korean').')',
+            'ISO-2022-CN'  => 'ISO-2022-CN ('.rcube_label('chinese').')',
+            'EUC-JP'       => 'EUC-JP ('.rcube_label('japanese').')',
+            'EUC-KR'       => 'EUC-KR ('.rcube_label('korean').')',
+            'EUC-CN'       => 'EUC-CN ('.rcube_label('chinese').')',
+            'BIG5'         => 'BIG5 ('.rcube_label('chinese').')',
+            'GB2312'       => 'GB2312 ('.rcube_label('chinese').')',
+        );
 
-            $select = new html_select($field_attrib);
-            $select->add(array_values($charsets), array_keys($charsets));
+        if (!empty($_POST['_charset']))
+	    $set = $_POST['_charset'];
+	else if (!empty($attrib['selected']))
+	    $set = $attrib['selected'];
+	else
+	    $set = $this->get_charset();
 
-            $set = $_POST['_charset'] ? $_POST['_charset'] : $this->get_charset();
-            return $select->show($set);
+	$set = strtoupper($set);
+	if (!isset($charsets[$set]))
+	    $charsets[$set] = $set;
+
+        $select = new html_select($field_attrib);
+        $select->add(array_values($charsets), array_keys($charsets));
+
+        return $select->show($set);
     }
 
 }  // end class rcube_template
diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc
index 5e9c968..3462b8d 100644
--- a/program/localization/en_US/labels.inc
+++ b/program/localization/en_US/labels.inc
@@ -64,10 +64,6 @@
 $labels['filename'] = 'File name';
 $labels['filesize'] = 'File size';
 
-$labels['preferhtml'] = 'Display HTML';
-$labels['htmlmessage'] = 'HTML Message';
-$labels['prettydate'] = 'Pretty dates';
-
 $labels['addtoaddressbook'] = 'Add to address book';
 
 // weekdays short
@@ -265,6 +261,10 @@
 $labels['newitem']  = 'New item';
 $labels['edititem']  = 'Edit item';
 
+$labels['preferhtml'] = 'Display HTML';
+$labels['defaultcharset'] = 'Default Character Set';
+$labels['htmlmessage'] = 'HTML Message';
+$labels['prettydate'] = 'Pretty dates';
 $labels['setdefault']  = 'Set default';
 $labels['autodetect']  = 'Auto';
 $labels['language']  = 'Language';
@@ -350,4 +350,24 @@
 $labels['MB'] = 'MB';
 $labels['GB'] = 'GB';
 
+// character sets
+$labels['unicode'] = 'Unicode';
+$labels['english'] = 'English';
+$labels['westerneuropean'] = 'Western European';
+$labels['easterneuropean'] = 'Eastern European';
+$labels['southeasterneuropean'] = 'South-Eastern European';
+$labels['baltic'] = 'Baltic';
+$labels['cyrillic'] = 'Cyrillic';
+$labels['arabic'] = 'Arabic';
+$labels['greek'] = 'Greek';
+$labels['hebrew'] = 'Hebrew';
+$labels['turkish'] = 'Turkish';
+$labels['nordic'] = 'Nordic';
+$labels['thai'] = 'Thai';
+$labels['celtic'] = 'Celtic';
+$labels['vietnamese'] = 'Vietnamese';
+$labels['japanese'] = 'Japanese';
+$labels['korean'] = 'Korean';
+$labels['chinese'] = 'Chinese';
+																												
 ?>
diff --git a/program/localization/pl_PL/labels.inc b/program/localization/pl_PL/labels.inc
index c00d73c..3ceb0ac 100644
--- a/program/localization/pl_PL/labels.inc
+++ b/program/localization/pl_PL/labels.inc
@@ -218,6 +218,7 @@
 $labels['timezone'] = 'Strefa czasowa';
 $labels['pagesize'] = 'Liczba wierszy na stronie';
 $labels['signature'] = 'Podpis';
+$labels['defaultcharset'] = 'Domyślny zestaw znaków';
 $labels['dstactive'] = 'Czas letni';
 $labels['htmleditor'] = 'Twórz wiadomości HTML';
 $labels['htmlsignature'] = 'Podpis w HTML';
@@ -296,5 +297,23 @@
 $labels['belowquote'] = 'poniżej cytowanej treści';
 $labels['abovequote'] = 'ponad cytowaną treścią';
 
+$labels['unicode'] = 'uniwersalny';
+$labels['english'] = 'angielski';
+$labels['westerneuropean'] = 'zachodnioeuropejski';
+$labels['easterneuropean'] = 'wschodnioeuropejski';
+$labels['southeasterneuropean'] = 'południowo-wschodnioeuropejski';
+$labels['baltic'] = 'bałtycki';
+$labels['cyrillic'] = 'cyrylica';
+$labels['arabic'] = 'arabski';
+$labels['greek'] = 'grecki';
+$labels['hebrew'] = 'hebrajski';
+$labels['turkish'] = 'turecki';
+$labels['nordic'] = 'nordycki';
+$labels['thai'] = 'tajski';
+$labels['celtic'] = 'celtycki';
+$labels['vietnamese'] = 'wietnamski';
+$labels['japanese'] = 'japoński';
+$labels['korean'] = 'koreański';
+$labels['chinese'] = 'chiński';
 
 ?>
diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc
index 91e1e3f..44225c7 100644
--- a/program/steps/settings/func.inc
+++ b/program/steps/settings/func.inc
@@ -368,6 +368,17 @@
       );
     }
 
+    if (!isset($no_override['default_charset'])) {
+      $field_id = 'rcmfd_default_charset';
+
+      $blocks['main']['options']['default_charset'] = array(
+        'title' => html::label($field_id, Q(rcube_label('defaultcharset'))),
+        'content' => $RCMAIL->output->charset_selector(array(
+	  'name' => '_default_charset', 'selected' => $config['default_charset']
+	  ))
+      );
+    }
+
     if (!isset($no_override['show_images'])) {
       $field_id = 'rcmfd_show_images';
       $input_show_images = new html_select(array('name' => '_show_images', 'id' => $field_id));
diff --git a/program/steps/settings/save_prefs.inc b/program/steps/settings/save_prefs.inc
index 8f0a0e7..eeb6403 100644
--- a/program/steps/settings/save_prefs.inc
+++ b/program/steps/settings/save_prefs.inc
@@ -54,7 +54,9 @@
       'inline_images'   => isset($_POST['_inline_images']) ? TRUE : FALSE,
       'show_images'     => isset($_POST['_show_images']) ? intval($_POST['_show_images']) : 0,
       'display_next'    => isset($_POST['_display_next']) ? TRUE : FALSE,
+      'default_charset' => get_input_value('_default_charset', RCUBE_INPUT_POST),
     );
+
 
   break;
   case 'compose':
@@ -91,7 +93,6 @@
 
   break;
 }
-
 
 $data = rcmail::get_instance()->plugins->exec_hook('save_preferences',
   array('prefs' => $a_user_prefs, 'section' => $CURR_SECTION));

--
Gitblit v1.9.1