From: Jérémy Bobbio Date: Sat, 18 Jun 2011 15:01:29 +0000 (+0200) Subject: Imported Upstream version 0.1.1 X-Git-Url: https://git.donarmstrong.com/?p=roundcube.git;a=commitdiff_plain;h=c55c762910acc6b77b1aab2b6e28d5bbf522b920 Imported Upstream version 0.1.1 --- diff --git a/CHANGELOG b/CHANGELOG index dbf986d..8093ccc 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,24 @@ CHANGELOG RoundCube Webmail --------------------------- +- Clear selection when selecting single item (#1484942) +- Remove hard-coded image size in skin templates (#1484893) +- Database schema improvements (dropped unnecessary indexes) +- Fixed creating a new folder with a comma in its name (#1484681) +- Fixed sorting of messages when default mailbox is empty (#1484317) +- Improve message previewpane - less loading (#1484316) +- Fixed login form autoompletion (#1484839) +- Fixed virtuser_query option for mdb2 backend (#1484874) +- Fixed attachment resoting from Drafts when message body was empty (#1484506) +- Fixed usage of ob_gzhandler (#1484851) +- Fixed message part window in IE6 (#1484610) +- Fixed decoding of mime-encoded strings (#1484191) +- Fixed some iconv/mb_string problems (#1484598) +- Correctly quote mailbox name when using in URL (#1484313) +- Fixed "headers already sent" errors (#1484860) + +RELEASE 0.1-STABLE + - Added interactive installer script - Fix folder adding/renaming inspired by #1484800 - Localize folder name in page title (#1484785) diff --git a/INSTALL b/INSTALL index ada9daa..2b8fb2e 100644 --- a/INSTALL +++ b/INSTALL @@ -41,7 +41,7 @@ INSTALLATION - /temp - /logs 3. Create a new database and a database user for RoundCube (see DATABASE SETUP) -4. Point your browser to http:///url-to-roundcube/installer/ +4. Point your browser to http://url-to-roundcube/installer/ 5. Follow the instructions of the install script (or see MANUAL CONFINGURATION) 6. After creating and testing the configuration, remove the installer directory 7. Done! diff --git a/README b/README index e06318c..7aae054 100644 --- a/README +++ b/README @@ -44,24 +44,6 @@ already have a corresponding entry in the user's table (username and hostname) will be allowed. -Code Layout: ------------- -Basic sequence (index.php): - - index.php -> rcmail_load_gui -> new rcmail_template -> rcmail_template::send - - authentication details in this sequence - -Tasks - - index.php limits tasks to set list - - can see task in roundcube link when you mouse over it - - task templates stored in skins/default/templates - - templates "roundcube:" tokens that get replaced in rcmail_template class - -program/include/rcube_shared.inc - - defines rcube_html_page, class that lays out a roundcube web page - - defines form control classes - - provides common functions - - Contact: -------- For any bug reports or feature requests please refer to the tracking system diff --git a/SQL/mysql.initial.sql b/SQL/mysql.initial.sql index 926a83e..ae195e4 100644 --- a/SQL/mysql.initial.sql +++ b/SQL/mysql.initial.sql @@ -1,5 +1,5 @@ -- RoundCube Webmail initial database structure --- Version 0.1-rc1 +-- Version 0.1 -- -- -------------------------------------------------------- @@ -16,9 +16,7 @@ CREATE TABLE `cache` ( `created` datetime NOT NULL default '0000-00-00 00:00:00', `data` longtext NOT NULL, PRIMARY KEY (`cache_id`), - KEY `user_id` (`user_id`), - KEY `cache_key` (`cache_key`), - KEY `session_id` (`session_id`) + INDEX `user_cache_index` (`user_id`,`cache_key`) ); -- -------------------------------------------------------- @@ -118,10 +116,7 @@ CREATE TABLE `messages` ( `size` int(11) unsigned NOT NULL default '0', `headers` text NOT NULL, `structure` text, - PRIMARY KEY (`message_id`), - KEY `user_id` (`user_id`), - KEY `idx` (`idx`), - KEY `uid` (`uid`), + PRIMARY KEY (`message_id`), UNIQUE `uniqueness` (`user_id`, `cache_key`, `uid`) ); diff --git a/SQL/mysql.update-0.1a.sql b/SQL/mysql.update-0.1a.sql deleted file mode 100644 index 60f22b3..0000000 --- a/SQL/mysql.update-0.1a.sql +++ /dev/null @@ -1,51 +0,0 @@ --- RoundCube Webmail update script for MySQL databases --- Updates from version 0.1-20051007 - - -ALTER TABLE `session` ADD `ip` VARCHAR(40) NOT NULL AFTER changed; -ALTER TABLE `users` ADD `alias` VARCHAR(128) NOT NULL AFTER mail_host; - - - --- RoundCube Webmail update script for MySQL databases --- Updates from version 0.1-20051021 - -ALTER TABLE `session` CHANGE `sess_id` `sess_id` VARCHAR(40) NOT NULL; - -ALTER TABLE `contacts` CHANGE `del` `del` TINYINT(1) NOT NULL; -ALTER TABLE `contacts` ADD `changed` DATETIME NOT NULL AFTER `user_id`; - -UPDATE `contacts` SET `del`=0 WHERE `del`=1; -UPDATE `contacts` SET `del`=1 WHERE `del`=2; - -ALTER TABLE `identities` CHANGE `default` `standard` TINYINT(1) NOT NULL; -ALTER TABLE `identities` CHANGE `del` `del` TINYINT(1) NOT NULL; - -UPDATE `identities` SET `del`=0 WHERE `del`=1; -UPDATE `identities` SET `del`=1 WHERE `del`=2; -UPDATE `identities` SET `standard`=0 WHERE `standard`=1; -UPDATE `identities` SET `standard`=1 WHERE `standard`=2; - -CREATE TABLE `messages` ( - `message_id` int(11) unsigned NOT NULL auto_increment, - `user_id` int(11) unsigned NOT NULL default '0', - `del` tinyint(1) NOT NULL default '0', - `cache_key` varchar(128) NOT NULL default '', - `created` datetime NOT NULL default '0000-00-00 00:00:00', - `idx` int(11) unsigned NOT NULL default '0', - `uid` int(11) unsigned NOT NULL default '0', - `subject` varchar(255) NOT NULL default '', - `from` varchar(255) NOT NULL default '', - `to` varchar(255) NOT NULL default '', - `cc` varchar(255) NOT NULL default '', - `date` datetime NOT NULL default '0000-00-00 00:00:00', - `size` int(11) unsigned NOT NULL default '0', - `headers` text NOT NULL, - `structure` text, - PRIMARY KEY (`message_id`), - KEY `user_id` (`user_id`), - KEY `idx` (`idx`), - KEY `uid` (`uid`), - UNIQUE `uniqueness` (`cache_key`, `uid`) -) TYPE=MyISAM; - diff --git a/SQL/mysql.update.sql b/SQL/mysql.update.sql index e904be2..11e744c 100644 --- a/SQL/mysql.update.sql +++ b/SQL/mysql.update.sql @@ -1,21 +1,17 @@ -- RoundCube Webmail update script for MySQL databases --- Updates from version 0.1-beta and 0.1-beta2 +-- Updates from version 0.1-stable to 0.1.1 TRUNCATE TABLE `messages`; ALTER TABLE `messages` - DROP `body`, - DROP INDEX `cache_key`, - ADD `structure` TEXT, - ADD UNIQUE `uniqueness` (`user_id`, `cache_key`, `uid`); + DROP INDEX `idx`, + DROP INDEX `uid` -ALTER TABLE `identities` - ADD `html_signature` tinyint(1) default 0 NOT NULL; +ALTER TABLE `cache` + DROP INDEX `cache_key`, + DROP INDEX `session_id`, + ADD INDEX `user_cache_index` (`user_id`,`cache_key`); -ALTER TABLE `session` CHANGE `ip` `ip` VARCHAR(40) - --- Uncomment these lines if you're using MySQL 4.1 or higher --- ALTER TABLE `users` --- DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, --- CHANGE `username` `username` VARCHAR( 128 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, --- CHANGE `alias` `alias` VARCHAR( 128 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL; +ALTER TABLE `users` + ADD INDEX `username_index` (`username`), + ADD INDEX `alias_index` (`alias`); diff --git a/SQL/mysql5.initial.sql b/SQL/mysql5.initial.sql index 1a6ef19..881344b 100644 --- a/SQL/mysql5.initial.sql +++ b/SQL/mysql5.initial.sql @@ -1,5 +1,5 @@ -- RoundCube Webmail initial database structure --- Version 0.1-rc1 +-- Version 0.1 -- -------------------------------------------------------- @@ -15,7 +15,7 @@ CREATE TABLE `session` ( `ip` varchar(40) NOT NULL, `vars` text NOT NULL, PRIMARY KEY(`sess_id`) -) TYPE=MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci; +) TYPE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci; -- Table structure for table `users` @@ -29,8 +29,10 @@ CREATE TABLE `users` ( `last_login` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `language` varchar(5) NOT NULL DEFAULT 'en', `preferences` text, - PRIMARY KEY(`user_id`) -) TYPE=MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci; + PRIMARY KEY(`user_id`), + INDEX `username_index` (`username`), + INDEX `alias_index` (`alias`) +) TYPE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci; -- Table structure for table `messages` @@ -52,14 +54,12 @@ CREATE TABLE `messages` ( `headers` text NOT NULL, `structure` text, PRIMARY KEY(`message_id`), - INDEX `idx`(`idx`), - INDEX `uid`(`uid`), UNIQUE `uniqueness` (`user_id`, `cache_key`, `uid`), CONSTRAINT `user_id_fk_messages` FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE -) TYPE=MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci; +) TYPE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci; -- Table structure for table `cache` @@ -72,13 +72,12 @@ CREATE TABLE `cache` ( `data` longtext NOT NULL, `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY(`cache_id`), - INDEX `cache_key`(`cache_key`), - INDEX `session_id`(`session_id`), + INDEX `user_cache_index` (`user_id`,`cache_key`), CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE -) TYPE=MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci; +) TYPE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci; -- Table structure for table `contacts` @@ -98,7 +97,7 @@ CREATE TABLE `contacts` ( REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE -) TYPE=MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci; +) TYPE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci; -- Table structure for table `identities` @@ -120,7 +119,7 @@ CREATE TABLE `identities` ( REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE -) TYPE=MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci; +) TYPE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci; SET FOREIGN_KEY_CHECKS=1; diff --git a/SQL/postgres.initial.sql b/SQL/postgres.initial.sql index 356a579..ff239cb 100644 --- a/SQL/postgres.initial.sql +++ b/SQL/postgres.initial.sql @@ -26,7 +26,6 @@ CREATE TABLE users ( ); - -- -- Table "session" -- Name: session; Type: TABLE; Schema: public; Owner: postgres @@ -61,7 +60,7 @@ CREATE SEQUENCE identity_ids CREATE TABLE identities ( identity_id integer DEFAULT nextval('identity_ids'::text) PRIMARY KEY, - user_id integer NOT NULL REFERENCES users (user_id), + user_id integer NOT NULL REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, del integer DEFAULT 0 NOT NULL, standard integer DEFAULT 0 NOT NULL, name character varying(128) NOT NULL, @@ -73,6 +72,7 @@ CREATE TABLE identities ( html_signature integer DEFAULT 0 NOT NULL ); +CREATE INDEX identities_user_id_idx ON identities (user_id); -- @@ -94,7 +94,7 @@ CREATE SEQUENCE contact_ids CREATE TABLE contacts ( contact_id integer DEFAULT nextval('contact_ids'::text) PRIMARY KEY, - user_id integer NOT NULL REFERENCES users (user_id), + user_id integer NOT NULL REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, changed timestamp with time zone DEFAULT now() NOT NULL, del integer DEFAULT 0 NOT NULL, name character varying(128) DEFAULT ''::character varying NOT NULL, @@ -104,7 +104,7 @@ CREATE TABLE contacts ( vcard text ); - +CREATE INDEX contacts_user_id_idx ON contacts (user_id); -- -- Sequence "cache_ids" @@ -124,14 +124,14 @@ CREATE SEQUENCE cache_ids CREATE TABLE "cache" ( cache_id integer DEFAULT nextval('cache_ids'::text) PRIMARY KEY, - user_id integer NOT NULL REFERENCES users (user_id), + user_id integer NOT NULL REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, session_id character varying(40) REFERENCES "session" (sess_id), cache_key character varying(128) DEFAULT ''::character varying NOT NULL, created timestamp with time zone DEFAULT now() NOT NULL, data text NOT NULL ); - +CREATE INDEX cache_user_id_idx ON "cache" (user_id, cache_key); -- -- Sequence "message_ids" @@ -151,7 +151,7 @@ CREATE SEQUENCE message_ids CREATE TABLE "messages" ( message_id integer DEFAULT nextval('message_ids'::text) PRIMARY KEY, - user_id integer NOT NULL REFERENCES users (user_id), + user_id integer NOT NULL REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, del integer DEFAULT 0 NOT NULL, cache_key character varying(128) DEFAULT ''::character varying NOT NULL, created timestamp with time zone DEFAULT now() NOT NULL, diff --git a/SQL/postgres.update.sql b/SQL/postgres.update.sql index 0d63cf9..ff1ce12 100644 --- a/SQL/postgres.update.sql +++ b/SQL/postgres.update.sql @@ -1,12 +1,16 @@ --- RoundCube Webmail update script for Postres databases --- Updates from version 0.1-beta and older +-- RoundCube Webmail update script for Postgres databases +-- Updates from version 0.1-stable to 0.1.1 -ALTER TABLE "messages" DROP body; -ALTER TABLE "messages" ADD structure TEXT; -ALTER TABLE "messages" ADD UNIQUE (user_id, cache_key, uid); - -ALTER TABLE "identities" ADD html_signature INTEGER; -ALTER TABLE "identities" ALTER html_signature SET DEFAULT 0; -UPDATE identities SET html_signature = 0; -ALTER TABLE "identities" ALTER html_signature SET NOT NULL; +CREATE INDEX cache_user_id_idx ON cache (user_id, cache_key); +CREATE INDEX contacts_user_id_idx ON contacts (user_id); +CREATE INDEX identities_user_id_idx ON identities (user_id); +-- added ON DELETE/UPDATE actions +ALTER TABLE messages DROP CONSTRAINT messages_user_id_fkey; +ALTER TABLE messages ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE identities DROP CONSTRAINT identities_user_id_fkey; +ALTER TABLE identities ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE contacts DROP CONSTRAINT contacts_user_id_fkey; +ALTER TABLE contacts ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE cache DROP CONSTRAINT cache_user_id_fkey; +ALTER TABLE cache ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/SQL/sqlite.initial.sql b/SQL/sqlite.initial.sql index 4ae7529..041696b 100644 --- a/SQL/sqlite.initial.sql +++ b/SQL/sqlite.initial.sql @@ -1,5 +1,5 @@ -- RoundCube Webmail initial database structure --- Version 0.1-rc1 +-- Version 0.1 -- -- -------------------------------------------------------- @@ -17,9 +17,7 @@ CREATE TABLE cache ( data longtext NOT NULL ); -CREATE INDEX ix_cache_user_id ON cache(user_id); -CREATE INDEX ix_cache_cache_key ON cache(cache_key); -CREATE INDEX ix_cache_session_id ON cache(session_id); +CREATE INDEX ix_cache_user_cache_key ON cache(user_id, cache_key); -- -------------------------------------------------------- @@ -82,7 +80,6 @@ CREATE TABLE users ( preferences text NOT NULL default '' ); - -- -------------------------------------------------------- -- @@ -115,14 +112,11 @@ CREATE TABLE messages ( subject varchar(255) NOT NULL default '', "from" varchar(255) NOT NULL default '', "to" varchar(255) NOT NULL default '', - cc varchar(255) NOT NULL default '', - date datetime NOT NULL default '0000-00-00 00:00:00', + "cc" varchar(255) NOT NULL default '', + "date" datetime NOT NULL default '0000-00-00 00:00:00', size integer NOT NULL default '0', headers text NOT NULL, structure text ); -CREATE INDEX ix_messages_user_id ON messages(user_id); -CREATE INDEX ix_messages_cache_key ON messages(cache_key); -CREATE INDEX ix_messages_idx ON messages(idx); -CREATE INDEX ix_messages_uid ON messages(uid); +CREATE INDEX ix_messages_user_cache_uid ON messages(user_id,cache_key,uid); diff --git a/SQL/sqlite.update.sql b/SQL/sqlite.update.sql index e725729..f609a36 100644 --- a/SQL/sqlite.update.sql +++ b/SQL/sqlite.update.sql @@ -1,5 +1,5 @@ -- RoundCube Webmail update script for SQLite databases --- Updates from version 0.1-beta2 and older +-- Updates from version 0.1-stable to 0.1.1 DROP TABLE messages; @@ -14,14 +14,11 @@ CREATE TABLE messages ( subject varchar(255) NOT NULL default '', "from" varchar(255) NOT NULL default '', "to" varchar(255) NOT NULL default '', - cc varchar(255) NOT NULL default '', - date datetime NOT NULL default '0000-00-00 00:00:00', + "cc" varchar(255) NOT NULL default '', + "date" datetime NOT NULL default '0000-00-00 00:00:00', size integer NOT NULL default '0', headers text NOT NULL, structure text ); -CREATE INDEX ix_messages_user_id ON messages(user_id); -CREATE INDEX ix_messages_cache_key ON messages(cache_key); -CREATE INDEX ix_messages_idx ON messages(idx); -CREATE INDEX ix_messages_uid ON messages(uid); +CREATE INDEX ix_messages_user_cache_uid ON messages(user_id,cache_key,uid); diff --git a/UPGRADING b/UPGRADING index 9d87a1e..9b5ac45 100644 --- a/UPGRADING +++ b/UPGRADING @@ -4,12 +4,22 @@ UPDATE instructions Follow these instructions if upgrading from a previous version of RoundCube Webmail. +from version 0.1-stable +---------------------------------------- +* replace index.php +* replace all files in folder /bin/ +* replace all files in folder /program/ +* replace all files in folder /skins/default/ +* run all commands in SQL/[yourdbtype].update.sql + + from version 0.1-rc2 ---------------------------------------- * replace index.php * replace all files in folder /bin/ * replace all files in folder /program/ * replace all files in folder /skins/default/ +* run all commands in SQL/[yourdbtype].update.sql from version 0.1-rc1 @@ -18,6 +28,7 @@ from version 0.1-rc1 * replace all files in folder /bin/ * replace all files in folder /program/ * replace all files in folder /skins/default/ +* run all commands in SQL/[yourdbtype].update.sql * If you have LDAP servers configured you should re-configure the config entries using the template given in /config/main.inc.php.dist @@ -28,8 +39,7 @@ from version 0.1-beta2 * replace all files in folder /bin/ * replace all files in folder /program/ * replace all files in folder /skins/default/ -* run all commands in SQL/[yourdbtype].update.sql or - re-initalize the database with [yourdbtype].initial.sql +* re-initalize the database with [yourdbtype].initial.sql * add these lines to /config/main.inc.php $rcmail_config['draft_autosave'] = 300; $rcmail_config['date_today'] = 'H:i'; @@ -43,8 +53,7 @@ form version 0.1-beta * replace all files in folder /bin/ * replace all files in folder /program/ * replace all files in folder /skins/default/ -* run all commands in SQL/[yourdbtype].update.sql or - re-initalize the database with [yourdbtype].initial.sql +* re-initalize the database with [yourdbtype].initial.sql * add this line to /config/db.inc.php $rcmail_config['db_persistent'] = false; * add these lines to /config/main.inc.php diff --git a/config/db.inc.php.dist b/config/db.inc.php.dist index 442ef6e..151439a 100644 --- a/config/db.inc.php.dist +++ b/config/db.inc.php.dist @@ -15,7 +15,7 @@ $rcmail_config = array(); // PEAR database DSN for read/write operations -// format is db_provider://user:password@host/databse +// format is db_provider://user:password@host/database // currently supported db_providers: mysql, mysqli, pgsql, sqlite, mssql $rcmail_config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail'; diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist index 8475c81..962fb4e 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -180,6 +180,9 @@ $rcmail_config['flag_for_deletion'] = TRUE; // 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 @@ -200,6 +203,9 @@ $rcmail_config['spellcheck_languages'] = NULL; // paths are relative to the RoundCube root folder $rcmail_config['generic_message_footer'] = ''; +// add a received header to outgoing mails containing the creators IP and hostname +$rcmail_config['http_received_header'] = false; + // this string is used as a delimiter for message headers when sending // leave empty for auto-detection $rcmail_config['mail_header_delimiter'] = NULL; @@ -238,7 +244,11 @@ $rcmail_config['dont_override'] = array(); $rcmail_config['javascript_config'] = array('read_when_deleted', 'flag_for_deletion'); // try to load host-specific configuration -$rcmail_config['include_host_config'] = FALSE; +$rcmail_config['include_host_config'] = false; + +// THIS OPTION WILL ALLOW THE INSTALLER TO RUN AND CAN EXPOSE SENSITIVE CONFIG DATA. +// ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING! +$rcmail_config['enable_installer'] = false; /***** these settings can be overwritten by user's preferences *****/ diff --git a/index.php b/index.php index b83ef45..02a6201 100644 --- a/index.php +++ b/index.php @@ -2,9 +2,9 @@ /* +-----------------------------------------------------------------------+ | RoundCube Webmail IMAP Client | - | Version 0.1-20080302 | + | Version 0.1.1 | | | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | Redistribution and use in source and binary forms, with or without | @@ -36,12 +36,12 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: index.php 1162 2008-03-02 13:20:21Z thomasb $ + $Id: index.php 1255 2008-04-05 12:49:21Z thomasb $ */ // application constants -define('RCMAIL_VERSION', '0.1-trunk'); +define('RCMAIL_VERSION', '0.1.1'); define('RCMAIL_CHARSET', 'UTF-8'); define('JS_OBJECT_NAME', 'rcmail'); @@ -103,8 +103,12 @@ if (empty($_task) || !in_array($_task, $MAIN_TASKS)) if ($_action != 'get' && $_action != 'viewsource') { // use gzip compression if supported - if (function_exists('ob_gzhandler') && !ini_get('zlib.output_compression')) + if (function_exists('ob_gzhandler') + && !ini_get('zlib.output_compression') + && ini_get('output_handler') != 'ob_gzhandler') + { ob_start('ob_gzhandler'); + } else ob_start(); } @@ -156,7 +160,7 @@ if ($_action=='login' && $_task=='mail') $OUTPUT->show_message("cookiesdisabled", 'warning'); } else if ($_SESSION['temp'] && !empty($_POST['_user']) && isset($_POST['_pass']) && - rcmail_login(get_input_value('_user', RCUBE_INPUT_POST), + rcmail_login(trim(get_input_value('_user', RCUBE_INPUT_POST), ' '), get_input_value('_pass', RCUBE_INPUT_POST, true, 'ISO-8859-1'), $host)) { // create new session ID @@ -241,7 +245,7 @@ if (!empty($_action)) if (empty($USER->ID)) { // check if installer is still active - if (is_file('./installer/index.php')) + if ($CONFIG['enable_installer'] && is_readable('./installer/index.php')) $OUTPUT->add_footer('

Installer script is still accessible

diff --git a/installer/check.php b/installer/check.php index 8352364..e671c06 100644 --- a/installer/check.php +++ b/installer/check.php @@ -1,7 +1,7 @@
'pcre', 'Session' => 'session', 'Sockets' => 'sockets'); +$required_php_exts = array('PCRE' => 'pcre', 'Session' => 'session'); $optional_php_exts = array('FileInfo' => 'fileinfo', 'Libiconv' => 'iconv', 'Multibyte' => 'mbstring', 'OpenSSL' => 'openssl', 'Mcrypt' => 'mcrypt', 'GD' => 'gd'); @@ -37,13 +37,13 @@ echo 'These extensions are optional but recommended to get the best performance:

+

The next couple of extensions are optional but recommended to get the best performance:

$ext) { diff --git a/installer/config.php b/installer/config.php index 5b365a5..dc85faa 100644 --- a/installer/config.php +++ b/installer/config.php @@ -20,10 +20,14 @@ $RCI->config_props = array( 'htmleditor' => 1, ); +// allow the current user to get to the next step +$_SESSION['allowinstaller'] = true; + if (!empty($_POST['submit'])) { echo '

Copy the following configurations and save them in two files (names above the text box)'; - echo ' within the config/ directory of your RoundCube installation.

'; + echo ' within the config/ directory of your RoundCube installation.
'; + echo ' Make sure that there are no characters outside the <?php ?> brackets when saving the files.

'; $textbox = new textarea(array('rows' => 16, 'cols' => 60, 'class' => "configfile")); diff --git a/installer/index.php b/installer/index.php index 264cefc..69e33f8 100644 --- a/installer/index.php +++ b/installer/index.php @@ -22,12 +22,11 @@
-

RoundCube Webmail Installer

- load_config(); + + // exit if installation is complete + if ($RCI->configured && !$RCI->getprop('enable_installer') && !$_SESSION['allowinstaller']) { + header("HTTP/1.0 404 Not Found"); + echo '

The installer is disabled!

'; + echo '

To enable it again, set $rcmail_config[\'enable_installer\'] = true; in config/main.inc.php

'; + echo '
'; + exit; + } ?> +

RoundCube Webmail Installer

+
    step]) { diff --git a/installer/rcube_install.php b/installer/rcube_install.php index 8caa79d..12cd5c1 100644 --- a/installer/rcube_install.php +++ b/installer/rcube_install.php @@ -171,7 +171,7 @@ class rcube_install $out); } - return $out; + return trim($out); } @@ -305,6 +305,8 @@ class rcube_install if (eregi(';$', trim($line))) { $DB->query($buff); $buff = ''; + if ($this->get_error()) + break; } } } diff --git a/installer/test.php b/installer/test.php index 7e99039..5be343a 100644 --- a/installer/test.php +++ b/installer/test.php @@ -31,11 +31,38 @@ else if (!$read_db) { ?> +

    Check if directories are writable

    +

    RoundCube may need to write/save files into these directories

    +configured) { + $pass = false; + foreach (array($RCI->config['temp_dir'],$RCI->config['log_dir']) as $dir) { + $dirpath = $dir{0} == '/' ? $dir : $docroot . '/' . $dir; + if (is_writable(realpath($dirpath))) { + $RCI->pass($dir); + $pass = true; + } + else { + $RCI->fail($dir, 'not writeable for the webserver'); + } + echo '
    '; + } + + if (!$pass) + echo '

    Use chmod or chown to grant write privileges to the webserver

    '; +} +else { + $RCI->fail('Config', 'Could not read config files'); +} + +?> +

    Check configured database settings

    config)) { +if ($RCI->configured) { if (!empty($RCI->config['db_backend']) && !empty($RCI->config['db_dsnw'])) { echo 'Backend: '; @@ -53,7 +80,7 @@ if (!empty($RCI->config)) { } else { $RCI->fail('DSN (write)', $db_error_msg); - echo '

    Make sure that the configured database extists and that the user as write privileges
    '; + echo '

    Make sure that the configured database exists and that the user has write privileges
    '; echo 'DSN: ' . $RCI->config['db_dsnw'] . '

    '; if ($RCI->config['db_backend'] == 'mdb2') echo '

    There are known problems with MDB2 running on PHP 4. Try setting db_backend to \'db\' instead

    '; @@ -93,12 +120,12 @@ if ($db_working) { // more database tests if ($db_working) { // write test - $db_write = $DB->query("INSERT INTO {$RCI->config['db_table_cache']} (session_id, cache_key, data, user_id) VALUES (?, ?, ?, 0)", '1234567890abcdef', 'test', 'test'); - $insert_id = $DB->insert_id($RCI->config['db_sequence_cache']); - - if ($db_write && $insert_id) { + $insert_id = md5(uniqid()); + $db_write = $DB->query("INSERT INTO {$RCI->config['db_table_session']} (sess_id, created, ip, vars) VALUES (?, ".$DB->now().", '127.0.0.1', 'foo')", $insert_id); + + if ($db_write) { $RCI->pass('DB Write'); - $DB->query("DELETE FROM {$RCI->config['db_table_cache']} WHERE cache_id=?", $insert_id); + $DB->query("DELETE FROM {$RCI->config['db_table_session']} WHERE sess_id=?", $insert_id); } else { $RCI->fail('DB Write', $RCI->get_error()); @@ -137,11 +164,11 @@ if ($RCI->getprop('smtp_server')) { $pass = $RCI->getprop('smtp_pass', '(none)'); if ($user == '%u') { - $user_field = new textfield(array('name' => '_user')); - $user = $user_field->show($_POST['_user']); + $user_field = new textfield(array('name' => '_smtp_user')); + $user = $user_field->show($_POST['_smtp_user']); } if ($pass == '%p') { - $pass_field = new passwordfield(array('name' => '_pass')); + $pass_field = new passwordfield(array('name' => '_smtp_pass')); $pass = $pass_field->show(); } @@ -168,8 +195,8 @@ if (isset($_POST['sendmail']) && !empty($_POST['_from']) && !empty($_POST['_to'] preg_match('/^' . $RCI->email_pattern . '$/i', trim($_POST['_to']))) { $headers = array( - 'From' => trim($_POST['_from']), - 'To' => trim($_POST['_to']), + 'From' => trim($_POST['_from']), + 'To' => trim($_POST['_to']), 'Subject' => 'Test message from RoundCube', ); @@ -180,11 +207,13 @@ if (isset($_POST['sendmail']) && !empty($_POST['_from']) && !empty($_POST['_to'] if ($RCI->getprop('smtp_server')) { $CONFIG = $RCI->config; - if (!empty($_POST['_user'])) - $CONFIG['smtp_user'] = $_POST['_user']; - if (!empty($_POST['_pass'])) - $CONFIG['smtp_pass'] = $_POST['_pass']; - + if (!empty($_POST['_smtp_user'])) { + $CONFIG['smtp_user'] = $_POST['_smtp_user']; + } + if (!empty($_POST['_smtp_pass'])) { + $CONFIG['smtp_pass'] = $_POST['_smtp_pass']; + } + $mail_object = new rc_mail_mime(); $send_headers = $mail_object->headers($headers); diff --git a/installer/welcome.html b/installer/welcome.html index a0c88e5..200f680 100644 --- a/installer/welcome.html +++ b/installer/welcome.html @@ -10,7 +10,6 @@
    • PCRE (perl compatible regular expression)
    • Session support
    • -
    • Sockets enabled
    • Libiconv (recommended)
    • OpenSSL (recommended)
    • FileInfo (optional)
    • diff --git a/program/include/main.inc b/program/include/main.inc index 5af2379..446780c 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: main.inc 1145 2008-02-27 13:39:22Z thomasb $ + $Id: main.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -70,6 +70,7 @@ function rcmail_startup($task='mail') $DB = new $dbclass($CONFIG['db_dsnw'], $CONFIG['db_dsnr'], $CONFIG['db_persistent']); $DB->sqlite_initials = $INSTALL_PATH.'SQL/sqlite.initial.sql'; + $DB->set_debug((bool)$CONFIG['sql_debug']); $DB->db_connect('w'); // use database for storing session data @@ -285,6 +286,9 @@ function rcmail_imap_init($connect=FALSE) function rcmail_set_imap_prop() { global $CONFIG, $IMAP; + + if (!empty($CONFIG['default_charset'])) + $IMAP->set_charset($CONFIG['default_charset']); // set root dir from config if (!empty($CONFIG['imap_root'])) @@ -951,22 +955,23 @@ function rcube_charset_convert($str, $from, $to=NULL) 'X-USER-DEFINED' => 'ISO-8859-15', 'ISO-8859-8-I' => 'ISO-8859-8', 'KS_C_5601-1987' => 'EUC-KR', - 'GB2312' => 'GB18030' ); // convert charset using iconv module if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7') { + $aliases['GB2312'] = 'GB18030'; return iconv(($aliases[$from] ? $aliases[$from] : $from), ($aliases[$to] ? $aliases[$to] : $to) . "//IGNORE", $str); } // convert charset using mbstring module if ($MBSTRING) { - $mb_map = $aliases + array('UTF-7' => 'UTF7-IMAP'); + $aliases['UTF-7'] = 'UTF7-IMAP'; + $aliases['WINDOWS-1257'] = 'ISO-8859-13'; // return if convert succeeded - if (($out = mb_convert_encoding($str, ($mb_map[$to] ? $mb_map[$to] : $to), ($mb_map[$from] ? $mb_map[$from] : $from))) != '') + if (($out = mb_convert_encoding($str, ($aliases[$to] ? $aliases[$to] : $to), ($aliases[$from] ? $aliases[$from] : $from))) != '') return $out; } @@ -1368,6 +1373,7 @@ function rcmail_mail_domain($host) /** * Replace all css definitions with #container [def] + * and remove css-inlined scripting * * @param string CSS source code * @param string Container ID to use as prefix @@ -1377,6 +1383,10 @@ function rcmail_mod_css_styles($source, $container_id, $base_url = '') { $a_css_values = array(); $last_pos = 0; + + // ignore the whole block if evil styles are detected + if (stristr($source, 'expression') || stristr($source, 'behavior')) + return ''; // cut out all contents between { and } while (($pos = strpos($source, '{', $last_pos)) && ($pos2 = strpos($source, '}', $pos))) @@ -1387,7 +1397,7 @@ function rcmail_mod_css_styles($source, $container_id, $base_url = '') $last_pos = $pos+2; } - // remove html commends and add #container to each tag selector. + // remove html comments and add #container to each tag selector. // also replace body definition because we also stripped off the tag $styles = preg_replace( array( @@ -1558,7 +1568,10 @@ function format_date($date, $format=NULL) function format_email_recipient($email, $name='') { if ($name && $name != $email) - return sprintf('%s <%s>', strpos($name, ",") ? '"'.$name.'"' : $name, $email); + { + // Special chars as defined by RFC 822 need to in quoted string (or escaped). + return sprintf('%s <%s>', preg_match('/[\(\)\<\>\\\.\[\]@,;:"]/', $name) ? '"'.addcslashes($name, '"').'"' : $name, $email); + } else return $email; } @@ -1783,10 +1796,6 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, $maxlength, $ } } - // add unread message count display - if ($unread_count = $IMAP->messagecount($folder['id'], 'RECENT', ($folder['id']==$mbox_name))) - $foldername .= sprintf(' (%d)', $unread_count); - // make folder name safe for ids and class names $folder_id = preg_replace('/[^A-Za-z0-9\-_]/', '', $folder['id']); $class_name = preg_replace('/[^a-z0-9\-_]/', '', $folder_class ? $folder_class : strtolower($folder['id'])); diff --git a/program/include/rcube_db.inc b/program/include/rcube_db.inc index 3878816..c84dd84 100644 --- a/program/include/rcube_db.inc +++ b/program/include/rcube_db.inc @@ -17,7 +17,7 @@ | Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: rcube_db.inc 1089 2008-02-15 13:20:07Z till $ + $Id: rcube_db.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -153,8 +153,18 @@ class rcube_db $this->db_handle = $this->dsn_connect($dsn); $this->db_connected = $this->db_handle ? TRUE : FALSE; } + + + /** + * Activate/deactivate debug mode + * (not implemented) + */ + function set_debug($dbg = true) + { - + } + + /** * Getter for error state * diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc index a41f231..51163e4 100644 --- a/program/include/rcube_imap.inc +++ b/program/include/rcube_imap.inc @@ -16,7 +16,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: rcube_imap.inc 1050 2008-02-12 14:06:26Z thomasb $ + $Id: rcube_imap.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -51,6 +51,7 @@ class rcube_imap var $sort_order = 'DESC'; var $delimiter = NULL; var $caching_enabled = FALSE; + var $default_charset = 'ISO-8859-1'; var $default_folders = array('INBOX'); var $default_folders_lc = array('inbox'); var $cache = array(); @@ -203,6 +204,20 @@ class rcube_imap } + /** + * Set default message charset + * + * This will be used for message decoding if a charset specification is not available + * + * @param string Charset string + * @access public + */ + function set_charset($cs) + { + $this->default_charset = $ch; + } + + /** * This list of folders will be listed above all other folders * @@ -1146,7 +1161,7 @@ class rcube_imap // normalize filename property if ($filename_mime = $struct->d_parameters['filename'] ? $struct->d_parameters['filename'] : $struct->ctype_parameters['name']) - $struct->filename = $this->decode_mime_string($filename_mime); + $struct->filename = rcube_imap::decode_mime_string($filename_mime, $this->default_charset); else if ($filename_encoded = $struct->d_parameters['filename*'] ? $struct->d_parameters['filename*'] : $struct->ctype_parameters['name*']) { // decode filename according to RFC 2231, Section 4 @@ -1154,7 +1169,7 @@ class rcube_imap $struct->filename = rcube_charset_convert(urldecode($filename_urlencoded), $filename_charset); } else if (!empty($struct->headers['content-description'])) - $struct->filename = $this->decode_mime_string($struct->headers['content-description']); + $struct->filename = rcube_imap::decode_mime_string($struct->headers['content-description'], $this->default_charset); return $struct; } @@ -1241,9 +1256,9 @@ class rcube_imap // convert charset (if text or message part) if ($o_part->ctype_primary=='text' || $o_part->ctype_primary=='message') { - // assume ISO-8859-1 if no charset specified + // assume default if no charset specified if (empty($o_part->charset)) - $o_part->charset = 'ISO-8859-1'; + $o_part->charset = $this->default_charset; $body = rcube_charset_convert($body, $o_part->charset); } @@ -1633,16 +1648,14 @@ class rcube_imap /** * Subscribe to a specific mailbox(es) * - * @param string Mailbox name(s) + * @param array Mailbox name(s) * @return boolean True on success */ - function subscribe($mbox_name) + function subscribe($a_mboxes) { - if (is_array($mbox_name)) - $a_mboxes = $mbox_name; - else if (is_string($mbox_name) && strlen($mbox_name)) - $a_mboxes = explode(',', $mbox_name); - + if (!is_array($a_mboxes)) + $a_mboxes = array($a_mboxes); + // let this common function do the main work return $this->_change_subscription($a_mboxes, 'subscribe'); } @@ -1651,15 +1664,13 @@ class rcube_imap /** * Unsubscribe mailboxes * - * @param string Mailbox name(s) + * @param array Mailbox name(s) * @return boolean True on success */ - function unsubscribe($mbox_name) + function unsubscribe($a_mboxes) { - if (is_array($mbox_name)) - $a_mboxes = $mbox_name; - else if (is_string($mbox_name) && strlen($mbox_name)) - $a_mboxes = explode(',', $mbox_name); + if (!is_array($a_mboxes)) + $a_mboxes = array($a_mboxes); // let this common function do the main work return $this->_change_subscription($a_mboxes, 'unsubscribe'); @@ -2213,6 +2224,9 @@ class rcube_imap */ function remove_message_cache($key, $index) { + if (!$this->caching_enabled) + return; + $this->db->query( "DELETE FROM ".get_table_name('messages')." WHERE user_id=? @@ -2228,6 +2242,9 @@ class rcube_imap */ function clear_message_cache($key, $start_index=1) { + if (!$this->caching_enabled) + return; + $this->db->query( "DELETE FROM ".get_table_name('messages')." WHERE user_id=? @@ -2257,6 +2274,8 @@ class rcube_imap { $a = $this->_parse_address_list($input, $decode); $out = array(); + // Special chars as defined by RFC 822 need to in quoted string (or escaped). + $special_chars = '[\(\)\<\>\\\.\[\]@,;:"]'; if (!is_array($a)) return $out; @@ -2270,7 +2289,7 @@ class rcube_imap $address = $val['address']; $name = preg_replace(array('/^[\'"]/', '/[\'"]$/'), '', trim($val['name'])); if ($name && $address && $name != $address) - $string = sprintf('%s <%s>', strpos($name, ',')!==FALSE ? '"'.$name.'"' : $name, $address); + $string = sprintf('%s <%s>', preg_match("/$special_chars/", $name) ? '"'.addcslashes($name, '"').'"' : $name, $address); else if ($address) $string = $address; else if ($name) @@ -2297,7 +2316,7 @@ class rcube_imap */ function decode_header($input, $remove_quotes=FALSE) { - $str = $this->decode_mime_string((string)$input); + $str = rcube_imap::decode_mime_string((string)$input, $this->default_charset); if ($str{0}=='"' && $remove_quotes) $str = str_replace('"', '', $str); @@ -2320,6 +2339,10 @@ class rcube_imap $pos = strpos($input, '=?'); if ($pos !== false) { + // rfc: all line breaks or other characters not found in the Base64 Alphabet must be ignored by decoding software + // delete all blanks between MIME-lines, differently we can receive unnecessary blanks and broken utf-8 symbols + $input = preg_replace("/\?=\s+=\?/", '?==?', $input); + $out = substr($input, 0, $pos); $end_cs_pos = strpos($input, "?", $pos+2); @@ -2414,7 +2437,7 @@ class rcube_imap return rcube_charset_convert($body, $ctype_param['charset']); // defaults to what is specified in the class header - return rcube_charset_convert($body, 'ISO-8859-1'); + return rcube_charset_convert($body, $this->default_charset); } diff --git a/program/include/rcube_ldap.inc b/program/include/rcube_ldap.inc index f1b2108..bdfcc31 100644 --- a/program/include/rcube_ldap.inc +++ b/program/include/rcube_ldap.inc @@ -14,7 +14,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: rcube_ldap.inc 1152 2008-02-28 20:01:57Z thomasb $ + $Id: rcube_ldap.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -119,20 +119,20 @@ class rcube_ldap */ function bind($dn, $pass) { - if (!$this->conn) + if (!$this->conn) { return false; + } - if (@ldap_bind($this->conn, $dn, $pass)) + if (ldap_bind($this->conn, $dn, $pass)) { return true; - else - { - raise_error(array( + } + + raise_error(array( 'code' => ldap_errno($this->conn), 'type' => 'ldap', 'message' => "Bind failed for dn=$dn: ".ldap_error($this->conn)), - true); - } - + true); + return false; } diff --git a/program/include/rcube_mdb2.inc b/program/include/rcube_mdb2.inc index 0b2feff..3f13a75 100644 --- a/program/include/rcube_mdb2.inc +++ b/program/include/rcube_mdb2.inc @@ -16,7 +16,7 @@ | Author: Lukas Kahwe Smith | +-----------------------------------------------------------------------+ - $Id: rcube_mdb2.inc 1084 2008-02-14 23:12:23Z till $ + $Id: rcube_mdb2.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -48,6 +48,7 @@ class rcube_mdb2 var $db_handle = 0; // Connection handle var $db_error = false; var $db_error_msg = ''; + var $debug_mode = false; var $a_query_results = array('dummy'); var $last_res_id = 0; @@ -94,8 +95,11 @@ class rcube_mdb2 function dsn_connect($dsn) { // Use persistent connections if available - $dbh = MDB2::connect($dsn, - array('persistent' => $this->db_pconn, + $dbh = MDB2::connect($dsn, array( + 'persistent' => $this->db_pconn, + 'emulate_prepared' => $this->debug_mode, + 'debug' => $this->debug_mode, + 'debug_handler' => 'mdb2_debug_handler', 'portability' => MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_EMPTY_TO_NULL)); if (MDB2::isError($dbh)) @@ -156,6 +160,21 @@ class rcube_mdb2 } + /** + * Activate/deactivate debug mode + * + * @param boolean True if SQL queries should be logged + */ + function set_debug($dbg = true) + { + $this->debug_mode = $dbg; + if ($this->db_connected) + { + $this->db_handle->setOption('debug', $dbg); + $this->db_handle->setOption('emulate_prepared', $dbg); + } + } + /** * Getter for error state @@ -413,6 +432,22 @@ class rcube_mdb2 return $this->db_handle->quoteIdentifier($str); } + /** + * Escapes a string + * + * @param string The string to be escaped + * @return string The escaped string + * @access public + * @since 0.1.1 + */ + function escapeSimple($str) + { + if (!$this->db_handle) + $this->db_connect('r'); + + return $this->db_handle->escape($str); + } + /** * Return SQL function for current time and date @@ -569,4 +604,17 @@ class rcube_mdb2 } // end class rcube_db + +/* this is our own debug handler for the MDB2 connection */ +function mdb2_debug_handler(&$db, $scope, $message, $context = array()) +{ + if ($scope != 'prepare') + { + $debug_output = $scope . '('.$db->db_index.'): '; + $debug_output .= $message . $db->getOption('log_line_break'); + write_log('sqllog', $debug_output); + } +} + + ?> diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc index adef24c..c889dc9 100644 --- a/program/include/rcube_shared.inc +++ b/program/include/rcube_shared.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: rcube_shared.inc 1078 2008-02-14 01:33:02Z till $ + $Id: rcube_shared.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -262,7 +262,10 @@ function send_modified_header($mdate, $etag=null) header("Etag: $etag"); if ($iscached) + { + ob_end_clean(); exit; + } } diff --git a/program/include/rcube_user.inc b/program/include/rcube_user.inc index 41b424f..e748758 100644 --- a/program/include/rcube_user.inc +++ b/program/include/rcube_user.inc @@ -361,7 +361,7 @@ class rcube_user // try to resolve user in virtusertable if (!empty($CONFIG['virtuser_file']) && !strpos($user, '@')) - $user_email = self::user2email($user); + $user_email = rcube_user::user2email($user); $DB->query( "INSERT INTO ".get_table_name('users')." @@ -468,7 +468,7 @@ class rcube_user $arr = preg_split('/\s+/', $data); if (count($arr) > 0) { - $email = trim($arr[0]); + $email = trim(str_replace('\\@', '@', $arr[0])); break; } } diff --git a/program/js/app.js b/program/js/app.js index 19dbc35..1ddb6da 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -13,7 +13,7 @@ | Requires: common.js, list.js | +-----------------------------------------------------------------------+ - $Id: app.js 1170 2008-03-03 09:06:53Z thomasb $ + $Id: app.js 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -132,7 +132,7 @@ function rcube_webmail() this.message_list.addEventListener('dblclick', function(o){ p.msglist_dbl_click(o); }); this.message_list.addEventListener('keypress', function(o){ p.msglist_keypress(o); }); this.message_list.addEventListener('select', function(o){ p.msglist_select(o); }); - this.message_list.addEventListener('dragstart', function(o){ p.drag_active = true; }); + this.message_list.addEventListener('dragstart', function(o){ p.drag_active = true; if (p.preview_timer) clearTimeout(p.preview_timer); }); this.message_list.addEventListener('dragend', function(o){ p.drag_active = false; }); this.message_list.init(); @@ -202,7 +202,7 @@ function rcube_webmail() } if (this.env.messagecount) - this.enable_command('select-all', 'select-none', 'sort', 'expunge', true); + this.enable_command('select-all', 'select-none', 'expunge', true); if (this.env.messagecount && (this.env.mailbox==this.env.trash_mailbox || this.env.mailbox==this.env.junk_mailbox)) this.enable_command('purge', true); @@ -314,7 +314,7 @@ function rcube_webmail() var input_user = rcube_find_object('rcmloginuser'); var input_pass = rcube_find_object('rcmloginpwd'); if (input_user) - input_user.onkeypress = function(e){ return rcmail.login_user_keypress(e); }; + input_user.onkeyup = function(e){ return rcmail.login_user_keyup(e); }; if (input_user && input_user.value=='') input_user.focus(); else if (input_pass) @@ -712,7 +712,7 @@ function rcube_webmail() break; case 'load-attachment': - var qstring = '_mbox='+this.env.mailbox+'&_uid='+this.env.uid+'&_part='+props.part; + var qstring = '_mbox='+urlencode(this.env.mailbox)+'&_uid='+this.env.uid+'&_part='+props.part; // open attachment in frame if it's of a supported mimetype if (this.env.uid && props.mimetype && find_in_array(props.mimetype, this.mimetypes)>=0) @@ -892,7 +892,7 @@ function rcube_webmail() { setTimeout(function(){ ref.printwin.focus(); }, 20); if (this.env.action != 'show') - this.toggle_read_status('read', [uid]); + this.mark_message('read', uid); } } break; @@ -1138,7 +1138,7 @@ function rcube_webmail() } // start timer for message preview (wait for double click) - if (selected && this.env.contentframe) + if (selected && this.env.contentframe && !list.multi_selecting) this.preview_timer = setTimeout(function(){ ref.msglist_get_preview(); }, this.dblclick_time + 10); else if (this.env.contentframe) this.show_contentframe(false); @@ -1486,6 +1486,7 @@ function rcube_webmail() this.mark_message = function(flag, uid) { var a_uids = new Array(); + var r_uids = new Array(); var selection = this.message_list ? this.message_list.get_selection() : new Array(); if (uid) @@ -1496,26 +1497,35 @@ function rcube_webmail() { for (var id, n=0; n 0)); case 'expunge': this.enable_command('select-all', 'select-none', 'expunge', this.env.messagecount ? true : false); break; + } request_obj.reset(); diff --git a/program/js/list.js b/program/js/list.js index e42d3f6..2b3c7a8 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -35,6 +35,7 @@ function rcube_list_widget(list, p) this.subject_col = -1; this.shiftkey = false; this.multiselect = false; + this.multi_selecting = false; this.draggable = false; this.keyboard = false; this.toggleselect = false; @@ -319,6 +320,7 @@ select_row: function(id, mod_key, with_mouse) { this.shift_start = id; this.highlight_row(id, false); + this.multi_selecting = false; } else { @@ -341,6 +343,7 @@ select_row: function(id, mod_key, with_mouse) this.highlight_row(id, false); break; } + this.multi_selecting = true; } // trigger event if selection changed @@ -456,6 +459,8 @@ select_all: function(filter) if (this.selection.join(',') != select_before) this.trigger_event('select'); + this.focus(); + return true; }, @@ -508,7 +513,7 @@ highlight_row: function(id, multiple) { if (this.rows[id] && !multiple) { - if (!this.in_selection(id)) + if (this.selection.length > 1 || !this.in_selection(id)) { this.clear_selection(); this.selection[0] = id; diff --git a/program/js/tiny_mce/themes/advanced/css/editor_content.css b/program/js/tiny_mce/themes/advanced/css/editor_content.css new file mode 100644 index 0000000..182e791 --- /dev/null +++ b/program/js/tiny_mce/themes/advanced/css/editor_content.css @@ -0,0 +1,58 @@ +/* This file contains the CSS data for the editable area(iframe) of TinyMCE */ +/* You can extend this CSS by adding your own CSS file with the the content_css option */ + +body, td, pre { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; +} + +body { + background-color: #FFFFFF; +} + +.mceVisualAid { + border: 1px dashed #BBBBBB !important; +} + +div.mceVisualAid { + background-image:url('../images/spacer.gif'); + visibility: visible !important; +} + +.mceItemAnchor { + width: 12px; + line-height: 6px; + overflow: hidden; + padding-left: 12px; + background-image: url('../images/anchor_symbol.gif'); + background-position: bottom; + background-repeat: no-repeat; +} + +/* Important is needed in Gecko browsers inorder to style links */ +/* +a { + color: green !important; +} +*/ + +/* Style selection range colors in Gecko browsers */ +/* +::-moz-selection { + background-color: red; + color: green; +} +*/ + +/* MSIE specific */ + +* html body { + scrollbar-3dlight-color: #F0F0EE; + scrollbar-arrow-color: #676662; + scrollbar-base-color: #F0F0EE; + scrollbar-darkshadow-color: #DDDDDD; + scrollbar-face-color: #E0E0DD; + scrollbar-highlight-color: #F0F0EE; + scrollbar-shadow-color: #F0F0EE; + scrollbar-track-color: #F5F5F5; +} diff --git a/program/lib/imap.inc b/program/lib/imap.inc index e9b4684..96353dd 100644 --- a/program/lib/imap.inc +++ b/program/lib/imap.inc @@ -161,18 +161,19 @@ function iil_xor($string, $string2) { } function iil_ReadLine($fp, $size) { - $line = ''; - if ($fp) { - do { - // FIXME: hardcode size? - $buffer = fgets($fp, 2048); - if ($buffer === false) { - break; - } - $line .= $buffer; - } while ($buffer[strlen($buffer)-1]!="\n"); - } - return $line; + $line = ''; + if (!$fp) { + return $line; + } + do { + // FIXME: hardcode size? + $buffer = fgets($fp, 2048); + if ($buffer === false) { + break; + } + $line .= $buffer; + } while ($buffer[strlen($buffer)-1] != "\n"); + return $line; } function iil_MultLine($fp, $line) { @@ -192,13 +193,16 @@ function iil_MultLine($fp, $line) { } function iil_ReadBytes($fp, $bytes) { - $data = ''; - $len = 0; - do { - $data.=fread($fp, $bytes-$len); - $len = strlen($data); - } while ($len<$bytes); - return $data; + $data = ''; + $len = 0; + do { + $data .= fread($fp, $bytes-$len); + if ($len == strlen($data)) { + break; //nothing was read -> exit to avoid apache lockups + } + $len = strlen($data); + } while ($len < $bytes); + return $data; } function iil_ReadReply($fp) { @@ -1596,7 +1600,8 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false) while ( list($lines_key, $str) = each($lines) ) { list($field, $string) = iil_SplitHeaderLine($str); - $field = strtolower($field); + $field = strtolower($field); + $string = ereg_replace("\n[[:space:]]*"," ",$string); switch ($field) { case 'date'; @@ -1607,22 +1612,22 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false) $result[$id]->from = $string; break; case 'to': - $result[$id]->to = str_replace("\n", " ", $string); + $result[$id]->to = $string; break; case 'subject': - $result[$id]->subject = str_replace("\n", '', $string); + $result[$id]->subject = $string; break; case 'reply-to': - $result[$id]->replyto = str_replace("\n", " ", $string); + $result[$id]->replyto = $string; break; case 'cc': - $result[$id]->cc = str_replace("\n", " ", $string); + $result[$id]->cc = $string; break; case 'bcc': - $result[$id]->bcc = str_replace("\n", " ", $string); + $result[$id]->bcc = $string; break; case 'content-transfer-encoding': - $result[$id]->encoding = str_replace("\n", " ", $string); + $result[$id]->encoding = $string; break; case 'content-type': $ctype_parts = explode(";", $string); @@ -1643,7 +1648,7 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false) case 'return-receipt-to': case 'disposition-notification-to': case 'x-confirm-reading-to': - $result[$id]->mdn_to = str_replace("\n", " ", $string); + $result[$id]->mdn_to = $string; break; case 'message-id': $result[$id]->messageID = $string; @@ -2448,7 +2453,6 @@ function iil_C_Append(&$conn, $folder, &$message) { if (fputs($fp, $request)) { $line=iil_ReadLine($fp, 100); $sent = fwrite($fp, $message."\r\n"); - flush(); do { $line=iil_ReadLine($fp, 1000); } while ($line[0] != 'A'); diff --git a/program/localization/en_GB/labels.inc b/program/localization/en_GB/labels.inc index 96f3447..3515de9 100644 --- a/program/localization/en_GB/labels.inc +++ b/program/localization/en_GB/labels.inc @@ -13,7 +13,7 @@ | Author: Weiran Zhang (weiran@weiran.co.uk) | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 1091 2008-02-15 15:13:38Z tomekp $ + @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -167,7 +167,7 @@ $labels['language'] = 'Language'; $labels['timezone'] = 'Time zone'; $labels['pagesize'] = 'Rows per page'; $labels['signature'] = 'Signature'; -$labels['dstactive'] = 'Daylight savings'; +$labels['dstactive'] = 'Summer time'; $labels['htmleditor'] = 'Compose HTML messages'; $labels['htmlsignature'] = 'HTML signature'; $labels['previewpane'] = 'Show preview pane'; @@ -189,4 +189,4 @@ $labels['sortby'] = 'Sort by'; $labels['sortasc'] = 'Sort ascending'; $labels['sortdesc'] = 'Sort descending'; -?> \ No newline at end of file +?> diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index 2a01df6..c009415 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -13,7 +13,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 1052 2008-02-12 18:41:53Z thomasb $ + @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -218,7 +218,7 @@ $labels['language'] = 'Language'; $labels['timezone'] = 'Time zone'; $labels['pagesize'] = 'Rows per page'; $labels['signature'] = 'Signature'; -$labels['dstactive'] = 'Daylight savings'; +$labels['dstactive'] = 'Daylight saving time'; $labels['htmleditor'] = 'Compose HTML messages'; $labels['htmlsignature'] = 'HTML signature'; $labels['previewpane'] = 'Show preview pane'; @@ -243,4 +243,4 @@ $labels['sortby'] = 'Sort by'; $labels['sortasc'] = 'Sort ascending'; $labels['sortdesc'] = 'Sort descending'; -?> \ No newline at end of file +?> diff --git a/program/localization/fi/labels.inc b/program/localization/fi/labels.inc index 4be2c8b..b156120 100644 --- a/program/localization/fi/labels.inc +++ b/program/localization/fi/labels.inc @@ -14,7 +14,7 @@ | Veljo Velling | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 1151 2008-02-28 19:56:47Z thomasb $ + @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -47,7 +47,7 @@ $labels['reply-to'] = 'Vastaus osoitteeseen'; $labels['mailboxlist'] = 'Kansiot'; $labels['messagesfromto'] = 'Viestit $from-$to/$count'; $labels['messagenrof'] = 'Viesti $nr/$count'; -$labels['moveto'] = 'siirrä...'; +$labels['moveto'] = 'siirrä kansioon...'; $labels['download'] = 'lataa'; $labels['filename'] = 'Tiedoston nimi'; $labels['filesize'] = 'Tiedoston koko'; @@ -96,7 +96,7 @@ $labels['all'] = 'Kaikki'; $labels['none'] = 'Ei mitään'; $labels['unread'] = 'Lukemattomat'; $labels['compact'] = 'Tiivistä'; -$labels['empty'] = 'Empty'; +$labels['empty'] = 'Tyhjennä'; $labels['purge'] = 'Puhdista'; $labels['quota'] = 'Levytila'; $labels['unknown'] = 'tuntematon'; @@ -187,7 +187,7 @@ $labels['renamefolder'] = 'Nimeä kansio uudelleen'; $labels['deletefolder'] = 'Poista kansio'; $labels['managefolders'] = 'Kansioiden ylläpito'; $labels['sortby'] = 'Järjestä'; -$labels['sortasc'] = 'Järjestä nousevasti'; -$labels['sortdesc'] = 'Järjestä laskevasti'; +$labels['sortasc'] = 'Järjestä nousevasti (a-ö)'; +$labels['sortdesc'] = 'Järjestä laskevasti (ö-a)'; ?> \ No newline at end of file diff --git a/program/localization/fr/labels.inc b/program/localization/fr/labels.inc index e35d6bd..01bc6f0 100644 --- a/program/localization/fr/labels.inc +++ b/program/localization/fr/labels.inc @@ -10,9 +10,8 @@ | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: aldweb | - | Pierre HAEGELI | - | Mickaël Wolff | + | Author: Joel S. | + | Jerome Lipowicz | +-----------------------------------------------------------------------+ @version $Id$ diff --git a/program/localization/fr/messages.inc b/program/localization/fr/messages.inc index fcd59fc..d91e093 100644 --- a/program/localization/fr/messages.inc +++ b/program/localization/fr/messages.inc @@ -10,9 +10,8 @@ | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: aldweb | - | Pierre HAEGELI | - | Mickaël Wolff | + | Author: Joel S. | + | Jerome Lipowicz | +-----------------------------------------------------------------------+ @version $Id$ diff --git a/program/localization/ge/labels.inc b/program/localization/ge/labels.inc index 75ccc1d..6d37223 100755 --- a/program/localization/ge/labels.inc +++ b/program/localization/ge/labels.inc @@ -18,59 +18,42 @@ */ $labels = array(); - -// login page -$labels['welcome'] = 'მოგესალმებათ $product'; -$labels['username'] = 'მომხმარებელი'; -$labels['password'] = 'პაროლი'; -$labels['server'] = 'სერვერი'; -$labels['login'] = 'შესვლა'; - -// taskbar -$labels['logout'] = 'გამოსვლა'; -$labels['mail'] = 'ელ–ფოსტა'; +$labels['welcome'] = 'მოგესალმებათ $product'; +$labels['username'] = 'მომხმარებელი'; +$labels['password'] = 'პაროლი'; +$labels['server'] = 'სერვერი'; +$labels['login'] = 'შესვლა'; +$labels['logout'] = 'გამოსვლა'; +$labels['mail'] = 'ელ–ფოსტა'; $labels['settings'] = 'პარამეტრები'; $labels['addressbook'] = 'მისამართები'; - -// mailbox names -$labels['inbox'] = 'მიღებული'; +$labels['inbox'] = 'მიღებული'; $labels['drafts'] = 'დროებითი'; -$labels['sent'] = 'გაგზავნილები'; -$labels['trash'] = 'წაშლილები'; -$labels['junk'] = 'სპამი'; - -// message listing +$labels['sent'] = 'გაგზავნილები'; +$labels['trash'] = 'წაშლილები'; +$labels['junk'] = 'სპამი'; $labels['subject'] = 'სათაური'; -$labels['from'] = 'გამგზავნი'; -$labels['to'] = 'მიმღები'; -$labels['cc'] = 'კოპია'; -$labels['bcc'] = 'ფარული'; +$labels['from'] = 'გამგზავნი'; +$labels['to'] = 'მიმღები'; +$labels['cc'] = 'კოპია'; +$labels['bcc'] = 'ფარული'; $labels['replyto'] = 'დაბრუნება'; -$labels['date'] = 'თარიღი'; -$labels['size'] = 'ზომა'; +$labels['date'] = 'თარიღი'; +$labels['size'] = 'ზომა'; $labels['priority'] = 'პრიორიტეტი'; $labels['organization'] = 'ორგანიზაცია'; - -// aliases -$labels['reply-to'] = $labels['replyto']; - +$labels['reply-to'] = 'დაბრუნება'; $labels['mailboxlist'] = 'საქაღალდეები'; $labels['messagesfromto'] = 'შეტყობინება $from $to დან $count'; $labels['messagenrof'] = 'შეტყობინება $nr დან $count'; - -$labels['moveto'] = 'გადატანა...'; +$labels['moveto'] = 'გადატანა...'; $labels['download'] = 'გადმოწერა'; - $labels['filename'] = 'ფაილის სახელი'; $labels['filesize'] = 'ფაილის ზომა'; - $labels['preferhtml'] = 'როგორც HTML'; $labels['htmlmessage'] = 'HTML შეტყობინება'; $labels['prettydate'] = 'კარგი თარიღები'; - $labels['addtoaddressbook'] = 'მისამართებში დამატება'; - -// weekdays short $labels['sun'] = 'კვ'; $labels['mon'] = 'ორ'; $labels['tue'] = 'სამ'; @@ -78,160 +61,132 @@ $labels['wed'] = 'ოთხ'; $labels['thu'] = 'ხუთ'; $labels['fri'] = 'პარ'; $labels['sat'] = 'შაბ'; - -// weekdays long -$labels['sunday'] = 'კვირა'; -$labels['monday'] = 'ორშაბათი'; -$labels['tuesday'] = 'სამშაბათი'; +$labels['sunday'] = 'კვირა'; +$labels['monday'] = 'ორშაბათი'; +$labels['tuesday'] = 'სამშაბათი'; $labels['wednesday'] = 'ოთხშაბათი'; -$labels['thursday'] = 'ხუთშაბათი'; -$labels['friday'] = 'პარასკევი'; -$labels['saturday'] = 'შაბათი'; - +$labels['thursday'] = 'ხუთშაბათი'; +$labels['friday'] = 'პარასკევი'; +$labels['saturday'] = 'შაბათი'; $labels['today'] = 'დღეს'; - -// toolbar buttons -$labels['checkmail'] = 'შემოწმება ახალ შეტყობინებაზე'; -$labels['writenewmessage'] = 'ახალი შეტყობინება'; -$labels['replytomessage'] = 'პასუხი'; +$labels['checkmail'] = 'შემოწმება ახალ შეტყობინებაზე'; +$labels['writenewmessage'] = 'ახალი შეტყობინება'; +$labels['replytomessage'] = 'პასუხი'; $labels['replytoallmessage'] = 'პასუხი ყველას'; -$labels['forwardmessage'] = 'გადაგზავნა'; -$labels['deletemessage'] = 'წაშლა'; +$labels['forwardmessage'] = 'გადაგზავნა'; +$labels['deletemessage'] = 'წაშლა'; $labels['movemessagetotrash'] = 'შეტყობინების წაშლილებში გადატანა'; -$labels['printmessage'] = 'შეტყობინების ამობეჭვდა'; -$labels['previousmessage'] = 'წინა შეტყობინების ნახვა'; +$labels['printmessage'] = 'შეტყობინების ამობეჭვდა'; +$labels['previousmessage'] = 'წინა შეტყობინების ნახვა'; $labels['previousmessages'] = 'წინა შეტყობინებების ნახვა'; -$labels['firstmessage'] = 'პირველი შეტყობინების ნახვა'; -$labels['firstmessages'] = 'პრველი შეტყობინებები'; -$labels['nextmessage'] = 'შემდეგი შეტყობინების ნახვა'; -$labels['nextmessages'] = 'შემდეგი შეტყობინებების ნახვა'; -$labels['lastmessage'] = 'ბოლო შეტყობინების ნახვა'; -$labels['lastmessages'] = 'ბოლო შეტყობინებების ნახვა'; -$labels['backtolist'] = 'უკან ჩამონათვალში'; -$labels['viewsource'] = 'შიგთავსი'; - +$labels['firstmessage'] = 'პირველი შეტყობინების ნახვა'; +$labels['firstmessages'] = 'პრველი შეტყობინებები'; +$labels['nextmessage'] = 'შემდეგი შეტყობინების ნახვა'; +$labels['nextmessages'] = 'შემდეგი შეტყობინებების ნახვა'; +$labels['lastmessage'] = 'ბოლო შეტყობინების ნახვა'; +$labels['lastmessages'] = 'ბოლო შეტყობინებების ნახვა'; +$labels['backtolist'] = 'უკან ჩამონათვალში'; +$labels['viewsource'] = 'შიგთავსი'; +$labels['markmessages'] = 'მონიშნეთ შეტყობინებები'; +$labels['markread'] = 'როგორც წაკითხული'; +$labels['markunread'] = 'როგორც წაუკითხავი'; $labels['select'] = 'მონიშვნა'; $labels['all'] = 'ყველა'; $labels['none'] = 'არცერთი'; $labels['unread'] = 'წაუკითხავი'; - $labels['compact'] = 'შეკუმშვა'; $labels['empty'] = 'გაცარიელება'; $labels['purge'] = 'გასუფთავება'; - $labels['quota'] = 'შეზღუდვა'; -$labels['unknown'] = 'უცნობი'; -$labels['unlimited'] = 'შეუზღუდავი'; - -$labels['quicksearch'] = 'სწრაფი ძიება'; -$labels['resetsearch'] = 'ძიების გასუფთავება'; - - -// message compose -$labels['compose'] = 'შეტყობინების დაწერა'; -$labels['sendmessage'] = 'შეტყობინების გაგზავნა'; -$labels['savemessage'] = 'დროებით შენახვა'; -$labels['addattachment'] = 'ფაილის ატვირთვა'; -$labels['charset'] = 'კოდირება'; -$labels['editortype'] = 'რედაქტორი'; -$labels['returnreceipt'] = 'პასუხის მოთხოვნა'; - +$labels['unknown'] = 'უცნობი'; +$labels['unlimited'] = 'შეუზღუდავი'; +$labels['quicksearch'] = 'სწრაფი ძიება'; +$labels['resetsearch'] = 'ძიების გასუფთავება'; +$labels['compose'] = 'შეტყობინების დაწერა'; +$labels['savemessage'] = 'დროებით შენახვა'; +$labels['sendmessage'] = 'შეტყობინების გაგზავნა'; +$labels['addattachment'] = 'ფაილის ატვირთვა'; +$labels['charset'] = 'კოდირება'; +$labels['editortype'] = 'რედაქტორი'; +$labels['returnreceipt'] = 'პასუხის მოთხოვნა'; $labels['checkspelling'] = 'ორთოგრაფიული შემოწმება'; $labels['resumeediting'] = 'რედაქტირების გაგრძელება'; -$labels['revertto'] = 'გაუქმება'; - +$labels['revertto'] = 'გაუქმება'; $labels['attachments'] = 'გზავნილები'; $labels['upload'] = 'ატვირთვა'; -$labels['close'] = 'დახურვა'; - -$labels['low'] = 'დაბალი'; -$labels['lowest'] = 'უდაბლესი'; -$labels['normal'] = 'საშუალო'; -$labels['high'] = 'მაღალი'; +$labels['close'] = 'დახურვა'; +$labels['low'] = 'დაბალი'; +$labels['lowest'] = 'უდაბლესი'; +$labels['normal'] = 'საშუალო'; +$labels['high'] = 'მაღალი'; $labels['highest'] = 'უმაღლესი'; - -$labels['nosubject'] = '(უსათაურო)'; +$labels['nosubject'] = '(უსათაურო)'; $labels['showimages'] = 'გამოსახულების ჩვენება'; - $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'ტექსტური'; - $labels['addcc'] = 'დაამატე კოპიო'; $labels['addbcc'] = 'დაამატე ფარული კოპიო'; $labels['addreplyto'] = 'დაამატე გამომგზავნი'; - - -// address boook -$labels['name'] = 'სრული სახელი'; +$labels['mdnrequest'] = 'გამომგზავნს სურს შეიტყოს წერილის მიღება. გსურთ შეატყობინოთ გამომგზავნს?'; +$labels['receiptread'] = 'გზავნილის დაბრუნება'; +$labels['yourmessage'] = 'ეს არის მიღების დასტური თქვენს შეტყობინებაზე'; +$labels['receiptnote'] = 'განმარტება: ეს ნიშნავს რომ ადრესატმა მიიღო შეტყობინება. მაგრამ, არ ნიშნავს რომ წაიკითხა ან გაიგო ტექსტი'; +$labels['name'] = 'სრული სახელი'; $labels['firstname'] = 'სახელი'; -$labels['surname'] = 'გვარი'; -$labels['email'] = 'ელ–ფოსტა'; - +$labels['surname'] = 'გვარი'; +$labels['email'] = 'ელ–ფოსტა'; $labels['addcontact'] = 'კონტაქტებში დამატება'; $labels['editcontact'] = 'კონტაქტის რედაქტირება'; - -$labels['edit'] = 'რედაქტირება'; +$labels['edit'] = 'რედაქტირება'; $labels['cancel'] = 'გაუქმება'; -$labels['save'] = 'შენახვა'; +$labels['save'] = 'შენახვა'; $labels['delete'] = 'წაშლა'; - -$labels['newcontact'] = 'კონტაქტის შექმნა'; -$labels['deletecontact'] = 'მონიშნელი კონტაქტის წაშლა'; -$labels['composeto'] = 'ფოსტის გაგზავნა შერჩეულ ადრესატებთან'; +$labels['newcontact'] = 'კონტაქტის შექმნა'; +$labels['deletecontact'] = 'მონიშნელი კონტაქტის წაშლა'; +$labels['composeto'] = 'ფოსტის გაგზავნა შერჩეულ ადრესატებთან'; $labels['contactsfromto'] = 'კონტაქტები $from დან $to ში $count'; -$labels['print'] = 'დაბეჭვდა'; -$labels['export'] = 'ექსპორტი'; - -$labels['previouspage'] = 'წინას ჩვენება'; -$labels['firstpage'] = 'პირველის ჩვენება'; -$labels['nextpage'] = 'შემდეგის ჩვენება'; -$labels['lastpage'] = 'ბოლოს ჩვენება'; - +$labels['print'] = 'დაბეჭვდა'; +$labels['export'] = 'ექსპორტი'; +$labels['previouspage'] = 'წინას ჩვენება'; +$labels['firstpage'] = 'პირველის ჩვენება'; +$labels['nextpage'] = 'შემდეგის ჩვენება'; +$labels['lastpage'] = 'ბოლოს ჩვენება'; $labels['groups'] = 'ჯგუფები'; $labels['personaladrbook'] = 'პერსონალური მისამართები'; - - -// settings -$labels['settingsfor'] = 'პარამეტრები'; - -$labels['preferences'] = 'პარამეტრები'; -$labels['userpreferences'] = 'მომხმარებლის პარამეტრები'; -$labels['editpreferences'] = 'მომხმარებლის პარამეტრების რედაქტირება'; - -$labels['identities'] = 'პროფილები'; -$labels['manageidentities'] = 'პროფილების მართვა'; -$labels['newidentity'] = 'ახალი პროფილი'; - -$labels['newitem'] = 'ახალი'; -$labels['edititem'] = 'რედაქტირება'; - -$labels['setdefault'] = 'როგორც ზოგაგად'; -$labels['language'] = 'ენა'; -$labels['timezone'] = 'დროითი ზონა'; -$labels['pagesize'] = 'სტრიქონი გვერდზე'; +$labels['settingsfor'] = 'პარამეტრები'; +$labels['preferences'] = 'პარამეტრები'; +$labels['userpreferences'] = 'მომხმარებლის პარამეტრები'; +$labels['editpreferences'] = 'მომხმარებლის პარამეტრების რედაქტირება'; +$labels['identities'] = 'პროფილები'; +$labels['manageidentities'] = 'პროფილების მართვა'; +$labels['newidentity'] = 'ახალი პროფილი'; +$labels['newitem'] = 'ახალი'; +$labels['edititem'] = 'რედაქტირება'; +$labels['setdefault'] = 'როგორც ზოგაგად'; +$labels['language'] = 'ენა'; +$labels['timezone'] = 'დროითი ზონა'; +$labels['pagesize'] = 'სტრიქონი გვერდზე'; $labels['signature'] = 'ხელმოწერა'; -$labels['dstactive'] = 'დროის გადაყვანა'; +$labels['dstactive'] = 'დროის გადაყვანა'; $labels['htmleditor'] = 'შეტყობინების შექმნა HTML –ში'; $labels['htmlsignature'] = 'HTML ხელმოწერა'; $labels['previewpane'] = 'ჩვენება'; - -$labels['autosavedraft'] = 'ავტომატური შენახვა'; -$labels['everynminutes'] = 'ყოველ $n წუთში'; -$labels['never'] = 'არასდროს'; - -$labels['folder'] = 'საქაღალდე'; -$labels['folders'] = 'საქაღალდეები'; -$labels['foldername'] = 'საქაღალდის დასახელება'; -$labels['subscribed'] = 'გამოცერილია'; -$labels['create'] = 'შექმნა'; -$labels['createfolder'] = 'საქაღალდის შექმნა'; +$labels['autosavedraft'] = 'ავტომატური შენახვა'; +$labels['everynminutes'] = 'ყოველ $n წუთში'; +$labels['never'] = 'არასდროს'; +$labels['folder'] = 'საქაღალდე'; +$labels['folders'] = 'საქაღალდეები'; +$labels['foldername'] = 'საქაღალდის დასახელება'; +$labels['subscribed'] = 'გამოცერილია'; +$labels['messagecount'] = 'შეტყობინებები'; +$labels['create'] = 'შექმნა'; +$labels['createfolder'] = 'საქაღალდის შექმნა'; $labels['rename'] = 'სახელის გადარქმევა'; $labels['renamefolder'] = 'სახელის გადარქმევა საქაღალდისთვის'; -$labels['deletefolder'] = 'საქაღალდის წაშლა'; -$labels['managefolders'] = 'საქაღალდეების მართვა'; - +$labels['deletefolder'] = 'საქაღალდის წაშლა'; +$labels['managefolders'] = 'საქაღალდეების მართვა'; $labels['sortby'] = 'დალაგება'; -$labels['sortasc'] = 'დალაგება ზრდადობით'; +$labels['sortasc'] = 'დალაგება ზრდადობით'; $labels['sortdesc'] = 'დალაგება კლებადობით'; ?> diff --git a/program/localization/ge/messages.inc b/program/localization/ge/messages.inc index c455742..d2c29ca 100755 --- a/program/localization/ge/messages.inc +++ b/program/localization/ge/messages.inc @@ -18,7 +18,7 @@ */ $messages = array(); -$messages['loginfailed'] = 'შესვლა შეუძლებელია'; +$messages['loginfailed'] = 'შესვლა შეუძლებელია'; $messages['cookiesdisabled'] = 'თქვენი ბროუზერი კუკიებს არ პასუხობს'; $messages['sessionerror'] = 'თქვენი სესია არის მცდარი ან ვადაგასული'; $messages['imaperror'] = 'IMAP სერვერთან დაკავშირება შეუძლებელია'; @@ -43,16 +43,16 @@ $messages['sendingfailed'] = 'შეტყობინება ვერ გა $messages['errorsaving'] = 'შენახვის დროს მოხდა შეცდომა'; $messages['errormoving'] = 'შეტყობინების გადატანა შეუძლებელია'; $messages['errordeleting'] = 'შეტყობინების წაშლა შეუძლებელია'; -$messages['deletecontactconfirm'] = 'ნამდვილად გსურთ მონიშნული კონტაქტების წაშლა?'; +$messages['deletecontactconfirm'] = 'ნამდვილად გსურთ მონიშნული კონტაქტების წაშლა?'; $messages['deletemessagesconfirm'] = 'ნამდვილად გსურთ მონიშნული შეტყობინებების წაშლა?'; -$messages['deletefolderconfirm'] = 'ნამდვილად გსურთ ამ საქაღალდის წაშლა?'; -$messages['purgefolderconfirm'] = 'ნამდვილად გსურთ ყველა შეტყობინების წაშლა აღნიშნულ საქაღალდეში?'; +$messages['deletefolderconfirm'] = 'ნამდვილად გსურთ ამ საქაღალდის წაშლა?'; +$messages['purgefolderconfirm'] = 'ნამდვილად გსურთ ყველა შეტყობინების წაშლა აღნიშნულ საქაღალდეში?'; $messages['formincomplete'] = 'ყველა ველი არ არის შევსებული'; $messages['noemailwarning'] = 'მიუთითეთ სწორი ელ–ფოსტის მისამართი'; -$messages['nonamewarning'] = 'მიუთითეთ სახელი'; +$messages['nonamewarning'] = 'მიუთითეთ სახელი'; $messages['nopagesizewarning'] = 'მიუთითეთ ფურცლის ზომა'; $messages['norecipientwarning'] = 'მიუთითეთ მიმღები'; -$messages['nosubjectwarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უსათაუროდ?'; +$messages['nosubjectwarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უსათაუროდ?'; $messages['nobodywarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უტექსტოდ?'; $messages['notsentwarning'] = 'შეტყობინება ვერ იქნა გაგზავნილი. გსურთ თუ არა გზავნილის გაუქმება?'; $messages['noldapserver'] = 'მიუთითეთ LDAP სერვერი ძიებისთვის'; @@ -74,5 +74,9 @@ $messages['copyerror'] = 'ვერცერთი მისამართი $messages['sourceisreadonly'] = 'აღნიშნული მისამართის მხოლოდ წაკითხვაა შესაძლებელი'; $messages['errorsavingcontact'] = 'საკონტაქტო მისამართის შენახვა შეუძლებელია'; $messages['movingmessage'] = 'შეტყობინების გადატანა...'; +$messages['receiptsent'] = 'წარმატებით გაიგზავნა'; +$messages['errorsendingreceipt'] = 'არ გაიგზავნა'; +$messages['nodeletelastidentity'] = 'წაშლა შეუძლებელია, ის თქვენთვის ერთადერთია'; +$messages['addsubfolderhint'] = 'საქაღალდე შეიქმნება როგორც ქვესაქაღალდე მონიშნულ საქაღალდეში'; ?> diff --git a/program/localization/hu/messages.inc b/program/localization/hu/messages.inc index fd6e2ed..4059162 100644 --- a/program/localization/hu/messages.inc +++ b/program/localization/hu/messages.inc @@ -11,73 +11,73 @@ | | +-----------------------------------------------------------------------+ | Author: Levente Farkas | - | Ervin Hegedüs | + | Ervin Hegedüs | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 1069 2008-02-13 19:33:10Z yllar $ + @version $Id: messages.inc 1255 2008-04-05 12:49:21Z thomasb $ */ $messages = array(); -$messages['loginfailed'] = 'Sikertelen belépés'; -$messages['cookiesdisabled'] = 'A böngészõ nem támogatja a sütik használatát'; -$messages['sessionerror'] = 'Érvénytelen vagy lejárt munkamenet'; -$messages['imaperror'] = 'Nem sikerült a kapcsolódás az IMAP szerverhez'; -$messages['nomessagesfound'] = 'A fiók nem tartalmaz leveleket'; -$messages['loggedout'] = 'Sikeres kijelentkezés. Viszont látásra!'; -$messages['mailboxempty'] = 'A fiók üres'; -$messages['loading'] = 'Betöltés...'; -$messages['loadingdata'] = 'Az adatok betöltése...'; -$messages['checkingmail'] = 'Új üzenetek keresése...'; -$messages['sendingmessage'] = 'Az üzenet küldése...'; -$messages['messagesent'] = 'Az üzenet elküldve'; -$messages['savingmessage'] = 'Az üzenet mentése...'; -$messages['messagesaved'] = 'Az üzenet elmentve a Sablonokhoz'; -$messages['successfullysaved'] = 'A mentés sikerült'; -$messages['addedsuccessfully'] = 'A cím hozzáadása a címjegyzékhez megtörtént'; -$messages['contactexists'] = 'A kapcsolat már létezik ezzel az e-mail címmel'; -$messages['blockedimages'] = 'Biztonsági okokból a távoli képek letöltése tiltott.'; -$messages['encryptedmessage'] = 'Az üzenet titkosított, emiatt nem tudom megjeleníteni.'; +$messages['loginfailed'] = 'Sikertelen belépés'; +$messages['cookiesdisabled'] = 'A böngésző nem támogatja a sütik használatát'; +$messages['sessionerror'] = 'Érvénytelen vagy lejárt munkamenet'; +$messages['imaperror'] = 'Nem sikerült a kapcsolódás az IMAP szerverhez'; +$messages['nomessagesfound'] = 'A fiók nem tartalmaz leveleket'; +$messages['loggedout'] = 'Sikeres kijelentkezés. Viszont látásra!'; +$messages['mailboxempty'] = 'A fiók üres'; +$messages['loading'] = 'Betöltés...'; +$messages['loadingdata'] = 'Az adatok betöltése...'; +$messages['checkingmail'] = 'Új üzenetek keresése...'; +$messages['sendingmessage'] = 'Az üzenet küldése...'; +$messages['messagesent'] = 'Az üzenet elküldve'; +$messages['savingmessage'] = 'Az üzenet mentése...'; +$messages['messagesaved'] = 'Az üzenet elmentve a Sablonokhoz'; +$messages['successfullysaved'] = 'A mentés sikerült'; +$messages['addedsuccessfully'] = 'A cím hozzáadása a címjegyzékhez megtörtént'; +$messages['contactexists'] = 'A kapcsolat már létezik ezzel az e-mail címmel'; +$messages['blockedimages'] = 'Biztonsági okokból a távoli képek letöltése tiltott.'; +$messages['encryptedmessage'] = 'Az üzenet titkosított, emiatt nem tudom megjeleníteni.'; $messages['nocontactsfound'] = 'Nincs kapcsolat'; -$messages['contactnotfound'] = 'A kiválasztott kapcsolat nem található'; -$messages['sendingfailed'] = 'Az üzenet elküldése nem sikerült'; -$messages['errorsaving'] = 'A mentés során hiba lépett fel'; -$messages['errormoving'] = 'Az üzenetet nem sikerült áthelyezni'; -$messages['errordeleting'] = 'Az üzenetet nem sikerült törölni'; -$messages['deletecontactconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt címe(ke)t?'; -$messages['deletemessagesconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt üzenete(ke)t?'; -$messages['deletefolderconfirm'] = 'Biztos, hogy törölni szeretnéd ezt a mappát?'; -$messages['purgefolderconfirm'] = 'Biztos vagy benne, hogy az összes üzenet törölhetõ?'; -$messages['formincomplete'] = 'Az ûrlap hiányosan lett kitöltve'; -$messages['noemailwarning'] = 'Adj meg egy valós e-mail címet'; +$messages['contactnotfound'] = 'A kiválasztott kapcsolat nem található'; +$messages['sendingfailed'] = 'Az üzenet elküldése nem sikerült'; +$messages['errorsaving'] = 'A mentés során hiba lépett fel'; +$messages['errormoving'] = 'Az üzenetet nem sikerült áthelyezni'; +$messages['errordeleting'] = 'Az üzenetet nem sikerült törölni'; +$messages['deletecontactconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt címe(ke)t?'; +$messages['deletemessagesconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt üzenete(ke)t?'; +$messages['deletefolderconfirm'] = 'Biztos, hogy törölni szeretnéd ezt a mappát?'; +$messages['purgefolderconfirm'] = 'Biztos vagy benne, hogy az összes üzenet törölhető?'; +$messages['formincomplete'] = 'Az űrlap hiányosan lett kitöltve'; +$messages['noemailwarning'] = 'Adj meg egy valós e-mail címet'; $messages['nonamewarning'] = 'Adj meg egy nevet'; -$messages['nopagesizewarning'] = 'Add meg a papír méretét'; -$messages['norecipientwarning'] = 'Legalább egy címzettet adj meg'; -$messages['nosubjectwarning'] = 'A "Tárgy" mezõ üres. Szeretnéd most kitölteni?'; -$messages['nobodywarning'] = 'Elküldöd az üzenetet tárgy nélkül?'; -$messages['notsentwarning'] = 'Az üzenet még nem küldtem el. Eldobod az üzenetet?'; -$messages['noldapserver'] = 'Adj meg egy LDAP szervert a kereséshez'; -$messages['nocontactsreturned'] = 'Nem találtam kapcsolatot'; -$messages['nosearchname'] = 'Add meg a kapcsolat nevét vagy e-mail címét'; -$messages['searchsuccessful'] = '$nr üzenetet találtam'; -$messages['searchnomatch'] = 'Nincs találat'; -$messages['searching'] = 'Keresés...'; -$messages['checking'] = 'Ellenõrzés...'; -$messages['nospellerrors'] = 'Nem találtam helyesírási hibát'; -$messages['folderdeleted'] = 'A mappa sikeresen törölve'; -$messages['deletedsuccessfully'] = 'Törölve'; -$messages['converting'] = 'Formázás eltávolítása az üzenetbõl...'; -$messages['messageopenerror'] = 'Nem tudom letölteni a leveleket a szerverrõl'; -$messages['fileuploaderror'] = 'Feltöltés sikertelen'; -$messages['filesizeerror'] = 'A feltöltött file mérete meghaladja a maximális méretet $size'; -$messages['copysuccess'] = 'Sikeresen másoltunk $nr címet'; -$messages['copyerror'] = 'Nem tudtunk másolni egyetlen címet sem'; -$messages['sourceisreadonly'] = 'Ez a címforrás csak olvasható'; -$messages['errorsavingcontact'] = 'Nem tudtuk menteni a kapcsolat címét'; -$messages['movingmessage'] = 'Üzenet mozgatása...'; -$messages['receiptsent'] = 'Az Olvasási Értesítést elküldtük'; -$messages['errorsendingreceipt'] = 'Az Olvasási Értesítést nem sikerült elküldeni'; -$messages['nodeletelastidentity'] = 'Nem törölheti ezt a profilt, ez az egyetlen'; -$messages['addsubfolderhint'] = 'Az új könyvtárat az aktuálisan kiválasztott alkönyvtáraként fogjuk létrehozni'; +$messages['nopagesizewarning'] = 'Add meg a papír méretét'; +$messages['norecipientwarning'] = 'Legalább egy címzettet adj meg'; +$messages['nosubjectwarning'] = 'A "Tárgy" mező üres. Szeretnéd most kitölteni?'; +$messages['nobodywarning'] = 'Elküldöd az üzenetet tárgy nélkül?'; +$messages['notsentwarning'] = 'Az üzenet még nem küldtem el. Eldobod az üzenetet?'; +$messages['noldapserver'] = 'Adj meg egy LDAP szervert a kereséshez'; +$messages['nocontactsreturned'] = 'Nem találtam kapcsolatot'; +$messages['nosearchname'] = 'Add meg a kapcsolat nevét vagy e-mail címét'; +$messages['searchsuccessful'] = '$nr üzenetet találtam'; +$messages['searchnomatch'] = 'Nincs találat'; +$messages['searching'] = 'Keresés...'; +$messages['checking'] = 'Ellenőrzés...'; +$messages['nospellerrors'] = 'Nem találtam helyesírási hibát'; +$messages['folderdeleted'] = 'A mappa sikeresen törölve'; +$messages['deletedsuccessfully'] = 'Törölve'; +$messages['converting'] = 'Formázás eltávolítása az üzenetből...'; +$messages['messageopenerror'] = 'Nem tudom letölteni a leveleket a szerverről'; +$messages['fileuploaderror'] = 'Feltöltés sikertelen'; +$messages['filesizeerror'] = 'A feltöltött file mérete meghaladja a maximális méretet $size'; +$messages['copysuccess'] = 'Sikeresen másoltunk $nr címet'; +$messages['copyerror'] = 'Nem tudtunk másolni egyetlen címet sem'; +$messages['sourceisreadonly'] = 'Ez a címforrás csak olvasható'; +$messages['errorsavingcontact'] = 'Nem tudtuk menteni a kapcsolat címét'; +$messages['movingmessage'] = 'Üzenet mozgatása...'; +$messages['receiptsent'] = 'Az Olvasási Értesítést elküldtük'; +$messages['errorsendingreceipt'] = 'Az Olvasási Értesítést nem sikerült elküldeni'; +$messages['nodeletelastidentity'] = 'Nem törölheti ezt a profilt, ez az egyetlen'; +$messages['addsubfolderhint'] = 'Az új könyvtárat az aktuálisan kiválasztott alkönyvtáraként fogjuk létrehozni'; ?> \ No newline at end of file diff --git a/program/localization/index.inc b/program/localization/index.inc index 782b848..f2cd2f5 100644 --- a/program/localization/index.inc +++ b/program/localization/index.inc @@ -16,7 +16,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: index.inc 1160 2008-03-01 15:32:44Z yllar $ + $Id: index.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -54,6 +54,7 @@ 'it' => 'Italiano', 'ja' => 'Japanese (日本語)', 'kr' => 'Korean', + 'ku' => 'Kurdish (Kurmancî)', 'lv' => 'Latvian', 'lt' => 'Lithuanian', 'mk' => 'Macedonian', diff --git a/program/localization/ku/labels.inc b/program/localization/ku/labels.inc new file mode 100644 index 0000000..3edd3e5 --- /dev/null +++ b/program/localization/ku/labels.inc @@ -0,0 +1,189 @@ + | + +-----------------------------------------------------------------------+ + +*/ + +$labels = array(); +$labels['welcome'] = 'Bixêr hatî $product \\\'ê'; +$labels['username'] = 'Bikarhêner'; +$labels['password'] = 'Nasnav'; +$labels['server'] = 'Pêşkêşkar'; +$labels['login'] = 'Têkevê'; +$labels['logout'] = 'Derkeve'; +$labels['mail'] = 'E-Peyam'; +$labels['settings'] = 'Mîhengên Takekesî'; +$labels['addressbook'] = 'Lênûska Navnîşanan'; +$labels['inbox'] = 'Hatî'; +$labels['drafts'] = 'Hilanînî'; +$labels['sent'] = 'Şandî'; +$labels['trash'] = 'Çop'; +$labels['junk'] = 'Biikêrnehatî'; +$labels['subject'] = 'Mijar'; +$labels['from'] = 'Şandyar'; +$labels['to'] = 'Standyar'; +$labels['cc'] = 'Kopiya Karbon'; +$labels['bcc'] = 'Kopiya karbon a Veşartî'; +$labels['replyto'] = 'Navnîşanên Standyar'; +$labels['date'] = 'Dîrok'; +$labels['size'] = 'Mezinahî'; +$labels['priority'] = 'Girîngî'; +$labels['organization'] = 'Sazî'; +$labels['reply-to'] = 'Navnîşanên Standyar'; +$labels['mailboxlist'] = 'Peldank'; +$labels['messagesfromto'] = 'Peyam $count ên di navbera $from - $to'; +$labels['messagenrof'] = '$nr a peyama $count'; +$labels['moveto'] = 'bibe...'; +$labels['download'] = 'daxe'; +$labels['filename'] = 'Navê pelê'; +$labels['filesize'] = 'Mezinahiya pelê'; +$labels['preferhtml'] = 'Wekî HTML nîşan bide'; +$labels['htmlmessage'] = 'Peyama HTML'; +$labels['prettydate'] = 'Kurtenivîsa Dîrokê'; +$labels['addtoaddressbook'] = 'Têxe lênûska navnîşanan'; +$labels['sun'] = 'Yş'; +$labels['mon'] = 'Dş'; +$labels['tue'] = 'Sş'; +$labels['wed'] = 'Çş'; +$labels['thu'] = 'Pş'; +$labels['fri'] = 'În'; +$labels['sat'] = 'Şe'; +$labels['sunday'] = 'Yekşem'; +$labels['monday'] = 'Duşem'; +$labels['tuesday'] = 'Sêşem'; +$labels['wednesday'] = 'Çarşem'; +$labels['thursday'] = 'Pêncşem'; +$labels['friday'] = 'În'; +$labels['saturday'] = 'Şemî'; +$labels['today'] = 'Îro'; +$labels['checkmail'] = 'Li peyamên nû venihêre'; +$labels['writenewmessage'] = 'Peyameke nû biafirîne'; +$labels['replytomessage'] = 'Bersivê bide peyamê'; +$labels['replytoallmessage'] = 'Bersivê ji bo hemû kesên ku ev peyan standine bişîne'; +$labels['forwardmessage'] = 'Bersivê bide peyamê'; +$labels['deletemessage'] = 'Peyamê jê bibe'; +$labels['movemessagetotrash'] = 'Peyamê dake çopê'; +$labels['printmessage'] = 'Vê peyamê çap bike'; +$labels['previousmessage'] = 'Peyama berê nîşan bide'; +$labels['previousmessages'] = 'Peyamên berê nîşan bide'; +$labels['firstmessage'] = 'Peyama yekemîn nîşan bide'; +$labels['firstmessages'] = 'Peyamên yekemîn nîşan bide'; +$labels['nextmessage'] = 'Peyama di rêzê de nîşan bide'; +$labels['nextmessages'] = 'Peyamên di rêzê de nîşan bide'; +$labels['lastmessage'] = 'Peyama dawî nîşan bide'; +$labels['lastmessages'] = 'Peyamên dawî nîşan bide'; +$labels['backtolist'] = 'Vegere lîsteya peyaman'; +$labels['viewsource'] = 'Çavkaniyê nîşan bide'; +$labels['markmessages'] = 'Peyamê nîşan bike'; +$labels['markread'] = 'Wekî xwendî'; +$labels['markunread'] = 'Wekî nexwendî'; +$labels['select'] = 'Hilbijêre'; +$labels['all'] = 'Hemû'; +$labels['none'] = 'Ne yek jî'; +$labels['unread'] = 'Nexwendî'; +$labels['compact'] = 'Kompakt'; +$labels['empty'] = 'Vala Bike'; +$labels['purge'] = 'Jê bibe'; +$labels['quota'] = 'Bikaranîna dîskê'; +$labels['unknown'] = 'nayê zanîn'; +$labels['unlimited'] = 'bêsînor'; +$labels['quicksearch'] = 'Lêgerîna bilez'; +$labels['resetsearch'] = 'Lêgerînê reset bike'; +$labels['compose'] = 'Peyamekê biafirîne'; +$labels['savemessage'] = 'Hilîne'; +$labels['sendmessage'] = 'Peyamê niha bişîne'; +$labels['addattachment'] = 'Pelekê lê zêde bike'; +$labels['charset'] = 'Curetîp'; +$labels['editortype'] = 'Cureyê serastkat'; +$labels['returnreceipt'] = 'Rapora Vegerînê'; +$labels['checkspelling'] = 'Kontrola rastnivîsê'; +$labels['resumeediting'] = 'Serastkirinê bidomîne'; +$labels['revertto'] = 'Şûnde bîne'; +$labels['attachments'] = 'Pêvek'; +$labels['upload'] = 'Bar bike'; +$labels['close'] = 'Bigire'; +$labels['low'] = 'Nizm'; +$labels['lowest'] = 'Nizmtirîn'; +$labels['normal'] = 'Asayî'; +$labels['high'] = 'Bilind'; +$labels['highest'] = 'Bilintirîn'; +$labels['nosubject'] = '(bê mijar)'; +$labels['showimages'] = 'Xuyakirina wêneyan'; +$labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = 'Deqa tazî'; +$labels['addcc'] = 'Cc Têxê'; +$labels['addbcc'] = 'Bcc Têxê'; +$labels['addreplyto'] = 'Bibersivîne têxê'; +$labels['mdnrequest'] = 'Şandyara/ê vê peyamê xwest dema ku te peyam vekir, jê re hişyarî here. Dixwazî jê re hişyarî here?'; +$labels['receiptread'] = 'Rapora Vegerînê (xwendî)'; +$labels['yourmessage'] = 'Ev rapora vegerîna peyama te ye'; +$labels['receiptnote'] = 'Nîşe: Ev dide zanîn ka peyama te şand hat xwendin an na. Naveroka peyamê bi mîgogerî nayê zanîn.'; +$labels['name'] = 'Navê xuya dibe'; +$labels['firstname'] = 'Nav'; +$labels['surname'] = 'Paşnav'; +$labels['email'] = 'E-Peyam'; +$labels['addcontact'] = 'Têkiliyeke nû têxê'; +$labels['editcontact'] = 'Têkiliyê serast bike'; +$labels['edit'] = 'Serast bike'; +$labels['cancel'] = 'Betal'; +$labels['save'] = 'Tomar bike'; +$labels['delete'] = 'Jê Bibe'; +$labels['newcontact'] = 'kardeke nû a têkiliyê biafirîne'; +$labels['deletecontact'] = 'Têkiliyên hilbijartî jê bibe'; +$labels['composeto'] = 'Ji têkiliya hilbijartî re peyam bişîne'; +$labels['contactsfromto'] = 'Têkiliyên $count ên di navbera $from - $to de'; +$labels['print'] = 'çap bike'; +$labels['export'] = 'Derxe'; +$labels['previouspage'] = 'Seta berê nîşan bide'; +$labels['firstpage'] = 'Seta yekemîn nîşan bide'; +$labels['nextpage'] = 'Seta di rêzê de nîşan bide'; +$labels['lastpage'] = 'Seta dawî nîşan bide'; +$labels['groups'] = 'Kom'; +$labels['personaladrbook'] = 'Navnîşanên Takekesî'; +$labels['settingsfor'] = 'Mîheng ji bo'; +$labels['preferences'] = 'Vebijêrk'; +$labels['userpreferences'] = 'Vebijêrkên bikarhêner'; +$labels['editpreferences'] = 'Vebijêrkên bikarhêner serast bike'; +$labels['identities'] = 'Nasname'; +$labels['manageidentities'] = 'Nasnameyên vê hesabê serast bike'; +$labels['newidentity'] = 'Nasnameya nû'; +$labels['newitem'] = 'Parçeya nû'; +$labels['edititem'] = 'Parçeyê serast bike'; +$labels['setdefault'] = 'Wekî standard tomar bike'; +$labels['language'] = 'Ziman'; +$labels['timezone'] = 'Herêma demê'; +$labels['pagesize'] = 'Hejmara peyamên her rûpelekê'; +$labels['signature'] = 'Şanenav'; +$labels['dstactive'] = 'Demjimêra havînî'; +$labels['htmleditor'] = 'Peyameke HTML biafirîne'; +$labels['htmlsignature'] = 'Şanenava HTML'; +$labels['previewpane'] = 'Panela berê nîşan bide'; +$labels['autosavedraft'] = 'Xweber hilîne'; +$labels['everynminutes'] = 'her $n çirke'; +$labels['never'] = 'qet'; +$labels['folder'] = 'Peldank'; +$labels['folders'] = 'Peldank'; +$labels['foldername'] = 'Navê peldankê'; +$labels['subscribed'] = 'Ni şanenav'; +$labels['messagecount'] = 'Peyam'; +$labels['create'] = 'Biafirîne'; +$labels['createfolder'] = 'Peldankeke nû biafirîne'; +$labels['rename'] = 'Nav biguherîne'; +$labels['renamefolder'] = 'Navê peldankê biguherîne'; +$labels['deletefolder'] = 'Peldankê jê bibe'; +$labels['managefolders'] = 'Rêveberiya peldankan'; +$labels['sortby'] = 'Şêweyê rêzkirinê'; +$labels['sortasc'] = 'Wekî zêde dibe'; +$labels['sortdesc'] = 'Wekî kêm dibe'; + +?> diff --git a/program/localization/ku/messages.inc b/program/localization/ku/messages.inc new file mode 100644 index 0000000..fe1ca32 --- /dev/null +++ b/program/localization/ku/messages.inc @@ -0,0 +1,79 @@ + | + +-----------------------------------------------------------------------+ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'Têketin têk çû'; +$messages['cookiesdisabled'] = 'Geroka te destûrê nade çerezan'; +$messages['sessionerror'] = 'Danişîna te çewt e an jî bi dawî bûye'; +$messages['imaperror'] = 'Girêdana pêşkêşkara IMAP têk çû'; +$messages['nomessagesfound'] = 'Di vê peyamdankê de tu peyam nehat dîtin'; +$messages['loggedout'] = 'Te danişînî bi dawî anî. Oxir be!'; +$messages['mailboxempty'] = 'Peyamdank vala ye'; +$messages['loading'] = 'Tê barkirin...'; +$messages['loadingdata'] = 'Dane tên barkirin...'; +$messages['checkingmail'] = 'Li peyamên nû vedinihêre...'; +$messages['sendingmessage'] = 'Peyamê dişîne...'; +$messages['messagesent'] = 'Peyam hate şandin'; +$messages['savingmessage'] = 'Peyam tê hilanîn...'; +$messages['messagesaved'] = 'Peyam di Hilanînî de hat hilanîn'; +$messages['successfullysaved'] = 'Hat hilanîn'; +$messages['addedsuccessfully'] = 'Têkilî li navnîşanan hat zêdekirin'; +$messages['contactexists'] = 'Têkiliyeke bi vê navnîşanê jixwe heye'; +$messages['blockedimages'] = 'Ji bo ewlekariya te wêneyên cuda yên vê peyamê hatin astenkirin.'; +$messages['encryptedmessage'] = 'Ev peyamenek şîfrekirî ye, bibore, nayê vekirin!'; +$messages['nocontactsfound'] = 'Tu têkiliyek nehat dîtin'; +$messages['contactnotfound'] = 'Têkiliya dihat xwestin nehat dîtin'; +$messages['sendingfailed'] = 'Peyam nehat şandin'; +$messages['errorsaving'] = 'Di tomarkirinê de çewtiyek derket'; +$messages['errormoving'] = 'Ciyê peyamê nehat guherandin'; +$messages['errordeleting'] = 'Peyam nehat jêbirin'; +$messages['deletecontactconfirm'] = 'Ji dil dixwazî têkiliya/ên nîşankirî jê bibî?'; +$messages['deletemessagesconfirm'] = 'Ji dil dixwazî peya/ên nîşankirî jê bibî?'; +$messages['deletefolderconfirm'] = 'Ji dil dixwazî vê peldankê jê bibî?'; +$messages['purgefolderconfirm'] = 'Ji dil dixwazî hemû peyamên di vê peldankê de jê bibî?'; +$messages['formincomplete'] = 'Form bi temamî nehat tijekirin'; +$messages['noemailwarning'] = 'Tika ye, navnîşaneke rast têkevê'; +$messages['nonamewarning'] = 'Tika ye, navekî têkevê'; +$messages['nopagesizewarning'] = 'Tika ye, mezinahiyeke pelê têkevê'; +$messages['norecipientwarning'] = 'Tika ye, herî kêm standyarekê têkevê'; +$messages['nosubjectwarning'] = 'Qada "Mijar"ê vala ye. Dixwazî niha tiştekî lê binivîsî?'; +$messages['nobodywarning'] = 'Peyamê bê nivîs bişeyînî?'; +$messages['notsentwarning'] = 'Peyam nehat şandin. Dixwazî peyamê pişTgo bikî?'; +$messages['noldapserver'] = 'Tika ye, ji bo lêgerînê pêşkêşkareke Idap têkevê'; +$messages['nocontactsreturned'] = 'Tu têkilî nehat dîtin'; +$messages['nosearchname'] = 'Tika ye, nav an jî navnîşaneke têkiliyê têkevê'; +$messages['searchsuccessful'] = '$nr peyam hat(in) dîtin'; +$messages['searchnomatch'] = 'Di lêgerînê de tu tişt nehat dîtin'; +$messages['searching'] = 'Digere...'; +$messages['checking'] = 'Vedinihêre...'; +$messages['nospellerrors'] = 'Tu şaşiyeke rastnivîsê nehat dîtin'; +$messages['folderdeleted'] = 'Peldank hat jêbirin'; +$messages['deletedsuccessfully'] = 'Hat jêbirin'; +$messages['converting'] = 'Formatkirin ji peyamê tê birin...'; +$messages['messageopenerror'] = 'Peyam ji pêşkêşkar nehat barkirin'; +$messages['fileuploaderror'] = 'Barkirina pelê têk çû'; +$messages['filesizeerror'] = 'Pel pir mezin e. Herî zêde divê $size be'; +$messages['copysuccess'] = '$nr navnîşan hat(in) jibergirtin'; +$messages['copyerror'] = 'Tu navnîşan nehat jibergirtin'; +$messages['sourceisreadonly'] = 'Çavkaniya vê navnîşanê tenê-xwendin e'; +$messages['errorsavingcontact'] = 'Navnîşana têkiliyê nehat barkirin'; +$messages['movingmessage'] = 'Ciyê peyamê tê guhertin...'; +$messages['receiptsent'] = 'Rapora şandina serkeftî'; +$messages['errorsendingreceipt'] = 'Rapor nehat şandin'; +$messages['nodeletelastidentity'] = 'Nikarî vê nasnameyê jê bibî. Ew ya dawî ye.'; +$messages['addsubfolderhint'] = 'Ev peldank wê wekî binepeldanka ya heyî bê afirandin'; + +?> diff --git a/program/localization/nl_NL/labels.inc b/program/localization/nl_NL/labels.inc index 94f2330..f746fb1 100644 --- a/program/localization/nl_NL/labels.inc +++ b/program/localization/nl_NL/labels.inc @@ -13,7 +13,7 @@ | Author: Mark Moses | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 1183 2008-03-04 22:10:15Z yllar $ + @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $ */ diff --git a/program/localization/pl/labels.inc b/program/localization/pl/labels.inc index 9158e4f..24b9baa 100644 --- a/program/localization/pl/labels.inc +++ b/program/localization/pl/labels.inc @@ -17,7 +17,7 @@ | Wojciech Szczepucha | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $ + @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -131,8 +131,8 @@ $labels['plaintoggle'] = 'Zwykły tekst'; $labels['addcc'] = 'Dodaj Cc'; $labels['addbcc'] = 'Dodaj Bcc'; $labels['addreplyto'] = 'Dodaj Reply-To'; -$labels['mdnrequest'] = 'Nadawca poprosił o potwierdzenie przeczytania tej wiadomości. Czy chcesz go powiadomić?'; -$labels['receiptread'] = 'Potwierdzenie odbioru'; +$labels['mdnrequest'] = 'Nadawca zażądał potwierdzenia przeczytania tej wiadomości. Czy chcesz go powiadomić?'; +$labels['receiptread'] = 'Potwierdzenie otrzymania'; $labels['yourmessage'] = 'To jest potwierdzenie dostarczenia Twojej wiadomości'; $labels['receiptnote'] = 'Uwaga: To potwierdzenie dostarczenia wiadomości oznacza tylko, że wiadomość została wyświetlona na komputerze adresata. Nie ma żadnej gwarancji, że odbiorca przeczytał czy też zrozumiał treść wiadomości.'; $labels['name'] = 'Nazwa'; diff --git a/program/localization/pl/messages.inc b/program/localization/pl/messages.inc index 02cf26b..904a24d 100644 --- a/program/localization/pl/messages.inc +++ b/program/localization/pl/messages.inc @@ -17,7 +17,7 @@ | Wojciech Szczepucha | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 1086 2008-02-15 05:43:32Z tomekp $ + @version $Id: messages.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -52,8 +52,8 @@ $messages['deletemessagesconfirm'] = 'Czy na pewno chcesz usunąć wybrane wiado $messages['deletefolderconfirm'] = 'Czy na pewno chcesz usunąć wybrany folder?'; $messages['purgefolderconfirm'] = 'Czy na pewno chcesz usunąć wszystkie wiadomości w tym folderze?'; $messages['formincomplete'] = 'Uzupełnij formularz!'; -$messages['noemailwarning'] = 'Wpisz poprawny adres e-mail!'; -$messages['nonamewarning'] = 'Podaj imię!'; +$messages['noemailwarning'] = 'Podaj poprawny adres e-mail!'; +$messages['nonamewarning'] = 'Podaj nazwę!'; $messages['nopagesizewarning'] = 'Podaj poprawną wartość!'; $messages['norecipientwarning'] = 'Podaj co najmniej jednego odbiorcę!'; $messages['nosubjectwarning'] = 'Nie podano tematu wiadomości. Czy chcesz go teraz uzupełnić?'; diff --git a/program/localization/se/labels.inc b/program/localization/se/labels.inc index d8fa1bd..3401309 100644 --- a/program/localization/se/labels.inc +++ b/program/localization/se/labels.inc @@ -15,7 +15,7 @@ | Jonas Näsholm | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 1143 2008-02-26 20:50:10Z yllar $ + @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -136,7 +136,7 @@ $labels['receiptnote'] = 'Notera: Det här kvittot berättar bara att meddelande $labels['name'] = 'Visa namn'; $labels['firstname'] = 'Förnamn'; $labels['surname'] = 'Efternamn'; -$labels['email'] = 'Meddelande'; +$labels['email'] = 'E-post'; $labels['addcontact'] = 'Lägg till ny kontakt'; $labels['editcontact'] = 'Redigera kontakt'; $labels['edit'] = 'Redigera'; @@ -191,4 +191,4 @@ $labels['sortby'] = 'Sortera pÃ¥'; $labels['sortasc'] = 'Sortera stigande'; $labels['sortdesc'] = 'Sortera fallande'; -?> \ No newline at end of file +?> diff --git a/program/localization/zh_CN/labels.inc b/program/localization/zh_CN/labels.inc index a462589..19486f5 100644 --- a/program/localization/zh_CN/labels.inc +++ b/program/localization/zh_CN/labels.inc @@ -13,7 +13,7 @@ | Author: Xue zhong sheng | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 1143 2008-02-26 20:50:10Z yllar $ + @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -30,8 +30,8 @@ $labels['addressbook'] = '通讯录'; $labels['inbox'] = '收件箱'; $labels['drafts'] = '草稿箱'; $labels['sent'] = '已发送邮件'; -$labels['trash'] = '垃圾邮件'; -$labels['junk'] = '回收箱'; +$labels['trash'] = '回收站'; +$labels['junk'] = '垃圾邮件'; $labels['subject'] = '主题'; $labels['from'] = '发件人'; $labels['to'] = '收件人'; @@ -99,8 +99,8 @@ $labels['unlimited'] = '无限制'; $labels['quicksearch'] = '快速查找'; $labels['resetsearch'] = '重新查找'; $labels['compose'] = '写新邮件'; -$labels['sendmessage'] = '立即发送'; $labels['savemessage'] = '暂存至草稿箱'; +$labels['sendmessage'] = '立即发送'; $labels['addattachment'] = '添加附件'; $labels['charset'] = '字符集'; $labels['editortype'] = '编辑器类型'; @@ -154,7 +154,7 @@ $labels['edititem'] = '修改条目'; $labels['setdefault'] = '默认值'; $labels['language'] = '语言'; $labels['timezone'] = '时区'; -$labels['pagesize'] = '第页邮件数量'; +$labels['pagesize'] = '每页邮件数量'; $labels['signature'] = '签名'; $labels['dstactive'] = '夏令时'; $labels['htmleditor'] = '使用HTML编辑器'; diff --git a/program/localization/zh_CN/messages.inc b/program/localization/zh_CN/messages.inc index 94c524a..dcf5a9a 100644 --- a/program/localization/zh_CN/messages.inc +++ b/program/localization/zh_CN/messages.inc @@ -13,7 +13,7 @@ | Author: Xue zhong sheng | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $ + @version $Id: messages.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -73,5 +73,10 @@ $messages['copysuccess'] = '成功复制 $nr 个地址'; $messages['copyerror'] = '无法复制地址'; $messages['sourceisreadonly'] = '源地址为只读'; $messages['errorsavingcontact'] = '无法保存联系人的地址'; +$messages['movingmessage'] = '移动邮件到...'; +$messages['receiptsent'] = '成功发送了一个已读回执'; +$messages['errorsendingreceipt'] = '无法发送回执'; +$messages['nodeletelastidentity'] = '无法删除这个身份,这是最后一个。'; +$messages['addsubfolderhint'] = '文件夹将被作为所选中文件夹的子目录'; ?> diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index 71dcbba..661649d 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: compose.inc 1039 2008-02-11 17:39:31Z till $ + $Id: compose.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -90,7 +90,11 @@ if (!empty($msg_uid)) // similar as in program/steps/mail/show.inc $MESSAGE = array('UID' => $msg_uid); $MESSAGE['headers'] = &$IMAP->get_headers($msg_uid); - $MESSAGE['structure'] = &$IMAP->get_structure($msg_uid); + $MESSAGE['structure'] = &$IMAP->get_structure($msg_uid); + + if (!empty($MESSAGE['headers']->charset)) + $IMAP->set_charset($MESSAGE['headers']->charset); + $MESSAGE['subject'] = $IMAP->decode_header($MESSAGE['headers']->subject); $MESSAGE['parts'] = $IMAP->get_mime_numbers($MESSAGE['structure']); @@ -889,7 +893,7 @@ if ($result = $CONTACTS->list_records()) { while ($sql_arr = $result->iterate()) if ($sql_arr['email']) - $a_contacts[] = format_email_recipient($sql_arr['email'], JQ($sql_arr['name'])); + $a_contacts[] = format_email_recipient($sql_arr['email'], $sql_arr['name']); } if (isset($CONFIG['ldap_public'])) { @@ -914,7 +918,7 @@ if (isset($CONFIG['ldap_public'])) $email = $results->records[$i]['email']; $name = $results->records[$i]['name']; - $a_contacts[] = format_email_recipient($email, JQ($name)); + $a_contacts[] = format_email_recipient($email, $name); } } $LDAP->close(); diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 7df8dab..1668994 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: func.inc 1125 2008-02-20 22:47:06Z thomasb $ + $Id: func.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -695,10 +695,10 @@ function rcmail_print_body($part, $safe=FALSE, $plain=FALSE) $quotation = ''; $q = 0; - if (preg_match('/^(>+\s*)/', $line, $regs)) + if (preg_match('/^(>+\s*)+/', $line, $regs)) { - $q = strlen(preg_replace('/\s/', '', $regs[1])); - $line = substr($line, strlen($regs[1])); + $q = strlen(preg_replace('/\s/', '', $regs[0])); + $line = substr($line, strlen($regs[0])); if ($q > $quote_level) $quotation = str_repeat('
      ', $q - $quote_level); diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc index 12dd18a..f5168dd 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -16,7 +16,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: sendmail.inc 1120 2008-02-19 23:59:38Z thomasb $ + $Id: sendmail.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -212,12 +212,16 @@ if (!empty($_POST['_receipt'])) // additional headers $headers['Message-ID'] = $message_id; $headers['X-Sender'] = $from; -$headers['Received'] = wordwrap('from ' . - (isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? - gethostbyaddr($_SERVER['HTTP_X_FORWARDED_FOR']).' ['.$_SERVER['HTTP_X_FORWARDED_FOR'].'] via ' : '') . - gethostbyaddr($_SERVER['REMOTE_ADDR']).' ['.$_SERVER['REMOTE_ADDR'].'] with ' . - $_SERVER['SERVER_PROTOCOL'].' ('.$_SERVER['REQUEST_METHOD'].'); ' . date('r'), - 69, rcmail_header_delm() . "\t"); + +if ($CONFIG['http_received_header']) +{ + $nldlm = rcmail_header_delm() . "\t"; + $headers['Received'] = wordwrap('from ' . (isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? + gethostbyaddr($_SERVER['HTTP_X_FORWARDED_FOR']).' ['.$_SERVER['HTTP_X_FORWARDED_FOR'].']'.$nldlm.' via ' : '') . + gethostbyaddr($_SERVER['REMOTE_ADDR']).' ['.$_SERVER['REMOTE_ADDR'].']'.$nldlm.'with ' . + $_SERVER['SERVER_PROTOCOL'].' ('.$_SERVER['REQUEST_METHOD'].'); ' . date('r'), + 69, $nldlm); +} if (!empty($CONFIG['useragent'])) $headers['User-Agent'] = $CONFIG['useragent']; @@ -245,6 +249,11 @@ if ($isHtml) // add a plain text version of the e-mail as an alternative part. $h2t = new html2text($message_body); $plainTextPart = wordwrap($h2t->get_text(), 998, "\r\n", true); + if (!strlen($plainTextPart)) + { + // empty message body breaks attachment handling in drafts + $plainTextPart = "\r\n"; + } $MAIL_MIME->setTXTBody(html_entity_decode($plainTextPart, ENT_COMPAT, 'utf-8')); // look for "emoticon" images from TinyMCE and copy into message as attachments @@ -254,6 +263,11 @@ else { $message_body = wordwrap($message_body, 75, "\r\n"); $message_body = wordwrap($message_body, 998, "\r\n", true); + if (!strlen($message_body)) + { + // empty message body breaks attachment handling in drafts + $message_body = "\r\n"; + } $MAIL_MIME->setTXTBody($message_body, FALSE, TRUE); } diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc index ec79c2c..344ce58 100644 --- a/program/steps/mail/show.inc +++ b/program/steps/mail/show.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: show.inc 1046 2008-02-11 23:07:44Z thomasb $ + $Id: show.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -30,6 +30,10 @@ if ($_GET['_uid']) $MESSAGE = array('UID' => get_input_value('_uid', RCUBE_INPUT_GET)); $MESSAGE['headers'] = $IMAP->get_headers($MESSAGE['UID']); + // set message charset as default + if (!empty($MESSAGE['headers']->charset)) + $IMAP->set_charset($MESSAGE['headers']->charset); + // go back to list if message not found (wrong UID) if (!$MESSAGE['headers']) { diff --git a/program/steps/mail/viewsource.inc b/program/steps/mail/viewsource.inc index 5f10a56..9ad8c14 100644 --- a/program/steps/mail/viewsource.inc +++ b/program/steps/mail/viewsource.inc @@ -5,7 +5,7 @@ | program/steps/mail/viewsource.inc | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -15,26 +15,28 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: viewsource.inc 850 2007-10-03 00:13:32Z ihug $ + $Id: viewsource.inc 1255 2008-04-05 12:49:21Z thomasb $ */ // similar code as in program/steps/mail/get.inc if ($uid = get_input_value('_uid', RCUBE_INPUT_GET)) - { - header('Content-Type: text/plain'); - //@ob_end_clean(); +{ + $headers = $IMAP->get_headers($uid); + $charset = $headers->charset ? $headers->charset : $IMAP->default_charset; + header("Content-Type: text/plain; charset={$charset}"); $IMAP->print_raw_body($uid); - } +} else - { - raise_error(array('code' => 500, - 'type' => 'php', - 'message' => 'Message UID '.$uid.' not found'), - TRUE, - TRUE); - } +{ + raise_error(array( + 'code' => 500, + 'type' => 'php', + 'message' => 'Message UID '.$uid.' not found'), + true, + true); +} exit; ?> diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index f8190c0..80ed8fc 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: func.inc 1176 2008-03-03 21:47:59Z thomasb $ + $Id: func.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -67,14 +67,16 @@ function rcmail_user_prefs_form($attrib) $select_timezone = new select(array('name' => '_timezone', 'id' => $field_id)); $select_timezone->add('(GMT -11:00) Midway Island, Samoa', '-11'); $select_timezone->add('(GMT -10:00) Hawaii', '-10'); + $select_timezone->add('(GMT -9:30) Marquesas Islands', '-9.5'); $select_timezone->add('(GMT -9:00) Alaska', '-9'); $select_timezone->add('(GMT -8:00) Pacific Time (US/Canada)', '-8'); $select_timezone->add('(GMT -7:00) Mountain Time (US/Canada)', '-7'); $select_timezone->add('(GMT -6:00) Central Time (US/Canada), Mexico City', '-6'); $select_timezone->add('(GMT -5:00) Eastern Time (US/Canada), Bogota, Lima', '-5'); - $select_timezone->add('(GMT -4:00) Atlantic Time (Canada), Caracas, La Paz', '-4'); - $select_timezone->add('(GMT -3:00) Brazil, Buenos Aires, Georgetown', '-3'); + $select_timezone->add('(GMT -4:30) Caracas', '-4.5'); + $select_timezone->add('(GMT -4:00) Atlantic Time (Canada), La Paz', '-4'); $select_timezone->add('(GMT -3:30) Nfld Time (Canada), Nfld, S. Labador', '-3.5'); + $select_timezone->add('(GMT -3:00) Brazil, Buenos Aires, Georgetown', '-3'); $select_timezone->add('(GMT -2:00) Mid-Atlantic', '-2'); $select_timezone->add('(GMT -1:00) Azores, Cape Verde Islands', '-1'); $select_timezone->add('(GMT) Western Europe, London, Lisbon, Casablanca', '0'); @@ -88,13 +90,18 @@ function rcmail_user_prefs_form($attrib) $select_timezone->add('(GMT +5:30) Chennai, Kolkata, Mumbai, New Delhi', '5.5'); $select_timezone->add('(GMT +5:45) Kathmandu', '5.75'); $select_timezone->add('(GMT +6:00) Almaty, Dhaka, Colombo', '6'); + $select_timezone->add('(GMT +6:30) Cocos Islands, Myanmar', '6.5'); $select_timezone->add('(GMT +7:00) Bangkok, Hanoi, Jakarta', '7'); $select_timezone->add('(GMT +8:00) Beijing, Perth, Singapore, Taipei', '8'); + $select_timezone->add('(GMT +8:45) Caiguna, Eucla, Border Village', '8.75'); $select_timezone->add('(GMT +9:00) Tokyo, Seoul, Yakutsk', '9'); $select_timezone->add('(GMT +9:30) Adelaide, Darwin', '9.5'); $select_timezone->add('(GMT +10:00) EAST/AEST: Sydney, Guam, Vladivostok', '10'); + $select_timezone->add('(GMT +10:30) New South Wales', '10.5'); $select_timezone->add('(GMT +11:00) Magadan, Solomon Islands', '11'); + $select_timezone->add('(GMT +11:30) Norfolk Island', '11.5'); $select_timezone->add('(GMT +12:00) Auckland, Wellington, Kamchatka', '12'); + $select_timezone->add('(GMT +12:45) Chatham Islands', '12.75'); $select_timezone->add('(GMT +13:00) Tonga, Pheonix Islands', '13'); $select_timezone->add('(GMT +14:00) Kiribati', '14'); diff --git a/program/steps/settings/manage_folders.inc b/program/steps/settings/manage_folders.inc index ee368ad..6e89beb 100644 --- a/program/steps/settings/manage_folders.inc +++ b/program/steps/settings/manage_folders.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: manage_folders.inc 1159 2008-02-29 11:49:09Z thomasb $ + $Id: manage_folders.inc 1255 2008-04-05 12:49:21Z thomasb $ */ @@ -28,8 +28,8 @@ $OUTPUT->include_script('list.js'); // subscribe to one or more mailboxes if ($_action=='subscribe') { - if ($mboxes = get_input_value('_mboxes', RCUBE_INPUT_POST)) - $IMAP->subscribe($mboxes); + if ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST)) + $IMAP->subscribe(array($mbox)); if ($OUTPUT->ajax_call) $OUTPUT->remote_response('// subscribed'); @@ -38,8 +38,8 @@ if ($_action=='subscribe') // unsubscribe one or more mailboxes else if ($_action=='unsubscribe') { - if ($mboxes = get_input_value('_mboxes', RCUBE_INPUT_POST)) - $IMAP->unsubscribe($mboxes); + if ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST)) + $IMAP->unsubscribe(array($mbox)); if ($OUTPUT->ajax_call) $OUTPUT->remote_response('// unsubscribed'); diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..1f53798 --- /dev/null +++ b/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / diff --git a/skins/default/common.css b/skins/default/common.css index 82e1d40..4d41b14 100644 --- a/skins/default/common.css +++ b/skins/default/common.css @@ -70,6 +70,7 @@ input, textarea padding: 1px; padding-left: 3px; padding-right: 3px; + color: #333333; background-color: #ffffff; border: 1px solid #666666; } diff --git a/skins/default/editor_content.css b/skins/default/editor_content.css index e8b1c88..31a0a59 100644 --- a/skins/default/editor_content.css +++ b/skins/default/editor_content.css @@ -1,61 +1,15 @@ -/* This file contains the CSS data for the editable area(iframe) of TinyMCE */ -/* You can extend this CSS by adding your own CSS file with the the content_css option */ - -body, td, pre { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 12px; -} - -body { +/* This file contains the CSS data for the editable area(iframe) of TinyMCE */ +/* You can extend this CSS by adding your own CSS file with the the content_css option */ + +body, td, pre { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; +} + +body { background-color: #FFFFFF; margin-left: 4px; margin-right: 4px; margin-top: 2px; -} - -.mceVisualAid { - border: 1px dashed #BBBBBB !important; -} - -div.mceVisualAid { - background-image:url('../images/spacer.gif'); - visibility: visible !important; -} - -.mceItemAnchor { - width: 12px; - line-height: 6px; - overflow: hidden; - padding-left: 12px; - background-image: url('../images/anchor_symbol.gif'); - background-position: bottom; - background-repeat: no-repeat; -} - -/* Important is needed in Gecko browsers inorder to style links */ -/* -a { - color: green !important; -} -*/ - -/* Style selection range colors in Gecko browsers */ -/* -::-moz-selection { - background-color: red; - color: green; -} -*/ - -/* MSIE specific */ - -* html body { - scrollbar-3dlight-color: #F0F0EE; - scrollbar-arrow-color: #676662; - scrollbar-base-color: #F0F0EE; - scrollbar-darkshadow-color: #DDDDDD; - scrollbar-face-color: #E0E0DD; - scrollbar-highlight-color: #F0F0EE; - scrollbar-shadow-color: #F0F0EE; - scrollbar-track-color: #F5F5F5; -} +} + diff --git a/skins/default/includes/header.html b/skins/default/includes/header.html index a7e034a..2e47ff9 100644 --- a/skins/default/includes/header.html +++ b/skins/default/includes/header.html @@ -1,3 +1,3 @@ - + diff --git a/skins/default/mail.css b/skins/default/mail.css index aa3f643..69762b6 100644 --- a/skins/default/mail.css +++ b/skins/default/mail.css @@ -153,6 +153,9 @@ td.formlinks a:visited left: 20px; right: 20px; bottom: 20px; + /* css hack for IE */ + width: expression((parseInt(document.documentElement.clientWidth)-40)+'px'); + height: expression((parseInt(document.documentElement.clientHeight)-100)+'px'); } #mailcontframe @@ -202,8 +205,6 @@ td.formlinks a:visited height: 100%; border: 1px solid #999999; background-color: #F9F9F9; - /* css hack for IE */ - height: expression(parseInt(document.getElementById('messagepartcontainer').offsetHeight)+'px'); } diff --git a/skins/default/settings.css b/skins/default/settings.css index 7ee50f5..9f0c8f3 100644 --- a/skins/default/settings.css +++ b/skins/default/settings.css @@ -69,7 +69,7 @@ span.tablink-selected a #folder-manager { - width: 540px; + width: 600px; bottom: 140px; overflow: auto; border: 1px solid #999999; @@ -119,7 +119,7 @@ span.tablink-selected a #bottomboxes { position: absolute; - width: 540px; + width: 600px; height: 120px; left: 20px; bottom: 20px; @@ -142,7 +142,7 @@ div.boxtitle, div.settingsbox { - width: 540px; + width: 600px; margin-top: 20px; margin-bottom: 20px; border: 1px solid #999999; @@ -185,28 +185,15 @@ div.settingspart #subscription-table thead td.name { - width: 240px; + width: 250px; } #subscription-table thead td.msgcount { - width: 70px; + width: 90px; } #subscription-table thead td.subscribed { - width: 60px; -} - -#subscription-table tbody td.msgcount, -#subscription-table tbody td.subscribed -{ - padding-left: 18px; -} - -#subscription-table thead td.rename, -#subscription-table thead td.delete -{ - width: 20px; - text-align: center; + width: 90px; } diff --git a/skins/default/templates/login.html b/skins/default/templates/login.html index 1950be2..2a48f48 100644 --- a/skins/default/templates/login.html +++ b/skins/default/templates/login.html @@ -28,7 +28,7 @@ -<roundcube:object name='productname' /> +<roundcube:object name='productname' /> diff --git a/skins/default/templates/printmessage.html b/skins/default/templates/printmessage.html index 223c98b..eecff69 100644 --- a/skins/default/templates/printmessage.html +++ b/skins/default/templates/printmessage.html @@ -6,7 +6,7 @@ - +