diff -Nru roundcube-0.6+dfsg/bin/dumpschema.sh roundcube-0.7.1/bin/dumpschema.sh --- roundcube-0.6+dfsg/bin/dumpschema.sh 1970-01-01 00:00:00.000000000 +0000 +++ roundcube-0.7.1/bin/dumpschema.sh 2012-01-17 07:50:40.000000000 +0000 @@ -0,0 +1,98 @@ +#!/usr/bin/env php + | + +-----------------------------------------------------------------------+ + + $Id: dumpschema.sh 4677 2011-04-20 13:10:45Z alec $ + +*/ + +define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' ); + +require INSTALL_PATH.'program/include/clisetup.php'; + +/** callback function for schema dump **/ +function print_schema($dump) +{ + foreach ((array)$dump as $part) + echo $dump . "\n"; +} + +$config = new rcube_config(); + +// don't allow public access if not in devel_mode +if (!$config->get('devel_mode') && $_SERVER['REMOTE_ADDR']) { + header("HTTP/1.0 401 Access denied"); + die("Access denied!"); +} + +$options = array( + 'use_transactions' => false, + 'log_line_break' => "\n", + 'idxname_format' => '%s', + 'debug' => false, + 'quote_identifier' => true, + 'force_defaults' => false, + 'portability' => false, +); + +$dsnw = $config->get('db_dsnw'); +$dsn_array = MDB2::parseDSN($dsnw); + +// set options for postgres databases +if ($dsn_array['phptype'] == 'pgsql') { + $options['disable_smart_seqname'] = true; + $options['seqname_format'] = '%s'; +} + +$schema =& MDB2_Schema::factory($dsnw, $options); +$schema->db->supported['transactions'] = false; + + +// send as text/xml when opened in browser +if ($_SERVER['REMOTE_ADDR']) + header('Content-Type: text/xml'); + + +if (PEAR::isError($schema)) { + $error = $schema->getMessage() . ' ' . $schema->getUserInfo(); +} +else { + $dump_config = array( + // 'output_mode' => 'file', + 'output' => 'print_schema', + ); + + $definition = $schema->getDefinitionFromDatabase(); + $definition['charset'] = 'utf8'; + + if (PEAR::isError($definition)) { + $error = $definition->getMessage() . ' ' . $definition->getUserInfo(); + } + else { + $operation = $schema->dumpDatabase($definition, $dump_config, MDB2_SCHEMA_DUMP_STRUCTURE); + if (PEAR::isError($operation)) { + $error = $operation->getMessage() . ' ' . $operation->getUserInfo(); + } + } +} + +$schema->disconnect(); + +if ($error && !$_SERVER['REMOTE_ADDR']) + fputs(STDERR, $error); + +?> diff -Nru roundcube-0.6+dfsg/bin/indexcontacts.sh roundcube-0.7.1/bin/indexcontacts.sh --- roundcube-0.6+dfsg/bin/indexcontacts.sh 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/bin/indexcontacts.sh 2012-01-17 07:50:40.000000000 +0000 @@ -16,14 +16,14 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: indexcontacts.sh 4623 2011-03-28 06:49:02Z alec $ + $Id: indexcontacts.sh 5307 2011-10-05 09:28:25Z alec $ */ define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' ); require_once INSTALL_PATH.'program/include/clisetup.php'; - +ini_set('memory_limit', -1); // connect to DB $RCMAIL = rcmail::get_instance(); @@ -47,7 +47,7 @@ unset($row['words']); $contacts->update($row['ID'], $row); } - + echo "done.\n"; } diff -Nru roundcube-0.6+dfsg/bin/installto.sh roundcube-0.7.1/bin/installto.sh --- roundcube-0.6+dfsg/bin/installto.sh 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/bin/installto.sh 2012-01-17 07:50:40.000000000 +0000 @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: installto.sh 4677 2011-04-20 13:10:45Z alec $ + $Id: installto.sh 5311 2011-10-06 08:20:11Z thomasb $ */ @@ -45,13 +45,13 @@ $err = false; echo "Copying files to target location..."; foreach (array('program','installer','bin','SQL','plugins','skins/default') as $dir) { - if (!system("rsync -avuC " . INSTALL_PATH . "$dir/* $target_dir/$dir/")) { + if (!system("rsync -avC " . INSTALL_PATH . "$dir/* $target_dir/$dir/")) { $err = true; break; } } foreach (array('index.php','.htaccess','config/main.inc.php.dist','config/db.inc.php.dist','CHANGELOG','README','UPGRADING') as $file) { - if (!system("rsync -avu " . INSTALL_PATH . "$file $target_dir/$file")) { + if (!system("rsync -av " . INSTALL_PATH . "$file $target_dir/$file")) { $err = true; break; } diff -Nru roundcube-0.6+dfsg/bin/jsshrink.sh roundcube-0.7.1/bin/jsshrink.sh --- roundcube-0.6+dfsg/bin/jsshrink.sh 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/bin/jsshrink.sh 2012-01-17 07:50:40.000000000 +0000 @@ -1,10 +1,11 @@ #!/bin/sh JS_DIR=`dirname "$0"`/../program/js +JAR_DIR='/tmp' CLOSURE_COMPILER_URL='http://closure-compiler.googlecode.com/files/compiler-latest.zip' do_shrink() { rm -f "$2" - java -jar compiler.jar --compilation_level=SIMPLE_OPTIMIZATIONS --js="$1" --js_output_file="$2" + java -jar $JAR_DIR/compiler.jar --compilation_level=SIMPLE_OPTIMIZATIONS --js="$1" --js_output_file="$2" } if [ ! -d "$JS_DIR" ]; then @@ -12,6 +13,10 @@ exit 1 fi +if [ ! -w "$JAR_DIR" ]; then + JAR_DIR=`dirname "$0"` +fi + if java -version >/dev/null 2>&1; then : else @@ -19,16 +24,16 @@ exit 1 fi -if [ ! -r "compiler.jar" ]; then +if [ ! -r "$JAR_DIR/compiler.jar" ]; then if which wget >/dev/null 2>&1 && which unzip >/dev/null 2>&1; then wget "$CLOSURE_COMPILER_URL" -O "/tmp/$$.zip" elif which curl >/dev/null 2>&1 && which unzip >/dev/null 2>&1; then curl "$CLOSURE_COMPILER_URL" -o "/tmp/$$.zip" else - echo "Please download $CLOSURE_COMPILER_URL and extract compiler.jar to this directory." + echo "Please download $CLOSURE_COMPILER_URL and extract compiler.jar to $JAR_DIR/." exit 1 fi - unzip "/tmp/$$.zip" "compiler.jar" + (cd $JAR_DIR && unzip "/tmp/$$.zip" "compiler.jar") rm -f "/tmp/$$.zip" fi diff -Nru roundcube-0.6+dfsg/bin/makedoc.sh roundcube-0.7.1/bin/makedoc.sh --- roundcube-0.6+dfsg/bin/makedoc.sh 1970-01-01 00:00:00.000000000 +0000 +++ roundcube-0.7.1/bin/makedoc.sh 2012-01-17 07:50:40.000000000 +0000 @@ -0,0 +1,25 @@ +#!/bin/sh + +TITLE="Roundcube Classes" +PACKAGES="Core" + +INSTALL_PATH="`dirname $0`/.." +PATH_PROJECT=$INSTALL_PATH/program/include +PATH_DOCS=$INSTALL_PATH/doc/phpdoc +BIN_PHPDOC="`/usr/bin/which phpdoc`" + +if [ ! -x "$BIN_PHPDOC" ] +then + echo "phpdoc not found: $BIN_PHPDOC" + exit 1 +fi + +OUTPUTFORMAT=HTML +CONVERTER=frames +TEMPLATE=earthli +PRIVATE=off + +# make documentation +$BIN_PHPDOC -d $PATH_PROJECT -t $PATH_DOCS -ti "$TITLE" -dn $PACKAGES \ +-o $OUTPUTFORMAT:$CONVERTER:$TEMPLATE -pp $PRIVATE + diff -Nru roundcube-0.6+dfsg/CHANGELOG roundcube-0.7.1/CHANGELOG --- roundcube-0.6+dfsg/CHANGELOG 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/CHANGELOG 2012-01-17 07:50:40.000000000 +0000 @@ -1,96 +1,94 @@ CHANGELOG Roundcube Webmail =========================== -- Fix bug where the last identity is used on reply (#1488101) -- Fix locked folder rename option on servers supporting RFC2086 only (#1488089) -- Fix encoding of LDAP contacts identifiers (#1488079) -- Fix session race conditions when composing new messages -- jQuery 1.6.4 -- Fix handling of binary attachments encoded with quoted-printable (#1488065) -- Fix text-overflow:ellipsis issues on messages list in FF7 and Webkit (#1488061) -- Fix handling of links with IP address -- Fix bug where message list filter was reset on folder compacting (#1488076) +- Fix bug in handling of base href and inline content (#1488290) +- Fix SQL Error when saving a contact with many email addresses (#1488286) +- Fix strict email address searching if contact has more than one address +- Remove duplicated 'organization' label (#1488287) +- Fix so editor selector is hidden when 'htmleditor' is listed in 'dont_override' +- Fix wrong (long) label usage (#1488283) +- Fix handling of INBOX's subfolders in special folders config (#1488279) +- Add ifModule statement for setting Options -Indexes in .htaccess file (#1488274) +- Fix searching on IMAP servers without CHARSET specifier support (#1488271) +- Fix crash with eAccelerator (#1488256) +- Fix expanding folders during drag&drop (#1488260) +- Fix wrong postgres sequence name in upgrade from 0.6 +- Fix broken CREATE INDEX queries in SQLite DDL files (#1488255) -RELEASE 0.6-RC --------------- -- jQuery 1.6.3 -- Fallback to mail_domain in LDAP variable replacements; added 'host' to 'user_create' hook arguments (#1488024) -- Fixed wrong vCard type parameter mobile (#1488067) -- Fixed vCard WORKFAX issue (#1488046) -- Add vCard's Profile URL support (#1488062) -- Fix imap_cache setting to values other than 'db' (#1488060) -- Fix handling of attachments inside message/rfc822 parts (#1488026) -- Make list of mimetypes that open in preview window configurable (#1487625) -- Added plugin hook 'message_part_get' for attachment downloads -- Fixed selecting identity on reply/forward (#1487981) -- Fix image type check for contact photo uploads +RELEASE 0.7 +----------- +- Make Roundcube render the Email Standards Project Acid Test correctly +- Replace prompt() with jQuery UI dialog (#1485135) +- Fix navigation in messages search results +- Improved handling of some malformed values encoded with quoted-printable (#1488232) +- Add possibility to do LDAP bind before searching for bind DN +- Fix handling of empty tags in HTML messages (#1488225) +- Add content filter for embedded attachments to protect from XSS on IE (#1487895) +- Use strpos() instead of strstr() when possible (#1488211) +- Fix handling HTML entities when converting HTML to text (#1488212) +- Fix fit_string_to_size() renders browser and ui unresponsive (#1488207) +- Fix handling of invalid characters in request (#1488124) +- Fix merging some configuration options in update.sh script (#1485864) +- Fix so TEXT key will remove all HEADER keys in IMAP SEARCH (#1488208) +- Fix handling contact photo url with https:// prefix (#1488202) +- Fix possible infinite redirect on attachment preview (#1488199) +- Improved clickjacking protection for browsers which don't support X-Frame-Options headers +- Fixed bug where similiar folder names were highlighted wrong (#1487860) +- Fixed bug in handling link with '!' character in it (#1488195) +- Fixed bug where session ID's length was limited to 40 characters (#1488196) +- TinyMCE security issue: removed moxieplayer (embedding flv and mp4 is not supported anymore) -RELEASE 0.6-beta +RELEASE 0.7-beta ---------------- -- Added unique connection identifier to IMAP debug messages -- Add option to hide selected LDAP addressbook on the list -- Add client-side checking of uploaded files size -- Add newlines between organization, department, jobtitle (#1488028) -- Recalculate date when replying to a message and localize the cite header (#1487675) -- Fix handling of email addresses with quoted local part (#1487939) -- Fix EOL character in vCard exports (#1487873) -- Added optional "multithreading" autocomplete feature -- Plugin API: Added 'config_get' hook -- Fixed new_user_identity plugin to work with updated rcube_ldap class (#1487994) -- Plugin API: added folder_delete and folder_rename hooks -- Added possibility to undo last contact delete operation -- Fix sorting of contact groups after group create (#1487747) -- Add optional textual upload progress indicator (#1486039) -- Fix parsing URLs containing commas (#1487970) -- Added vertical splitter for books/groups list in addressbook (#1487923) -- Improved namespace roots handling in folder manager -- Added searching in all addressbook sources -- Added addressbook source selection in contacts import -- Implement LDAPv3 Virtual List View (VLV) for paged results listing -- Use 'address_template' config option when adding a new address block (#1487944) -- Added addressbook advanced search -- Add popup with basic fields selection for addressbook search -- Case-insensitive matching in autocompletion (#1487933) -- Added option to force spellchecking before sending a message (#1485458) -- Fix handling of "<" character in contact data, search fields and folder names (#1487864) -- Fix saving "<" character in identity name and organization fields (#1487864) -- Added option to specify to which address book add new contacts -- Added plugin hook for keep-alive requests -- Store user preferences in session when write-master is not available and session is stored in memcache, write them later -- Improve performence of folder manager operations -- Fix default_port option handling in Installer when config.inc.php file exists (#1487925) -- Removed option focus_on_new_message, added newmail_notifier plugin -- Added general rcube_cache class with Memcache and APC support -- Improved caching performance by skipping writes of unchanged data -- Option enable_caching replaced by imap_cache and messages_cache options -- Fix WORKFAX saving in address book (#1487910) -- Add forward-as-attachment feature -- jQuery-1.6.2 (#1487913, #1487144) -- Improve display name composition when saving contacts (#1487143) -- Fix problems with subfolders of INBOX folder on some IMAP servers (#1487725) -- Fix handling of folders that doesn't belong to any namespace (#1487637) -- Enable multiselection for attachments uploading in capable browsers (#1485969) -- Add possibility to change HTML editor configuration by skin -- Fix a bug where selecting too many contacts would produce too large URI request (#1487892) -- Improve performance by including files with absolute path (#1487849) -- Move folder name truncation to client/skin (#1485412) -- Added plugin hook for request token creation -- Replace LDAP vars in group queries (#1487837) -- Fix vcard folding with uncode characters (#1487868) -- Keep all submitted data if contact form validation fails (#1487865) -- Handle uncode strings in rcube_addressbook::normalize_string() (#1487866) -- Fix handling of debug_level=4 in ajax requests (#1487831) -- Enable TinyMCE's contextmenu (#1487014) -- Allow multiple concurrent compose sessions -- New config option for custom logo -- Allow skins to define/override texts with -- Add simple ACL rights/namespace handling in folder manager -- Force IE to send referers (#1487806) -- Better display of vcard import results (#1485457) -- Improved vcard import -- Interactive update script with improved DB schema check -- Fix problem with contactgroupmembers table creation on MySQL 4.x, add index on contact_id column -- Add LDAP SASL bind and proxy authentication (#1486692) -- Replying to a sent message puts the old recipient as the new recipient (#1487074) -- Fulltext search over (almost) all data for contacts -- Extend address book with rich contact information +- Fix handling of HTML form elements in messages (#1485137) +- Fix regression in setting recipient to self when replying to a Sent message (#1487074) +- Fix listing of folders in hidden namespaces (#1486796) +- Don't consider \Noselect flag when building folders tree (#1488004) +- Fix sorting autocomplete results (#1488084) +- Add option to set session name (#1486433) +- Add option to skip alternative email addresses in autocompletion +- Fix inconsistent behaviour of Compose button in Drafts folder, add Edit button for drafts +- Fix problem with parsing HTML message body with non-unicode characters (#1487813) +- Add option to define matching method for addressbook search (#1486564, #1487907) +- Make email recipients separator configurable +- Fix so folders with \Noinferiors attribute aren't listed in parent selector +- Fix handling of curly brackets in URLs (#1488168) +- Fix handling of dates (birthday/anniversary) in contact data (#1488147) +- Fix error on opening searched LDAP contact (#1488144) +- Fix redundant line break in flowed format (#1488146) +- Fix IDN address validation issue (#1488137) +- Fix JS error when dst_active checkbox doesn't exist (#1488133) +- Autocomplete LDAP records when adding contacts from mail (#1488073) +- Plugin API: added 'ready' hook (#1488063) +- Ignore DSN request when it isn't supported by SMTP server (#1487800) +- Make sure LDAP name fields aren't arrays (#1488108) +- Fixed imap test to non-default port when using ssl (#1488118) +- Force all files to be overwritten when updating (#1488117) +- Fix issue where it wasn't possible to change list view mode in folder manager for INBOX (#1488107) +- Fix namespace handling in special folders settings (#1488112) +- Disable time limit for CLI scripts (#1488109) +- Fix misleading display when chaning editor type (#1488104) +- Add loading indicator on contact delete +- Fix bug where after delete message rows can be added to the list of another folder (#1487752) +- Add notice on autocompletion that not all records were displayed +- Add option 'searchonly' for LDAP address books +- Add Priority filter to the messages list +- Cache synchronization using QRESYNC/CONDSTORE +- Trigger 'new_messages' hook for all checked folders (#1488083) +- Make date/time format user configurable; drop 'date_today' config option +- Fix setting title for truncated subject in IE (#1487128) +- Fix displaying multipart/alternative messages with only one part (#1487938) +- Rewritten messages caching: + Indexes are stored in a separate table, so there's no need to store all messages in a folder + Added threads data caching + Flags are stored separately, so flag change doesn't cause DELETE+INSERT, just UPDATE +- Improved FETCH response handling +- Improvements in response tokenization method +- Use 'From' and 'To' labels instead of 'Sender' and 'Recipient' +- Fix username case-insensitivity issue in MySQL (#1488021) +- Addressbook Saved Searches +- Added spellchecker exceptions dictionary (shared or per-user) +- Added possibility to ignore words containing caps, numbers, symbols (spellcheck_ignore_* options) +- Added 'priority' column on messages list (#1486782) +- Localize forwarded message header (#1488058) + diff -Nru roundcube-0.6+dfsg/config/db.inc.php.dist roundcube-0.7.1/config/db.inc.php.dist --- roundcube-0.6+dfsg/config/db.inc.php.dist 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/config/db.inc.php.dist 2012-01-17 07:50:40.000000000 +0000 @@ -39,34 +39,24 @@ // you can define specific table names used to store webmail data $rcmail_config['db_table_users'] = 'users'; - $rcmail_config['db_table_identities'] = 'identities'; - $rcmail_config['db_table_contacts'] = 'contacts'; - $rcmail_config['db_table_contactgroups'] = 'contactgroups'; - $rcmail_config['db_table_contactgroupmembers'] = 'contactgroupmembers'; - $rcmail_config['db_table_session'] = 'session'; - $rcmail_config['db_table_cache'] = 'cache'; - -$rcmail_config['db_table_messages'] = 'messages'; +$rcmail_config['db_table_cache_index'] = 'cache_index'; +$rcmail_config['db_table_cache_thread'] = 'cache_thread'; +$rcmail_config['db_table_cache_messages'] = 'cache_messages'; // you can define specific sequence names used in PostgreSQL $rcmail_config['db_sequence_users'] = 'user_ids'; - $rcmail_config['db_sequence_identities'] = 'identity_ids'; - $rcmail_config['db_sequence_contacts'] = 'contact_ids'; - $rcmail_config['db_sequence_contactgroups'] = 'contactgroups_ids'; - $rcmail_config['db_sequence_cache'] = 'cache_ids'; - -$rcmail_config['db_sequence_messages'] = 'message_ids'; +$rcmail_config['db_sequence_searches'] = 'search_ids'; // end db config file diff -Nru roundcube-0.6+dfsg/config/main.inc.php.dist roundcube-0.7.1/config/main.inc.php.dist --- roundcube-0.6+dfsg/config/main.inc.php.dist 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/config/main.inc.php.dist 2012-01-17 07:50:40.000000000 +0000 @@ -5,7 +5,7 @@ | Main configuration file | | | | This file is part of the Roundcube Webmail client | - | Copyright (C) 2005-2010, The Roundcube Dev Team | + | Copyright (C) 2005-2011, The Roundcube Dev Team | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -222,6 +222,9 @@ // session domain: .example.org $rcmail_config['session_domain'] = ''; +// session name. Default: 'roundcube_sessid' +$rcmail_config['session_name'] = null; + // Backend to use for session storage. Can either be 'db' (default) or 'memcache' // If set to memcache, a list of servers need to be specified in 'memcache_hosts' // Make sure the Memcache extension (http://pecl.php.net/package/memcache) version >= 2.0.0 is installed @@ -369,25 +372,30 @@ $rcmail_config['message_sort_order'] = 'DESC'; // These cols are shown in the message list. Available cols are: -// subject, from, to, cc, replyto, date, size, status, flag, attachment +// subject, from, to, cc, replyto, date, size, status, flag, attachment, 'priority' $rcmail_config['list_cols'] = array('subject', 'status', 'from', 'date', 'size', 'flag', 'attachment'); // the default locale setting (leave empty for auto-detection) // RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR $rcmail_config['language'] = null; -// use this format for short date display (date or strftime format) -$rcmail_config['date_short'] = 'D H:i'; +// use this format for date display (date or strftime format) +$rcmail_config['date_format'] = 'Y-m-d'; -// use this format for detailed date/time formatting (date or strftime format) -$rcmail_config['date_long'] = 'd.m.Y H:i'; +// give this choice of date formats to the user to select from +$rcmail_config['date_formats'] = array('Y-m-d', 'd-m-Y', 'Y/m/d', 'm/d/Y', 'd/m/Y', 'd.m.Y', 'j.n.Y'); -// use this format for today's date display (date or strftime format) -// Note: $ character will be replaced with 'Today' label -$rcmail_config['date_today'] = 'H:i'; +// use this format for time display (date or strftime format) +$rcmail_config['time_format'] = 'H:i'; -// use this format for date display without time (date or strftime format) -$rcmail_config['date_format'] = 'Y-m-d'; +// give this choice of time formats to the user to select from +$rcmail_config['time_formats'] = array('G:i', 'H:i', 'g:i a', 'h:i A'); + +// use this format for short date display (derived from date_format and time_format) +$rcmail_config['date_short'] = 'D H:i'; + +// use this format for detailed date/time formatting (derived from date_format and time_format) +$rcmail_config['date_long'] = 'Y-m-d H:i'; // store draft message is this mailbox // leave blank if draft messages should not be stored @@ -413,7 +421,7 @@ // NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) $rcmail_config['default_imap_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'); -// automatically create the above listed default folders on login +// automatically create the above listed default folders on first login $rcmail_config['create_default_folders'] = false; // protect the default folders from renames, deletes, and subscription changes @@ -427,6 +435,10 @@ // requires to be compiled with Open SSL support $rcmail_config['enable_spellcheck'] = true; +// Enables spellchecker exceptions dictionary. +// Setting it to 'shared' will make the dictionary shared by all users. +$rcmail_config['spellcheck_dictionary'] = false; + // Set the spell checking engine. 'googie' is the default. 'pspell' is also available, // but requires the Pspell extensions. When using Nox Spell Server, also set 'googie' here. $rcmail_config['spellcheck_engine'] = 'googie'; @@ -442,6 +454,18 @@ // Leave empty for default set of available language. $rcmail_config['spellcheck_languages'] = NULL; +// Makes that words with all letters capitalized will be ignored (e.g. GOOGLE) +$rcmail_config['spellcheck_ignore_caps'] = false; + +// Makes that words with numbers will be ignored (e.g. g00gle) +$rcmail_config['spellcheck_ignore_nums'] = false; + +// Makes that words with symbols will be ignored (e.g. g@@gle) +$rcmail_config['spellcheck_ignore_syms'] = false; + +// Use this char/string to separate recipients when composing a new message +$rcmail_config['recipients_separator'] = ','; + // don't let users set pagesize to more than this value if set $rcmail_config['max_pagesize'] = 200; @@ -517,14 +541,21 @@ // The login name is used to search for the DN to bind with 'search_base_dn' => '', 'search_filter' => '', // e.g. '(&(objectClass=posixAccount)(uid=%u))' + // DN and password to bind as before searching for bind DN, if anonymous search is not allowed + 'search_bind_dn' => '', + 'search_bind_pw' => '', + // Default for %dn variable if search doesn't return DN value + 'search_dn_default' => '', // Optional authentication identifier to be used as SASL authorization proxy // bind_dn need to be empty 'auth_cid' => '', // SASL authentication method (for proxy auth), e.g. DIGEST-MD5 'auth_method' => '', - // Indicates if the addressbook shall be displayed on the list. + // Indicates if the addressbook shall be hidden from the list. // With this option enabled you can still search/view contacts. 'hidden' => false, + // Indicates if the addressbook shall not list contacts but only allows searching. + 'searchonly' => false, // Indicates if we can write to the LDAP directory or not. // If writable is true then these fields need to be populated: // LDAP_Object_Classes, required_fields, LDAP_rdn @@ -564,6 +595,7 @@ 'numsub_filter' => '(objectClass=organizationalUnit)', // with VLV, we also use numSubOrdinates to query the total number of records. Set this filter to get all numSubOrdinates attributes for counting 'sizelimit' => '0', // Enables you to limit the count of entries fetched. Setting this to 0 means no limit. 'timelimit' => '0', // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit. + 'referrals' => true|false, // Sets the LDAP_OPT_REFERRALS option. Mostly used in multi-domain Active Directory setups // definition for contact groups (uncomment if no groups are supported) // for the groups base_dn, the user replacements %fu, %u, $d and %dc work as for base_dn (see above) @@ -573,8 +605,8 @@ 'base_dn' => '', 'filter' => '(objectClass=groupOfNames)', 'object_classes' => array("top", "groupOfNames"), - // name of the member attribute, e.g. uniqueMember - 'member_attr' => 'member', + 'member_attr' => 'member', // name of the member attribute, e.g. uniqueMember + 'name_attr' => 'cn', // attribute to be used as group name ), ); */ @@ -601,6 +633,13 @@ // available placeholders: {street}, {locality}, {zipcode}, {country}, {region} $rcmail_config['address_template'] = '{street}
{locality} {zipcode}
{country} {region}'; +// Matching mode for addressbook search (including autocompletion) +// 0 - partial (*abc*), default +// 1 - strict (abc) +// 2 - prefix (abc*) +// Note: For LDAP sources fuzzy_search must be enabled to use 'partial' or 'prefix' mode +$rcmail_config['addressbook_search_mode'] = 0; + // ---------------------------------- // USER PREFERENCES // ---------------------------------- @@ -617,8 +656,8 @@ // use this timezone to display date/time $rcmail_config['timezone'] = 'auto'; -// is daylight saving On? -$rcmail_config['dst_active'] = (bool)date('I'); +// is daylight saving On? Default: (bool)date('I'); +$rcmail_config['dst_active'] = null; // prefer displaying HTML messages $rcmail_config['prefer_html'] = true; @@ -748,4 +787,7 @@ // Enables spell checking before sending a message. $rcmail_config['spellcheck_before_send'] = false; +// Skip alternative email addresses in autocompletion (show one address per contact) +$rcmail_config['autocomplete_single'] = false; + // end of config file diff -Nru roundcube-0.6+dfsg/debian/changelog roundcube-0.7.1/debian/changelog --- roundcube-0.6+dfsg/debian/changelog 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/changelog 2012-02-07 16:44:25.000000000 +0000 @@ -1,3 +1,44 @@ +roundcube (0.7.1-2) unstable; urgency=high + + * Remove roundcube-sqlite package since php5 package does not ship + SQLite 2.x support anymore. Roundcube is incompatible with SQLite 3.x. + Closes: #657092. + * Urgency set to high for php5 migration into testing. + + -- Vincent Bernat Tue, 07 Feb 2012 17:37:52 +0100 + +roundcube (0.7.1-1) unstable; urgency=low + + * New upstream version. Closes: #656093. + * Add Dutch debconf translation, thanks to Jeroen Schot. + Closes: #656082. + + -- Vincent Bernat Tue, 17 Jan 2012 08:57:11 +0100 + +roundcube (0.7-3) unstable; urgency=low + + * Ship jqueryui plugin. Closes: #653274. + + Depend on libjs-jquery-ui package (instead of builtin copy). + + Conflict with versions of roundcube-plugins-extra providing this + plugin. + * More SQL fixes on update. Closes: #654297. + + -- Vincent Bernat Mon, 02 Jan 2012 21:45:42 +0100 + +roundcube (0.7-2) unstable; urgency=low + + * Fix SQLite upgrade file. Closes: #653217. + * Also fixes MySQL upgrade file and SQLite regular file. + + -- Vincent Bernat Sun, 25 Dec 2011 16:14:04 +0100 + +roundcube (0.7-1) unstable; urgency=low + + * New upstream version. Closes: #652564. + + Does not ship SWF with TinyMCE anymore. + + -- Vincent Bernat Fri, 23 Dec 2011 22:04:39 +0100 + roundcube (0.6+dfsg-1) unstable; urgency=low * New upstream version. Closes: #643707. diff -Nru roundcube-0.6+dfsg/debian/control roundcube-0.7.1/debian/control --- roundcube-0.6+dfsg/debian/control 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/control 2012-02-07 16:44:25.000000000 +0000 @@ -16,13 +16,14 @@ php5, php5-mcrypt, php5-gd, php5-intl, php-mdb2 (>= 2.5.0), php-auth, php-net-smtp (>= 1.4.2), php-net-socket, php-mail-mime (>= 1.8.0), php5-pspell, - tinymce (>= 3), libjs-jquery (>= 1.6.4), + tinymce (>= 3), libjs-jquery (>= 1.6.4), libjs-jquery-ui (>= 1.8), libmagic1, - roundcube-sqlite (= ${source:Version}) | roundcube-mysql (= ${source:Version}) | roundcube-pgsql (= ${source:Version}), + roundcube-mysql (= ${source:Version}) | roundcube-pgsql (= ${source:Version}), ${misc:Depends} Suggests: php-auth-sasl (>= 1.0.3), php-crypt-gpg, roundcube-plugins Replaces: roundcube Breaks: roundcube (<< 0.1~rc2-2) +Conflicts: roundcube-plugins-extra (<= 0.6-20111030) Description: skinnable AJAX based webmail solution for IMAP servers RoundCube Webmail is a browser-based multilingual IMAP client with an application-like user interface. It provides full functionality @@ -65,14 +66,6 @@ a skinnable AJAX based webmail solution for IMAP servers. Install this one if you want to use a PostgreSQL database with RoundCube. -Package: roundcube-sqlite -Architecture: all -Depends: php-mdb2-driver-sqlite (>= 1.5.0b2), sqlite, ${misc:Depends} -Description: metapackage providing sqlite dependencies for RoundCube - This package provides sqlite dependencies for RoundCube Webmail, a - skinnable AJAX based webmail solution for IMAP servers. Install this - one if you want to use a sqlite database with RoundCube. - Package: roundcube-plugins Architecture: all Depends: roundcube-core (= ${source:Version}), ${misc:Depends} diff -Nru roundcube-0.6+dfsg/debian/patches/series roundcube-0.7.1/debian/patches/series --- roundcube-0.6+dfsg/debian/patches/series 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/patches/series 2012-02-07 16:44:25.000000000 +0000 @@ -5,3 +5,4 @@ loginbox-size.patch default-charset-utf8.patch debianize_password_plugin.patch +use-debian-jquery-ui.patch diff -Nru roundcube-0.6+dfsg/debian/patches/use-debian-jquery-ui.patch roundcube-0.7.1/debian/patches/use-debian-jquery-ui.patch --- roundcube-0.6+dfsg/debian/patches/use-debian-jquery-ui.patch 1970-01-01 00:00:00.000000000 +0000 +++ roundcube-0.7.1/debian/patches/use-debian-jquery-ui.patch 2012-02-07 16:44:25.000000000 +0000 @@ -0,0 +1,30 @@ +Use packaged libjs-jquery-ui. + +diff --git a/plugins/jqueryui/jqueryui.php b/plugins/jqueryui/jqueryui.php +index 7ed2018..5f4545c 100644 +--- a/plugins/jqueryui/jqueryui.php ++++ b/plugins/jqueryui/jqueryui.php +@@ -21,18 +21,18 @@ class jqueryui extends rcube_plugin + $this->load_config(); + + // include UI scripts +- $this->include_script("js/jquery-ui-$version.custom.min.js"); ++ $this->include_script("js/jquery-ui.min.js"); + + // include UI stylesheet + $skin = $rcmail->config->get('skin', 'default'); + $ui_map = $rcmail->config->get('jquery_ui_skin_map', array()); +- $ui_theme = $ui_map[$skin] ? $ui_map[$skin] : 'default'; ++ $ui_theme = $ui_map[$skin] ? $ui_map[$skin] : 'smoothness'; + +- if (file_exists($this->home . "/themes/$ui_theme/jquery-ui-$version.custom.css")) { +- $this->include_stylesheet("themes/$ui_theme/jquery-ui-$version.custom.css"); ++ if (file_exists($this->home . "/css/$ui_theme/jquery-ui.custom.css")) { ++ $this->include_stylesheet("css/$ui_theme/jquery-ui.min.css"); + } + else { +- $this->include_stylesheet("themes/default/jquery-ui-$version.custom.css"); ++ $this->include_stylesheet("css/smoothness/jquery-ui.min.css"); + } + + // jquery UI localization diff -Nru roundcube-0.6+dfsg/debian/po/nl.po roundcube-0.7.1/debian/po/nl.po --- roundcube-0.6+dfsg/debian/po/nl.po 1970-01-01 00:00:00.000000000 +0000 +++ roundcube-0.7.1/debian/po/nl.po 2012-02-07 16:44:25.000000000 +0000 @@ -0,0 +1,133 @@ +# Dutch translation of roundcube debconf templates. +# Copyright (C) 2012 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the roundcube package. +# Jeroen Schot , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: roundcube 0.7-3\n" +"Report-Msgid-Bugs-To: roundcube@packages.debian.org\n" +"POT-Creation-Date: 2009-02-15 17:05+0100\n" +"PO-Revision-Date: 2012-01-13 15:20+0100\n" +"Last-Translator: Jeroen Schot \n" +"Language-Team: Debian l10n Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: multiselect +#. Choices +#: ../templates:2001 +msgid "apache2" +msgstr "apache2" + +#. Type: multiselect +#. Choices +#: ../templates:2001 +msgid "lighttpd" +msgstr "lighttpd" + +#. Type: multiselect +#. Description +#: ../templates:2002 +msgid "Web server(s) to configure automatically:" +msgstr "Automatisch te configureren webserver(s):" + +#. Type: multiselect +#. Description +#: ../templates:2002 +msgid "" +"RoundCube supports any web server supported by PHP, however only Apache 2 " +"and lighttpd can be configured automatically." +msgstr "" +"RoundCube ondersteunt elke webserver die PHP ondersteunt, maar alleen Apache " +"2 en lighttpd kunnen automatisch worden geconfigureerd." + +#. Type: multiselect +#. Description +#: ../templates:2002 +msgid "" +"Please select the web server(s) that should be configured automatically for " +"RoundCube." +msgstr "" +"Welke webservers moeten automatisch worden geconfigureerd voor RoundCube?" + +#. Type: boolean +#. Description +#: ../templates:3001 +msgid "Should the webserver(s) be restarted now?" +msgstr "Webserver(s) nu herstarten?" + +#. Type: boolean +#. Description +#: ../templates:3001 +msgid "" +"In order to activate the new configuration, the reconfigured web server(s) " +"have to be restarted." +msgstr "" +"Om de nieuwe configuratie te activeren moeten de opnieuw ingestelde webserver" +"(s) worden herstart." + +#. Type: string +#. Description +#: ../templates:4001 +msgid "IMAP server(s) used with RoundCube:" +msgstr "Bij RoundCube te gebruiken IMAP-server(s):" + +#. Type: string +#. Description +#: ../templates:4001 +msgid "Please select the IMAP server(s) that should be used with RoundCube." +msgstr "Welke IMAP-servers moeten er met RoundCube worden gebruikt?" + +#. Type: string +#. Description +#: ../templates:4001 +msgid "" +"If this is left blank, a text box will be displayed at login. Entering a " +"space-separated list of hosts will display a pull-down menu. Entering a " +"single host will enforce using this host." +msgstr "" +"Wanneer dit leeg wordt gelaten zal er een tekstvak worden weergegeven bij " +"het inloggen. Wanneer u een door spaties gescheiden lijst van computernamen " +"opgeeft zal dit als een keuzemenu worden weergegeven. Het opgeven van één " +"enkele computernaam dwingt het gebruikt van deze af." + +#. Type: string +#. Description +#: ../templates:4001 +msgid "" +"To use SSL connections, please enter host names as 'ssl://hostname:993'." +msgstr "" +"U kunt een SSL-verbinding aangeven door de computernaam als volgt in te " +"voeren: 'ssl://hostname:993'." + +#. Type: select +#. Description +#: ../templates:5001 +msgid "Default language:" +msgstr "Standaardtaal:" + +#. Type: select +#. Description +#: ../templates:5001 +msgid "Please choose the default language for RoundCube." +msgstr "Wat is de standaardtaal voor RoundCube?" + +#. Type: select +#. Description +#: ../templates:5001 +msgid "This choice can be overridden by individual users in their preferences." +msgstr "" +"Individuele gebruikers kunnen in hun voorkeuren een andere taal kiezen." + +#. Type: select +#. Description +#: ../templates:5001 +msgid "" +"However, the default language will be used for the login screen and the " +"first connection of users." +msgstr "" +"Maar de standaardtaal zal worden gebruikt voor het loginscherm en bij de " +"eerste verbinding van gebruikers." diff -Nru roundcube-0.6+dfsg/debian/roundcube-core.config roundcube-0.7.1/debian/roundcube-core.config --- roundcube-0.6+dfsg/debian/roundcube-core.config 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/roundcube-core.config 2012-02-07 16:44:25.000000000 +0000 @@ -41,7 +41,7 @@ db_go || true if [ -f /usr/share/dbconfig-common/dpkg/config ]; then - dbc_dbtypes="sqlite, mysql, pgsql" + dbc_dbtypes="mysql, pgsql" dbc_authmethod_user="password" . /usr/share/dbconfig-common/dpkg/config dbc_go roundcube $@ diff -Nru roundcube-0.6+dfsg/debian/roundcube-core.dirs roundcube-0.7.1/debian/roundcube-core.dirs --- roundcube-0.6+dfsg/debian/roundcube-core.dirs 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/roundcube-core.dirs 2012-02-07 16:44:25.000000000 +0000 @@ -2,8 +2,8 @@ usr/share/dbconfig-common/data/roundcube/install usr/share/dbconfig-common/data/roundcube/upgrade/mysql usr/share/dbconfig-common/data/roundcube/upgrade/pgsql -usr/share/dbconfig-common/data/roundcube/upgrade/sqlite etc/roundcube +etc/roundcube/plugins/jqueryui var/log/roundcube var/lib/roundcube/config var/lib/roundcube/plugins diff -Nru roundcube-0.6+dfsg/debian/roundcube-core.install roundcube-0.7.1/debian/roundcube-core.install --- roundcube-0.6+dfsg/debian/roundcube-core.install 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/roundcube-core.install 2012-02-07 16:44:25.000000000 +0000 @@ -1,6 +1,10 @@ robots.txt index.php .htaccess program/ bin/ usr/share/roundcube skins/default/ usr/share/roundcube/skins + plugins/filesystem_attachments/ usr/share/roundcube/plugins +plugins/jqueryui/jqueryui.php usr/share/roundcube/plugins/jqueryui +plugins/jqueryui/config.inc.php.dist usr/share/roundcube/plugins/jqueryui + debian/conf/* etc/roundcube config/*.php etc/roundcube diff -Nru roundcube-0.6+dfsg/debian/roundcube-core.links roundcube-0.7.1/debian/roundcube-core.links --- roundcube-0.6+dfsg/debian/roundcube-core.links 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/roundcube-core.links 2012-02-07 16:44:25.000000000 +0000 @@ -3,6 +3,13 @@ usr/share/roundcube/robots.txt var/lib/roundcube/robots.txt usr/share/roundcube/program var/lib/roundcube/program usr/share/roundcube/skins/default var/lib/roundcube/skins/default + usr/share/roundcube/plugins/filesystem_attachments var/lib/roundcube/plugins/filesystem_attachments +usr/share/roundcube/plugins/jqueryui var/lib/roundcube/plugins/jqueryui +usr/share/javascript/jquery-ui/jquery-ui.min.js usr/share/roundcube/plugins/jqueryui/js/jquery-ui.min.js +usr/share/javascript/jquery-ui/ui/i18n usr/share/roundcube/plugins/jqueryui/js/i18n +usr/share/javascript/jquery-ui/css usr/share/roundcube/plugins/jqueryui/css +etc/roundcube/plugins/jqueryui/config.inc.php usr/share/roundcube/plugins/jqueryui/config.inc.php + var/log/roundcube var/lib/roundcube/logs usr/share/roundcube/main.inc.php.dist usr/share/doc/roundcube/main.inc.php.dist diff -Nru roundcube-0.6+dfsg/debian/roundcube-core.NEWS roundcube-0.7.1/debian/roundcube-core.NEWS --- roundcube-0.6+dfsg/debian/roundcube-core.NEWS 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/roundcube-core.NEWS 2012-02-07 16:44:25.000000000 +0000 @@ -1,3 +1,13 @@ +roundcube (0.7.1-2) unstable; urgency=high + + Roundcube SQLite support is limited to SQLite 2.x. No support for + SQLite 3.x currently exists. Unfortunately, SQLite 2.x is unmaintained + for several years and therefore has been dropped from php5 + package. You will need to select another database to keep Roundcube + running. + + -- Vincent Bernat Tue, 07 Feb 2012 17:41:58 +0100 + roundcube (0.3.1-2) unstable; urgency=low Starting from Roundcube 0.3, an incompatibility with Suhosin session diff -Nru roundcube-0.6+dfsg/debian/rules roundcube-0.7.1/debian/rules --- roundcube-0.6+dfsg/debian/rules 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/rules 2012-02-07 16:44:25.000000000 +0000 @@ -23,7 +23,6 @@ # Install empty tables and updates for each db type install -m 0644 $(CURDIR)/SQL/mysql.initial.sql $(CURDIR)/debian/roundcube-core/usr/share/dbconfig-common/data/roundcube/install/mysql install -m 0644 $(CURDIR)/SQL/postgres.initial.sql $(CURDIR)/debian/roundcube-core/usr/share/dbconfig-common/data/roundcube/install/pgsql - install -m 0644 $(CURDIR)/SQL/sqlite.initial.sql $(CURDIR)/debian/roundcube-core/usr/share/dbconfig-common/data/roundcube/install/sqlite # Old database upgrades cp -r $(CURDIR)/debian/sql/* $(CURDIR)/debian/roundcube-core/usr/share/dbconfig-common/data/roundcube/upgrade/. diff -Nru roundcube-0.6+dfsg/debian/sql/mysql/0.7-1 roundcube-0.7.1/debian/sql/mysql/0.7-1 --- roundcube-0.6+dfsg/debian/sql/mysql/0.7-1 1970-01-01 00:00:00.000000000 +0000 +++ roundcube-0.7.1/debian/sql/mysql/0.7-1 2012-02-07 16:44:25.000000000 +0000 @@ -0,0 +1,71 @@ +-- Updates from version 0.6 + +/*!40014 SET FOREIGN_KEY_CHECKS=0 */; + +ALTER TABLE `users` CHANGE `alias` `alias` varchar(128) BINARY NOT NULL; +ALTER TABLE `users` CHANGE `username` `username` varchar(128) BINARY NOT NULL; + +CREATE TABLE `dictionary` ( + `user_id` int(10) UNSIGNED DEFAULT NULL, + `language` varchar(5) NOT NULL, + `data` longtext NOT NULL, + CONSTRAINT `user_id_fk_dictionary` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + UNIQUE `uniqueness` (`user_id`, `language`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +CREATE TABLE `searches` ( + `search_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `type` int(3) NOT NULL DEFAULT '0', + `name` varchar(128) NOT NULL, + `data` text, + PRIMARY KEY(`search_id`), + CONSTRAINT `user_id_fk_searches` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + UNIQUE `uniqueness` (`user_id`, `type`, `name`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +DROP TABLE `messages`; + +CREATE TABLE `cache_index` ( + `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `mailbox` varchar(255) BINARY NOT NULL, + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `valid` tinyint(1) NOT NULL DEFAULT '0', + `data` longtext NOT NULL, + CONSTRAINT `user_id_fk_cache_index` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `changed_index` (`changed`), + PRIMARY KEY (`user_id`, `mailbox`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +CREATE TABLE `cache_thread` ( + `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `mailbox` varchar(255) BINARY NOT NULL, + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `data` longtext NOT NULL, + CONSTRAINT `user_id_fk_cache_thread` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `changed_index` (`changed`), + PRIMARY KEY (`user_id`, `mailbox`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +CREATE TABLE `cache_messages` ( + `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `mailbox` varchar(255) BINARY NOT NULL, + `uid` int(11) UNSIGNED NOT NULL DEFAULT '0', + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `data` longtext NOT NULL, + `flags` int(11) NOT NULL DEFAULT '0', + CONSTRAINT `user_id_fk_cache_messages` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `changed_index` (`changed`), + PRIMARY KEY (`user_id`, `mailbox`, `uid`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +/*!40014 SET FOREIGN_KEY_CHECKS=1 */; + +-- Updates from version 0.7-beta + +ALTER TABLE `session` CHANGE `sess_id` `sess_id` varchar(128) NOT NULL; diff -Nru roundcube-0.6+dfsg/debian/sql/mysql/0.7.1-1 roundcube-0.7.1/debian/sql/mysql/0.7.1-1 --- roundcube-0.6+dfsg/debian/sql/mysql/0.7.1-1 1970-01-01 00:00:00.000000000 +0000 +++ roundcube-0.7.1/debian/sql/mysql/0.7.1-1 2012-02-07 16:44:25.000000000 +0000 @@ -0,0 +1,18 @@ +-- Updates from version 0.7 + +ALTER TABLE `contacts` DROP FOREIGN KEY `user_id_fk_contacts`; +ALTER TABLE `contacts` DROP INDEX `user_contacts_index`; +ALTER TABLE `contacts` MODIFY `email` text NOT NULL DEFAULT ''; +ALTER TABLE `contacts` ADD INDEX `user_contacts_index` (`user_id`,`del`); +ALTER TABLE `contacts` ADD CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE `cache` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `cache_index` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `cache_thread` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `cache_messages` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `contacts` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `contactgroups` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `contactgroupmembers` ALTER `contact_id` DROP DEFAULT; +ALTER TABLE `identities` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `searches` ALTER `user_id` DROP DEFAULT; diff -Nru roundcube-0.6+dfsg/debian/sql/pgsql/0.7-1 roundcube-0.7.1/debian/sql/pgsql/0.7-1 --- roundcube-0.6+dfsg/debian/sql/pgsql/0.7-1 1970-01-01 00:00:00.000000000 +0000 +++ roundcube-0.7.1/debian/sql/pgsql/0.7-1 2012-02-07 16:44:25.000000000 +0000 @@ -0,0 +1,68 @@ +-- Updates from version 0.6 + +CREATE TABLE dictionary ( + user_id integer DEFAULT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + "language" varchar(5) NOT NULL, + data text NOT NULL, + CONSTRAINT dictionary_user_id_language_key UNIQUE (user_id, "language") +); + +CREATE SEQUENCE search_ids + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + +CREATE TABLE searches ( + search_id integer DEFAULT nextval('search_ids'::text) PRIMARY KEY, + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + "type" smallint DEFAULT 0 NOT NULL, + name varchar(128) NOT NULL, + data text NOT NULL, + CONSTRAINT searches_user_id_key UNIQUE (user_id, "type", name) +); + +DROP SEQUENCE message_ids; +DROP TABLE messages; + +CREATE TABLE cache_index ( + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + mailbox varchar(255) NOT NULL, + changed timestamp with time zone DEFAULT now() NOT NULL, + valid smallint NOT NULL DEFAULT 0, + data text NOT NULL, + PRIMARY KEY (user_id, mailbox) +); + +CREATE INDEX cache_index_changed_idx ON cache_index (changed); + +CREATE TABLE cache_thread ( + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + mailbox varchar(255) NOT NULL, + changed timestamp with time zone DEFAULT now() NOT NULL, + data text NOT NULL, + PRIMARY KEY (user_id, mailbox) +); + +CREATE INDEX cache_thread_changed_idx ON cache_thread (changed); + +CREATE TABLE cache_messages ( + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + mailbox varchar(255) NOT NULL, + uid integer NOT NULL, + changed timestamp with time zone DEFAULT now() NOT NULL, + data text NOT NULL, + flags integer NOT NULL DEFAULT 0, + PRIMARY KEY (user_id, mailbox, uid) +); + +CREATE INDEX cache_messages_changed_idx ON cache_messages (changed); + +-- Updates from version 0.7-beta + +ALTER TABLE "session" ALTER sess_id TYPE varchar(128); diff -Nru roundcube-0.6+dfsg/debian/sql/pgsql/0.7.1-1 roundcube-0.7.1/debian/sql/pgsql/0.7.1-1 --- roundcube-0.6+dfsg/debian/sql/pgsql/0.7.1-1 1970-01-01 00:00:00.000000000 +0000 +++ roundcube-0.7.1/debian/sql/pgsql/0.7.1-1 2012-02-07 16:44:25.000000000 +0000 @@ -0,0 +1,5 @@ +-- Updates from version 0.7 + +DROP INDEX contacts_user_id_idx; +CREATE INDEX contacts_user_id_idx ON contacts USING btree (user_id, del); +ALTER TABLE contacts ALTER email TYPE text; diff -Nru roundcube-0.6+dfsg/debian/sql/sqlite/0.1.1-1 roundcube-0.7.1/debian/sql/sqlite/0.1.1-1 --- roundcube-0.6+dfsg/debian/sql/sqlite/0.1.1-1 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/sql/sqlite/0.1.1-1 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ --- RoundCube Webmail update script for SQLite databases --- Updates from version 0.1-stable to 0.1.1 - -DROP TABLE messages; - -CREATE TABLE messages ( - message_id integer NOT NULL PRIMARY KEY, - user_id integer NOT NULL default '0', - del tinyint NOT NULL default '0', - cache_key varchar(128) NOT NULL default '', - created datetime NOT NULL default '0000-00-00 00:00:00', - idx integer NOT NULL default '0', - uid integer 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 integer NOT NULL default '0', - headers text NOT NULL, - structure text -); - -CREATE INDEX ix_messages_user_cache_uid ON messages(user_id,cache_key,uid); - -CREATE INDEX ix_users_username ON users(username); -CREATE INDEX ix_users_alias ON users(alias); - diff -Nru roundcube-0.6+dfsg/debian/sql/sqlite/0.1~rc1~dfsg-1 roundcube-0.7.1/debian/sql/sqlite/0.1~rc1~dfsg-1 --- roundcube-0.6+dfsg/debian/sql/sqlite/0.1~rc1~dfsg-1 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/sql/sqlite/0.1~rc1~dfsg-1 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ --- RoundCube Webmail update script for SQLite databases --- Updates from version 0.1-beta2 and older - -DROP TABLE messages; - -CREATE TABLE messages ( - message_id integer NOT NULL PRIMARY KEY, - user_id integer NOT NULL default '0', - del tinyint NOT NULL default '0', - cache_key varchar(128) NOT NULL default '', - created datetime NOT NULL default '0000-00-00 00:00:00', - idx integer NOT NULL default '0', - uid integer 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 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); diff -Nru roundcube-0.6+dfsg/debian/sql/sqlite/0.2~stable-1 roundcube-0.7.1/debian/sql/sqlite/0.2~stable-1 --- roundcube-0.6+dfsg/debian/sql/sqlite/0.2~stable-1 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/sql/sqlite/0.2~stable-1 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ --- Updates from version 0.2-alpha - -CREATE INDEX ix_messages_created ON messages (created); - --- Updates from version 0.2-beta - -CREATE INDEX ix_session_changed ON session (changed); -CREATE INDEX ix_cache_created ON cache (created); diff -Nru roundcube-0.6+dfsg/debian/sql/sqlite/0.5-1 roundcube-0.7.1/debian/sql/sqlite/0.5-1 --- roundcube-0.6+dfsg/debian/sql/sqlite/0.5-1 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/sql/sqlite/0.5-1 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ --- Updates from version 0.3-stable - -DELETE FROM messages; -DROP INDEX ix_messages_user_cache_uid; -CREATE UNIQUE INDEX ix_messages_user_cache_uid ON messages (user_id,cache_key,uid); -CREATE INDEX ix_messages_index ON messages (user_id,cache_key,idx); -DROP INDEX ix_contacts_user_id; -CREATE INDEX ix_contacts_user_id ON contacts(user_id, email); - --- Updates from version 0.3.1 - --- ALTER TABLE identities ADD COLUMN changed datetime NOT NULL default '0000-00-00 00:00:00'; -- - -CREATE TABLE temp_identities ( - identity_id integer NOT NULL PRIMARY KEY, - user_id integer NOT NULL default '0', - standard tinyint NOT NULL default '0', - name varchar(128) NOT NULL default '', - organization varchar(128) default '', - email varchar(128) NOT NULL default '', - "reply-to" varchar(128) NOT NULL default '', - bcc varchar(128) NOT NULL default '', - signature text NOT NULL default '', - html_signature tinyint NOT NULL default '0' -); -INSERT INTO temp_identities (identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature) - SELECT identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature - FROM identities WHERE del=0; - -DROP INDEX ix_identities_user_id; -DROP TABLE identities; - -CREATE TABLE identities ( - identity_id integer NOT NULL PRIMARY KEY, - user_id integer NOT NULL default '0', - changed datetime NOT NULL default '0000-00-00 00:00:00', - del tinyint NOT NULL default '0', - standard tinyint NOT NULL default '0', - name varchar(128) NOT NULL default '', - organization varchar(128) default '', - email varchar(128) NOT NULL default '', - "reply-to" varchar(128) NOT NULL default '', - bcc varchar(128) NOT NULL default '', - signature text NOT NULL default '', - html_signature tinyint NOT NULL default '0' -); -CREATE INDEX ix_identities_user_id ON identities(user_id, del); - -INSERT INTO identities (identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature) - SELECT identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature - FROM temp_identities; - -DROP TABLE temp_identities; - -CREATE TABLE contactgroups ( - contactgroup_id integer NOT NULL PRIMARY KEY, - user_id integer NOT NULL default '0', - changed datetime NOT NULL default '0000-00-00 00:00:00', - del tinyint NOT NULL default '0', - name varchar(128) NOT NULL default '' -); - -CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del); - -CREATE TABLE contactgroupmembers ( - contactgroup_id integer NOT NULL, - contact_id integer NOT NULL default '0', - created datetime NOT NULL default '0000-00-00 00:00:00', - PRIMARY KEY (contactgroup_id, contact_id) -); - --- Updates from version 0.3.1 - -CREATE TABLE tmp_users ( - user_id integer NOT NULL PRIMARY KEY, - username varchar(128) NOT NULL default '', - mail_host varchar(128) NOT NULL default '', - alias varchar(128) NOT NULL default '', - created datetime NOT NULL default '0000-00-00 00:00:00', - last_login datetime NOT NULL default '0000-00-00 00:00:00', - language varchar(5), - preferences text NOT NULL default '' -); - -INSERT INTO tmp_users (user_id, username, mail_host, alias, created, last_login, language, preferences) - SELECT user_id, username, mail_host, alias, created, last_login, language, preferences FROM users; - -DROP TABLE users; - -CREATE TABLE users ( - user_id integer NOT NULL PRIMARY KEY, - username varchar(128) NOT NULL default '', - mail_host varchar(128) NOT NULL default '', - alias varchar(128) NOT NULL default '', - created datetime NOT NULL default '0000-00-00 00:00:00', - last_login datetime DEFAULT NULL, - language varchar(5), - preferences text NOT NULL default '' -); - -INSERT INTO users (user_id, username, mail_host, alias, created, last_login, language, preferences) - SELECT user_id, username, mail_host, alias, created, last_login, language, preferences FROM tmp_users; - -CREATE INDEX ix_users_username ON users(username); -CREATE INDEX ix_users_alias ON users(alias); -DROP TABLE tmp_users; - --- Updates from version 0.4.2 - -DROP INDEX ix_users_username; -CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host); - -CREATE TABLE contacts_tmp ( - contact_id integer NOT NULL PRIMARY KEY, - user_id integer NOT NULL default '0', - changed datetime NOT NULL default '0000-00-00 00:00:00', - del tinyint NOT NULL default '0', - name varchar(128) NOT NULL default '', - email varchar(255) NOT NULL default '', - firstname varchar(128) NOT NULL default '', - surname varchar(128) NOT NULL default '', - vcard text NOT NULL default '' -); - -INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard) - SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts; - -DROP TABLE contacts; -CREATE TABLE contacts ( - contact_id integer NOT NULL PRIMARY KEY, - user_id integer NOT NULL default '0', - changed datetime NOT NULL default '0000-00-00 00:00:00', - del tinyint NOT NULL default '0', - name varchar(128) NOT NULL default '', - email varchar(255) NOT NULL default '', - firstname varchar(128) NOT NULL default '', - surname varchar(128) NOT NULL default '', - vcard text NOT NULL default '' -); - -INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard) - SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts_tmp; - -CREATE INDEX ix_contacts_user_id ON contacts(user_id, email); -DROP TABLE contacts_tmp; - diff -Nru roundcube-0.6+dfsg/debian/sql/sqlite/0.6+dfsg-1 roundcube-0.7.1/debian/sql/sqlite/0.6+dfsg-1 --- roundcube-0.6+dfsg/debian/sql/sqlite/0.6+dfsg-1 2011-10-12 18:24:27.000000000 +0000 +++ roundcube-0.7.1/debian/sql/sqlite/0.6+dfsg-1 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -CREATE TABLE contacts_tmp ( - contact_id integer NOT NULL PRIMARY KEY, - user_id integer NOT NULL default '0', - changed datetime NOT NULL default '0000-00-00 00:00:00', - del tinyint NOT NULL default '0', - name varchar(128) NOT NULL default '', - email varchar(255) NOT NULL default '', - firstname varchar(128) NOT NULL default '', - surname varchar(128) NOT NULL default '', - vcard text NOT NULL default '' -); - -INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard) - SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts; - -DROP TABLE contacts; -CREATE TABLE contacts ( - contact_id integer NOT NULL PRIMARY KEY, - user_id integer NOT NULL default '0', - changed datetime NOT NULL default '0000-00-00 00:00:00', - del tinyint NOT NULL default '0', - name varchar(128) NOT NULL default '', - email varchar(255) NOT NULL default '', - firstname varchar(128) NOT NULL default '', - surname varchar(128) NOT NULL default '', - vcard text NOT NULL default '', - words text NOT NULL default '' -); - -INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard) - SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts_tmp; - -CREATE INDEX ix_contacts_user_id ON contacts(user_id, email); -DROP TABLE contacts_tmp; - -DELETE FROM messages; -DELETE FROM cache; -CREATE INDEX ix_contactgroupmembers_contact_id ON contactgroupmembers (contact_id); diff -Nru roundcube-0.6+dfsg/.htaccess roundcube-0.7.1/.htaccess --- roundcube-0.6+dfsg/.htaccess 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/.htaccess 2012-01-17 07:50:40.000000000 +0000 @@ -17,7 +17,7 @@ php_flag suhosin.session.encrypt Off #php_value session.cookie_path / -php_value session.auto_start 0 +php_flag session.auto_start Off php_value session.gc_maxlifetime 21600 php_value session.gc_divisor 500 php_value session.gc_probability 1 @@ -49,4 +49,7 @@ FileETag MTime Size + + Options -Indexes + diff -Nru roundcube-0.6+dfsg/index.php roundcube-0.7.1/index.php --- roundcube-0.6+dfsg/index.php 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/index.php 2012-01-17 07:50:40.000000000 +0000 @@ -2,7 +2,7 @@ /* +-------------------------------------------------------------------------+ | Roundcube Webmail IMAP Client | - | Version 0.6 | + | Version 0.7.1 | | | | Copyright (C) 2005-2011, The Roundcube Dev Team | | | @@ -23,7 +23,7 @@ | Author: Thomas Bruederli | +-------------------------------------------------------------------------+ - $Id: index.php 5292 2011-09-28 19:16:41Z thomasb $ + $Id: index.php 5738 2012-01-06 16:01:53Z thomasb $ */ @@ -33,6 +33,9 @@ // init application, start session, init output class, etc. $RCMAIL = rcmail::get_instance(); +// Make the whole PHP output non-cacheable (#1487797) +send_nocacheing_headers(); + // turn on output buffering ob_start(); @@ -177,7 +180,7 @@ ) ); } - + if ($session_error || $_REQUEST['_err'] == 'session') $OUTPUT->show_message('sessionerror', 'error', null, true, -1); @@ -192,7 +195,7 @@ // check client X-header to verify request origin if ($OUTPUT->ajax_call) { if (rc_request_header('X-Roundcube-Request') != $RCMAIL->get_request_token() && !$RCMAIL->config->get('devel_mode')) { - header('HTTP/1.1 404 Not Found'); + header('HTTP/1.1 403 Forbidden'); die("Invalid Request"); } } @@ -211,6 +214,12 @@ } } +// we're ready, user is authenticated and the request is safe +$plugin = $RCMAIL->plugins->exec_hook('ready', array('task' => $RCMAIL->task, 'action' => $RCMAIL->action)); +$RCMAIL->set_task($plugin['task']); +$RCMAIL->action = $plugin['action']; + + // handle special actions if ($RCMAIL->action == 'keep-alive') { $OUTPUT->reset(); diff -Nru roundcube-0.6+dfsg/INSTALL roundcube-0.7.1/INSTALL --- roundcube-0.6+dfsg/INSTALL 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/INSTALL 2012-01-17 07:50:40.000000000 +0000 @@ -9,7 +9,7 @@ REQUIREMENTS ============ -* The Apache or Lighttpd Webserver +* The Apache, Lighttpd, Cherokee or Hiawatha web server * .htaccess support allowing overrides for DirectoryIndex * PHP Version 5.2.1 or greater including - PCRE, DOM, JSON, XML, Session, Sockets (required) diff -Nru roundcube-0.6+dfsg/installer/rcube_install.php roundcube-0.7.1/installer/rcube_install.php --- roundcube-0.6+dfsg/installer/rcube_install.php 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/installer/rcube_install.php 2012-01-17 07:50:40.000000000 +0000 @@ -142,20 +142,22 @@ foreach ($this->config as $prop => $default) { - $value = (isset($_POST["_$prop"]) || $this->bool_config_props[$prop]) ? $_POST["_$prop"] : $default; + $is_default = !isset($_POST["_$prop"]); + $value = !$is_default || $this->bool_config_props[$prop] ? $_POST["_$prop"] : $default; // convert some form data - if ($prop == 'debug_level') { - $val = 0; - if (is_array($value)) + if ($prop == 'debug_level' && !$is_default) { + if (is_array($value)) { + $val = 0; foreach ($value as $dbgval) $val += intval($dbgval); - $value = $val; + $value = $val; + } } else if ($which == 'db' && $prop == 'db_dsnw' && !empty($_POST['_dbtype'])) { if ($_POST['_dbtype'] == 'sqlite') $value = sprintf('%s://%s?mode=0646', $_POST['_dbtype'], $_POST['_dbname']{0} == '/' ? '/' . $_POST['_dbname'] : $_POST['_dbname']); - else + else if ($_POST['_dbtype']) $value = sprintf('%s://%s:%s@%s/%s', $_POST['_dbtype'], rawurlencode($_POST['_dbuser']), rawurlencode($_POST['_dbpass']), $_POST['_dbhost'], $_POST['_dbname']); } @@ -177,9 +179,9 @@ $value = '%p'; } else if ($prop == 'default_imap_folders') { - $value = Array(); + $value = array(); foreach ($this->config['default_imap_folders'] as $_folder) { - switch($_folder) { + switch ($_folder) { case 'Drafts': $_folder = $this->config['drafts_mbox']; break; case 'Sent': $_folder = $this->config['sent_mbox']; break; case 'Junk': $_folder = $this->config['junk_mbox']; break; @@ -206,7 +208,7 @@ // replace the matching line in config file $out = preg_replace( '/(\$rcmail_config\[\''.preg_quote($prop).'\'\])\s+=\s+(.+);/Uie', - "'\\1 = ' . rcube_install::_dump_var(\$value) . ';'", + "'\\1 = ' . rcube_install::_dump_var(\$value, \$prop) . ';'", $out); } @@ -299,7 +301,7 @@ $current = $this->config; $this->config = array(); $this->load_defaults(); - + foreach ($this->replaced_config as $prop => $replacement) { if (isset($current[$prop])) { if ($prop == 'skin_path') @@ -328,9 +330,9 @@ if ($current['keep_alive'] && $current['session_lifetime'] < $current['keep_alive']) $current['session_lifetime'] = max(10, ceil($current['keep_alive'] / 60) * 2); - + $this->config = array_merge($this->config, $current); - + foreach ((array)$current['ldap_public'] as $key => $values) { $this->config['ldap_public'][$key] = $current['ldap_public'][$key]; } @@ -502,17 +504,25 @@ return $out; } - + /** * Create a HTML dropdown to select a previous version of Roundcube */ function versions_select($attrib = array()) { $select = new html_select($attrib); - $select->add(array('0.1-stable', '0.1.1', '0.2-alpha', '0.2-beta', '0.2-stable', '0.3-stable', '0.3.1', '0.4-beta', '0.4.2', '0.5-beta', '0.5', '0.5.1')); + $select->add(array( + '0.1-stable', '0.1.1', + '0.2-alpha', '0.2-beta', '0.2-stable', + '0.3-stable', '0.3.1', + '0.4-beta', '0.4.2', + '0.5-beta', '0.5', '0.5.1', + '0.6-beta', '0.6', + '0.7-beta', '0.7', + )); return $select; } - + /** * Return a list with available subfolders of the skin directory */ @@ -614,7 +624,22 @@ } - static function _dump_var($var) { + static function _dump_var($var, $name=null) { + // special values + switch ($name) { + case 'syslog_facility': + $list = array(32 => 'LOG_AUTH', 80 => 'LOG_AUTHPRIV', 72 => ' LOG_CRON', + 24 => 'LOG_DAEMON', 0 => 'LOG_KERN', 128 => 'LOG_LOCAL0', + 136 => 'LOG_LOCAL1', 144 => 'LOG_LOCAL2', 152 => 'LOG_LOCAL3', + 160 => 'LOG_LOCAL4', 168 => 'LOG_LOCAL5', 176 => 'LOG_LOCAL6', + 184 => 'LOG_LOCAL7', 48 => 'LOG_LPR', 16 => 'LOG_MAIL', + 56 => 'LOG_NEWS', 40 => 'LOG_SYSLOG', 8 => 'LOG_USER', 64 => 'LOG_UUCP'); + if ($val = $list[$var]) + return $val; + break; + } + + if (is_array($var)) { if (empty($var)) { return 'array()'; diff -Nru roundcube-0.6+dfsg/installer/test.php roundcube-0.7.1/installer/test.php --- roundcube-0.6+dfsg/installer/test.php 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/installer/test.php 2012-01-17 07:50:40.000000000 +0000 @@ -382,18 +382,20 @@ Connecting to ' . Q($_POST['_host']) . '...
'; - - $a_host = parse_url($_POST['_host']); + + $imap_host = trim($_POST['_host']); + $imap_port = $RCI->getprop('default_port'); + $a_host = parse_url($imap_host); + if ($a_host['host']) { $imap_host = $a_host['host']; - $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? $a_host['scheme'] : null; - $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : $CONFIG['default_port']); - } - else { - $imap_host = trim($_POST['_host']); - $imap_port = $RCI->getprop('default_port'); + $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? $a_host['scheme'] : null; + if (isset($a_host['port'])) + $imap_port = $a_host['port']; + else if ($imap_ssl && $imap_ssl != 'tls' && (!$imap_port || $imap_port == 143)) + $imap_port = 993; } $imap_host = idn_to_ascii($imap_host); diff -Nru roundcube-0.6+dfsg/INSTALL.orig roundcube-0.7.1/INSTALL.orig --- roundcube-0.6+dfsg/INSTALL.orig 1970-01-01 00:00:00.000000000 +0000 +++ roundcube-0.7.1/INSTALL.orig 2012-01-17 07:50:40.000000000 +0000 @@ -0,0 +1,233 @@ +INTRODUCTION +============ + +This file describes the basic steps to install Roundcube Webmail on your +web server. For additional information, please also consult the project's +wiki page at http://trac.roundcube.net/wiki + + +REQUIREMENTS +============ + +* The Apache, Lighttpd, Cherokee or Hiawatha web server +* .htaccess support allowing overrides for DirectoryIndex +* PHP Version 5.2.1 or greater including + - PCRE, DOM, JSON, XML, Session, Sockets (required) + - libiconv (recommended) + - mbstring, fileinfo, mcrypt (optional) +* PEAR packages distributed with Roundcube or external: + - MDB2 2.5.0 or newer + - Mail_Mime 1.8.1 or newer + - Net_SMTP 1.4.2 or newer + - Net_IDNA2 0.1.1 or newer + - Auth_SASL 1.0.3 or newer +* php.ini options (see .htaccess file): + - error_reporting E_ALL & ~E_NOTICE (or lower) + - memory_limit > 16MB (increase as suitable to support large attachments) + - file_uploads enabled (for attachment upload features) + - session.auto_start disabled + - zend.ze1_compatibility_mode disabled + - suhosin.session.encrypt disabled + - mbstring.func_overload disabled + - magic_quotes_runtime disabled +* PHP compiled with OpenSSL to connect to IMAPS and to use the spell checker +* A MySQL (4.0.8 or newer), PostgreSQL, MSSQL database engine + or the SQLite extension for PHP +* One of the above databases with permission to create tables +* An SMTP server (recommended) or PHP configured for mail delivery + + +INSTALLATION +============ + +1. Decompress and put this folder somewhere inside your document root +2. Make sure that the following directories (and the files within) + are writable by the webserver + - /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/ +5. Follow the instructions of the install script (or see MANUAL CONFIGURATION) +6. After creating and testing the configuration, remove the installer directory +7. Done! + + +CONFIGURATION HINTS +=================== + +Roundcube writes internal errors to the 'errors' log file located in the logs +directory which can be configured in config/main.inc.php. If you want ordinary +PHP errors to be logged there as well, enable the 'php_value error_log' line +in the .htaccess file and set the path to the log file accordingly. + +By default the session_path settings of PHP are not modified by Roundcube. +However if you want to limit the session cookies to the directory where +Roundcube resides you can uncomment and configure the according line +in the .htaccess file. + + +DATABASE SETUP +============== + +Note: Database for Roundcube must use UTF-8 character set. + +* MySQL +------- +Setting up the mysql database can be done by creating an empty database, +importing the table layout and granting the proper permissions to the +roundcube user. Here is an example of that procedure: + +# mysql +> CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; +> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost + IDENTIFIED BY 'password'; +> quit + +# mysql roundcubemail < SQL/mysql.initial.sql + +Note 1: 'password' is the master password for the roundcube user. It is strongly +recommended you replace this with a more secure password. Please keep in +mind: You need to specify this password later in 'config/db.inc.php'. + + +* SQLite +-------- +You need sqlite 2 (preferably 2.8) to setup the sqlite db +(sqlite 3.x also doesn't work at the moment). Here is +an example how you can setup the sqlite.db for roundcube: + +# sqlite -init SQL/sqlite.initial.sql sqlite.db +Loading resources from SQL/sqlite.initial.sql +SQLite version 2.8.16 +Enter ".help" for instructions +sqlite> .exit +# chmod o+rw sqlite.db + +Make sure your configuration points to the sqlite.db file and that the +webserver can write to the file and the directory containing the file. + + +* PostgreSQL +------------ +To use Roundcube with PostgreSQL support you have to follow these +simple steps, which have to be done as the postgres system user (or +which ever is the database superuser): + +$ createuser roundcube +$ createdb -O roundcube -E UNICODE roundcubemail +$ psql roundcubemail + +roundcubemail =# ALTER USER roundcube WITH PASSWORD 'the_new_password'; +roundcubemail =# \c - roundcube +roundcubemail => \i SQL/postgres.initial.sql + +All this has been tested with PostgreSQL 8.x and 7.4.x. Older +versions don't have a -O option for the createdb, so if you are +using that version you'll have to change ownership of the DB later. + + +Database cleaning +----------------- +Do keep your database slick and clean we recommend to periodically execute +bin/cleandb.sh which finally removes all records that are marked as deleted. +Best solution is to install a cronjob running this script daily. + + + +MANUAL CONFIGURATION +==================== + +First of all, rename the files config/*.inc.php.dist to config/*.inc.php. +You can then change these files according to your environment and your needs. +Details about the config parameters can be found in the config files. +See http://trac.roundcube.net/wiki/Howto_Install for even more guidance. + +You can also modify the default .htaccess file. This is necessary to +increase the allowed size of file attachments, for example: + php_value upload_max_filesize 2M + + +UPGRADING +========= + +If you already have a previous version of Roundcube installed, +please refer to the instructions in UPGRADING guide. + + +OPTIMISING +========== + +There are two forms of optimisation here, compression and caching, both aimed +at increasing an end user's experience using Roundcube Webmail. Compression +allows the static web pages to be delivered with less bandwidth. The index.php +of Roundcube Webmail already enables compression on its output. The settings +below allow compression to occur for all static files. Caching sets HTTP +response headers that enable a user's web client to understand what is static +and how to cache it. + +The caching directives used are: + * Etags - sets at tag so the client can request is the page has changed + * Cache-control - defines the age of the page and that the page is 'public' + This enables clients to cache javascript files that don't have private + information between sessions even if using HTTPS. It also allows proxies + to share the same cached page between users. + * Expires - provides another hint to increase the lifetime of static pages. + +For more information refer to RFC 2616. + +Side effects: +------------- +These directives are designed for production use. If you are using this in +a development environment you may get horribly confused if your webclient +is caching stuff that you changed on the server. Disabling the expires +parts below should save you some grief. + +If you are changing the skins, it is recommended that you copy content to +a different directory apart from 'default'. + +Apache: +------- +To enable these features in apache the following modules need to be enabled: + * mod_deflate + * mod_expires + * mod_headers + +The optimisation is already included in the .htaccess file in the top +directory of your installation. + +If you are using Apache version 2.2.9 and later, in the .htaccess file +change the 'append' word to 'merge' for a more correct response. Keeping +as 'append' shouldn't cause any problems though changing to merge will +eliminate the possibility of duplicate 'public' headers in Cache-control. + +Lighttpd: +--------- +With Lightty the addition of Expire: tags by mod_expire is incompatible with +the addition of "Cache-control: public". Using Cache-control 'public' is +used below as it is assumed to give a better caching result. + +Enable modules in server.modules: + "mod_setenv" + "mod_compress" + +Mod_compress is a server side cache of compressed files to improve its performance. + +$HTTP["host"] == "www.example.com" { + + static-file.etags = "enable" + # http://redmine.lighttpd.net/projects/lighttpd/wiki/Etag.use-mtimeDetails + etag.use-mtime = "enable" + + # http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModSetEnv + $HTTP["url"] =~ "^/roundcubemail/(plugins|skins|program)" { + setenv.add-response-header = ( "Cache-Control" => "public, max-age=2592000") + } + + # http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModCompress + # set compress.cache-dir to somewhere outside the docroot. + compress.cache-dir = var.statedir + "/cache/compress" + + compress.filetype = ("text/plain", "text/html", "text/javascript", "text/css", "text/xml", "image/gif", "image/png") +} + + diff -Nru roundcube-0.6+dfsg/plugins/acl/acl.js roundcube-0.7.1/plugins/acl/acl.js --- roundcube-0.6+dfsg/plugins/acl/acl.js 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/acl/acl.js 2012-01-17 07:50:40.000000000 +0000 @@ -1,7 +1,7 @@ /** * ACL plugin script * - * @version 0.6.1 + * @version 0.6.3 * @author Aleksander Machniak */ @@ -315,6 +315,9 @@ this.acl_form.show(); if (type == 'user') name_input.focus(); + + // unfocus the list, make backspace key in name input field working + this.acl_list.blur(); } // Returns class name according to ACL comparision result diff -Nru roundcube-0.6+dfsg/plugins/acl/acl.php roundcube-0.7.1/plugins/acl/acl.php --- roundcube-0.6+dfsg/plugins/acl/acl.php 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/acl/acl.php 2012-01-17 07:50:40.000000000 +0000 @@ -3,7 +3,7 @@ /** * Folders Access Control Lists Management (RFC4314, RFC2086) * - * @version 0.6.1 + * @version @package_version@ * @author Aleksander Machniak * * @@ -87,11 +87,15 @@ $this->load_config(); $search = get_input_value('_search', RCUBE_INPUT_GPC, true); + $sid = get_input_value('_id', RCUBE_INPUT_GPC); $users = array(); if ($this->init_ldap()) { - $this->ldap->set_pagesize(15); - $result = $this->ldap->search('*', $search); + $max = (int) $this->rc->config->get('autocomplete_max', 15); + $mode = (int) $this->rc->config->get('addressbook_search_mode'); + + $this->ldap->set_pagesize($max); + $result = $this->ldap->search('*', $search, $mode); foreach ($result->records as $record) { $user = $record['uid']; @@ -112,7 +116,7 @@ sort($users, SORT_LOCALE_STRING); - $this->rc->output->command('ksearch_query_results', $users, $search); + $this->rc->output->command('ksearch_query_results', $users, $search, $sid); $this->rc->output->send(); } @@ -186,6 +190,10 @@ 'aclrights' => array($this, 'templ_rights'), )); + $this->rc->output->set_env('autocomplete_max', (int)$this->rc->config->get('autocomplete_max', 15)); + $this->rc->output->set_env('autocomplete_min_length', $this->rc->config->get('autocomplete_min_length')); + $this->rc->output->add_label('autocompletechars', 'autocompletemore'); + $args['form']['sharing'] = array( 'name' => Q($this->gettext('sharing')), 'content' => $this->rc->output->parse('acl.table', false, false), @@ -619,7 +627,6 @@ $acl = $this->rc->imap->get_acl('INBOX'); if (is_array($acl)) { $regexp = '/^' . preg_quote($_SESSION['username'], '/') . '@(.*)$/'; - $regexp = '/^' . preg_quote('aleksander.machniak', '/') . '@(.*)$/'; foreach (array_keys($acl) as $name) { if (preg_match($regexp, $name, $matches)) { $domain = $matches[1]; diff -Nru roundcube-0.6+dfsg/plugins/acl/skins/default/acl.css roundcube-0.7.1/plugins/acl/skins/default/acl.css --- roundcube-0.6+dfsg/plugins/acl/skins/default/acl.css 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/acl/skins/default/acl.css 2012-01-17 07:50:40.000000000 +0000 @@ -61,6 +61,12 @@ background-color: #CC3333; } +#acltable tr.unfocused td +{ + color: #FFFFFF; + background-color: #929292; +} + #acladvswitch { position: absolute; diff -Nru roundcube-0.6+dfsg/plugins/archive/archive.js roundcube-0.7.1/plugins/archive/archive.js --- roundcube-0.6+dfsg/plugins/archive/archive.js 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/archive/archive.js 2012-01-17 07:50:40.000000000 +0000 @@ -27,7 +27,9 @@ // set css style for archive folder var li; - if (rcmail.env.archive_folder && rcmail.env.archive_folder_icon && (li = rcmail.get_folder_li(rcmail.env.archive_folder))) + if (rcmail.env.archive_folder && rcmail.env.archive_folder_icon + && (li = rcmail.get_folder_li(rcmail.env.archive_folder, '', true)) + ) $(li).css('background-image', 'url(' + rcmail.env.archive_folder_icon + ')'); }) } diff -Nru roundcube-0.6+dfsg/plugins/archive/archive.php roundcube-0.7.1/plugins/archive/archive.php --- roundcube-0.6+dfsg/plugins/archive/archive.php 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/archive/archive.php 2012-01-17 07:50:40.000000000 +0000 @@ -100,7 +100,7 @@ // load folders list when needed if ($CURR_SECTION) $select = rcmail_mailbox_select(array('noselection' => '---', 'realnames' => true, - 'maxlength' => 30, 'exceptions' => array('INBOX'))); + 'maxlength' => 30, 'exceptions' => array('INBOX'), 'folder_filter' => 'mail', 'folder_rights' => 'w')); else $select = new html_select(); diff -Nru roundcube-0.6+dfsg/plugins/archive/localization/fr_FR.inc roundcube-0.7.1/plugins/archive/localization/fr_FR.inc --- roundcube-0.6+dfsg/plugins/archive/localization/fr_FR.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/archive/localization/fr_FR.inc 2012-01-17 07:50:40.000000000 +0000 @@ -2,7 +2,7 @@ $labels = array(); $labels['buttontitle'] = 'Archiver ce message'; -$labels['archived'] = 'Message archiv avec success'; +$labels['archived'] = 'Message archivé avec success'; $labels['archivefolder'] = 'Archive'; ?> diff -Nru roundcube-0.6+dfsg/plugins/archive/package.xml roundcube-0.7.1/plugins/archive/package.xml --- roundcube-0.6+dfsg/plugins/archive/package.xml 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/archive/package.xml 2012-01-17 07:50:40.000000000 +0000 @@ -13,10 +13,9 @@ roundcube@gmail.com yes - 2010-02-06 - + 2011-11-23 - 1.4 + 1.5 1.4 @@ -35,14 +34,21 @@ - + + + + + + + + diff -Nru roundcube-0.6+dfsg/plugins/enigma/config.inc.php roundcube-0.7.1/plugins/enigma/config.inc.php --- roundcube-0.6+dfsg/plugins/enigma/config.inc.php 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/enigma/config.inc.php 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -enigma->add_button(array( diff -Nru roundcube-0.6+dfsg/plugins/enigma/README roundcube-0.7.1/plugins/enigma/README --- roundcube-0.6+dfsg/plugins/enigma/README 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/enigma/README 2012-01-17 07:50:40.000000000 +0000 @@ -18,7 +18,7 @@ - Parsing of decrypted messages into array (see rcube_mime_struct) and then into rcube_message_part structure (create core class rcube_mime_parser or take over PEAR::Mail_mimeDecode package and improve it) - Sending encrypted/signed messages (probably some changes in core will be needed) -- Per-Identity settings (including keys/certs) (+ split Identities details page into tabs) +- Per-Identity settings (including keys/certs) - Handling big messages with temp files (including changes in Roundcube core) - Performance improvements (some caching, code review) - better (and more) icons diff -Nru roundcube-0.6+dfsg/plugins/http_authentication/http_authentication.php roundcube-0.7.1/plugins/http_authentication/http_authentication.php --- roundcube-0.6+dfsg/plugins/http_authentication/http_authentication.php 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/http_authentication/http_authentication.php 2012-01-17 07:50:40.000000000 +0000 @@ -53,7 +53,7 @@ return $args; } - + function logout($args) { // redirect to configured URL in order to clear HTTP auth credentials diff -Nru roundcube-0.6+dfsg/plugins/managesieve/Changelog roundcube-0.7.1/plugins/managesieve/Changelog --- roundcube-0.6+dfsg/plugins/managesieve/Changelog 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/Changelog 2012-01-17 07:50:40.000000000 +0000 @@ -1,4 +1,40 @@ +* version 5.0 [2012-01-05] +----------------------------------------------------------- +- Fixed setting test type to :is when none is specified +- Fixed javascript error in IE8 +- Fixed possible ID duplication when adding filter rules very fast (#1488288) +- Fixed bug where drag layer wasn't removed when dragging was ended over sets list + +* version 5.0-rc1 [2011-11-17] +----------------------------------------------------------- +- Fixed sorting of scripts, scripts including aware of the sort order +- Fixed import of rules with unsupported tests +- Added 'address' and 'envelope' tests support +- Added 'body' extension support (RFC5173) +- Added 'subaddress' extension support (RFC5233) +- Added comparators support +- Changed Sender/Recipient labels to From/To +- Fixed importing rule names from Ingo +- Fixed handling of extensions disabled in config + +* version 5.0-beta [2011-10-17] +----------------------------------------------------------- +- Added possibility to create a filter based on selected message "in-place" - Fixed import from Horde-INGO (#1488064) +- Add managesieve_script_name option for default name of the script (#1487956) +- Fixed handling of enabled magic_quotes_gpc setting +- Fixed PHP warning on connection error when submitting filter form +- Fixed bug where new action row with flags wasn't handled properly +- Added managesieve_connect hook for plugins +- Fixed doubled Filter tab on page refresh +- Added filters set selector in filter form when invoked in mail task +- Improved script parser, added support for include and variables extensions +- Added Kolab's KEP:14 support (http://wiki.kolab.org/User:Greve/Drafts/KEP:14) +- Use smaller action/rule buttons +- UI redesign: added possibility to move filter to any place using drag&drop + (instead of up/down buttons), added filter sets list object, added more + 'loading' messages +- Added option to hide some scripts (managesieve_filename_exceptions) * version 4.3 [2011-07-28] ----------------------------------------------------------- diff -Nru roundcube-0.6+dfsg/plugins/managesieve/config.inc.php.dist roundcube-0.7.1/plugins/managesieve/config.inc.php.dist --- roundcube-0.6+dfsg/plugins/managesieve/config.inc.php.dist 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/config.inc.php.dist 2012-01-17 07:50:40.000000000 +0000 @@ -31,6 +31,9 @@ // default contents of filters script (eg. default spam filter) $rcmail_config['managesieve_default'] = '/etc/dovecot/sieve/global'; +// The name of the script which will be used when there's no user script +$rcmail_config['managesieve_script_name'] = 'managesieve'; + // Sieve RFC says that we should use UTF-8 endcoding for mailbox names, // but some implementations does not covert UTF-8 to modified UTF-7. // Defaults to UTF7-IMAP @@ -50,4 +53,15 @@ // Enables debugging of conversation with sieve server. Logs it into /sieve $rcmail_config['managesieve_debug'] = false; +// Enables features described in http://wiki.kolab.org/KEP:14 +$rcmail_config['managesieve_kolab_master'] = false; + +// Script name extension used for scripts including. Dovecot uses '.sieve', +// Cyrus uses '.siv'. Doesn't matter if you have managesieve_kolab_master disabled. +$rcmail_config['managesieve_filename_extension'] = '.sieve'; + +// List of reserved script names (without extension). +// Scripts listed here will be not presented to the user. +$rcmail_config['managesieve_filename_exceptions'] = array(); + ?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/lib/rcube_sieve.php roundcube-0.7.1/plugins/managesieve/lib/rcube_sieve.php --- roundcube-0.6+dfsg/plugins/managesieve/lib/rcube_sieve.php 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/lib/rcube_sieve.php 2012-01-17 07:50:40.000000000 +0000 @@ -1,13 +1,27 @@ - - $Id: rcube_sieve.php 5203 2011-09-12 06:44:56Z alec $ - -*/ + * Classes for managesieve operations (using PEAR::Net_Sieve) + * + * Copyright (C) 2008-2011, The Roundcube Dev Team + * Copyright (C) 2011, Kolab Systems AG + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * $Id: rcube_sieve.php 5452 2011-11-18 14:44:48Z alec $ + * + */ // Managesieve Protocol: RFC5804 @@ -30,7 +44,6 @@ public $script; // rcube_sieve_script object public $current; // name of currently loaded script - private $disabled; // array of disabled extensions private $exts; // array of supported extensions @@ -75,7 +88,17 @@ } $this->exts = $this->get_extensions(); - $this->disabled = $disabled; + + // disable features by config + if (!empty($disabled)) { + // we're working on lower-cased names + $disabled = array_map('strtolower', (array) $disabled); + foreach ($disabled as $ext) { + if (($idx = array_search($ext, $this->exts)) !== false) { + unset($this->exts[$idx]); + } + } + } } public function __destruct() { @@ -195,7 +218,7 @@ { if ($this->exts) return $this->exts; - + if (!$this->sieve) return $this->_set_error(SIEVE_ERROR_INTERNAL); @@ -286,23 +309,28 @@ */ private function _parse($txt) { - // try to parse from Roundcube format - $script = new rcube_sieve_script($txt, $this->disabled, $this->exts); - - // ... else try to import from different formats - if (empty($script->content)) { - $script = $this->_import_rules($txt); - $script = new rcube_sieve_script($script, $this->disabled, $this->exts); + // parse + $script = new rcube_sieve_script($txt, $this->exts); + // fix/convert to Roundcube format + if (!empty($script->content)) { // replace all elsif with if+stop, we support only ifs foreach ($script->content as $idx => $rule) { + if (empty($rule['type']) || !preg_match('/^(if|elsif|else)$/', $rule['type'])) { + continue; + } + + $script->content[$idx]['type'] = 'if'; + // 'stop' not found? foreach ($rule['actions'] as $action) { if (preg_match('/^(stop|vacation)$/', $action['type'])) { continue 2; } } - $script->content[$idx]['actions'][] = array('type' => 'stop'); + if (empty($script->content[$idx+1]) || $script->content[$idx+1]['type'] != 'if') { + $script->content[$idx]['actions'][] = array('type' => 'stop'); + } } } @@ -343,48 +371,6 @@ return $this->save_script($name, $content); } - private function _import_rules($script) - { - $i = 0; - $name = array(); - - // Squirrelmail (Avelsieve) - if (preg_match('/(#START_SIEVE_RULE.*END_SIEVE_RULE)\r?\n/', $script)) { - $tokens = preg_split('/(#START_SIEVE_RULE.*END_SIEVE_RULE)\r?\n/', $script, -1, PREG_SPLIT_DELIM_CAPTURE); - foreach ($tokens as $token) { - if (preg_match('/^#START_SIEVE_RULE.*/', $token, $matches)) { - $name[$i] = "unnamed rule ".($i+1); - $content .= "# rule:[".$name[$i]."]\n"; - } - elseif (isset($name[$i])) { - // This preg_replace is added because I've found some Avelsieve scripts - // with rules containing "if" here. I'm not sure it was working - // before without this or not. - $token = preg_replace('/^if\s+/', '', trim($token)); - $content .= "if $token\n"; - $i++; - } - } - } - // Horde (INGO) - else if (preg_match('/(# .+)\r?\n/', $script)) { - $tokens = preg_split('/(# .+)\r?\n/', $script, -1, PREG_SPLIT_DELIM_CAPTURE); - foreach($tokens as $token) { - if (preg_match('/^# (.+)/', $token, $matches)) { - $name[$i] = $matches[1]; - $content .= "# rule:[" . $name[$i] . "]\n"; - } - elseif (isset($name[$i])) { - $token = str_replace(":comparator \"i;ascii-casemap\" ", "", $token); - $content .= $token . "\n"; - $i++; - } - } - } - - return $content; - } - private function _set_error($error) { $this->error = $error; diff -Nru roundcube-0.6+dfsg/plugins/managesieve/lib/rcube_sieve_script.php roundcube-0.7.1/plugins/managesieve/lib/rcube_sieve_script.php --- roundcube-0.6+dfsg/plugins/managesieve/lib/rcube_sieve_script.php 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/lib/rcube_sieve_script.php 2012-01-17 07:50:40.000000000 +0000 @@ -1,20 +1,37 @@ - - $Id: rcube_sieve_script.php 4806 2011-05-24 08:32:01Z alec $ - -*/ + * Class for operations on Sieve scripts + * + * Copyright (C) 2008-2011, The Roundcube Dev Team + * Copyright (C) 2011, Kolab Systems AG + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * $Id: rcube_sieve_script.php 5452 2011-11-18 14:44:48Z alec $ + * + */ class rcube_sieve_script { public $content = array(); // script rules array - private $supported = array( // extensions supported by class - 'fileinto', // RFC3028 + private $vars = array(); // "global" variables + private $prefix = ''; // script header (comments) + private $supported = array( // Sieve extensions supported by class + 'fileinto', // RFC5228 + 'envelope', // RFC5228 'reject', // RFC5429 'ereject', // RFC5429 'copy', // RFC3894 @@ -23,57 +40,34 @@ 'regex', // draft-ietf-sieve-regex-01 'imapflags', // draft-melnikov-sieve-imapflags-06 'imap4flags', // RFC5232 - // TODO: body, notify + 'include', // draft-ietf-sieve-include-12 + 'variables', // RFC5229 + 'body', // RFC5173 + 'subaddress', // RFC5233 + // @TODO: enotify/notify, spamtest+virustest, mailbox, date ); - private $capabilities; - /** * Object constructor * * @param string Script's text content - * @param array List of disabled extensions * @param array List of capabilities supported by server */ - public function __construct($script, $disabled=null, $capabilities=null) + public function __construct($script, $capabilities=array()) { - if (!empty($disabled)) { - // we're working on lower-cased names - $disabled = array_map('strtolower', (array) $disabled); - foreach ($disabled as $ext) { - if (($idx = array_search($ext, $this->supported)) !== false) { + $capabilities = array_map('strtolower', (array) $capabilities); + + // disable features by server capabilities + if (!empty($capabilities)) { + foreach ($this->supported as $idx => $ext) { + if (!in_array($ext, $capabilities)) { unset($this->supported[$idx]); } } } - $this->capabilities = $capabilities; - $this->content = $this->_parse_text($script); - } - - /** - * Adds script contents as text to the script array (at the end) - * - * @param string Text script contents - */ - public function add_text($script) - { - $content = $this->_parse_text($script); - $result = false; - - // check existsing script rules names - foreach ($this->content as $idx => $elem) { - $names[$elem['name']] = $idx; - } - - foreach ($content as $elem) { - if (!isset($names[$elem['name']])) { - array_push($this->content, $elem); - $result = true; - } - } - - return $result; + // Parse text content of the script + $this->_parse_text($script); } /** @@ -81,6 +75,8 @@ * * @param string Rule name * @param array Rule content (as array) + * + * @return int The index of the new rule */ public function add_rule($content) { @@ -114,161 +110,343 @@ } /** + * Sets "global" variable + * + * @param string $name Variable name + * @param string $value Variable value + * @param array $mods Variable modifiers + */ + public function set_var($name, $value, $mods = array()) + { + // Check if variable exists + for ($i=0, $len=count($this->vars); $i<$len; $i++) { + if ($this->vars[$i]['name'] == $name) { + break; + } + } + + $var = array_merge($mods, array('name' => $name, 'value' => $value)); + $this->vars[$i] = $var; + } + + /** + * Unsets "global" variable + * + * @param string $name Variable name + */ + public function unset_var($name) + { + // Check if variable exists + foreach ($this->vars as $idx => $var) { + if ($var['name'] == $name) { + unset($this->vars[$idx]); + break; + } + } + } + + /** + * Gets the value of "global" variable + * + * @param string $name Variable name + * + * @return string Variable value + */ + public function get_var($name) + { + // Check if variable exists + for ($i=0, $len=count($this->vars); $i<$len; $i++) { + if ($this->vars[$i]['name'] == $name) { + return $this->vars[$i]['name']; + } + } + } + + /** + * Sets script header content + * + * @param string $text Header content + */ + public function set_prefix($text) + { + $this->prefix = $text; + } + + /** * Returns script as text */ public function as_text() { - $script = ''; - $exts = array(); - $idx = 0; + $output = ''; + $exts = array(); + $idx = 0; + + if (!empty($this->vars)) { + if (in_array('variables', (array)$this->supported)) { + $has_vars = true; + array_push($exts, 'variables'); + } + foreach ($this->vars as $var) { + if (empty($has_vars)) { + // 'variables' extension not supported, put vars in comments + $output .= sprintf("# %s %s\n", $var['name'], $var['value']); + } + else { + $output .= 'set '; + foreach (array_diff(array_keys($var), array('name', 'value')) as $opt) { + $output .= ":$opt "; + } + $output .= self::escape_string($var['name']) . ' ' . self::escape_string($var['value']) . ";\n"; + } + } + } // rules foreach ($this->content as $rule) { $extension = ''; - $tests = array(); - $i = 0; + $script = ''; + $tests = array(); + $i = 0; // header - $script .= '# rule:[' . $rule['name'] . "]\n"; + if (!empty($rule['name']) && strlen($rule['name'])) { + $script .= '# rule:[' . $rule['name'] . "]\n"; + } // constraints expressions - foreach ($rule['tests'] as $test) { - $tests[$i] = ''; - switch ($test['test']) { - case 'size': - $tests[$i] .= ($test['not'] ? 'not ' : ''); - $tests[$i] .= 'size :' . ($test['type']=='under' ? 'under ' : 'over ') . $test['arg']; - break; - case 'true': - $tests[$i] .= ($test['not'] ? 'false' : 'true'); - break; - case 'exists': - $tests[$i] .= ($test['not'] ? 'not ' : ''); - $tests[$i] .= 'exists ' . self::escape_string($test['arg']); - break; - case 'header': - $tests[$i] .= ($test['not'] ? 'not ' : ''); + if (!empty($rule['tests'])) { + foreach ($rule['tests'] as $test) { + $tests[$i] = ''; + switch ($test['test']) { + case 'size': + $tests[$i] .= ($test['not'] ? 'not ' : ''); + $tests[$i] .= 'size :' . ($test['type']=='under' ? 'under ' : 'over ') . $test['arg']; + break; - // relational operator + comparator - if (preg_match('/^(value|count)-([gteqnl]{2})/', $test['type'], $m)) { - array_push($exts, 'relational'); - array_push($exts, 'comparator-i;ascii-numeric'); + case 'true': + $tests[$i] .= ($test['not'] ? 'false' : 'true'); + break; - $tests[$i] .= 'header :' . $m[1] . ' "' . $m[2] . '" :comparator "i;ascii-numeric"'; - } - else { - if ($test['type'] == 'regex') { - array_push($exts, 'regex'); + case 'exists': + $tests[$i] .= ($test['not'] ? 'not ' : ''); + $tests[$i] .= 'exists ' . self::escape_string($test['arg']); + break; + + case 'header': + $tests[$i] .= ($test['not'] ? 'not ' : ''); + $tests[$i] .= 'header'; + + if (!empty($test['type'])) { + // relational operator + comparator + if (preg_match('/^(value|count)-([gteqnl]{2})/', $test['type'], $m)) { + array_push($exts, 'relational'); + array_push($exts, 'comparator-i;ascii-numeric'); + + $tests[$i] .= ' :' . $m[1] . ' "' . $m[2] . '" :comparator "i;ascii-numeric"'; + } + else { + $this->add_comparator($test, $tests[$i], $exts); + + if ($test['type'] == 'regex') { + array_push($exts, 'regex'); + } + + $tests[$i] .= ' :' . $test['type']; + } } - $tests[$i] .= 'header :' . $test['type']; - } + $tests[$i] .= ' ' . self::escape_string($test['arg1']); + $tests[$i] .= ' ' . self::escape_string($test['arg2']); + break; - $tests[$i] .= ' ' . self::escape_string($test['arg1']); - $tests[$i] .= ' ' . self::escape_string($test['arg2']); - break; + case 'address': + case 'envelope': + if ($test['test'] == 'envelope') { + array_push($exts, 'envelope'); + } + + $tests[$i] .= ($test['not'] ? 'not ' : ''); + $tests[$i] .= $test['test']; + + if (!empty($test['part'])) { + $tests[$i] .= ' :' . $test['part']; + if ($test['part'] == 'user' || $test['part'] == 'detail') { + array_push($exts, 'subaddress'); + } + } + + $this->add_comparator($test, $tests[$i], $exts); + + if (!empty($test['type'])) { + if ($test['type'] == 'regex') { + array_push($exts, 'regex'); + } + $tests[$i] .= ' :' . $test['type']; + } + + $tests[$i] .= ' ' . self::escape_string($test['arg1']); + $tests[$i] .= ' ' . self::escape_string($test['arg2']); + break; + + case 'body': + array_push($exts, 'body'); + + $tests[$i] .= ($test['not'] ? 'not ' : '') . 'body'; + + $this->add_comparator($test, $tests[$i], $exts); + + if (!empty($test['part'])) { + $tests[$i] .= ' :' . $test['part']; + + if (!empty($test['content']) && $test['part'] == 'content') { + $tests[$i] .= ' ' . self::escape_string($test['content']); + } + } + + if (!empty($test['type'])) { + if ($test['type'] == 'regex') { + array_push($exts, 'regex'); + } + $tests[$i] .= ' :' . $test['type']; + } + + $tests[$i] .= ' ' . self::escape_string($test['arg']); + break; + } + $i++; } - $i++; } // disabled rule: if false #.... - $script .= 'if ' . ($rule['disabled'] ? 'false # ' : ''); + if (!empty($tests)) { + $script .= 'if ' . ($rule['disabled'] ? 'false # ' : ''); - if (empty($tests)) { - $tests_str = 'true'; - } - else if (count($tests) > 1) { - $tests_str = implode(', ', $tests); - } - else { - $tests_str = $tests[0]; - } + if (count($tests) > 1) { + $tests_str = implode(', ', $tests); + } + else { + $tests_str = $tests[0]; + } - if ($rule['join'] || count($tests) > 1) { - $script .= sprintf('%s (%s)', $rule['join'] ? 'allof' : 'anyof', $tests_str); - } - else { - $script .= $tests_str; + if ($rule['join'] || count($tests) > 1) { + $script .= sprintf('%s (%s)', $rule['join'] ? 'allof' : 'anyof', $tests_str); + } + else { + $script .= $tests_str; + } + $script .= "\n{\n"; } - $script .= "\n{\n"; // action(s) - foreach ($rule['actions'] as $action) { - switch ($action['type']) { + if (!empty($rule['actions'])) { + foreach ($rule['actions'] as $action) { + $action_script = ''; + + switch ($action['type']) { + + case 'fileinto': + array_push($exts, 'fileinto'); + $action_script .= 'fileinto '; + if ($action['copy']) { + $action_script .= ':copy '; + array_push($exts, 'copy'); + } + $action_script .= self::escape_string($action['target']); + break; - case 'fileinto': - array_push($exts, 'fileinto'); - $script .= "\tfileinto "; - if ($action['copy']) { - $script .= ':copy '; - array_push($exts, 'copy'); - } - $script .= self::escape_string($action['target']) . ";\n"; - break; + case 'redirect': + $action_script .= 'redirect '; + if ($action['copy']) { + $action_script .= ':copy '; + array_push($exts, 'copy'); + } + $action_script .= self::escape_string($action['target']); + break; - case 'redirect': - $script .= "\tredirect "; - if ($action['copy']) { - $script .= ':copy '; - array_push($exts, 'copy'); - } - $script .= self::escape_string($action['target']) . ";\n"; - break; + case 'reject': + case 'ereject': + array_push($exts, $action['type']); + $action_script .= $action['type'].' ' + . self::escape_string($action['target']); + break; - case 'reject': - case 'ereject': - array_push($exts, $action['type']); - $script .= "\t".$action['type']." " - . self::escape_string($action['target']) . ";\n"; - break; + case 'addflag': + case 'setflag': + case 'removeflag': + if (in_array('imap4flags', $this->supported)) + array_push($exts, 'imap4flags'); + else + array_push($exts, 'imapflags'); - case 'addflag': - case 'setflag': - case 'removeflag': - if (is_array($this->capabilities) && in_array('imap4flags', $this->capabilities)) - array_push($exts, 'imap4flags'); - else - array_push($exts, 'imapflags'); + $action_script .= $action['type'].' ' + . self::escape_string($action['target']); + break; - $script .= "\t".$action['type']." " - . self::escape_string($action['target']) . ";\n"; - break; + case 'keep': + case 'discard': + case 'stop': + $action_script .= $action['type']; + break; - case 'keep': - case 'discard': - case 'stop': - $script .= "\t" . $action['type'] .";\n"; - break; + case 'include': + array_push($exts, 'include'); + $action_script .= 'include '; + foreach (array_diff(array_keys($action), array('target', 'type')) as $opt) { + $action_script .= ":$opt "; + } + $action_script .= self::escape_string($action['target']); + break; - case 'vacation': - array_push($exts, 'vacation'); - $script .= "\tvacation"; - if (!empty($action['days'])) - $script .= " :days " . $action['days']; - if (!empty($action['addresses'])) - $script .= " :addresses " . self::escape_string($action['addresses']); - if (!empty($action['subject'])) - $script .= " :subject " . self::escape_string($action['subject']); - if (!empty($action['handle'])) - $script .= " :handle " . self::escape_string($action['handle']); - if (!empty($action['from'])) - $script .= " :from " . self::escape_string($action['from']); - if (!empty($action['mime'])) - $script .= " :mime"; - $script .= " " . self::escape_string($action['reason']) . ";\n"; - break; + case 'set': + array_push($exts, 'variables'); + $action_script .= 'set '; + foreach (array_diff(array_keys($action), array('name', 'value', 'type')) as $opt) { + $action_script .= ":$opt "; + } + $action_script .= self::escape_string($action['name']) . ' ' . self::escape_string($action['value']); + break; + + case 'vacation': + array_push($exts, 'vacation'); + $action_script .= 'vacation'; + if (!empty($action['days'])) + $action_script .= " :days " . $action['days']; + if (!empty($action['addresses'])) + $action_script .= " :addresses " . self::escape_string($action['addresses']); + if (!empty($action['subject'])) + $action_script .= " :subject " . self::escape_string($action['subject']); + if (!empty($action['handle'])) + $action_script .= " :handle " . self::escape_string($action['handle']); + if (!empty($action['from'])) + $action_script .= " :from " . self::escape_string($action['from']); + if (!empty($action['mime'])) + $action_script .= " :mime"; + $action_script .= " " . self::escape_string($action['reason']); + break; + } + + if ($action_script) { + $script .= !empty($tests) ? "\t" : ''; + $script .= $action_script . ";\n"; + } } } - $script .= "}\n"; - $idx++; + if ($script) { + $output .= $script . (!empty($tests) ? "}\n" : ''); + $idx++; + } } // requires if (!empty($exts)) - $script = 'require ["' . implode('","', array_unique($exts)) . "\"];\n" . $script; + $output = 'require ["' . implode('","', array_unique($exts)) . "\"];\n" . $output; + + if (!empty($this->prefix)) { + $output = $this->prefix . "\n\n" . $output; + } - return $script; + return $output; } /** @@ -296,35 +474,89 @@ */ private function _parse_text($script) { - $i = 0; - $content = array(); + $prefix = ''; + $options = array(); - // tokenize rules - if ($tokens = preg_split('/(# rule:\[.*\])\r?\n/', $script, -1, PREG_SPLIT_DELIM_CAPTURE)) { - foreach($tokens as $token) { - if (preg_match('/^# rule:\[(.*)\]/', $token, $matches)) { - $content[$i]['name'] = $matches[1]; + while ($script) { + $script = trim($script); + $rule = array(); + + // Comments + while (!empty($script) && $script[0] == '#') { + $endl = strpos($script, "\n"); + $line = $endl ? substr($script, 0, $endl) : $script; + + // Roundcube format + if (preg_match('/^# rule:\[(.*)\]/', $line, $matches)) { + $rulename = $matches[1]; + } + // KEP:14 variables + else if (preg_match('/^# (EDITOR|EDITOR_VERSION) (.+)$/', $line, $matches)) { + $this->set_var($matches[1], $matches[2]); + } + // Horde-Ingo format + else if (!empty($options['format']) && $options['format'] == 'INGO' + && preg_match('/^# (.*)/', $line, $matches) + ) { + $rulename = $matches[1]; + } + else if (empty($options['prefix'])) { + $prefix .= $line . "\n"; } - else if (isset($content[$i]['name']) && sizeof($content[$i]) == 1) { - if ($rule = $this->_tokenize_rule($token)) { - $content[$i] = array_merge($content[$i], $rule); - $i++; + + $script = ltrim(substr($script, strlen($line) + 1)); + } + + // handle script header + if (empty($options['prefix'])) { + $options['prefix'] = true; + if ($prefix && strpos($prefix, 'horde.org/ingo')) { + $options['format'] = 'INGO'; + } + } + + // Control structures/blocks + if (preg_match('/^(if|else|elsif)/i', $script)) { + $rule = $this->_tokenize_rule($script); + if (strlen($rulename) && !empty($rule)) { + $rule['name'] = $rulename; + } + } + // Simple commands + else { + $rule = $this->_parse_actions($script, ';'); + if (!empty($rule[0]) && is_array($rule)) { + // set "global" variables + if ($rule[0]['type'] == 'set') { + unset($rule[0]['type']); + $this->vars[] = $rule[0]; + } + else { + $rule = array('actions' => $rule); } - else // unknown rule format - unset($content[$i]); } } + + $rulename = ''; + + if (!empty($rule)) { + $this->content[] = $rule; + } } - return $content; + if (!empty($prefix)) { + $this->prefix = trim($prefix); + } } /** * Convert text script fragment to rule object * * @param string Text rule + * + * @return array Rule data */ - private function _tokenize_rule($content) + private function _tokenize_rule(&$content) { $cond = strtolower(self::tokenize($content, 1)); @@ -389,7 +621,7 @@ $header = array('test' => 'header', 'not' => $not, 'arg1' => '', 'arg2' => ''); for ($i=0, $len=count($tokens); $i<$len; $i++) { if (!is_array($tokens[$i]) && preg_match('/^:comparator$/i', $tokens[$i])) { - $i++; + $header['comparator'] = $tokens[++$i]; } else if (!is_array($tokens[$i]) && preg_match('/^:(count|value)$/i', $tokens[$i])) { $header['type'] = strtolower(substr($tokens[$i], 1)) . '-' . $tokens[++$i]; @@ -406,6 +638,52 @@ $tests[] = $header; break; + case 'address': + case 'envelope': + $header = array('test' => $token, 'not' => $not, 'arg1' => '', 'arg2' => ''); + for ($i=0, $len=count($tokens); $i<$len; $i++) { + if (!is_array($tokens[$i]) && preg_match('/^:comparator$/i', $tokens[$i])) { + $header['comparator'] = $tokens[++$i]; + } + else if (!is_array($tokens[$i]) && preg_match('/^:(is|contains|matches|regex)$/i', $tokens[$i])) { + $header['type'] = strtolower(substr($tokens[$i], 1)); + } + else if (!is_array($tokens[$i]) && preg_match('/^:(localpart|domain|all|user|detail)$/i', $tokens[$i])) { + $header['part'] = strtolower(substr($tokens[$i], 1)); + } + else { + $header['arg1'] = $header['arg2']; + $header['arg2'] = $tokens[$i]; + } + } + + $tests[] = $header; + break; + + case 'body': + $header = array('test' => 'body', 'not' => $not, 'arg' => ''); + for ($i=0, $len=count($tokens); $i<$len; $i++) { + if (!is_array($tokens[$i]) && preg_match('/^:comparator$/i', $tokens[$i])) { + $header['comparator'] = $tokens[++$i]; + } + else if (!is_array($tokens[$i]) && preg_match('/^:(is|contains|matches|regex)$/i', $tokens[$i])) { + $header['type'] = strtolower(substr($tokens[$i], 1)); + } + else if (!is_array($tokens[$i]) && preg_match('/^:(raw|content|text)$/i', $tokens[$i])) { + $header['part'] = strtolower(substr($tokens[$i], 1)); + + if ($header['part'] == 'content') { + $header['content'] = $tokens[++$i]; + } + } + else { + $header['arg'] = $tokens[$i]; + } + } + + $tests[] = $header; + break; + case 'exists': $tests[] = array('test' => 'exists', 'not' => $not, 'arg' => array_pop($tokens)); @@ -427,9 +705,7 @@ } // ...and actions block - if ($tests) { - $actions = $this->_parse_actions($content); - } + $actions = $this->_parse_actions($content); if ($tests && $actions) { $result = array( @@ -447,10 +723,12 @@ /** * Parse body of actions section * - * @param string Text body + * @param string $content Text body + * @param string $end End of text separator + * * @return array Array of parsed action type/target pairs */ - private function _parse_actions($content) + private function _parse_actions(&$content, $end = '}') { $result = null; @@ -531,13 +809,73 @@ 'target' => $tokens[count($tokens)-1] ); break; + + case 'include': + $include = array('type' => 'include', 'target' => array_pop($tokens)); + + // Parameters: :once, :optional, :global, :personal + for ($i=0, $len=count($tokens); $i<$len; $i++) { + $tok = strtolower($tokens[$i]); + if ($tok[0] == ':') { + $include[substr($tok, 1)] = true; + } + } + + $result[] = $include; + break; + + case 'set': + $set = array('type' => 'set', 'value' => array_pop($tokens), 'name' => array_pop($tokens)); + + // Parameters: :lower :upper :lowerfirst :upperfirst :quotewildcard :length + for ($i=0, $len=count($tokens); $i<$len; $i++) { + $tok = strtolower($tokens[$i]); + if ($tok[0] == ':') { + $set[substr($tok, 1)] = true; + } + } + + $result[] = $set; + break; + + case 'require': + // skip, will be build according to used commands + // $result[] = array('type' => 'require', 'target' => $tokens); + break; + } + + if ($separator == $end) + break; } return $result; } /** + * + */ + private function add_comparator($test, &$out, &$exts) + { + if (empty($test['comparator'])) { + return; + } + + if ($test['comparator'] == 'i;ascii-numeric') { + array_push($exts, 'relational'); + array_push($exts, 'comparator-i;ascii-numeric'); + } + else if (!in_array($test['comparator'], array('i;octet', 'i;ascii-casemap'))) { + array_push($exts, 'comparator-' . $test['comparator']); + } + + // skip default comparator + if ($test['comparator'] != 'i;ascii-casemap') { + $out .= ' :comparator ' . self::escape_string($test['comparator']); + } + } + + /** * Escape special chars into quoted string value or multi-line string * or list of strings * @@ -595,7 +933,7 @@ * @param mixed $num Number of tokens to return, 0 for all * or True for all tokens until separator is found. * Separator will be returned as last token. - * @param int $in_list Enable to called recursively inside a list + * @param int $in_list Enable to call recursively inside a list * * @return mixed Tokens array or string if $num=1 */ @@ -654,7 +992,7 @@ $str = substr($str, 1); if ($num === true) { $result[] = $sep; - break 2; + break 2; } break; @@ -684,7 +1022,7 @@ // String atom default: // empty or one character - if ($str === '') { + if ($str === '' || $str === null) { break 2; } if (strlen($str) < 2) { diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/bg_BG.inc roundcube-0.7.1/plugins/managesieve/localization/bg_BG.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/bg_BG.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/bg_BG.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,19 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + $labels = array(); $labels['filters'] = 'Филтри'; $labels['managefilters'] = 'Управление на филтри за входяща поща'; @@ -33,18 +47,15 @@ $labels['del'] = 'Изтриване'; $labels['sender'] = 'Подател'; $labels['recipient'] = 'Получател'; +$labels['filterunknownerror'] = 'Неизвестна грешка на сървъра'; +$labels['filterconnerror'] = 'Невъзможност за свързване с managesieve сървъра'; +$labels['filterdeleteerror'] = 'Невъзможност за изтриване на филтър. Сървър грешка'; +$labels['filterdeleted'] = 'Филтърът е изтрит успешно'; +$labels['filtersaved'] = 'Филтърът е записан успешно'; +$labels['filtersaveerror'] = 'Филтърът не може да бъде записан. Сървър грешка.'; +$labels['filterdeleteconfirm'] = 'Наистина ли искате да изтриете избрания филтър?'; +$labels['ruledeleteconfirm'] = 'Сигурни ли сте, че искате да изтриете избраното правило?'; +$labels['actiondeleteconfirm'] = 'Сигурни ли сте, че искате да изтриете избраното действие?'; +$labels['forbiddenchars'] = 'Забранени символи в полето'; +$labels['cannotbeempty'] = 'Полето не може да бъде празно'; -$messages = array(); -$messages['filterunknownerror'] = 'Неизвестна грешка на сървъра'; -$messages['filterconnerror'] = 'Невъзможност за свързване с managesieve сървъра '; -$messages['filterdeleteerror'] = 'Невъзможност за изтриване на филтър. Сървър грешка'; -$messages['filterdeleted'] = 'Филтърът е изтрит успешно'; -$messages['filterdeleteconfirm'] = 'Наистина ли искате да изтриете избрания филтър?'; -$messages['filtersaved'] = 'Филтърът е записан успешно'; -$messages['filtersaveerror'] = 'Филтърът не може да бъде записан. Сървър грешка.'; -$messages['ruledeleteconfirm'] = 'Сигурни ли сте, че искате да изтриете избраното правило?'; -$messages['actiondeleteconfirm'] = 'Сигурни ли сте, че искате да изтриете избраното действие?'; -$messages['forbiddenchars'] = 'Забранени символи в полето'; -$messages['cannotbeempty'] = 'Полето не може да бъде празно'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/cs_CZ.inc roundcube-0.7.1/plugins/managesieve/localization/cs_CZ.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/cs_CZ.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/cs_CZ.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,13 +1,20 @@ - * - */ +/* + +-----------------------------------------------------------------------+ + | localization/cs_CZ/labels.inc | + | | + | Language file of the Roundcube Webmail client | + | Copyright (C) 2012, The Roundcube Dev Team | + | Licensed under the GNU General Public License | + | | + +-----------------------------------------------------------------------+ + | Author: Thomas | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ +$labels = array(); $labels['filters'] = 'Filtry'; $labels['managefilters'] = 'Nastavení filtrů'; $labels['filtername'] = 'Název filtru'; @@ -44,18 +51,15 @@ $labels['vacationdays'] = 'Počet dnů mezi automatickými odpověďmi:'; $labels['vacationreason'] = 'Zpráva (Důvod nepřítomnosti):'; $labels['rulestop'] = 'Zastavit pravidla'; +$labels['filterunknownerror'] = 'Neznámá chyba serveru'; +$labels['filterconnerror'] = 'Nebylo možné se připojit k sieve serveru'; +$labels['filterdeleteerror'] = 'Nebylo možné smazat filtr. Server nahlásil chybu'; +$labels['filterdeleted'] = 'Filtr byl smazán'; +$labels['filtersaved'] = 'Filtr byl uložen'; +$labels['filtersaveerror'] = 'Nebylo možné uložit filtr. Server nahlásil chybu.'; +$labels['filterdeleteconfirm'] = 'Opravdu chcete smazat vybraný filtr?'; +$labels['ruledeleteconfirm'] = 'Jste si jisti, že chcete smazat vybrané pravidlo?'; +$labels['actiondeleteconfirm'] = 'Jste si jisti, že chcete smazat vybranou akci?'; +$labels['forbiddenchars'] = 'Zakázané znaky v poli'; +$labels['cannotbeempty'] = 'Pole nemůže být prázdné'; -$messages = array(); -$messages['filterunknownerror'] = 'Neznámá chyba serveru'; -$messages['filterconnerror'] = 'Nebylo možné se připojit k sieve serveru'; -$messages['filterdeleteerror'] = 'Nebylo možné smazat filtr. Server nahlásil chybu'; -$messages['filterdeleted'] = 'Filtr byl smazán'; -$messages['filterdeleteconfirm'] = 'Opravdu chcete smazat vybraný filtr?'; -$messages['filtersaved'] = 'Filtr byl uložen'; -$messages['filtersaveerror'] = 'Nebylo možné uložit filtr. Server nahlásil chybu.'; -$messages['ruledeleteconfirm'] = 'Jste si jisti, že chcete smazat vybrané pravidlo?'; -$messages['actiondeleteconfirm'] = 'Jste si jisti, že chcete smazat vybranou akci?'; -$messages['forbiddenchars'] = 'Zakázané znaky v poli'; -$messages['cannotbeempty'] = 'Pole nemůže být prázdné'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/de_CH.inc roundcube-0.7.1/plugins/managesieve/localization/de_CH.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/de_CH.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/de_CH.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,20 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + +$labels = array(); $labels['filters'] = 'Filter'; $labels['managefilters'] = 'Verwalte eingehende Nachrichtenfilter'; $labels['filtername'] = 'Filtername'; @@ -17,12 +32,18 @@ $labels['filterisnot'] = 'ist ungleich'; $labels['filterexists'] = 'ist vorhanden'; $labels['filternotexists'] = 'nicht vorhanden'; +$labels['filtermatches'] = 'entspricht Ausdruck'; +$labels['filternotmatches'] = 'entspricht nicht Ausdruck'; +$labels['filterregex'] = 'trifft regulären Ausdruck'; +$labels['filternotregex'] = 'entspricht regulärem Ausdruck'; $labels['filterunder'] = 'unter'; $labels['filterover'] = 'über'; $labels['addrule'] = 'Regel hinzufügen'; $labels['delrule'] = 'Regel löschen'; $labels['messagemoveto'] = 'Verschiebe Nachricht nach'; $labels['messageredirect'] = 'Leite Nachricht um nach'; +$labels['messagecopyto'] = 'Kopiere Nachricht nach'; +$labels['messagesendcopy'] = 'Sende Kopie an'; $labels['messagereply'] = 'Antworte mit Nachricht'; $labels['messagedelete'] = 'Nachricht löschen'; $labels['messagediscard'] = 'Discard with message'; @@ -35,18 +56,95 @@ $labels['vacationaddresses'] = 'Zusätzliche Liste von Empfängern (Komma getrennt):'; $labels['vacationdays'] = 'Antwort wird erneut gesendet nach (in Tagen):'; $labels['vacationreason'] = 'Inhalt der Nachricht (Abwesenheitsgrund):'; +$labels['vacationsubject'] = 'Betreff'; $labels['rulestop'] = 'Regelauswertung anhalten'; +$labels['enable'] = 'Aktivieren/Deaktivieren'; +$labels['filterset'] = 'Filtersätze'; +$labels['filtersets'] = 'Filtersätze'; +$labels['filtersetadd'] = 'Filtersatz anlegen'; +$labels['filtersetdel'] = 'Aktuellen Filtersatz löschen'; +$labels['filtersetact'] = 'Aktuellen Filtersatz aktivieren'; +$labels['filtersetdeact'] = 'Aktuellen Filtersatz deaktivieren'; +$labels['filterdef'] = 'Filterdefinition'; +$labels['filtersetname'] = 'Filtersatzname'; +$labels['newfilterset'] = 'Neuer Filtersatz'; +$labels['active'] = 'aktiv'; +$labels['none'] = 'keine'; +$labels['fromset'] = 'aus Filtersatz'; +$labels['fromfile'] = 'aus Datei'; +$labels['filterdisabled'] = 'Filter deaktiviert'; +$labels['countisgreaterthan'] = 'Anzahl ist grösser als'; +$labels['countisgreaterthanequal'] = 'Anzahl ist gleich oder grösser als'; +$labels['countislessthan'] = 'Anzahl ist kleiner als'; +$labels['countislessthanequal'] = 'Anzahl ist gleich oder kleiner als'; +$labels['countequals'] = 'Anzahl ist gleich'; +$labels['countnotequals'] = 'Anzahl ist ungleich'; +$labels['valueisgreaterthan'] = 'Wert ist grösser als'; +$labels['valueisgreaterthanequal'] = 'Wert ist gleich oder grösser als'; +$labels['valueislessthan'] = 'Wert ist kleiner'; +$labels['valueislessthanequal'] = 'Wert ist gleich oder kleiner als'; +$labels['valueequals'] = 'Wert ist gleich'; +$labels['valuenotequals'] = 'Wert ist ungleich'; +$labels['setflags'] = 'Setze Markierungen'; +$labels['addflags'] = 'Füge Markierung hinzu'; +$labels['removeflags'] = 'Entferne Markierung'; +$labels['flagread'] = 'gelesen'; +$labels['flagdeleted'] = 'Gelöscht'; +$labels['flaganswered'] = 'Beantwortet'; +$labels['flagflagged'] = 'Markiert'; +$labels['flagdraft'] = 'Entwurf'; +$labels['filtercreate'] = 'Filter erstellen'; +$labels['usedata'] = 'Die folgenden Daten im Filter benutzen:'; +$labels['nextstep'] = 'Nächster Schritt'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Erweiterte Optionen'; +$labels['body'] = 'Inhalt'; +$labels['address'] = 'Adresse'; +$labels['envelope'] = 'Umschlag'; +$labels['modifier'] = 'Wandler'; +$labels['text'] = 'Text'; +$labels['undecoded'] = 'kodiert (roh)'; +$labels['contenttype'] = 'Inhaltstyp'; +$labels['modtype'] = 'Typ:'; +$labels['allparts'] = 'alle'; +$labels['domain'] = 'Domain'; +$labels['localpart'] = 'lokaler Teil'; +$labels['user'] = 'Benutzer'; +$labels['detail'] = 'Detail'; +$labels['comparator'] = 'Komparator'; +$labels['default'] = 'Vorgabewert'; +$labels['octet'] = 'strikt (Oktet)'; +$labels['asciicasemap'] = 'Gross-/Kleinschreibung ignorieren'; +$labels['asciinumeric'] = 'numerisch (ascii-numeric)'; +$labels['filterunknownerror'] = 'Unbekannter Serverfehler'; +$labels['filterconnerror'] = 'Kann nicht zum Sieve-Server verbinden'; +$labels['filterdeleteerror'] = 'Fehler beim des löschen Filters. Serverfehler'; +$labels['filterdeleted'] = 'Filter erfolgreich gelöscht'; +$labels['filtersaved'] = 'Filter gespeichert'; +$labels['filtersaveerror'] = 'Serverfehler, konnte den Filter nicht speichern.'; +$labels['filterdeleteconfirm'] = 'Möchten Sie den Filter löschen ?'; +$labels['ruledeleteconfirm'] = 'Sicher, dass Sie die Regel löschen wollen?'; +$labels['actiondeleteconfirm'] = 'Sicher, dass Sie die ausgewaehlte Aktion löschen wollen?'; +$labels['forbiddenchars'] = 'Unerlaubte Zeichen im Feld'; +$labels['cannotbeempty'] = 'Feld darf nicht leer sein'; +$labels['ruleexist'] = 'Ein Filter mit dem angegebenen Namen existiert bereits.'; +$labels['setactivateerror'] = 'Filtersatz kann nicht aktiviert werden. Serverfehler.'; +$labels['setdeactivateerror'] = 'Filtersatz kann nicht deaktiviert werden. Serverfehler.'; +$labels['setdeleteerror'] = 'Filtersatz kann nicht gelöscht werden. Serverfehler.'; +$labels['setactivated'] = 'Filtersatz erfolgreich aktiviert.'; +$labels['setdeactivated'] = 'Filtersatz erfolgreich deaktiviert.'; +$labels['setdeleted'] = 'Filtersatz erfolgreich gelöscht.'; +$labels['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?'; +$labels['setcreateerror'] = 'Filtersatz kann nicht erstellt werden. Serverfehler.'; +$labels['setcreated'] = 'Filter erfolgreich erstellt.'; +$labels['activateerror'] = 'Filter kann nicht aktiviert werden. Serverfehler.'; +$labels['deactivateerror'] = 'Filter kann nicht deaktiviert werden. Serverfehler.'; +$labels['activated'] = 'Filter erfolgreich deaktiviert.'; +$labels['deactivated'] = 'Filter erfolgreich aktiviert.'; +$labels['moved'] = 'Filter erfolgreich verschoben.'; +$labels['moveerror'] = 'Filter kann nicht verschoben werden. Serverfehler.'; +$labels['nametoolong'] = 'Filtersatz kann nicht erstellt werden. Name zu lang.'; +$labels['namereserved'] = 'Reservierter Name.'; +$labels['setexist'] = 'Filtersatz existiert bereits.'; +$labels['nodata'] = 'Mindestens eine Position muss ausgewählt werden!'; -$messages['filterunknownerror'] = 'Unbekannter Serverfehler'; -$messages['filterconnerror'] = 'Kann nicht zum Sieve-Server verbinden'; -$messages['filterdeleteerror'] = 'Fehler beim des löschen Filters. Serverfehler'; -$messages['filterdeleted'] = 'Filter erfolgreich gelöscht'; -$messages['filterdeleteconfirm'] = 'Möchten Sie den Filter löschen ?'; -$messages['filtersaved'] = 'Filter gespeichert'; -$messages['filtersaveerror'] = 'Serverfehler, konnte den Filter nicht speichern.'; -$messages['ruledeleteconfirm'] = 'Sicher, dass Sie die Regel löschen wollen?'; -$messages['actiondeleteconfirm'] = 'Sicher, dass Sie die ausgewaehlte Aktion löschen wollen?'; -$messages['forbiddenchars'] = 'Unerlaubte Zeichen im Feld'; -$messages['cannotbeempty'] = 'Feld darf nicht leer sein'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/de_DE.inc roundcube-0.7.1/plugins/managesieve/localization/de_DE.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/de_DE.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/de_DE.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,9 +1,24 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + +$labels = array(); $labels['filters'] = 'Filter'; -$labels['managefilters'] = 'Posteingangs-Filter verwalten'; +$labels['managefilters'] = 'Filter für eingehende Nachrichten verwalten'; $labels['filtername'] = 'Filtername'; -$labels['newfilter'] = 'Filter anlegen'; +$labels['newfilter'] = 'Neuer Filter'; $labels['filteradd'] = 'Filter hinzufügen'; $labels['filterdel'] = 'Filter löschen'; $labels['moveup'] = 'Nach oben'; @@ -17,17 +32,21 @@ $labels['filterisnot'] = 'ist ungleich'; $labels['filterexists'] = 'existiert'; $labels['filternotexists'] = 'existiert nicht'; +$labels['filtermatches'] = 'trifft auf Ausdruck zu'; +$labels['filternotmatches'] = 'trifft nicht auf Ausdruck zu'; +$labels['filterregex'] = 'trifft auf regulären Ausdruck zu'; +$labels['filternotregex'] = 'trifft nicht auf regulären Ausdruck zu'; $labels['filterunder'] = 'unter'; $labels['filterover'] = 'über'; $labels['addrule'] = 'Regel hinzufügen'; $labels['delrule'] = 'Regel löschen'; -$labels['messagemoveto'] = 'Verschiebe Nachricht nach'; -$labels['messageredirect'] = 'Leite Nachricht um an'; -$labels['messagecopyto'] = 'Kopiere Nachricht nach'; -$labels['messagesendcopy'] = 'Sende Kopie an'; -$labels['messagereply'] = 'Antworte mit Nachricht'; -$labels['messagedelete'] = 'Lösche Nachricht'; -$labels['messagediscard'] = 'Weise ab mit Nachricht'; +$labels['messagemoveto'] = 'Nachricht verschieben nach'; +$labels['messageredirect'] = 'Nachricht umleiten an'; +$labels['messagecopyto'] = 'Nachricht kopieren nach'; +$labels['messagesendcopy'] = 'Kopie senden an'; +$labels['messagereply'] = 'Mit Nachricht antworten'; +$labels['messagedelete'] = 'Nachricht löschen'; +$labels['messagediscard'] = 'Abweisen mit Nachricht'; $labels['messagesrules'] = 'Für eingehende Nachrichten:'; $labels['messagesactions'] = '...führende folgende Aktionen aus:'; $labels['add'] = 'Hinzufügen'; @@ -37,13 +56,15 @@ $labels['vacationaddresses'] = 'Zusätzliche Liste von E-Mail Empfängern (Komma getrennt):'; $labels['vacationdays'] = 'Wie oft sollen Nachrichten gesendet werden (in Tagen):'; $labels['vacationreason'] = 'Nachrichteninhalt (Abwesenheitsgrund):'; +$labels['vacationsubject'] = 'Nachrichtenbetreff'; $labels['rulestop'] = 'Regelauswertung anhalten'; +$labels['enable'] = 'Aktivieren/Deaktivieren'; $labels['filterset'] = 'Filtersätze'; +$labels['filtersets'] = 'Filtersätze'; $labels['filtersetadd'] = 'Filtersatz anlegen'; $labels['filtersetdel'] = 'Aktuellen Filtersatz löschen'; $labels['filtersetact'] = 'Aktuellen Filtersatz aktivieren'; $labels['filtersetdeact'] = 'Aktuellen Filtersatz deaktivieren'; -$labels['filtersetget'] = 'Filtersatz im Textformat herunterladen'; $labels['filterdef'] = 'Filterdefinition'; $labels['filtersetname'] = 'Filtersatzname'; $labels['newfilterset'] = 'Neuer Filtersatz'; @@ -64,29 +85,66 @@ $labels['valueislessthanequal'] = 'Wert ist gleich oder kleiner als'; $labels['valueequals'] = 'Wert ist gleich'; $labels['valuenotequals'] = 'Wert ist ungleich'; +$labels['setflags'] = 'Markierung an der Nachricht setzen'; +$labels['addflags'] = 'Markierung zur Nachricht hinzufügen'; +$labels['removeflags'] = 'Markierungen von der Nachricht entfernen'; +$labels['flagread'] = 'Gelesen'; +$labels['flagdeleted'] = 'Gelöscht'; +$labels['flaganswered'] = 'Beantwortet'; +$labels['flagflagged'] = 'Markiert'; +$labels['flagdraft'] = 'Entwurf'; +$labels['filtercreate'] = 'Filter erstellen'; +$labels['usedata'] = 'Die folgenden Daten im Filter benutzen:'; +$labels['nextstep'] = 'Nächster Schritt'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Erweiterte Optionen'; +$labels['body'] = 'Textkörper'; +$labels['address'] = 'Adresse'; +$labels['envelope'] = 'Umschlag'; +$labels['modifier'] = 'Modifikator:'; +$labels['text'] = 'Text'; +$labels['undecoded'] = 'Nicht dekodiert'; +$labels['contenttype'] = 'Inhaltstyp'; +$labels['modtype'] = 'Typ:'; +$labels['allparts'] = 'Alle'; +$labels['domain'] = 'Domäne'; +$labels['localpart'] = 'lokaler Teil'; +$labels['user'] = 'Benutzer'; +$labels['detail'] = 'Detail'; +$labels['comparator'] = 'Komperator:'; +$labels['default'] = 'Vorgabewert'; +$labels['octet'] = 'strikt (Oktett)'; +$labels['asciicasemap'] = 'Groß-/Kleinschreibung ignorieren'; +$labels['asciinumeric'] = 'numerisch (ascii-numeric)'; +$labels['filterunknownerror'] = 'Unbekannter Serverfehler'; +$labels['filterconnerror'] = 'Kann keine Verbindung mit Managesieve-Server herstellen'; +$labels['filterdeleteerror'] = 'Fehler beim Löschen des Filters. Serverfehler'; +$labels['filterdeleted'] = 'Filter erfolgreich gelöscht'; +$labels['filtersaved'] = 'Filter erfolgreich gespeichert'; +$labels['filtersaveerror'] = 'Fehler beim Speichern des Filters. Serverfehler'; +$labels['filterdeleteconfirm'] = 'Möchten Sie den ausgewählten Filter wirklich löschen?'; +$labels['ruledeleteconfirm'] = 'Sind Sie sicher, dass Sie die ausgewählte Regel löschen möchten?'; +$labels['actiondeleteconfirm'] = 'Sind Sie sicher, dass Sie die ausgewählte Aktion löschen möchten?'; +$labels['forbiddenchars'] = 'Unzulässige Zeichen im Eingabefeld'; +$labels['cannotbeempty'] = 'Eingabefeld darf nicht leer sein'; +$labels['ruleexist'] = 'Ein Filter mit dem angegebenen Namen existiert bereits.'; +$labels['setactivateerror'] = 'Kann ausgewählten Filtersatz nicht aktivieren. Serverfehler'; +$labels['setdeactivateerror'] = 'Kann ausgewählten Filtersatz nicht deaktivieren. Serverfehler'; +$labels['setdeleteerror'] = 'Kann ausgewählten Filtersatz nicht löschen. Serverfehler'; +$labels['setactivated'] = 'Filtersatz wurde erfolgreich aktiviert'; +$labels['setdeactivated'] = 'Filtersatz wurde erfolgreich deaktiviert'; +$labels['setdeleted'] = 'Filtersatz wurde erfolgreich gelöscht'; +$labels['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?'; +$labels['setcreateerror'] = 'Kann Filtersatz nicht erstellen. Serverfehler'; +$labels['setcreated'] = 'Filtersatz wurde erfolgreich erstellt'; +$labels['activateerror'] = 'Filter kann nicht aktiviert werden. Serverfehler.'; +$labels['deactivateerror'] = 'Filter kann nicht deaktiviert werden. Serverfehler.'; +$labels['activated'] = 'Filter erfolgreich deaktiviert.'; +$labels['deactivated'] = 'Filter erfolgreich aktiviert.'; +$labels['moved'] = 'Filter erfolgreich verschoben.'; +$labels['moveerror'] = 'Filter kann nicht verschoben werden. Serverfehler.'; +$labels['nametoolong'] = 'Kann Filtersatz nicht erstellen. Name zu lang'; +$labels['namereserved'] = 'Reservierter Name.'; +$labels['setexist'] = 'Filtersatz existiert bereits.'; +$labels['nodata'] = 'Mindestens eine Position muss ausgewählt werden!'; -$messages = array(); -$messages['filterunknownerror'] = 'Unbekannter Serverfehler'; -$messages['filterconnerror'] = 'Kann keine Verbindung mit Managesieve-Server herstellen'; -$messages['filterdeleteerror'] = 'Fehler beim Löschen des Filters. Serverfehler'; -$messages['filterdeleted'] = 'Filter erfolgreich gelöscht'; -$messages['filtersaved'] = 'Filter erfolgreich gespeichert'; -$messages['filtersaveerror'] = 'Fehler beim Speichern des Filters. Serverfehler'; -$messages['filterdeleteconfirm'] = 'Möchten Sie den ausgewählten Filter wirklich löschen?'; -$messages['ruledeleteconfirm'] = 'Sind Sie sicher, dass Sie die ausgewählte Regel löschen möchten?'; -$messages['actiondeleteconfirm'] = 'Sind Sie sicher, dass Sie die ausgewählte Aktion löschen möchten?'; -$messages['forbiddenchars'] = 'Unzulässige Zeichen im Eingabefeld'; -$messages['cannotbeempty'] = 'Eingabefeld darf nicht leer sein'; -$messages['setactivateerror'] = 'Kann ausgewählten Filtersatz nicht aktivieren. Serverfehler'; -$messages['setdeactivateerror'] = 'Kann ausgewählten Filtersatz nicht deaktivieren. Serverfehler'; -$messages['setdeleteerror'] = 'Kann ausgewählten Filtersatz nicht löschen. Serverfehler'; -$messages['setactivated'] = 'Filtersatz wurde erfolgreich aktiviert'; -$messages['setdeactivated'] = 'Filtersatz wurde erfolgreich deaktiviert'; -$messages['setdeleted'] = 'Filtersatz wurde erfolgreich gelöscht'; -$messages['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?'; -$messages['setcreateerror'] = 'Kann Filtersatz nicht erstellen. Serverfehler'; -$messages['setcreated'] = 'Filtersatz wurde erfolgreich erstellt'; -$messages['emptyname'] = 'Kann Filtersatz nicht erstellen. Kein Name vergeben'; -$messages['nametoolong'] = 'Kann Filtersatz nicht erstellen. Name zu lang' - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/el_GR.inc roundcube-0.7.1/plugins/managesieve/localization/el_GR.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/el_GR.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/el_GR.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,6 +1,18 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ $labels = array(); $labels['filters'] = 'Φίλτρα'; @@ -39,18 +51,14 @@ $labels['vacationdays'] = 'Συχνότητα αποστολής μηνυμάτων (σε ημέρες):'; $labels['vacationreason'] = 'Σώμα μηνύματος (λόγος απουσίας):'; $labels['rulestop'] = 'Παύση επαλήθευσης κανόνων'; +$labels['filterunknownerror'] = 'Άγνωστο σφάλμα διακομιστή'; +$labels['filterconnerror'] = 'Αδυναμία σύνδεσης στον διακομιστή managesieve'; +$labels['filterdeleteerror'] = 'Αδυναμία διαγραφής φίλτρου. Προέκυψε σφάλμα στον διακομιστή'; +$labels['filterdeleted'] = 'Το φίλτρο διαγράφηκε επιτυχώς'; +$labels['filtersaved'] = 'Το φίλτρο αποθηκεύτηκε επιτυχώς'; +$labels['filtersaveerror'] = 'Αδυναμία αποθήκευσης φίλτρου. Προέκυψε σφάλμα στον διακομιστή'; +$labels['ruledeleteconfirm'] = 'Θέλετε όντως να διαγράψετε τον επιλεγμένο κανόνα;'; +$labels['actiondeleteconfirm'] = 'Θέλετε όντως να διαγράψετε την επιλεγμένη ενέργεια;'; +$labels['forbiddenchars'] = 'Μη επιτρεπτοί χαρακτήρες στο πεδίο'; +$labels['cannotbeempty'] = 'Το πεδίο δεν μπορεί να είναι κενό'; -$messages = array(); -$messages['filterunknownerror'] = 'Άγνωστο σφάλμα διακομιστή'; -$messages['filterconnerror'] = 'Αδυναμία σύνδεσης στον διακομιστή managesieve'; -$messages['filterdeleteerror'] = 'Αδυναμία διαγραφής φίλτρου. Προέκυψε σφάλμα στον διακομιστή'; -$messages['filterdeleted'] = 'Το φίλτρο διαγράφηκε επιτυχώς'; -$messages['filterconfirmdelete'] = 'Θέλετε όντως να διαγράψετε το επιλεγμένο φίλτρο;'; -$messages['filtersaved'] = 'Το φίλτρο αποθηκεύτηκε επιτυχώς'; -$messages['filtersaveerror'] = 'Αδυναμία αποθήκευσης φίλτρου. Προέκυψε σφάλμα στον διακομιστή'; -$messages['ruledeleteconfirm'] = 'Θέλετε όντως να διαγράψετε τον επιλεγμένο κανόνα;'; -$messages['actiondeleteconfirm'] = 'Θέλετε όντως να διαγράψετε την επιλεγμένη ενέργεια;'; -$messages['forbiddenchars'] = 'Μη επιτρεπτοί χαρακτήρες στο πεδίο'; -$messages['cannotbeempty'] = 'Το πεδίο δεν μπορεί να είναι κενό'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/en_GB.inc roundcube-0.7.1/plugins/managesieve/localization/en_GB.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/en_GB.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/en_GB.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,20 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + +$labels = array(); $labels['filters'] = 'Filters'; $labels['managefilters'] = 'Manage incoming mail filters'; $labels['filtername'] = 'Filter name'; @@ -17,12 +32,18 @@ $labels['filterisnot'] = 'is not equal to'; $labels['filterexists'] = 'exists'; $labels['filternotexists'] = 'not exists'; +$labels['filtermatches'] = 'matches expression'; +$labels['filternotmatches'] = 'not matches expression'; +$labels['filterregex'] = 'matches regular expression'; +$labels['filternotregex'] = 'not matches regular expression'; $labels['filterunder'] = 'under'; $labels['filterover'] = 'over'; $labels['addrule'] = 'Add rule'; $labels['delrule'] = 'Delete rule'; $labels['messagemoveto'] = 'Move message to'; $labels['messageredirect'] = 'Redirect message to'; +$labels['messagecopyto'] = 'Copy message to'; +$labels['messagesendcopy'] = 'Send message copy to'; $labels['messagereply'] = 'Reply with message'; $labels['messagedelete'] = 'Delete message'; $labels['messagediscard'] = 'Discard with message'; @@ -35,19 +56,95 @@ $labels['vacationaddresses'] = 'Additional list of recipient e-mails (comma separated):'; $labels['vacationdays'] = 'How often send messages (in days):'; $labels['vacationreason'] = 'Message body (vacation reason):'; +$labels['vacationsubject'] = 'Message subject:'; $labels['rulestop'] = 'Stop evaluating rules'; +$labels['enable'] = 'Enable/Disable'; +$labels['filterset'] = 'Filters set'; +$labels['filtersets'] = 'Filter sets'; +$labels['filtersetadd'] = 'Add filters set'; +$labels['filtersetdel'] = 'Delete current filters set'; +$labels['filtersetact'] = 'Activate current filters set'; +$labels['filtersetdeact'] = 'Deactivate current filters set'; +$labels['filterdef'] = 'Filter definition'; +$labels['filtersetname'] = 'Filters set name'; +$labels['newfilterset'] = 'New filters set'; +$labels['active'] = 'active'; +$labels['none'] = 'none'; +$labels['fromset'] = 'from set'; +$labels['fromfile'] = 'from file'; +$labels['filterdisabled'] = 'Filter disabled'; +$labels['countisgreaterthan'] = 'count is greater than'; +$labels['countisgreaterthanequal'] = 'count is greater than or equal to'; +$labels['countislessthan'] = 'count is less than'; +$labels['countislessthanequal'] = 'count is less than or equal to'; +$labels['countequals'] = 'count is equal to'; +$labels['countnotequals'] = 'count does not equal'; +$labels['valueisgreaterthan'] = 'value is greater than'; +$labels['valueisgreaterthanequal'] = 'value is greater than or equal to'; +$labels['valueislessthan'] = 'value is less than'; +$labels['valueislessthanequal'] = 'value is less than or equal to'; +$labels['valueequals'] = 'value is equal to'; +$labels['valuenotequals'] = 'value does not equal'; +$labels['setflags'] = 'Set flags to the message'; +$labels['addflags'] = 'Add flags to the message'; +$labels['removeflags'] = 'Remove flags from the message'; +$labels['flagread'] = 'Read'; +$labels['flagdeleted'] = 'Deleted'; +$labels['flaganswered'] = 'Answered'; +$labels['flagflagged'] = 'Flagged'; +$labels['flagdraft'] = 'Draft'; +$labels['filtercreate'] = 'Create filter'; +$labels['usedata'] = 'Use following data in the filter:'; +$labels['nextstep'] = 'Next Step'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Advanced options'; +$labels['body'] = 'Body'; +$labels['address'] = 'address'; +$labels['envelope'] = 'envelope'; +$labels['modifier'] = 'modifier:'; +$labels['text'] = 'text'; +$labels['undecoded'] = 'undecoded (raw)'; +$labels['contenttype'] = 'content type'; +$labels['modtype'] = 'type:'; +$labels['allparts'] = 'all'; +$labels['domain'] = 'domain'; +$labels['localpart'] = 'local part'; +$labels['user'] = 'user'; +$labels['detail'] = 'detail'; +$labels['comparator'] = 'comparator:'; +$labels['default'] = 'default'; +$labels['octet'] = 'strict (octet)'; +$labels['asciicasemap'] = 'case insensitive (ascii-casemap)'; +$labels['asciinumeric'] = 'numeric (ascii-numeric)'; +$labels['filterunknownerror'] = 'Unknown server error'; +$labels['filterconnerror'] = 'Unable to connect to managesieve server'; +$labels['filterdeleteerror'] = 'Unable to delete filter. Server error occured'; +$labels['filterdeleted'] = 'Filter deleted successfully'; +$labels['filtersaved'] = 'Filter saved successfully'; +$labels['filtersaveerror'] = 'Unable to save filter. Server error occured.'; +$labels['filterdeleteconfirm'] = 'Do you really want to delete selected filter?'; +$labels['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?'; +$labels['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?'; +$labels['forbiddenchars'] = 'Forbidden characters in field'; +$labels['cannotbeempty'] = 'Field cannot be empty'; +$labels['ruleexist'] = 'Filter with specified name already exists.'; +$labels['setactivateerror'] = 'Unable to activate selected filters set. Server error occured.'; +$labels['setdeactivateerror'] = 'Unable to deactivate selected filters set. Server error occured.'; +$labels['setdeleteerror'] = 'Unable to delete selected filters set. Server error occured.'; +$labels['setactivated'] = 'Filters set activated successfully.'; +$labels['setdeactivated'] = 'Filters set deactivated successfully.'; +$labels['setdeleted'] = 'Filters set deleted successfully.'; +$labels['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?'; +$labels['setcreateerror'] = 'Unable to create filters set. Server error occured.'; +$labels['setcreated'] = 'Filters set created successfully.'; +$labels['activateerror'] = 'Unable to enable selected filter(s). Server error occured.'; +$labels['deactivateerror'] = 'Unable to disable selected filter(s). Server error occured.'; +$labels['activated'] = 'Filter(s) disabled successfully.'; +$labels['deactivated'] = 'Filter(s) enabled successfully.'; +$labels['moved'] = 'Filter moved successfully.'; +$labels['moveerror'] = 'Unable to move selected filter. Server error occured.'; +$labels['nametoolong'] = 'Name too long.'; +$labels['namereserved'] = 'Reserved name.'; +$labels['setexist'] = 'Set already exists.'; +$labels['nodata'] = 'At least one position must be selected!'; -$messages = array(); -$messages['filterunknownerror'] = 'Unknown server error'; -$messages['filterconnerror'] = 'Unable to connect to managesieve server'; -$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occured'; -$messages['filterdeleted'] = 'Filter deleted successfully'; -$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?'; -$messages['filtersaved'] = 'Filter saved successfully'; -$messages['filtersaveerror'] = 'Unable to save filter. Server error occured.'; -$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?'; -$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?'; -$messages['forbiddenchars'] = 'Forbidden characters in field'; -$messages['cannotbeempty'] = 'Field cannot be empty'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/en_US.inc roundcube-0.7.1/plugins/managesieve/localization/en_US.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/en_US.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/en_US.inc 2012-01-17 07:50:40.000000000 +0000 @@ -43,12 +43,13 @@ $labels['vacationreason'] = 'Message body (vacation reason):'; $labels['vacationsubject'] = 'Message subject:'; $labels['rulestop'] = 'Stop evaluating rules'; +$labels['enable'] = 'Enable/Disable'; $labels['filterset'] = 'Filters set'; +$labels['filtersets'] = 'Filter sets'; $labels['filtersetadd'] = 'Add filters set'; $labels['filtersetdel'] = 'Delete current filters set'; $labels['filtersetact'] = 'Activate current filters set'; $labels['filtersetdeact'] = 'Deactivate current filters set'; -$labels['filtersetget'] = 'Download filters set in text format'; $labels['filterdef'] = 'Filter definition'; $labels['filtersetname'] = 'Filters set name'; $labels['newfilterset'] = 'New filters set'; @@ -77,29 +78,61 @@ $labels['flaganswered'] = 'Answered'; $labels['flagflagged'] = 'Flagged'; $labels['flagdraft'] = 'Draft'; +$labels['filtercreate'] = 'Create filter'; +$labels['usedata'] = 'Use following data in the filter:'; +$labels['nextstep'] = 'Next Step'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Advanced options'; +$labels['body'] = 'Body'; +$labels['address'] = 'address'; +$labels['envelope'] = 'envelope'; +$labels['modifier'] = 'modifier:'; +$labels['text'] = 'text'; +$labels['undecoded'] = 'undecoded (raw)'; +$labels['contenttype'] = 'content type'; +$labels['modtype'] = 'type:'; +$labels['allparts'] = 'all'; +$labels['domain'] = 'domain'; +$labels['localpart'] = 'local part'; +$labels['user'] = 'user'; +$labels['detail'] = 'detail'; +$labels['comparator'] = 'comparator:'; +$labels['default'] = 'default'; +$labels['octet'] = 'strict (octet)'; +$labels['asciicasemap'] = 'case insensitive (ascii-casemap)'; +$labels['asciinumeric'] = 'numeric (ascii-numeric)'; $messages = array(); -$messages['filterunknownerror'] = 'Unknown server error'; -$messages['filterconnerror'] = 'Unable to connect to managesieve server'; -$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occured'; -$messages['filterdeleted'] = 'Filter deleted successfully'; -$messages['filtersaved'] = 'Filter saved successfully'; -$messages['filtersaveerror'] = 'Unable to save filter. Server error occured'; +$messages['filterunknownerror'] = 'Unknown server error.'; +$messages['filterconnerror'] = 'Unable to connect to server.'; +$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occured.'; +$messages['filterdeleted'] = 'Filter deleted successfully.'; +$messages['filtersaved'] = 'Filter saved successfully.'; +$messages['filtersaveerror'] = 'Unable to save filter. Server error occured.'; $messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?'; $messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?'; $messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?'; -$messages['forbiddenchars'] = 'Forbidden characters in field'; -$messages['cannotbeempty'] = 'Field cannot be empty'; -$messages['setactivateerror'] = 'Unable to activate selected filters set. Server error occured'; -$messages['setdeactivateerror'] = 'Unable to deactivate selected filters set. Server error occured'; -$messages['setdeleteerror'] = 'Unable to delete selected filters set. Server error occured'; -$messages['setactivated'] = 'Filters set activated successfully'; -$messages['setdeactivated'] = 'Filters set deactivated successfully'; -$messages['setdeleted'] = 'Filters set deleted successfully'; +$messages['forbiddenchars'] = 'Forbidden characters in field.'; +$messages['cannotbeempty'] = 'Field cannot be empty.'; +$messages['ruleexist'] = 'Filter with specified name already exists.'; +$messages['setactivateerror'] = 'Unable to activate selected filters set. Server error occured.'; +$messages['setdeactivateerror'] = 'Unable to deactivate selected filters set. Server error occured.'; +$messages['setdeleteerror'] = 'Unable to delete selected filters set. Server error occured.'; +$messages['setactivated'] = 'Filters set activated successfully.'; +$messages['setdeactivated'] = 'Filters set deactivated successfully.'; +$messages['setdeleted'] = 'Filters set deleted successfully.'; $messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?'; -$messages['setcreateerror'] = 'Unable to create filters set. Server error occured'; -$messages['setcreated'] = 'Filters set created successfully'; -$messages['emptyname'] = 'Unable to create filters set. Empty set name'; -$messages['nametoolong'] = 'Unable to create filters set. Name too long' +$messages['setcreateerror'] = 'Unable to create filters set. Server error occured.'; +$messages['setcreated'] = 'Filters set created successfully.'; +$messages['activateerror'] = 'Unable to enable selected filter(s). Server error occured.'; +$messages['deactivateerror'] = 'Unable to disable selected filter(s). Server error occured.'; +$messages['activated'] = 'Filter(s) disabled successfully.'; +$messages['deactivated'] = 'Filter(s) enabled successfully.'; +$messages['moved'] = 'Filter moved successfully.'; +$messages['moveerror'] = 'Unable to move selected filter. Server error occured.'; +$messages['nametoolong'] = 'Name too long.'; +$messages['namereserved'] = 'Reserved name.'; +$messages['setexist'] = 'Set already exists.'; +$messages['nodata'] = 'At least one position must be selected!'; ?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/es_AR.inc roundcube-0.7.1/plugins/managesieve/localization/es_AR.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/es_AR.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/es_AR.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,19 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + $labels = array(); $labels['filters'] = 'Filtros'; $labels['managefilters'] = 'Administrar filtros de correo entrante'; @@ -44,7 +58,6 @@ $labels['filtersetdel'] = 'Eliminar conjunto de filtros'; $labels['filtersetact'] = 'Activar conjunto de filtros'; $labels['filtersetdeact'] = 'Deactivar conjunto de filtros'; -$labels['filtersetget'] = 'Descargar conjunto de filtros en archivo de texto'; $labels['filterdef'] = 'Definicion del conjunto de filtros'; $labels['filtersetname'] = 'Nombre del conjunto de filtros'; $labels['newfilterset'] = 'Nuevo conjunto de filtros'; @@ -53,29 +66,25 @@ $labels['fromset'] = 'desde conjunto'; $labels['fromfile'] = 'desde archivo'; $labels['filterdisabled'] = 'Filtro deshabilitado'; +$labels['filterunknownerror'] = 'Error desconocido de servidor'; +$labels['filterconnerror'] = 'Imposible conectar con el servidor managesieve'; +$labels['filterdeleteerror'] = 'Imposible borrar filtro. Ha ocurrido un error en el servidor'; +$labels['filterdeleted'] = 'Filtro borrado satisfactoriamente'; +$labels['filtersaved'] = 'Filtro guardado satisfactoriamente'; +$labels['filtersaveerror'] = 'Imposible guardar ell filtro. Ha ocurrido un error en el servidor'; +$labels['filterdeleteconfirm'] = '¿Realmente desea borrar el filtro seleccionado?'; +$labels['ruledeleteconfirm'] = '¿Está seguro de que desea borrar la regla seleccionada?'; +$labels['actiondeleteconfirm'] = '¿Está seguro de que desea borrar la acción seleccionada?'; +$labels['forbiddenchars'] = 'Caracteres prohibidos en el campo'; +$labels['cannotbeempty'] = 'El campo no puede estar vacío'; +$labels['setactivateerror'] = 'Imposible activar el conjunto de filtros. Error en el servidor.'; +$labels['setdeactivateerror'] = 'Imposible desactivar el conjunto de filtros. Error en el servidor.'; +$labels['setdeleteerror'] = 'Imposible eliminar el conjunto de filtros. Error en el servidor.'; +$labels['setactivated'] = 'Conjunto de filtros activados correctamente'; +$labels['setdeactivated'] = 'Conjunto de filtros desactivados correctamente'; +$labels['setdeleted'] = 'Conjunto de filtros eliminados correctamente'; +$labels['setdeleteconfirm'] = '¿Esta seguro, que quiere eliminar el conjunto de filtros seleccionado?'; +$labels['setcreateerror'] = 'Imposible crear el conjunto de filtros. Error en el servidor.'; +$labels['setcreated'] = 'Conjunto de filtros creados correctamente'; +$labels['nametoolong'] = 'Imposible crear el conjunto de filtros. Nombre del conjunto de filtros muy largo'; -$messages = array(); -$messages['filterunknownerror'] = 'Error desconocido de servidor'; -$messages['filterconnerror'] = 'Imposible conectar con el servidor managesieve'; -$messages['filterdeleteerror'] = 'Imposible borrar filtro. Ha ocurrido un error en el servidor'; -$messages['filterdeleted'] = 'Filtro borrado satisfactoriamente'; -$messages['filterdeleteconfirm'] = '¿Realmente desea borrar el filtro seleccionado?'; -$messages['filtersaved'] = 'Filtro guardado satisfactoriamente'; -$messages['filtersaveerror'] = 'Imposible guardar ell filtro. Ha ocurrido un error en el servidor'; -$messages['ruledeleteconfirm'] = '¿Está seguro de que desea borrar la regla seleccionada?'; -$messages['actiondeleteconfirm'] = '¿Está seguro de que desea borrar la acción seleccionada?'; -$messages['forbiddenchars'] = 'Caracteres prohibidos en el campo'; -$messages['cannotbeempty'] = 'El campo no puede estar vacío'; -$messages['setactivateerror'] = 'Imposible activar el conjunto de filtros. Error en el servidor.'; -$messages['setdeactivateerror'] = 'Imposible desactivar el conjunto de filtros. Error en el servidor.'; -$messages['setdeleteerror'] = 'Imposible eliminar el conjunto de filtros. Error en el servidor.'; -$messages['setactivated'] = 'Conjunto de filtros activados correctamente'; -$messages['setdeactivated'] = 'Conjunto de filtros desactivados correctamente'; -$messages['setdeleted'] = 'Conjunto de filtros eliminados correctamente'; -$messages['setdeleteconfirm'] = '¿Esta seguro, que quiere eliminar el conjunto de filtros seleccionado?'; -$messages['setcreateerror'] = 'Imposible crear el conjunto de filtros. Error en el servidor.'; -$messages['setcreated'] = 'Conjunto de filtros creados correctamente'; -$messages['emptyname'] = 'Imposible crear el conjunto de filtros. Nombre del conjunto de filtros vacio'; -$messages['nametoolong'] = 'Imposible crear el conjunto de filtros. Nombre del conjunto de filtros muy largo'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/es_ES.inc roundcube-0.7.1/plugins/managesieve/localization/es_ES.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/es_ES.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/es_ES.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,19 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + $labels = array(); $labels['filters'] = 'Filtros'; $labels['managefilters'] = 'Administrar filtros de correo entrante'; @@ -18,6 +32,10 @@ $labels['filterisnot'] = 'no es igual a'; $labels['filterexists'] = 'existe'; $labels['filternotexists'] = 'no existe'; +$labels['filtermatches'] = 'coincide con la expresión'; +$labels['filternotmatches'] = 'no coincide con la expresión'; +$labels['filterregex'] = 'coincide con la expresión regular'; +$labels['filternotregex'] = 'no coincide con la expresión regular'; $labels['filterunder'] = 'bajo'; $labels['filterover'] = 'sobre'; $labels['addrule'] = 'Agregar regla'; @@ -38,44 +56,69 @@ $labels['vacationaddresses'] = 'Lista de direcciones de correo de destinatarios adicionales (separados por comas):'; $labels['vacationdays'] = 'Cada cuanto enviar mensajes (en días):'; $labels['vacationreason'] = 'Cuerpo del mensaje (razón de vacaciones):'; +$labels['vacationsubject'] = 'Asunto del Mensaje:'; $labels['rulestop'] = 'Parar de evaluar reglas'; +$labels['enable'] = 'Habilitar/Deshabilitar'; $labels['filterset'] = 'Conjunto de filtros'; +$labels['filtersets'] = 'Conjunto de filtros'; $labels['filtersetadd'] = 'Agregar conjunto de filtros'; $labels['filtersetdel'] = 'Eliminar conjunto de filtros actual'; $labels['filtersetact'] = 'Activar conjunto de filtros actual'; $labels['filtersetdeact'] = 'Desactivar conjunto de filtros actual'; -$labels['filtersetget'] = 'Descargar conjunto de filtros en formato de texto'; $labels['filterdef'] = 'Definición de filtros'; $labels['filtersetname'] = 'Nombre del conjunto de filtros'; $labels['newfilterset'] = 'Nuevo conjunto de filtros'; $labels['active'] = 'activo'; $labels['none'] = 'ninguno'; -$labels['fromset'] = 'de conjunto '; +$labels['fromset'] = 'de conjunto'; $labels['fromfile'] = 'de archivo'; $labels['filterdisabled'] = 'Filtro desactivado'; +$labels['countisgreaterthan'] = 'contiene más que'; +$labels['countisgreaterthanequal'] = 'contiene más o igual que'; +$labels['countislessthan'] = 'contiene menos que'; +$labels['countislessthanequal'] = 'contiene menos o igual que'; +$labels['countequals'] = 'contiene igual que'; +$labels['countnotequals'] = 'contiene distinto que'; +$labels['valueisgreaterthan'] = 'el valor es mayor que'; +$labels['valueisgreaterthanequal'] = 'el valor es mayor o igual que'; +$labels['valueislessthan'] = 'el valor es menor que'; +$labels['valueislessthanequal'] = 'el valor es menor o igual que'; +$labels['valueequals'] = 'el valor es igual que'; +$labels['valuenotequals'] = 'el valor es distinto que'; +$labels['setflags'] = 'Etiquetar el mensaje'; +$labels['addflags'] = 'Agregar etiqueta al mensaje'; +$labels['removeflags'] = 'Eliminar etiquetas al mensaje'; +$labels['flagread'] = 'Leido'; +$labels['flagdeleted'] = 'Eliminado'; +$labels['flaganswered'] = 'Respondido'; +$labels['flagflagged'] = 'Marcado'; +$labels['flagdraft'] = 'Borrador'; +$labels['filtercreate'] = 'Crear Filtro'; +$labels['usedata'] = 'User los siguientes datos en el filtro:'; +$labels['nextstep'] = 'Siguiente paso'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Opciones avanzadas'; +$labels['body'] = 'Cuerpo del mensaje'; +$labels['address'] = 'dirección'; +$labels['filterunknownerror'] = 'Error desconocido de servidor'; +$labels['filterconnerror'] = 'Imposible conectar con el servidor managesieve'; +$labels['filterdeleteerror'] = 'Imposible borrar filtro. Ha ocurrido un error en el servidor'; +$labels['filterdeleted'] = 'Filtro borrado satisfactoriamente'; +$labels['filtersaved'] = 'Filtro guardado satisfactoriamente'; +$labels['filtersaveerror'] = 'Imposible guardar el filtro. Ha ocurrido un error en el servidor'; +$labels['filterdeleteconfirm'] = '¿Realmente desea borrar el filtro seleccionado?'; +$labels['ruledeleteconfirm'] = '¿Está seguro de que desea borrar la regla seleccionada?'; +$labels['actiondeleteconfirm'] = '¿Está seguro de que desea borrar la acción seleccionada?'; +$labels['forbiddenchars'] = 'Caracteres prohibidos en el campo'; +$labels['cannotbeempty'] = 'El campo no puede estar vacío'; +$labels['setactivateerror'] = 'Imposible activar el conjunto de filtros seleccionado. Ha ocurrido un error en el servidor'; +$labels['setdeactivateerror'] = 'Imposible desactivar el conjunto de filtros seleccionado. Ha ocurrido un error en el servidor'; +$labels['setdeleteerror'] = 'Imposible borrar el conjunto de filtros seleccionado. Ha ocurrido un error en el servidor'; +$labels['setactivated'] = 'Conjunto de filtros activado satisfactoriamente'; +$labels['setdeactivated'] = 'Conjunto de filtros desactivado satisfactoriamente'; +$labels['setdeleted'] = 'Conjunto de filtros borrado satisfactoriamente'; +$labels['setdeleteconfirm'] = '¿Está seguro de que desea borrar el conjunto de filtros seleccionado?'; +$labels['setcreateerror'] = 'Imposible crear el conjunto de filtros. Ha ocurrido un error en el servidor'; +$labels['setcreated'] = 'Conjunto de filtros creado satisfactoriamente'; +$labels['nametoolong'] = 'Imposible crear el conjunto de filtros. Nombre demasiado largo'; -$messages = array(); -$messages['filterunknownerror'] = 'Error desconocido de servidor'; -$messages['filterconnerror'] = 'Imposible conectar con el servidor managesieve'; -$messages['filterdeleteerror'] = 'Imposible borrar filtro. Ha ocurrido un error en el servidor'; -$messages['filterdeleted'] = 'Filtro borrado satisfactoriamente'; -$messages['filtersaved'] = 'Filtro guardado satisfactoriamente'; -$messages['filtersaveerror'] = 'Imposible guardar el filtro. Ha ocurrido un error en el servidor'; -$messages['filterdeleteconfirm'] = '¿Realmente desea borrar el filtro seleccionado?'; -$messages['ruledeleteconfirm'] = '¿Está seguro de que desea borrar la regla seleccionada?'; -$messages['actiondeleteconfirm'] = '¿Está seguro de que desea borrar la acción seleccionada?'; -$messages['forbiddenchars'] = 'Caracteres prohibidos en el campo'; -$messages['cannotbeempty'] = 'El campo no puede estar vacío'; -$messages['setactivateerror'] = 'Imposible activar el conjunto de filtros seleccionado. Ha ocurrido un error en el servidor'; -$messages['setdeactivateerror'] = 'Imposible desactivar el conjunto de filtros seleccionado. Ha ocurrido un error en el servidor'; -$messages['setdeleteerror'] = 'Imposible borrar el conjunto de filtros seleccionado. Ha ocurrido un error en el servidor'; -$messages['setactivated'] = 'Conjunto de filtros activado satisfactoriamente'; -$messages['setdeactivated'] = 'Conjunto de filtros desactivado satisfactoriamente'; -$messages['setdeleted'] = 'Conjunto de filtros borrado satisfactoriamente'; -$messages['setdeleteconfirm'] = '¿Está seguro de que desea borrar el conjunto de filtros seleccionado?'; -$messages['setcreateerror'] = 'Imposible crear el conjunto de filtros. Ha ocurrido un error en el servidor'; -$messages['setcreated'] = 'Conjunto de filtros creado satisfactoriamente'; -$messages['emptyname'] = 'Imposible crear el conjunto de filtros. Sin nombre'; -$messages['nametoolong'] = 'Imposible crear el conjunto de filtros. Nombre demasiado largo' - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/et_EE.inc roundcube-0.7.1/plugins/managesieve/localization/et_EE.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/et_EE.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/et_EE.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,20 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + +$labels = array(); $labels['filters'] = 'Filtrid'; $labels['managefilters'] = 'Halda sisenevate kirjade filtreid'; $labels['filtername'] = 'Filtri nimi'; @@ -17,12 +32,18 @@ $labels['filterisnot'] = 'ei ole võrdne kui'; $labels['filterexists'] = 'on olemas'; $labels['filternotexists'] = 'pole olemas'; +$labels['filtermatches'] = 'vastab avaldisele'; +$labels['filternotmatches'] = 'ei vasta avaldisele'; +$labels['filterregex'] = 'vastab regulaaravaldisele'; +$labels['filternotregex'] = 'ei vasta regulaaravaldisele'; $labels['filterunder'] = 'alt'; $labels['filterover'] = 'üle'; $labels['addrule'] = 'Lisa reegel'; $labels['delrule'] = 'Kustuta reegel'; $labels['messagemoveto'] = 'Liiguta kiri'; $labels['messageredirect'] = 'Suuna kiri ümber'; +$labels['messagecopyto'] = 'Kopeeri kiri'; +$labels['messagesendcopy'] = 'Saada kirja koopia'; $labels['messagereply'] = 'Vasta kirjaga'; $labels['messagedelete'] = 'Kustuta kiri'; $labels['messagediscard'] = 'Viska ära teatega'; @@ -35,19 +56,85 @@ $labels['vacationaddresses'] = 'Lisanimekiri saaja e-posti aadressidest (komadega eraldatud):'; $labels['vacationdays'] = 'Kui tihti kirju saata (päevades):'; $labels['vacationreason'] = 'Kirja sisu (puhkuse põhjus):'; +$labels['vacationsubject'] = 'Kirja teema:'; $labels['rulestop'] = 'Peata reeglite otsimine'; +$labels['enable'] = 'Luba/keela'; +$labels['filterset'] = 'Filtrite kogum'; +$labels['filtersets'] = 'Filtri kogum'; +$labels['filtersetadd'] = 'Lisa filtrite kogum'; +$labels['filtersetdel'] = 'Kustuta praegune filtrite kogum'; +$labels['filtersetact'] = 'Aktiveeri praegune filtrite kogum'; +$labels['filtersetdeact'] = 'De-aktiveeri praegune filtrite kogum'; +$labels['filterdef'] = 'Filtri definitsioon'; +$labels['filtersetname'] = 'Filtrite kogumi nimi'; +$labels['newfilterset'] = 'Uus filtrite kogum'; +$labels['active'] = 'aktiivne'; +$labels['none'] = 'puudub'; +$labels['fromset'] = 'kogumist'; +$labels['fromfile'] = 'failist'; +$labels['filterdisabled'] = 'Filter keelatud'; +$labels['countisgreaterthan'] = 'koguarv on suurem kui'; +$labels['countisgreaterthanequal'] = 'koguarv on suurem kui või võrdne'; +$labels['countislessthan'] = 'koguarv on väiksem'; +$labels['countislessthanequal'] = 'koguarv on väiksem kui või võrdne'; +$labels['countequals'] = 'koguarv on võrdne'; +$labels['countnotequals'] = 'koguarv ei ole võrdne'; +$labels['valueisgreaterthan'] = 'väärtus on suurem kui'; +$labels['valueisgreaterthanequal'] = 'väärtus on suurem kui või võrdne'; +$labels['valueislessthan'] = 'väärtus on väiksem kui'; +$labels['valueislessthanequal'] = 'väärtus on väiksem kui või võrdne'; +$labels['valueequals'] = 'väärtus on võrdne'; +$labels['valuenotequals'] = 'väärtus ei ole võrdne'; +$labels['setflags'] = 'Sea kirjale lipik'; +$labels['addflags'] = 'Lisa kirjale lipikuid'; +$labels['removeflags'] = 'Eemalda kirjalt lipikud'; +$labels['flagread'] = 'Loetud'; +$labels['flagdeleted'] = 'Kustutatud'; +$labels['flaganswered'] = 'Vastatud'; +$labels['flagflagged'] = 'Märgistatud'; +$labels['flagdraft'] = 'Mustand'; +$labels['filtercreate'] = 'Loo filter'; +$labels['usedata'] = 'Kasuta filtris järgmisi andmeid:'; +$labels['nextstep'] = 'Järgmine samm'; +$labels['...'] = '…'; +$labels['advancedopts'] = 'Lisaseadistused'; +$labels['body'] = 'Põhitekst'; +$labels['address'] = 'aadress'; +$labels['envelope'] = 'ümbrik'; +$labels['modifier'] = 'muutja:'; +$labels['text'] = 'tekst'; +$labels['undecoded'] = 'kodeerimata (toor)'; +$labels['contenttype'] = 'sisu tüüp'; +$labels['modtype'] = 'tüüp:'; +$labels['allparts'] = 'kõik'; +$labels['domain'] = 'domeen'; +$labels['localpart'] = 'kohalik osa'; +$labels['user'] = 'kasutaja'; +$labels['detail'] = 'detail'; +$labels['comparator'] = 'võrdleja:'; +$labels['default'] = 'vaikimisi'; +$labels['octet'] = 'range (octet)'; +$labels['asciicasemap'] = 'tõstutundetu (ascii-casemap)'; +$labels['asciinumeric'] = 'numbriline (ascii-numeric)'; +$labels['filterunknownerror'] = 'Tundmatu serveri tõrge'; +$labels['filterconnerror'] = 'Managesieve serveriga ühendumine nurjus'; +$labels['filterdeleteerror'] = 'Filtri kustutamine nurjus. Ilmnes serveri tõrge.'; +$labels['filterdeleted'] = 'Filter edukalt kustutatud'; +$labels['filtersaved'] = 'Filter edukalt salvestatud'; +$labels['filtersaveerror'] = 'Filtri salvestamine nurjus. Ilmnes serveri tõrge.'; +$labels['filterdeleteconfirm'] = 'Soovid valitud filtri kustutada?'; +$labels['ruledeleteconfirm'] = 'Soovid valitud reegli kustutada?'; +$labels['actiondeleteconfirm'] = 'Soovid valitud tegevuse kustutada?'; +$labels['forbiddenchars'] = 'Väljal on lubamatu märk'; +$labels['cannotbeempty'] = 'Väli ei või tühi olla'; +$labels['ruleexist'] = 'Määratud nimega filter on juba olemas'; +$labels['activateerror'] = 'Valitud filtrite lubamine nurjus. Ilmnes serveri tõrge.'; +$labels['deactivateerror'] = 'Valitud filtrite keelamine nurjus. Ilmnes serveri tõrge.'; +$labels['activated'] = 'Filter edukalt keelatud.'; +$labels['deactivated'] = 'Filter edukalt lubatud.'; +$labels['moved'] = 'Filter edukalt liigutatud.'; +$labels['moveerror'] = 'Valitud filtri liigutamine nurjus. Ilmnes serveri tõrge.'; +$labels['nametoolong'] = 'Nimi on liiga pikk.'; +$labels['namereserved'] = 'Nimi on reserveeritud.'; +$labels['nodata'] = 'Valitud peab olema vähemalt üks asukoht!'; -$messages = array(); -$messages['filterunknownerror'] = 'Tundmatu serveri tõrge'; -$messages['filterconnerror'] = 'Managesieve serveriga ühendumine nurjus'; -$messages['filterdeleteerror'] = 'Filtri kustutamine nurjus. Ilmnes serveri tõrge.'; -$messages['filterdeleted'] = 'Filter edukalt kustutatud'; -$messages['filterdeleteconfirm'] = 'Soovid valitud filtri kustutada?'; -$messages['filtersaved'] = 'Filter edukalt salvestatud'; -$messages['filtersaveerror'] = 'Filtri salvestamine nurjus. Ilmnes serveri tõrge.'; -$messages['ruledeleteconfirm'] = 'Soovid valitud reegli kustutada?'; -$messages['actiondeleteconfirm'] = 'Soovid valitud tegevuse kustutada?'; -$messages['forbiddenchars'] = 'Väljal on lubamatu märk'; -$messages['cannotbeempty'] = 'Väli ei või tühi olla'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/fi_FI.inc roundcube-0.7.1/plugins/managesieve/localization/fi_FI.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/fi_FI.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/fi_FI.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,19 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + $labels = array(); $labels['filters'] = 'Suodattimet'; $labels['managefilters'] = 'Muokkaa saapuvan sähköpostin suodattimia'; @@ -13,7 +27,7 @@ $labels['filteranyof'] = 'Täsmää minkä tahansa sääntöjen mukaan'; $labels['filterany'] = 'Kaikki viestit'; $labels['filtercontains'] = 'Sisältää'; -$labels['filternotcontains'] = 'Ei Sisällä'; +$labels['filternotcontains'] = 'Ei sisällä'; $labels['filteris'] = 'on samanlainen kuin'; $labels['filterisnot'] = 'ei ole samanlainen kuin'; $labels['filterexists'] = 'on olemassa'; @@ -36,12 +50,12 @@ $labels['vacationaddresses'] = 'Lähetä viesti myös seuraaviin osotteisiin (erottele pilkulla):'; $labels['vacationdays'] = 'Kuinka monen päivän välein lähetetään uusi vastaus:'; $labels['vacationreason'] = 'Viesti:'; +$labels['vacationsubject'] = 'Viestin aihe:'; $labels['rulestop'] = 'Viimeinen sääntö'; $labels['filterset'] = 'Suodatinlista'; $labels['filtersetadd'] = 'Lisää suodatinlista'; $labels['filtersetdel'] = 'Poista valittu suodatinlista'; $labels['filtersetact'] = 'Aktivoi valittu suodatinlista'; -$labels['filtersetget'] = 'Lataa valittu suodatinlista tekstimuodossa'; $labels['filterdef'] = 'Suodatinmääritykset'; $labels['filtersetname'] = 'Suodatinlistan nimi'; $labels['newfilterset'] = 'Uusi suodatinlista'; @@ -50,19 +64,27 @@ $labels['fromset'] = 'listasta'; $labels['fromfile'] = 'tiedostosta'; $labels['filterdisabled'] = 'Suodatin on poistettu käytöstä'; +$labels['flagread'] = 'Luettu'; +$labels['flagdeleted'] = 'Poistettu'; +$labels['flaganswered'] = 'Vastattu'; +$labels['flagdraft'] = 'Luonnos'; +$labels['filtercreate'] = 'Luo suodatin'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Lisäasetukset'; +$labels['address'] = 'osoite'; +$labels['modtype'] = 'tyyppi:'; +$labels['allparts'] = 'kaikki'; +$labels['user'] = 'käyttäjä'; +$labels['default'] = 'oletus'; +$labels['filterunknownerror'] = 'Tuntematon palvelin virhe'; +$labels['filterconnerror'] = 'Yhdistäminen palvelimeen epäonnistui'; +$labels['filterdeleteerror'] = 'Suodattimen poistaminen epäonnistui. Palvelin virhe'; +$labels['filterdeleted'] = 'Suodatin poistettu'; +$labels['filtersaved'] = 'Suodatin tallennettu'; +$labels['filtersaveerror'] = 'Suodattimen tallennus epäonnistui. Palvelin virhe'; +$labels['filterdeleteconfirm'] = 'Haluatko varmasti poistaa valitut suodattimet?'; +$labels['ruledeleteconfirm'] = 'Haluatko poistaa valitut säännöt?'; +$labels['actiondeleteconfirm'] = 'Haluatko poistaa valitut tapahtumat?'; +$labels['forbiddenchars'] = 'Sisältää kiellettyjä kirjaimia'; +$labels['cannotbeempty'] = 'Kenttä ei voi olla tyhjä'; -$messages = array(); -$messages['filterunknownerror'] = 'Tuntematon palvelin virhe'; -$messages['filterconnerror'] = 'Yhdistäminen palvelimeen epäonnistui'; -$messages['filterdeleteerror'] = 'Suodattimen poistaminen epäonnistui. Palvelin virhe'; -$messages['filterdeleted'] = 'Suodatin poistettu'; -$messages['filterdeleteconfirm'] = 'Haluatko varmasti poistaa valitut suodattimet?'; -$messages['filtersaved'] = 'Suodatin tallennettu'; -$messages['filtersaveerror'] = 'Suodattimen tallennus epäonnistui. Palvelin virhe'; -$messages['ruledeleteconfirm'] = 'Haluatko poistaa valitut säännöt?'; -$messages['actiondeleteconfirm'] = 'Haluatko poistaa valitut tapahtumat?'; -$messages['forbiddenchars'] = 'Sisältää kiellettyjä kirjaimia'; -$messages['cannotbeempty'] = 'Kenttä ei voi olla tyhjä'; - - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/fr_FR.inc roundcube-0.7.1/plugins/managesieve/localization/fr_FR.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/fr_FR.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/fr_FR.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,11 +1,26 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + +$labels = array(); $labels['filters'] = 'Filtres'; $labels['managefilters'] = 'Gestion des filtres sur les mails entrants'; $labels['filtername'] = 'Nom du filtre'; $labels['newfilter'] = 'Nouveau filtre'; $labels['filteradd'] = 'Ajouter un filtre'; -$labels['filterdel'] = 'Supprimer un filtre'; +$labels['filterdel'] = 'Supprimer le filtre'; $labels['moveup'] = 'Monter'; $labels['movedown'] = 'Descendre'; $labels['filterallof'] = 'valident toutes les conditions suivantes'; @@ -13,21 +28,25 @@ $labels['filterany'] = 'tous les messages'; $labels['filtercontains'] = 'contient'; $labels['filternotcontains'] = 'ne contient pas'; -$labels['filteris'] = 'est '; -$labels['filterisnot'] = 'n\'est pas'; +$labels['filteris'] = 'est égal à'; +$labels['filterisnot'] = 'est différent de'; $labels['filterexists'] = 'existe'; $labels['filternotexists'] = 'n\'existe pas'; +$labels['filtermatches'] = 'concorde avec l\'expression'; +$labels['filternotmatches'] = 'ne concorde pas avec l\'expression'; +$labels['filterregex'] = 'concorde avec l\'expression régulière'; +$labels['filternotregex'] = 'ne concorde pas avec l\'expression régulière'; $labels['filterunder'] = 'est plus petit que'; $labels['filterover'] = 'est plus grand que'; $labels['addrule'] = 'Ajouter une règle'; $labels['delrule'] = 'Supprimer une règle'; $labels['messagemoveto'] = 'Déplacer le message vers'; $labels['messageredirect'] = 'Transférer le message à'; +$labels['messagecopyto'] = 'Copier le message vers'; +$labels['messagesendcopy'] = 'Envoyer une copie du message à'; $labels['messagereply'] = 'Répondre avec le message'; $labels['messagedelete'] = 'Supprimer le message'; $labels['messagediscard'] = 'Rejeter avec le message'; -$labels['messagecopyto'] = 'Copier le message vers'; -$labels['messagesendcopy'] = 'Envoyer une copie du message à'; $labels['messagesrules'] = 'Pour les mails entrants:'; $labels['messagesactions'] = '...exécuter les actions suivantes:'; $labels['add'] = 'Ajouter'; @@ -37,27 +56,84 @@ $labels['vacationaddresses'] = 'Liste des destinataires (séparés par une virgule) :'; $labels['vacationdays'] = 'Ne pas renvoyer un message avant (jours) :'; $labels['vacationreason'] = 'Corps du message (raison de l\'absence) :'; +$labels['vacationsubject'] = 'Sujet du message:'; $labels['rulestop'] = 'Arrêter d\'évaluer les prochaines règles'; -$labels['setflags'] = 'Mettre les flags au message'; -$labels['addflags'] = 'Ajouter les flags au message'; -$labels['removeflags'] = 'Supprimer les flags du message'; +$labels['enable'] = 'Activer/Désactiver'; +$labels['filterset'] = 'Groupe de filtres'; +$labels['filtersets'] = 'Groupes de filtres'; +$labels['filtersetadd'] = 'Ajouter un groupe de filtres'; +$labels['filtersetdel'] = 'Supprimer le groupe de filtres actuel'; +$labels['filtersetact'] = 'Activer le groupe de filtres actuel'; +$labels['filtersetdeact'] = 'Désactiver le groupe de filtres actuel'; +$labels['filterdef'] = 'Définition du filtre'; +$labels['filtersetname'] = 'Nom du groupe de filtres'; +$labels['newfilterset'] = 'Nouveau groupe de filtres'; +$labels['active'] = 'actif'; +$labels['none'] = 'aucun'; +$labels['fromset'] = 'à partir du filtre'; +$labels['fromfile'] = 'à partir du fichier'; +$labels['filterdisabled'] = 'Filtre désactivé'; +$labels['countisgreaterthan'] = 'total supérieur à'; +$labels['countisgreaterthanequal'] = 'total supérieur ou égal à'; +$labels['countislessthan'] = 'total inférieur à'; +$labels['countislessthanequal'] = 'total inférieur à'; +$labels['countequals'] = 'total égal à'; +$labels['countnotequals'] = 'total différent de'; +$labels['valueisgreaterthan'] = 'valeur supérieure à'; +$labels['valueisgreaterthanequal'] = 'valeur supérieure ou égale à'; +$labels['valueislessthan'] = 'valeur inférieure à'; +$labels['valueislessthanequal'] = 'valeur inférieure ou égale à'; +$labels['valueequals'] = 'valeur égale à'; +$labels['valuenotequals'] = 'valeur différente de'; +$labels['setflags'] = 'Mettre les marqueurs au message'; +$labels['addflags'] = 'Ajouter les marqueurs au message'; +$labels['removeflags'] = 'Supprimer les marqueurs du message'; $labels['flagread'] = 'Lu'; -$labels['flagdeleted'] = 'Suprimé'; -$labels['flaganswered'] = 'répondu'; -$labels['flagflagged'] = 'Favori'; +$labels['flagdeleted'] = 'Supprimé'; +$labels['flaganswered'] = 'Répondu'; +$labels['flagflagged'] = 'Marqué'; $labels['flagdraft'] = 'Brouillon'; +$labels['filtercreate'] = 'Créer un filtre'; +$labels['usedata'] = 'Utiliser les informations suivantes dans le filtre'; +$labels['nextstep'] = 'Étape suivante'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Options avancées'; +$labels['body'] = 'Corps du message'; +$labels['address'] = 'adresse'; +$labels['envelope'] = 'enveloppe'; +$labels['modifier'] = 'modificateur:'; +$labels['text'] = 'texte'; +$labels['undecoded'] = 'non décodé (brut)'; +$labels['contenttype'] = 'type de contenu'; +$labels['modtype'] = 'type:'; +$labels['allparts'] = 'tout'; +$labels['domain'] = 'domaine'; +$labels['localpart'] = 'partie locale'; +$labels['user'] = 'utilisateur'; +$labels['detail'] = 'détail'; +$labels['comparator'] = 'comparateur'; +$labels['default'] = 'par défaut'; +$labels['octet'] = 'strict (octet)'; +$labels['asciicasemap'] = 'insensible à la casse (ascii-casemap)'; +$labels['asciinumeric'] = 'numérique (ascii-numeric)'; +$labels['filterunknownerror'] = 'Erreur du serveur inconnue'; +$labels['filterconnerror'] = 'Connexion au serveur Managesieve impossible'; +$labels['filterdeleteerror'] = 'Suppression du filtre impossible. Le serveur à produit une erreur'; +$labels['filterdeleted'] = 'Le filtre a bien été supprimé'; +$labels['filtersaved'] = 'Le filtre a bien été enregistré'; +$labels['filtersaveerror'] = 'Enregistrement du filtre impossibe. Le serveur à produit une erreur'; +$labels['filterdeleteconfirm'] = 'Voulez-vous vraiment supprimer le filtre sélectionné?'; +$labels['ruledeleteconfirm'] = 'Voulez-vous vraiment supprimer la règle sélectionnée?'; +$labels['actiondeleteconfirm'] = 'Voulez-vous vraiment supprimer l\'action sélectionnée?'; +$labels['forbiddenchars'] = 'Caractères interdits dans le champ'; +$labels['cannotbeempty'] = 'Le champ ne peut pas être vide'; +$labels['setactivateerror'] = 'Impossible d\'aactiver le groupe de filtres sélectionné. Le serveur a rencontré une erreur.'; +$labels['setdeactivateerror'] = 'Impossible de désactiver le groupe de filtres sélectionné. Le serveur a rencontré une erreur.'; +$labels['setdeleteerror'] = 'Impossible de supprimer le groupe de filtres sélectionné. Le serveur a rencontré une erreur.'; +$labels['setactivated'] = 'Le groupe de filtres a bien été activé.'; +$labels['setdeactivated'] = 'Le groupe de filtres a bien été désactivé.'; +$labels['setdeleted'] = 'Le groupe de filtres a bien été supprimé.'; +$labels['setdeleteconfirm'] = 'Voulez vous vraiment supprimer le groupe de filtres sélectionné ?'; +$labels['setcreateerror'] = 'Impossible de créer le groupe de filtres. Le serveur a rencontré une erreur.'; +$labels['setcreated'] = 'Le groupe de filtres a bien été créé.'; -$messages = array(); -$messages['filterunknownerror'] = 'Erreur du serveur inconnue'; -$messages['filterconnerror'] = 'Connexion au serveur Managesieve impossible'; -$messages['filterdeleteerror'] = 'Suppression du filtre impossible. Le serveur à produit une erreur'; -$messages['filterdeleted'] = 'Le filtre a bien été supprimé'; -$messages['filterdeleteconfirm'] = 'Voulez-vous vraiment supprimer le filtre sélectionné?'; -$messages['filtersaved'] = 'Le filtre a bien été enregistré'; -$messages['filtersaveerror'] = 'Enregistrement du filtre impossibe. Le serveur à produit une erreur'; -$messages['ruledeleteconfirm'] = 'Voulez-vous vraiment supprimer la règle sélectionnée?'; -$messages['actiondeleteconfirm'] = 'Voulez-vous vraiment supprimer l\'action sélectionnée?'; -$messages['forbiddenchars'] = 'Caractères interdits dans le champ'; -$messages['cannotbeempty'] = 'Le champ ne peut pas être vide'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/gl_ES.inc roundcube-0.7.1/plugins/managesieve/localization/gl_ES.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/gl_ES.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/gl_ES.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,19 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + $labels = array(); $labels['filters'] = 'Filtros'; $labels['managefilters'] = 'Xestionar os filtros de correo entrante'; @@ -44,38 +58,33 @@ $labels['filtersetdel'] = 'Eliminar o conxunto de filtros actual'; $labels['filtersetact'] = 'Activar o conxunto de filtros actual'; $labels['filtersetdeact'] = 'Desactivar o conxunto de filtros actual'; -$labels['filtersetget'] = 'Descargar o conxunto de filtros en formato de texto'; $labels['filterdef'] = 'Definición de filtros'; $labels['filtersetname'] = 'Nome do conxunto de filtros'; $labels['newfilterset'] = 'Novo conxunto de filtros'; $labels['active'] = 'activo'; $labels['none'] = 'ningún'; -$labels['fromset'] = 'de conxunto '; +$labels['fromset'] = 'de conxunto'; $labels['fromfile'] = 'de arquivo'; $labels['filterdisabled'] = 'Filtro desactivado'; +$labels['filterunknownerror'] = 'Erro descoñecido servidor'; +$labels['filterconnerror'] = 'Imposible conectar co servidor managesieve'; +$labels['filterdeleteerror'] = 'Imposible eliminar filtro. Ocurriu un erro no servidor'; +$labels['filterdeleted'] = 'Filtro borrado con éxito'; +$labels['filtersaved'] = 'Filtro gardado con éxito'; +$labels['filtersaveerror'] = 'Imposible gardar o filtro. Ocurriu un erro no servidor'; +$labels['filterdeleteconfirm'] = 'Realmente desexa eliminar o filtro seleccionado?'; +$labels['ruledeleteconfirm'] = 'Está seguro de que desexa eliminar a regra seleccionada?'; +$labels['actiondeleteconfirm'] = 'Está seguro de que desexa eliminar a acción seleccionada?'; +$labels['forbiddenchars'] = 'Caracteres non permitidos no campo'; +$labels['cannotbeempty'] = 'O campo non pode estar baleiro'; +$labels['setactivateerror'] = 'Imposible activar o conxunto de filtros seleccionado. Ocurriu un erro no servidor'; +$labels['setdeactivateerror'] = 'Imposible desactivar o conxunto de filtros seleccionado. Ocurriu un error no servidor'; +$labels['setdeleteerror'] = 'Imposible eliminar o conxunto de filtros seleccionado. Ocurriu un error no servidor'; +$labels['setactivated'] = 'O conxunto de filtros activouse con éxito'; +$labels['setdeactivated'] = 'O conxunto de filtros desactivouse con éxito'; +$labels['setdeleted'] = 'O Conxunto de filtros borrouse con éxito'; +$labels['setdeleteconfirm'] = 'Está seguro de que desexa eliminar o conxunto de filtros seleccionado?'; +$labels['setcreateerror'] = 'Imposible crear o conxunto de filtros. Ocurriu un error no servidor'; +$labels['setcreated'] = 'Conxunto de filtros creado con éxito'; +$labels['nametoolong'] = 'Imposible crear o conxunto de filtros. O nome é longo de máis'; -$messages = array(); -$messages['filterunknownerror'] = 'Erro descoñecido servidor'; -$messages['filterconnerror'] = 'Imposible conectar co servidor managesieve'; -$messages['filterdeleteerror'] = 'Imposible eliminar filtro. Ocurriu un erro no servidor'; -$messages['filterdeleted'] = 'Filtro borrado con éxito'; -$messages['filtersaved'] = 'Filtro gardado con éxito'; -$messages['filtersaveerror'] = 'Imposible gardar o filtro. Ocurriu un erro no servidor'; -$messages['filterdeleteconfirm'] = 'Realmente desexa eliminar o filtro seleccionado?'; -$messages['ruledeleteconfirm'] = 'Está seguro de que desexa eliminar a regra seleccionada?'; -$messages['actiondeleteconfirm'] = 'Está seguro de que desexa eliminar a acción seleccionada?'; -$messages['forbiddenchars'] = 'Caracteres non permitidos no campo'; -$messages['cannotbeempty'] = 'O campo non pode estar baleiro'; -$messages['setactivateerror'] = 'Imposible activar o conxunto de filtros seleccionado. Ocurriu un erro no servidor'; -$messages['setdeactivateerror'] = 'Imposible desactivar o conxunto de filtros seleccionado. Ocurriu un error no servidor'; -$messages['setdeleteerror'] = 'Imposible eliminar o conxunto de filtros seleccionado. Ocurriu un error no servidor'; -$messages['setactivated'] = 'O conxunto de filtros activouse con éxito'; -$messages['setdeactivated'] = 'O conxunto de filtros desactivouse con éxito'; -$messages['setdeleted'] = 'O Conxunto de filtros borrouse con éxito'; -$messages['setdeleteconfirm'] = 'Está seguro de que desexa eliminar o conxunto de filtros seleccionado?'; -$messages['setcreateerror'] = 'Imposible crear o conxunto de filtros. Ocurriu un error no servidor'; -$messages['setcreated'] = 'Conxunto de filtros creado con éxito'; -$messages['emptyname'] = 'Imposible crear o conxunto de filtros. Sen nome'; -$messages['nametoolong'] = 'Imposible crear o conxunto de filtros. O nome é longo de máis' - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/hr_HR.inc roundcube-0.7.1/plugins/managesieve/localization/hr_HR.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/hr_HR.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/hr_HR.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,20 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + +$labels = array(); $labels['filters'] = 'Filteri'; $labels['managefilters'] = 'Uredi filtere za pristiglu poštu'; $labels['filtername'] = 'Naziv filtera'; @@ -48,7 +63,6 @@ $labels['filtersetdel'] = 'Obriši odabranu grupu filtera'; $labels['filtersetact'] = 'Aktiviraj odabranu grupu filtera'; $labels['filtersetdeact'] = 'Deaktiviraj odabranu grupu filtera'; -$labels['filtersetget'] = 'Preuzmi grupu filtera u tekstualnom formatu'; $labels['filterdef'] = 'Definicije filtera'; $labels['filtersetname'] = 'Naziv grupe filtera'; $labels['newfilterset'] = 'Nova grupa filtera'; @@ -77,29 +91,25 @@ $labels['flaganswered'] = 'Odgovorena'; $labels['flagflagged'] = 'Označena'; $labels['flagdraft'] = 'Predložak'; +$labels['filterunknownerror'] = 'Nepoznata greška na poslužitelju'; +$labels['filterconnerror'] = 'Nemoguće spajanje na poslužitelj (managesieve)'; +$labels['filterdeleteerror'] = 'Nemoguće brisanje filtera. Greška na poslužitelju'; +$labels['filterdeleted'] = 'Filter je uspješno obrisan'; +$labels['filtersaved'] = 'Filter je uspješno spremljen'; +$labels['filtersaveerror'] = 'Nemoguće spremiti filter. Greška na poslužitelju'; +$labels['filterdeleteconfirm'] = 'Sigurno želite obrisati odabrani filter?'; +$labels['ruledeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabrana pravila?'; +$labels['actiondeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabrane akcije?'; +$labels['forbiddenchars'] = 'Nedozvoljeni znakovi u polju'; +$labels['cannotbeempty'] = 'Polje nesmije biti prazno'; +$labels['setactivateerror'] = 'Nemoguće aktivirati odabranu grupu filtera. Greška na poslužitelju'; +$labels['setdeactivateerror'] = 'Nemoguće deaktivirati odabranu grupu filtera. Greška na poslužitelju'; +$labels['setdeleteerror'] = 'Nemoguće obrisati odabranu grupu filtera. Greška na poslužitelju'; +$labels['setactivated'] = 'Grupa filtera je uspješno aktivirana'; +$labels['setdeactivated'] = 'Grupa filtera je uspješno deaktivirana'; +$labels['setdeleted'] = 'Grupa filtera je uspješno obrisana'; +$labels['setdeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabranu grupu filtera?'; +$labels['setcreateerror'] = 'Nemoguće stvoriti grupu filtera. Greška na poslužitelju'; +$labels['setcreated'] = 'Grupa filtera je uspješno stvorena'; +$labels['nametoolong'] = 'Nemoguće napraviti grupu filtera. Naziv je predugačak'; -$messages = array(); -$messages['filterunknownerror'] = 'Nepoznata greška na poslužitelju'; -$messages['filterconnerror'] = 'Nemoguće spajanje na poslužitelj (managesieve)'; -$messages['filterdeleteerror'] = 'Nemoguće brisanje filtera. Greška na poslužitelju'; -$messages['filterdeleted'] = 'Filter je uspješno obrisan'; -$messages['filtersaved'] = 'Filter je uspješno spremljen'; -$messages['filtersaveerror'] = 'Nemoguće spremiti filter. Greška na poslužitelju'; -$messages['filterdeleteconfirm'] = 'Sigurno želite obrisati odabrani filter?'; -$messages['ruledeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabrana pravila?'; -$messages['actiondeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabrane akcije?'; -$messages['forbiddenchars'] = 'Nedozvoljeni znakovi u polju'; -$messages['cannotbeempty'] = 'Polje nesmije biti prazno'; -$messages['setactivateerror'] = 'Nemoguće aktivirati odabranu grupu filtera. Greška na poslužitelju'; -$messages['setdeactivateerror'] = 'Nemoguće deaktivirati odabranu grupu filtera. Greška na poslužitelju'; -$messages['setdeleteerror'] = 'Nemoguće obrisati odabranu grupu filtera. Greška na poslužitelju'; -$messages['setactivated'] = 'Grupa filtera je uspješno aktivirana'; -$messages['setdeactivated'] = 'Grupa filtera je uspješno deaktivirana'; -$messages['setdeleted'] = 'Grupa filtera je uspješno obrisana'; -$messages['setdeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabranu grupu filtera?'; -$messages['setcreateerror'] = 'Nemoguće stvoriti grupu filtera. Greška na poslužitelju'; -$messages['setcreated'] = 'Grupa filtera je uspješno stvorena'; -$messages['emptyname'] = 'Nemoguće napraviti grupu filtera. Naziv je prazan'; -$messages['nametoolong'] = 'Nemoguće napraviti grupu filtera. Naziv je predugačak' - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/hu_HU.inc roundcube-0.7.1/plugins/managesieve/localization/hu_HU.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/hu_HU.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/hu_HU.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,19 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + $labels = array(); $labels['filters'] = 'Üzenetszűrők'; $labels['managefilters'] = 'Bejövő üzenetek szűrői'; @@ -24,6 +38,7 @@ $labels['delrule'] = 'Szabály törlése'; $labels['messagemoveto'] = 'Üzenet áthelyezése ide:'; $labels['messageredirect'] = 'Üzenet továbbítása ide:'; +$labels['messagecopyto'] = 'Üzenet másolása'; $labels['messagereply'] = 'Válaszüzenet küldése (autoreply)'; $labels['messagedelete'] = 'Üzenet törlése'; $labels['messagediscard'] = 'Válaszüzenet küldése, a levél törlése'; @@ -36,19 +51,21 @@ $labels['vacationaddresses'] = 'További címzettek (vesszővel elválasztva):'; $labels['vacationdays'] = 'Válaszüzenet küldése ennyi naponként:'; $labels['vacationreason'] = 'Levél szövege (automatikus válasz):'; +$labels['vacationsubject'] = 'Üzenet tárgya:'; $labels['rulestop'] = 'Műveletek végrehajtásának befejezése'; +$labels['enable'] = 'Bekapcsol/Kikapcsol'; +$labels['filterdef'] = 'Szűrő definíció'; +$labels['active'] = 'aktív'; +$labels['none'] = 'nincs'; +$labels['filterunknownerror'] = 'Ismeretlen szerverhiba'; +$labels['filterconnerror'] = 'Nem tudok a szűrőszerverhez kapcsolódni'; +$labels['filterdeleteerror'] = 'A szűrőt nem lehet törölni, szerverhiba történt'; +$labels['filterdeleted'] = 'A szűrő törlése sikeres'; +$labels['filtersaved'] = 'A szűrő mentése sikeres'; +$labels['filtersaveerror'] = 'A szűrő mentése sikertelen, szerverhiba történt'; +$labels['filterdeleteconfirm'] = 'Biztosan törli ezt a szűrőt?'; +$labels['ruledeleteconfirm'] = 'Biztosan törli ezt a szabályt?'; +$labels['actiondeleteconfirm'] = 'Biztosan törli ezt a műveletet?'; +$labels['forbiddenchars'] = 'Érvénytelen karakter a mezőben'; +$labels['cannotbeempty'] = 'A mező nem lehet üres'; -$messages = array(); -$messages['filterunknownerror'] = 'Ismeretlen szerverhiba'; -$messages['filterconnerror'] = 'Nem tudok a szűrőszerverhez kapcsolódni'; -$messages['filterdeleteerror'] = 'A szűrőt nem lehet törölni, szerverhiba történt'; -$messages['filterdeleted'] = 'A szűrő törlése sikeres'; -$messages['filterdeleteconfirm'] = 'Biztosan törli ezt a szűrőt?'; -$messages['filtersaved'] = 'A szűrő mentése sikeres'; -$messages['filtersaveerror'] = 'A szűrő mentése sikertelen, szerverhiba történt'; -$messages['ruledeleteconfirm'] = 'Biztosan törli ezt a szabályt?'; -$messages['actiondeleteconfirm'] = 'Biztosan törli ezt a műveletet?'; -$messages['forbiddenchars'] = 'Érvénytelen karakter a mezőben'; -$messages['cannotbeempty'] = 'A mező nem lehet üres'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/it_IT.inc roundcube-0.7.1/plugins/managesieve/localization/it_IT.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/it_IT.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/it_IT.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,19 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + $labels = array(); $labels['filters'] = 'Filtri'; $labels['managefilters'] = 'Gestione dei filtri per la posta in arrivo'; @@ -18,12 +32,18 @@ $labels['filterisnot'] = 'è diverso da'; $labels['filterexists'] = 'esiste'; $labels['filternotexists'] = 'non esiste'; +$labels['filtermatches'] = 'matcha l\'espressione'; +$labels['filternotmatches'] = 'non matcha l\'espressione'; +$labels['filterregex'] = 'matcha l\'espressione regolare'; +$labels['filternotregex'] = 'non matcha l\'espressione regolare'; $labels['filterunder'] = 'sotto'; $labels['filterover'] = 'sopra'; $labels['addrule'] = 'Aggiungi regola'; $labels['delrule'] = 'Elimina regola'; $labels['messagemoveto'] = 'Sposta il messaggio in'; $labels['messageredirect'] = 'Inoltra il messaggio a'; +$labels['messagecopyto'] = 'copia a'; +$labels['messagesendcopy'] = 'Invia copia a'; $labels['messagereply'] = 'Rispondi con il messaggio'; $labels['messagedelete'] = 'Elimina il messaggio'; $labels['messagediscard'] = 'Rifiuta con messaggio'; @@ -36,13 +56,15 @@ $labels['vacationaddresses'] = 'Lista di indirizzi e-mail di destinatari addizionali (separati da virgola):'; $labels['vacationdays'] = 'Ogni quanti giorni ribadire il messaggio allo stesso mittente'; $labels['vacationreason'] = 'Corpo del messaggio (dettagli relativi all\'assenza):'; +$labels['vacationsubject'] = 'Oggetto del messaggio'; $labels['rulestop'] = 'Non valutare le regole successive'; +$labels['enable'] = 'Abilita/disabilita'; $labels['filterset'] = 'Gruppi di filtri'; +$labels['filtersets'] = 'gruppo di filtri'; $labels['filtersetadd'] = 'Aggiungi gruppo'; $labels['filtersetdel'] = 'Cancella gruppo selezionato'; $labels['filtersetact'] = 'Attiva gruppo selezionato'; $labels['filtersetdeact'] = 'Disattiva gruppo selezionato'; -$labels['filtersetget'] = 'Scarica filtri come testo'; $labels['filterdef'] = 'Definizione del filtro'; $labels['filtersetname'] = 'Nome del Gruppo di filtri'; $labels['newfilterset'] = 'Nuovo gruppo di filri'; @@ -51,29 +73,78 @@ $labels['fromset'] = 'dal set'; $labels['fromfile'] = 'dal file'; $labels['filterdisabled'] = 'Filtro disabilitato'; +$labels['countisgreaterthan'] = 'somma maggiore di'; +$labels['countisgreaterthanequal'] = 'somma maggiore uguale a'; +$labels['countislessthan'] = 'somma minore di'; +$labels['countislessthanequal'] = 'somma minore o uguale a'; +$labels['countequals'] = 'somma uguale a'; +$labels['countnotequals'] = 'somma diversa da'; +$labels['valueisgreaterthan'] = 'valore maggiore di'; +$labels['valueisgreaterthanequal'] = 'valore maggiore uguale a'; +$labels['valueislessthan'] = 'valore minore di'; +$labels['valueislessthanequal'] = 'valore minore uguale di'; +$labels['valueequals'] = 'valore uguale a'; +$labels['valuenotequals'] = 'valore diverso da'; +$labels['setflags'] = 'Contrassegna il messaggio'; +$labels['addflags'] = 'aggiungi flag al messaggio'; +$labels['removeflags'] = 'togli flag dal messaggio'; +$labels['flagread'] = 'Letto'; +$labels['flagdeleted'] = 'Cancellato'; +$labels['flaganswered'] = 'Risposto'; +$labels['flagflagged'] = 'Contrassegna'; +$labels['flagdraft'] = 'Bozza'; +$labels['filtercreate'] = 'Crea filtro'; +$labels['usedata'] = 'utilizza i seguenti dati nel filtro'; +$labels['nextstep'] = 'passo successivo'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Opzioni avanzate'; +$labels['body'] = 'Corpo'; +$labels['address'] = 'indirizzo'; +$labels['envelope'] = 'busta'; +$labels['modifier'] = 'modificatore:'; +$labels['text'] = 'testo'; +$labels['undecoded'] = 'non decodificato (raw)'; +$labels['contenttype'] = 'content type'; +$labels['modtype'] = 'tipo:'; +$labels['allparts'] = 'tutto'; +$labels['domain'] = 'dominio'; +$labels['localpart'] = 'parte locale'; +$labels['user'] = 'user'; +$labels['detail'] = 'dettaglio'; +$labels['comparator'] = 'comparatore'; +$labels['default'] = 'predefinito'; +$labels['octet'] = 'strict (octet)'; +$labels['asciicasemap'] = 'non differenziare maiuscole/minuscole (ascii-casemap)'; +$labels['asciinumeric'] = 'numerico'; +$labels['filterunknownerror'] = 'Errore sconosciuto del server'; +$labels['filterconnerror'] = 'Collegamento al server managesieve fallito'; +$labels['filterdeleteerror'] = 'Eliminazione del filtro fallita. Si è verificato un errore nel server'; +$labels['filterdeleted'] = 'Filtro eliminato con successo'; +$labels['filtersaved'] = 'Filtro salvato con successo'; +$labels['filtersaveerror'] = 'Salvataggio del filtro fallito. Si è verificato un errore nel server'; +$labels['filterdeleteconfirm'] = 'Vuoi veramente eliminare il filtro selezionato?'; +$labels['ruledeleteconfirm'] = 'Sei sicuro di voler eliminare la regola selezionata?'; +$labels['actiondeleteconfirm'] = 'Sei sicuro di voler eliminare l\'azione selezionata?'; +$labels['forbiddenchars'] = 'Caratteri non consentiti nel campo'; +$labels['cannotbeempty'] = 'Il campo non può essere vuoto'; +$labels['ruleexist'] = 'Esiste già un filtro con questo nome'; +$labels['setactivateerror'] = 'Impossibile attivare il filtro. Errore del server'; +$labels['setdeactivateerror'] = 'Impossibile disattivare il filtro. Errore del server'; +$labels['setdeleteerror'] = 'Impossibile cancellare il filtro. Errore del server'; +$labels['setactivated'] = 'Filtro attivato'; +$labels['setdeactivated'] = 'Filtro disattivato'; +$labels['setdeleted'] = 'Filtro cancellato'; +$labels['setdeleteconfirm'] = 'Sei sicuro di voler cancellare il gruppo di filtri'; +$labels['setcreateerror'] = 'Impossibile creare il gruppo. Errore del server'; +$labels['setcreated'] = 'Gruppo di filtri creato'; +$labels['activateerror'] = 'impossibile selezionare il filtro (server error)'; +$labels['deactivateerror'] = 'impossibile disabilitare il filtro (server error)'; +$labels['activated'] = 'filtro disabilitato'; +$labels['deactivated'] = 'filtro abilitato'; +$labels['moved'] = 'filtro spostato'; +$labels['moveerror'] = 'impossibile spostare il filtro (server error)'; +$labels['nametoolong'] = 'Impossibile creare il gruppo: Nome troppo lungo'; +$labels['namereserved'] = 'nome riservato'; +$labels['setexist'] = 'Il gruppo esiste già'; +$labels['nodata'] = 'selezionare almeno una posizione'; -$messages = array(); -$messages['filterunknownerror'] = 'Errore sconosciuto del server'; -$messages['filterconnerror'] = 'Collegamento al server managesieve fallito'; -$messages['filterdeleteerror'] = 'Eliminazione del filtro fallita. Si è verificato un errore nel server'; -$messages['filterdeleted'] = 'Filtro eliminato con successo'; -$messages['filterdeleteconfirm'] = 'Vuoi veramente eliminare il filtro selezionato?'; -$messages['filtersaved'] = 'Filtro salvato con successo'; -$messages['filtersaveerror'] = 'Salvataggio del filtro fallito. Si è verificato un errore nel server'; -$messages['ruledeleteconfirm'] = 'Sei sicuro di voler eliminare la regola selezionata?'; -$messages['actiondeleteconfirm'] = 'Sei sicuro di voler eliminare l\'azione selezionata?'; -$messages['forbiddenchars'] = 'Caratteri non consentiti nel campo'; -$messages['cannotbeempty'] = 'Il campo non può essere vuoto'; -$messages['setactivateerror'] = 'Impossibile attivare il filtro. Errore del server'; -$messages['setdeactivateerror'] = 'Impossibile disattivare il filtro. Errore del server'; -$messages['setdeleteerror'] = 'Impossibile cancellare il filtro. Errore del server'; -$messages['setactivated'] = 'Filtro attivato'; -$messages['setdeactivated'] = 'Filtro disattivato'; -$messages['setdeleted'] = 'Filtro cancellato'; -$messages['setdeleteconfirm'] = 'Sei sicuro di voler cancellare il gruppo di filtri'; -$messages['setcreateerror'] = 'Impossibile creare il gruppo. Errore del server'; -$messages['setcreated'] = 'Gruppo di filtri creato'; -$messages['emptyname'] = 'Impossibile creare il gruppo: Inserire un nome'; -$messages['nametoolong'] = 'Impossibile creare il gruppo: Nome troppo lungo'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/ja_JP.inc roundcube-0.7.1/plugins/managesieve/localization/ja_JP.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/ja_JP.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/ja_JP.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,7 +1,20 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ +$labels = array(); $labels['filters'] = 'フィルター'; $labels['managefilters'] = '受信メールのフィルターの管理'; $labels['filtername'] = 'フィルターの名前'; @@ -19,6 +32,10 @@ $labels['filterisnot'] = '次と一致しない'; $labels['filterexists'] = '存在する'; $labels['filternotexists'] = '存在しない'; +$labels['filtermatches'] = '一致する表記'; +$labels['filternotmatches'] = '一致しない表記'; +$labels['filterregex'] = '一致する正規表現'; +$labels['filternotregex'] = '一致しない正規表現'; $labels['filterunder'] = 'より上'; $labels['filterover'] = 'より下'; $labels['addrule'] = 'ルールの追加'; @@ -39,13 +56,15 @@ $labels['vacationaddresses'] = '電子メール受信者の一覧を追加する (カンマ区切り):'; $labels['vacationdays'] = 'どれ位頻繁にメッセージの送信をするか (1 日あたり):'; $labels['vacationreason'] = 'メッセージ本文 (vacation reason):'; +$labels['vacationsubject'] = 'メッセージの件名'; $labels['rulestop'] = 'ルール評価の停止'; +$labels['enable'] = '有効/無効'; $labels['filterset'] = 'フィルター セット'; +$labels['filtersets'] = 'フィルターセット'; $labels['filtersetadd'] = 'フィルター セットの追加'; $labels['filtersetdel'] = '現在のルールセット の削除'; $labels['filtersetact'] = '現在のフィルター セットを有効にする'; $labels['filtersetdeact'] = '現在のフィルター セットを無効にする'; -$labels['filtersetget'] = 'テキスト形式でフィルター セットをダウンロードする'; $labels['filterdef'] = 'フィルターの定義'; $labels['filtersetname'] = 'フィルター セットの名前'; $labels['newfilterset'] = '新規フィルター セット'; @@ -54,29 +73,65 @@ $labels['fromset'] = 'セットから'; $labels['fromfile'] = 'ファイルから'; $labels['filterdisabled'] = 'フィルターを無効にしました。'; +$labels['countisgreaterthan'] = 'より大きい回数'; +$labels['countisgreaterthanequal'] = '以上の回数'; +$labels['countislessthan'] = '未満の回数'; +$labels['countislessthanequal'] = '以下の回数'; +$labels['countequals'] = '一致する回数'; +$labels['countnotequals'] = '一致しない回数'; +$labels['valueisgreaterthan'] = 'より大きい値'; +$labels['valueisgreaterthanequal'] = '以上の値'; +$labels['valueislessthan'] = '未満の値'; +$labels['valueislessthanequal'] = '以下の値'; +$labels['valueequals'] = '一致する値'; +$labels['valuenotequals'] = '一致しない値'; +$labels['setflags'] = 'メッセージにフラグを設定する'; +$labels['addflags'] = 'メッセージにフラグの追加'; +$labels['removeflags'] = 'メッセージからフラグの削除'; +$labels['flagread'] = '既読'; +$labels['flagdeleted'] = '削除済み'; +$labels['flaganswered'] = '返信済み'; +$labels['flagflagged'] = 'フラグあり'; +$labels['flagdraft'] = '下書き'; +$labels['filtercreate'] = 'フィルターの作成'; +$labels['usedata'] = 'フィルターで次のデータを使う'; +$labels['nextstep'] = '次のステップ'; +$labels['...'] = '...'; +$labels['advancedopts'] = '高度なオプション'; +$labels['body'] = '本文'; +$labels['address'] = 'メールアドレス'; +$labels['envelope'] = 'エンベロープ'; +$labels['modifier'] = '修正:'; +$labels['text'] = 'テキスト'; +$labels['undecoded'] = '未デコード (生の状態)'; +$labels['modtype'] = '種類:'; +$labels['allparts'] = 'すべて'; +$labels['domain'] = 'ドメイン'; +$labels['localpart'] = 'ローカル パート(メールアドレスで@の左)'; +$labels['user'] = 'ユーザー'; +$labels['detail'] = '詳細'; +$labels['default'] = '初期値'; +$labels['asciicasemap'] = '英大小文字の同一視(Aとaが同じ)'; +$labels['asciinumeric'] = '数値 (半角数値)'; +$labels['filterunknownerror'] = '不明なサーバーのエラーです'; +$labels['filterconnerror'] = 'managesieve サーバーに接続できません。'; +$labels['filterdeleteerror'] = 'フィルターを削除できませんでした。サーバーでエラーが発生しました。'; +$labels['filterdeleted'] = 'フィルターの削除に成功しました。'; +$labels['filtersaved'] = 'フィルターの保存に成功しました。'; +$labels['filtersaveerror'] = 'フィルターの保存に失敗しました。サーバーでエラーが発生しました。'; +$labels['filterdeleteconfirm'] = '本当に選択したフィルターを削除しますか?'; +$labels['ruledeleteconfirm'] = '本当に選択したルールを削除しますか?'; +$labels['actiondeleteconfirm'] = '本当に選択した操作を削除しますか?'; +$labels['forbiddenchars'] = '項目に禁止文字があります。'; +$labels['cannotbeempty'] = '空にできませんでした'; +$labels['setactivateerror'] = '選択したフィルター セットの有効化に失敗しました。サーバーでエラーが発生しました。'; +$labels['setdeactivateerror'] = '選択したフィルター セットの無効化に失敗しました。サーバーでエラーが発生しました。'; +$labels['setdeleteerror'] = '選択したフィルター セットの削除に失敗しました。サーバーでエラーが発生しました。'; +$labels['setactivated'] = 'フィルターセットの有効化に成功しました。'; +$labels['setdeactivated'] = 'フィルターセットの無効化に成功しました。'; +$labels['setdeleted'] = 'フィルターセットの削除に成功しました。'; +$labels['setdeleteconfirm'] = '本当に選択したフィルター セットを削除しますか?'; +$labels['setcreateerror'] = 'フィルター セットの作成に失敗しました。サーバーでエラーが発生しました。'; +$labels['setcreated'] = 'フィルター セットの作成に成功しました。'; +$labels['nametoolong'] = 'フィルター セットの作成に失敗しました。名前が長すぎます。'; -$messages = array(); -$messages['filterunknownerror'] = '不明なサーバーのエラーです'; -$messages['filterconnerror'] = 'managesieve サーバーに接続できません。'; -$messages['filterdeleteerror'] = 'フィルターを削除できませんでした。サーバーでエラーが発生しました。'; -$messages['filterdeleted'] = 'フィルターの削除に成功しました。'; -$messages['filtersaved'] = 'フィルターの保存に成功しました。'; -$messages['filtersaveerror'] = 'フィルターの保存に失敗しました。サーバーでエラーが発生しました。'; -$messages['filterdeleteconfirm'] = '本当に選択したフィルターを削除しますか?'; -$messages['ruledeleteconfirm'] = '本当に選択したルールを削除しますか?'; -$messages['actiondeleteconfirm'] = '本当に選択した操作を削除しますか?'; -$messages['forbiddenchars'] = '項目に禁止文字があります。'; -$messages['cannotbeempty'] = '空にできませんでした'; -$messages['setactivateerror'] = '選択したフィルター セットの有効化に失敗しました。サーバーでエラーが発生しました。'; -$messages['setdeactivateerror'] = '選択したフィルター セットの無効化に失敗しました。サーバーでエラーが発生しました。'; -$messages['setdeleteerror'] = '選択したフィルター セットの削除に失敗しました。サーバーでエラーが発生しました。'; -$messages['setactivated'] = 'フィルターセットの有効化に成功しました。'; -$messages['setdeactivated'] = 'フィルターセットの無効化に成功しました。'; -$messages['setdeleted'] = 'フィルターセットの削除に成功しました。'; -$messages['setdeleteconfirm'] = '本当に選択したフィルター セットを削除しますか?'; -$messages['setcreateerror'] = 'フィルター セットの作成に失敗しました。サーバーでエラーが発生しました。'; -$messages['setcreated'] = 'フィルター セットの作成に成功しました。'; -$messages['emptyname'] = 'フィルター セットの作成に失敗しました。名前が空です。'; -$messages['nametoolong'] = 'フィルター セットの作成に失敗しました。名前が長すぎます。'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/lv_LV.inc roundcube-0.7.1/plugins/managesieve/localization/lv_LV.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/lv_LV.inc 1970-01-01 00:00:00.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/lv_LV.inc 2012-01-17 07:50:40.000000000 +0000 @@ -0,0 +1,140 @@ + | + +-----------------------------------------------------------------------+ + @version $Id: lv_LV.inc 5741 2012-01-08 16:20:12Z thomasb $ +*/ + +$labels = array(); +$labels['filters'] = 'Vēstuļu filtri'; +$labels['managefilters'] = 'Pārvaldīt ienākošo vēstuļu filtrus'; +$labels['filtername'] = 'Filtra nosaukums'; +$labels['newfilter'] = 'Jauns filtrs'; +$labels['filteradd'] = 'Pievienot filtru'; +$labels['filterdel'] = 'Dzēst filtru'; +$labels['moveup'] = 'Pārvietot augšup'; +$labels['movedown'] = 'Pārvietot lejup'; +$labels['filterallof'] = 'jāatbilst visiem sekojošajiem nosacījumiem'; +$labels['filteranyof'] = 'jāatbilst jebkuram no sekojošajiem nosacījumiem'; +$labels['filterany'] = 'visām vēstulēm'; +$labels['filtercontains'] = 'satur'; +$labels['filternotcontains'] = 'nesatur'; +$labels['filteris'] = 'vienāds ar'; +$labels['filterisnot'] = 'nav vienāds ar'; +$labels['filterexists'] = 'eksistē'; +$labels['filternotexists'] = 'neeksistē'; +$labels['filtermatches'] = 'jāatbilst izteiksmei'; +$labels['filternotmatches'] = 'neatbilst izteiksmei'; +$labels['filterregex'] = 'jāatbilst regulārai izteiksmei'; +$labels['filternotregex'] = 'neatbilst regulārai izteiksmei'; +$labels['filterunder'] = 'zem'; +$labels['filterover'] = 'virs'; +$labels['addrule'] = 'Pievienot nosacījumu'; +$labels['delrule'] = 'Dzēst nosacījumu'; +$labels['messagemoveto'] = 'Pārvietot vēstuli uz'; +$labels['messageredirect'] = 'Pāradresēt vēstuli uz'; +$labels['messagecopyto'] = 'Kopēt vēstuli uz'; +$labels['messagesendcopy'] = 'Pārsūtīt vēstules kopiju uz'; +$labels['messagereply'] = 'Atbildēt ar'; +$labels['messagedelete'] = 'Dzēst vēstuli'; +$labels['messagediscard'] = 'Dzēst vēstuli un atbildēt'; +$labels['messagesrules'] = 'Ienākošajām vēstulēm:'; +$labels['messagesactions'] = 'Izpildīt sekojošās darbības:'; +$labels['add'] = 'Pievienot'; +$labels['del'] = 'Dzēst'; +$labels['sender'] = 'Sūtītājs'; +$labels['recipient'] = 'Saņēmējs'; +$labels['vacationaddresses'] = 'Ievadiet vienu vai vairākus e-pastu(s), atdalot tos komatu:'; +$labels['vacationdays'] = 'Cik dienu laikā vienam un tam pašam sūtītājam neatbildēt atkārtoti (piem., 7):'; +$labels['vacationreason'] = 'Atvaļinājuma paziņojuma teksts:'; +$labels['vacationsubject'] = 'Vēstules tēma:'; +$labels['rulestop'] = 'Apturēt nosacījumu pārbaudi'; +$labels['enable'] = 'Ieslēgt/Izslēgt'; +$labels['filterset'] = 'Filtru kopa'; +$labels['filtersets'] = 'Filtru kopas'; +$labels['filtersetadd'] = 'Pievienot filtru kopu'; +$labels['filtersetdel'] = 'Dzēst pašreizējo filtru kopu'; +$labels['filtersetact'] = 'Aktivizēt pašreizējo filtru kopu'; +$labels['filtersetdeact'] = 'Deaktivizēt pašreizējo filtru kopu'; +$labels['filterdef'] = 'Filtra apraksts'; +$labels['filtersetname'] = 'Filtru kopas nosaukums'; +$labels['newfilterset'] = 'Jauna filtru kopa'; +$labels['active'] = 'aktīvs'; +$labels['none'] = 'nav'; +$labels['fromset'] = 'no kopas'; +$labels['fromfile'] = 'no faila'; +$labels['filterdisabled'] = 'Filtrs atslēgts'; +$labels['countisgreaterthan'] = 'skaits ir lielāks nekā'; +$labels['countisgreaterthanequal'] = 'skaits ir vienāds vai lielāks nekā'; +$labels['countislessthan'] = 'skaits ir mazāks nekā'; +$labels['countislessthanequal'] = 'skaits ir vienāds vai mazāks nekā'; +$labels['countequals'] = 'skaits ir vienāds ar'; +$labels['countnotequals'] = 'skaits nav vienāds ar'; +$labels['valueisgreaterthan'] = 'vērtība ir lielāka nekā'; +$labels['valueisgreaterthanequal'] = 'vērtība ir vienāda vai lielāka nekā'; +$labels['valueislessthan'] = 'vērtība ir mazāka nekā'; +$labels['valueislessthanequal'] = 'vērtība ir vienāda vai mazāka nekā'; +$labels['valueequals'] = 'vērtība ir vienāda ar'; +$labels['valuenotequals'] = 'vērtība nav vienāda ar'; +$labels['setflags'] = 'Marķēt vēstuli'; +$labels['addflags'] = 'Pievienot vēstulei marķierus'; +$labels['removeflags'] = 'Noņemt vēstulei marķierus'; +$labels['flagread'] = 'Lasītas'; +$labels['flagdeleted'] = 'Dzēstas'; +$labels['flaganswered'] = 'Atbildētas'; +$labels['flagflagged'] = 'Iezīmētās'; +$labels['flagdraft'] = 'Melnraksts'; +$labels['filtercreate'] = 'Izveidot filtru'; +$labels['usedata'] = 'Filtrā izmantot sekojošus datus'; +$labels['nextstep'] = 'Nākamais solis'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Paplašināti iestatījumi'; +$labels['body'] = 'Pamatteksts'; +$labels['address'] = 'adresāts'; +$labels['envelope'] = 'aploksne'; +$labels['modifier'] = 'modifikators:'; +$labels['text'] = 'teksts'; +$labels['undecoded'] = 'neatkodēts (jēldati)'; +$labels['contenttype'] = 'satura tips'; +$labels['modtype'] = 'tips:'; +$labels['allparts'] = 'viss'; +$labels['domain'] = 'domēns'; +$labels['localpart'] = 'vietējā daļa'; +$labels['user'] = 'lietotājs'; +$labels['detail'] = 'detaļas'; +$labels['comparator'] = 'komparators'; +$labels['default'] = 'noklusējums'; +$labels['octet'] = 'strikti (oktets)'; +$labels['asciicasemap'] = 'reģistrnejutīgs (ascii tabula)'; +$labels['asciinumeric'] = 'skaitļu (ascii skaitļu)'; +$labels['filterunknownerror'] = 'Nezināma servera kļūda'; +$labels['filterconnerror'] = 'Neizdevās pieslēgties ManageSieve serverim'; +$labels['filterdeleteerror'] = 'Neizdevās dzēst filtru. Servera iekšējā kļūda'; +$labels['filterdeleted'] = 'Filtrs veiksmīgi izdzēsts'; +$labels['filtersaved'] = 'Filtrs veiksmīgi saglabāts'; +$labels['filtersaveerror'] = 'Neizdevās saglabāt filtru. Servera iekšējā kļūda'; +$labels['filterdeleteconfirm'] = 'Vai tiešām vēlaties dzēst atzīmēto filtru?'; +$labels['ruledeleteconfirm'] = 'Vai tiešām vēlaties dzēst atzīmēto nosacījumu?'; +$labels['actiondeleteconfirm'] = 'Vai tiešām vēlaties dzēst atzīmēto darbību?'; +$labels['forbiddenchars'] = 'Lauks satur aizliegtus simbolus'; +$labels['cannotbeempty'] = 'Lauks nedrīkst būt tukšs'; +$labels['setactivateerror'] = 'Neizdevās aktivizēt atzīmēto filtru kopu. Servera iekšējā kļūda'; +$labels['setdeactivateerror'] = 'Neizdevās deaktivizēt atzīmēto filtru kopu. Servera iekšējā kļūda'; +$labels['setdeleteerror'] = 'Neizdevās izdzēst atzīmēto filtru kopu. Servera iekšējā kļūda'; +$labels['setactivated'] = 'Filtru kopa veiksmīgi aktivizēta'; +$labels['setdeactivated'] = 'Filtru kopa veiksmīgi deaktivizēta'; +$labels['setdeleted'] = 'Filtru kopa veiksmīgi izdzēsta'; +$labels['setdeleteconfirm'] = 'Vai tiešām vēlaties dzēst atzīmēto filtru kopu?'; +$labels['setcreateerror'] = 'Neizdevās izveidot filtru kopu. Servera iekšējā kļūda'; +$labels['setcreated'] = 'Filtru kopa veiksmīgi izveidota'; +$labels['nametoolong'] = 'Neizdevās izveidot filtru kopu. Pārāk garš kopas nosaukums'; + diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/nb_NO.inc roundcube-0.7.1/plugins/managesieve/localization/nb_NO.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/nb_NO.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/nb_NO.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,19 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + $labels = array(); $labels['filters'] = 'Filtre'; $labels['managefilters'] = 'Rediger filter for innkommende e-post'; @@ -24,6 +38,8 @@ $labels['delrule'] = 'Slett regel'; $labels['messagemoveto'] = 'Flytt meldingen til'; $labels['messageredirect'] = 'Videresend meldingen til'; +$labels['messagecopyto'] = 'Kopier meldingen til'; +$labels['messagesendcopy'] = 'Send en kopi av meldingen til'; $labels['messagereply'] = 'Svar med melding'; $labels['messagedelete'] = 'Slett melding'; $labels['messagediscard'] = 'Avvis med melding'; @@ -37,18 +53,33 @@ $labels['vacationdays'] = 'Periode mellom meldinger (i dager):'; $labels['vacationreason'] = 'Innhold (begrunnelse for fravær)'; $labels['rulestop'] = 'Stopp evaluering av regler'; +$labels['enable'] = 'Aktiver / deaktiver'; +$labels['active'] = 'aktiv'; +$labels['none'] = 'ingen'; +$labels['fromfile'] = 'fra fil'; +$labels['filterdisabled'] = 'Filter deaktiver'; +$labels['valueisgreaterthan'] = 'verdien er høyrere enn'; +$labels['valueisgreaterthanequal'] = 'verdien er høyere eller lik'; +$labels['valueislessthan'] = 'verdien er lavere enn'; +$labels['valueislessthanequal'] = 'verdien er lavere eller lik'; +$labels['valueequals'] = 'verdien er'; +$labels['valuenotequals'] = 'verdien er ikke'; +$labels['flagread'] = 'Lese'; +$labels['flaganswered'] = 'Besvart'; +$labels['flagflagged'] = 'Flagget'; +$labels['flagdraft'] = 'Utkast'; +$labels['filtercreate'] = 'Opprett filter'; +$labels['address'] = 'adresse'; +$labels['text'] = 'tekst'; +$labels['domain'] = 'domene'; +$labels['filterunknownerror'] = 'Ukjent problem med tjener'; +$labels['filterconnerror'] = 'Kunne ikke koble til MANAGESIEVE-tjener'; +$labels['filterdeleteerror'] = 'Kunne ikke slette filter. Det dukket opp en feil på tjeneren.'; +$labels['filterdeleted'] = 'Filteret er blitt slettet'; +$labels['filtersaved'] = 'Filter er blitt lagret'; +$labels['filtersaveerror'] = 'Kunne ikke lagre filteret. Det dukket opp en feil på tjeneren.'; +$labels['ruledeleteconfirm'] = 'Er du sikker på at du vil slette valgte regel?'; +$labels['actiondeleteconfirm'] = 'Er du sikker på at du vil slette valgte hendelse?'; +$labels['forbiddenchars'] = 'Ugyldige tegn i felt'; +$labels['cannotbeempty'] = 'Feltet kan ikke stå tomt'; -$messages = array(); -$messages['filterunknownerror'] = 'Ukjent problem med tjener'; -$messages['filterconnerror'] = 'Kunne ikke koble til MANAGESIEVE-tjener'; -$messages['filterdeleteerror'] = 'Kunne ikke slette filter. Det dukket opp en feil på tjeneren.'; -$messages['filterdeleted'] = 'Filteret er blitt slettet'; -$messages['filterconfirmdelete'] = 'Er du sikker på at du vil slette følgende filter?'; -$messages['filtersaved'] = 'Filter er blitt lagret'; -$messages['filtersaveerror'] = 'Kunne ikke lagre filteret. Det dukket opp en feil på tjeneren.'; -$messages['ruledeleteconfirm'] = 'Er du sikker på at du vil slette valgte regel?'; -$messages['actiondeleteconfirm'] = 'Er du sikker på at du vil slette valgte hendelse?'; -$messages['forbiddenchars'] = 'Ugyldige tegn i felt'; -$messages['cannotbeempty'] = 'Feltet kan ikke stå tomt'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/nl_NL.inc roundcube-0.7.1/plugins/managesieve/localization/nl_NL.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/nl_NL.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/nl_NL.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,13 +1,28 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + +$labels = array(); $labels['filters'] = 'Filters'; $labels['managefilters'] = 'Beheer inkomende mail filters'; $labels['filtername'] = 'Filternaam'; $labels['newfilter'] = 'Nieuw filter'; $labels['filteradd'] = 'Filter toevoegen'; -$labels['filterdel'] = 'Filter verwijderen'; -$labels['moveup'] = 'Omhoog'; -$labels['movedown'] = 'Omlaag'; +$labels['filterdel'] = 'Verwijder filter'; +$labels['moveup'] = 'Verplaats omhoog'; +$labels['movedown'] = 'Verplaats omlaag'; $labels['filterallof'] = 'die voldoen aan alle volgende regels'; $labels['filteranyof'] = 'die voldoen aan een van de volgende regels'; $labels['filterany'] = 'alle berichten'; @@ -17,33 +32,119 @@ $labels['filterisnot'] = 'is niet gelijk aan'; $labels['filterexists'] = 'bestaat'; $labels['filternotexists'] = 'bestaat niet'; +$labels['filtermatches'] = 'komt overeen met expressie'; +$labels['filternotmatches'] = 'komt niet overeen met expressie'; +$labels['filterregex'] = 'komt overeen met de reguliere expressie'; +$labels['filternotregex'] = 'komt niet overeen met de reguliere expressie'; $labels['filterunder'] = 'onder'; $labels['filterover'] = 'over'; $labels['addrule'] = 'Regel toevoegen'; $labels['delrule'] = 'Regel verwijderen'; $labels['messagemoveto'] = 'Verplaats bericht naar'; $labels['messageredirect'] = 'Redirect bericht naar'; +$labels['messagecopyto'] = 'Kopieer bericht naar'; +$labels['messagesendcopy'] = 'Verstuur een kopie naar'; $labels['messagereply'] = 'Beantwoord met bericht'; $labels['messagedelete'] = 'Verwijder bericht'; -$labels['messagediscard'] = 'Wijs af met bericht'; -$labels['messagesrules'] = 'Voor binnenkomende e-mail'; +$labels['messagediscard'] = 'Met bericht negeren'; +$labels['messagesrules'] = 'Voor binnenkomende e-mail:'; $labels['messagesactions'] = '...voer de volgende acties uit'; $labels['add'] = 'Toevoegen'; $labels['del'] = 'Verwijderen'; $labels['sender'] = 'Afzender'; $labels['recipient'] = 'Ontvanger'; +$labels['vacationaddresses'] = 'Aanvullende lijst van geadresseerden (gescheiden met komma\'s):'; +$labels['vacationdays'] = 'Hoe vaak moet een bericht verstuurd worden (in dagen):'; +$labels['vacationreason'] = 'Bericht (vakantiereden):'; +$labels['vacationsubject'] = 'Onderwerp:'; +$labels['rulestop'] = 'Stop met regels uitvoeren'; +$labels['enable'] = 'In-/uitschakelen'; +$labels['filterset'] = 'Filterverzameling'; +$labels['filtersets'] = 'Filterverzamelingen'; +$labels['filtersetadd'] = 'Nieuwe filterverzameling'; +$labels['filtersetdel'] = 'Verwijder filterverzameling'; +$labels['filtersetact'] = 'Huidige filterverzameling activeren'; +$labels['filtersetdeact'] = 'Huidige filterverzameling uitschakelen'; +$labels['filterdef'] = 'Filterdefinitie'; +$labels['filtersetname'] = 'Filterverzamelingnaam'; +$labels['newfilterset'] = 'Nieuwe filterverzameling'; +$labels['active'] = 'actief'; +$labels['none'] = 'geen'; +$labels['fromset'] = 'van verzameling'; +$labels['fromfile'] = 'van bestand'; +$labels['filterdisabled'] = 'Filter uitgeschakeld'; +$labels['countisgreaterthan'] = 'aantal is groter dan'; +$labels['countisgreaterthanequal'] = 'aantal is groter dan of gelijk aan'; +$labels['countislessthan'] = 'aantal is kleiner dan'; +$labels['countislessthanequal'] = 'aantal is kleiner dan of gelijk aan'; +$labels['countequals'] = 'aantal is gelijk aan'; +$labels['countnotequals'] = 'aantal is niet gelijk aan'; +$labels['valueisgreaterthan'] = 'waarde is groter dan'; +$labels['valueisgreaterthanequal'] = 'waarde is groter dan of gelijk aan'; +$labels['valueislessthan'] = 'waarde is minder dan'; +$labels['valueislessthanequal'] = 'waarde is minder dan of gelijk aan'; +$labels['valueequals'] = 'waarde is gelijk aan'; +$labels['valuenotequals'] = 'waarde is niet gelijk aan'; +$labels['setflags'] = 'Stel markeringen in op bericht'; +$labels['addflags'] = 'Voeg markeringen toe aan bericht'; +$labels['removeflags'] = 'Verwijder markeringen van bericht'; +$labels['flagread'] = 'Lezen'; +$labels['flagdeleted'] = 'Verwijderd'; +$labels['flaganswered'] = 'Beantwoord'; +$labels['flagflagged'] = 'Gemarkeerd'; +$labels['flagdraft'] = 'Concept'; +$labels['filtercreate'] = 'Filter aanmaken'; +$labels['usedata'] = 'Gebruik de volgende gegevens in het filter:'; +$labels['nextstep'] = 'Volgende stap'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Geavanceerde opties'; +$labels['body'] = 'Inhoud'; +$labels['address'] = 'adres'; +$labels['envelope'] = 'envelope'; +$labels['modifier'] = 'wijziger'; +$labels['text'] = 'tekst'; +$labels['undecoded'] = 'undecoded (raw)'; +$labels['contenttype'] = 'content type'; +$labels['modtype'] = 'type:'; +$labels['allparts'] = 'Alle'; +$labels['domain'] = 'domein'; +$labels['localpart'] = 'lokaal gedeelte'; +$labels['user'] = 'gebruiker'; +$labels['detail'] = 'detail'; +$labels['comparator'] = 'vergelijker:'; +$labels['default'] = 'standaard'; +$labels['octet'] = 'strikt (octet)'; +$labels['asciicasemap'] = 'hoofdletterongevoelig (ascii-casemap)'; +$labels['asciinumeric'] = 'numeriek (ascii-numeriek)'; +$labels['filterunknownerror'] = 'Onbekende fout'; +$labels['filterconnerror'] = 'Kan geen verbinding maken met de managesieve server'; +$labels['filterdeleteerror'] = 'Kan filter niet verwijderen. Er is een fout opgetreden'; +$labels['filterdeleted'] = 'Filter succesvol verwijderd'; +$labels['filtersaved'] = 'Filter succesvol opgeslagen'; +$labels['filtersaveerror'] = 'Kan filter niet opslaan. Er is een fout opgetreden.'; +$labels['filterdeleteconfirm'] = 'Weet je zeker dat je het geselecteerde filter wilt verwijderen?'; +$labels['ruledeleteconfirm'] = 'Weet je zeker dat je de geselecteerde regel wilt verwijderen?'; +$labels['actiondeleteconfirm'] = 'Weet je zeker dat je de geselecteerde actie wilt verwijderen?'; +$labels['forbiddenchars'] = 'Verboden karakters in het veld'; +$labels['cannotbeempty'] = 'Veld mag niet leeg zijn'; +$labels['ruleexist'] = 'Er bestaat al een filter met deze naam.'; +$labels['setactivateerror'] = 'Filterverzameling kon niet geactiveerd worden. Er trad een serverfout op.'; +$labels['setdeactivateerror'] = 'Filterverzameling kon niet gedeactiveerd worden. Er trad een serverfout op.'; +$labels['setdeleteerror'] = 'Filterverzameling kon niet verwijderd worden. Er trad een serverfout op.'; +$labels['setactivated'] = 'Filterset succesvol geactiveerd.'; +$labels['setdeactivated'] = 'Filterverzameling succesvol gedeactiveerd.'; +$labels['setdeleted'] = 'Filterverzameling succesvol verwijderd.'; +$labels['setdeleteconfirm'] = 'Weet u zeker dat u de geselecteerde filterset wilt verwijderen?'; +$labels['setcreateerror'] = 'Filterverzameling kon niet aangemaakt worden. Er trad een serverfout op.'; +$labels['setcreated'] = 'Filterverzameling succesvol aangemaakt.'; +$labels['activateerror'] = 'Geselecteerde filter(s) konden niet ingeschakeld worden. Er trad een serverfout op.'; +$labels['deactivateerror'] = 'Geselecteerde filter(s) konden niet uitgeschakeld worden. Er trad een serverfout op.'; +$labels['activated'] = 'Filter(s) succesvol uitgeschakeld.'; +$labels['deactivated'] = 'Filter(s) succesvol ingeschakeld.'; +$labels['moved'] = 'Filter succesvol verplaatst.'; +$labels['moveerror'] = 'Geselecteerde filter(s) konden niet verplaatst worden. Er trad een serverfout op.'; +$labels['nametoolong'] = 'Naam is te lang.'; +$labels['namereserved'] = 'Gereserveerde naam.'; +$labels['setexist'] = 'Set bestaat al.'; +$labels['nodata'] = 'Tenminste één positie moet geselecteerd worden!'; -$messages = array(); -$messages['filterunknownerror'] = 'Onbekende fout'; -$messages['filterconnerror'] = 'Kan geen verbinding maken met de managesieve server'; -$messages['filterdeleteerror'] = 'Kan filter niet verwijderen. Er is een fout opgetreden'; -$messages['filterdeleted'] = 'Filter succesvol verwijderd'; -$messages['filterdeleteconfirm'] = 'Weet je zeker dat je het geselecteerde filter wilt verwijderen?'; -$messages['filtersaved'] = 'Filter succesvol opgeslagen'; -$messages['filtersaveerror'] = 'Kan filter niet opslaan. Er is een fout opgetreden.'; -$messages['ruledeleteconfirm'] = 'Weet je zeker dat je de geselecteerde regel wilt verwijderen?'; -$messages['actiondeleteconfirm'] = 'Weet je zeker dat je de geselecteerde actie wilt verwijderen?'; -$messages['forbiddenchars'] = 'Verboden karakters in het veld'; -$messages['cannotbeempty'] = 'Veld mag niet leeg zijn'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/pl_PL.inc roundcube-0.7.1/plugins/managesieve/localization/pl_PL.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/pl_PL.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/pl_PL.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,19 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + $labels = array(); $labels['filters'] = 'Filtry'; $labels['managefilters'] = 'Zarządzaj filtrami wiadomości przychodzących'; @@ -7,8 +21,8 @@ $labels['newfilter'] = 'Nowy filtr'; $labels['filteradd'] = 'Dodaj filtr'; $labels['filterdel'] = 'Usuń filtr'; -$labels['moveup'] = 'Przenieś wyżej'; -$labels['movedown'] = 'Przenieś niżej'; +$labels['moveup'] = 'W górę'; +$labels['movedown'] = 'W dół'; $labels['filterallof'] = 'spełniających wszystkie poniższe kryteria'; $labels['filteranyof'] = 'spełniających dowolne z poniższych kryteriów'; $labels['filterany'] = 'wszystkich'; @@ -28,9 +42,9 @@ $labels['delrule'] = 'Usuń regułę'; $labels['messagemoveto'] = 'Przenieś wiadomość do'; $labels['messageredirect'] = 'Przekaż wiadomość na konto'; -$labels['messagereply'] = 'Odpowiedz wiadomością o treści'; $labels['messagecopyto'] = 'Skopiuj wiadomość do'; $labels['messagesendcopy'] = 'Wyślij kopię do'; +$labels['messagereply'] = 'Odpowiedz wiadomością o treści'; $labels['messagedelete'] = 'Usuń wiadomość'; $labels['messagediscard'] = 'Odrzuć z komunikatem'; $labels['messagesrules'] = 'W stosunku do przychodzących wiadomości:'; @@ -39,17 +53,18 @@ $labels['del'] = 'Usuń'; $labels['sender'] = 'Nadawca'; $labels['recipient'] = 'Odbiorca'; -$labels['rulestop'] = 'Przerwij przetwarzanie reguł'; -$labels['vacationdays'] = 'Częstotliwość wysyłania wiadomości (w dniach):'; $labels['vacationaddresses'] = 'Lista dodatkowych adresów odbiorców (oddzielonych przecinkami):'; +$labels['vacationdays'] = 'Częstotliwość wysyłania wiadomości (w dniach):'; $labels['vacationreason'] = 'Treść (przyczyna nieobecności):'; $labels['vacationsubject'] = 'Temat wiadomości:'; +$labels['rulestop'] = 'Przerwij przetwarzanie reguł'; +$labels['enable'] = 'Włącz/Wyłącz'; $labels['filterset'] = 'Zbiór filtrów'; +$labels['filtersets'] = 'Zbiory fitrów'; $labels['filtersetadd'] = 'Dodaj zbiór filtrów'; $labels['filtersetdel'] = 'Usuń bieżący zbiór filtrów'; $labels['filtersetact'] = 'Aktywuj bieżący zbiór filtrów'; $labels['filtersetdeact'] = 'Deaktywuj bieżący zbiór filtrów'; -$labels['filtersetget'] = 'Pobierz bieżący zbiór filtrów w formacie tekstowym'; $labels['filterdef'] = 'Definicja filtra'; $labels['filtersetname'] = 'Nazwa zbioru'; $labels['newfilterset'] = 'Nowy zbiór filtrów'; @@ -78,29 +93,58 @@ $labels['flaganswered'] = 'Z odpowiedzią'; $labels['flagflagged'] = 'Oflagowana'; $labels['flagdraft'] = 'Szkic'; +$labels['filtercreate'] = 'Utwóż filtr'; +$labels['usedata'] = 'Użyj następujących danych do utworzenia filtra:'; +$labels['nextstep'] = 'Następny krok'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Zaawansowane opcje'; +$labels['body'] = 'Treść'; +$labels['address'] = 'adres'; +$labels['envelope'] = 'koperta (envelope)'; +$labels['modifier'] = 'modyfikator:'; +$labels['text'] = 'tekst'; +$labels['undecoded'] = 'nie (raw)'; +$labels['contenttype'] = 'typ części (content type)'; +$labels['modtype'] = 'typ:'; +$labels['allparts'] = 'wszystkie'; +$labels['domain'] = 'domena'; +$labels['localpart'] = 'część lokalna'; +$labels['user'] = 'użytkownik'; +$labels['detail'] = 'detal'; +$labels['comparator'] = 'komparator:'; +$labels['default'] = 'domyślny'; +$labels['octet'] = 'dokładny (octet)'; +$labels['asciicasemap'] = 'nierozróżniający wielkości liter (ascii-casemap)'; +$labels['asciinumeric'] = 'numeryczny (ascii-numeric)'; +$labels['filterunknownerror'] = 'Nieznany błąd serwera.'; +$labels['filterconnerror'] = 'Nie można nawiązać połączenia z serwerem.'; +$labels['filterdeleteerror'] = 'Nie można usunąć filtra. Błąd serwera.'; +$labels['filterdeleted'] = 'Filtr został usunięty pomyślnie.'; +$labels['filtersaved'] = 'Filtr został zapisany pomyślnie.'; +$labels['filtersaveerror'] = 'Nie można zapisać filtra. Wystąpił błąd serwera.'; +$labels['filterdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany filtr?'; +$labels['ruledeleteconfirm'] = 'Czy na pewno chcesz usunąć wybraną regułę?'; +$labels['actiondeleteconfirm'] = 'Czy na pewno usunąć wybraną akcję?'; +$labels['forbiddenchars'] = 'Pole zawiera niedozwolone znaki.'; +$labels['cannotbeempty'] = 'Pole nie może być puste.'; +$labels['ruleexist'] = 'Filtr o podanej nazwie już istnieje.'; +$labels['setactivateerror'] = 'Nie można aktywować wybranego zbioru filtrów. Błąd serwera.'; +$labels['setdeactivateerror'] = 'Nie można deaktywować wybranego zbioru filtrów. Błąd serwera.'; +$labels['setdeleteerror'] = 'Nie można usunąć wybranego zbioru filtrów. Błąd serwera.'; +$labels['setactivated'] = 'Zbiór filtrów został aktywowany pomyślnie.'; +$labels['setdeactivated'] = 'Zbiór filtrów został deaktywowany pomyślnie.'; +$labels['setdeleted'] = 'Zbiór filtrów został usunięty pomyślnie.'; +$labels['setdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany zbiór filtrów?'; +$labels['setcreateerror'] = 'Nie można utworzyć zbioru filtrów. Błąd serwera.'; +$labels['setcreated'] = 'Zbiór filtrów został utworzony pomyślnie.'; +$labels['activateerror'] = 'Nie można włączyć wybranych filtrów. Błąd serwera.'; +$labels['deactivateerror'] = 'Nie można wyłączyć wybranych filtrów. Błąd serwera.'; +$labels['activated'] = 'Filtr(y) wyłączono pomyślnie.'; +$labels['deactivated'] = 'Filtr(y) włączono pomyślnie.'; +$labels['moved'] = 'Filter został przeniesiony pomyślnie.'; +$labels['moveerror'] = 'Nie można przenieść wybranego filtra. Błąd serwera.'; +$labels['nametoolong'] = 'Zbyt długa nazwa.'; +$labels['namereserved'] = 'Nazwa zarezerwowana.'; +$labels['setexist'] = 'Zbiór już istnieje.'; +$labels['nodata'] = 'Należy wybrać co najmniej jedną pozycję!'; -$messages = array(); -$messages['filterunknownerror'] = 'Nieznany błąd serwera'; -$messages['filterconnerror'] = 'Nie można nawiązać połączenia z serwerem managesieve'; -$messages['filterdeleteerror'] = 'Nie można usunąć filtra. Wystąpił błąd serwera'; -$messages['filterdeleted'] = 'Filtr został usunięty pomyślnie'; -$messages['filterdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany filtr?'; -$messages['filtersaved'] = 'Filtr został zapisany pomyślnie'; -$messages['filtersaveerror'] = 'Nie można zapisać filtra. Wystąpił błąd serwera.'; -$messages['ruledeleteconfirm'] = 'Czy na pewno chcesz usunąć wybraną regułę?'; -$messages['actiondeleteconfirm'] = 'Czy na pewno usunąć wybraną akcję?'; -$messages['forbiddenchars'] = 'Pole zawiera niedozwolone znaki'; -$messages['cannotbeempty'] = 'Pole nie może być puste'; -$messages['setactivateerror'] = 'Nie można aktywować wybranego zbioru filtrów. Błąd serwera'; -$messages['setdeactivateerror'] = 'Nie można deaktywować wybranego zbioru filtrów. Błąd serwera'; -$messages['setdeleteerror'] = 'Nie można usunąć wybranego zbioru filtrów. Błąd serwera'; -$messages['setactivated'] = 'Zbiór filtrów został aktywowany pomyślnie'; -$messages['setdeactivated'] = 'Zbiór filtrów został deaktywowany pomyślnie'; -$messages['setdeleted'] = 'Zbiór filtrów został usunięty pomyślnie'; -$messages['setdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany zbiór filtrów?'; -$messages['setcreateerror'] = 'Nie można utworzyć zbioru filtrów. Błąd serwera'; -$messages['setcreated'] = 'Zbiór filtrów został utworzony pomyślnie'; -$messages['emptyname'] = 'Nie można utworzyć zbioru filtrów. Pusta nazwa zbioru'; -$messages['nametoolong'] = 'Nie można utworzyć zbioru filtrów. Nazwa zbyt długa' - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/pt_BR.inc roundcube-0.7.1/plugins/managesieve/localization/pt_BR.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/pt_BR.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/pt_BR.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,20 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + +$labels = array(); $labels['filters'] = 'Filtros'; $labels['managefilters'] = 'Gerenciar filtros de entrada de e-mail'; $labels['filtername'] = 'Nome do filtro'; @@ -17,12 +32,18 @@ $labels['filterisnot'] = 'não é igual a'; $labels['filterexists'] = 'existe'; $labels['filternotexists'] = 'não existe'; +$labels['filtermatches'] = 'expressão combina'; +$labels['filternotmatches'] = 'expressão não combina'; +$labels['filterregex'] = 'combina com expressão regular'; +$labels['filternotregex'] = 'não combina com a expressão regular'; $labels['filterunder'] = 'inferior a'; $labels['filterover'] = 'superior a'; $labels['addrule'] = 'Adicionar regra'; $labels['delrule'] = 'Excluir regra'; $labels['messagemoveto'] = 'Mover mensagem para'; $labels['messageredirect'] = 'Redirecionar mensagem para'; +$labels['messagecopyto'] = 'Copiar mensagem para'; +$labels['messagesendcopy'] = 'Enviar cópia da mensagem para'; $labels['messagereply'] = 'Responder com mensagem'; $labels['messagedelete'] = 'Excluir mensagem'; $labels['messagediscard'] = 'Descartar com mensagem'; @@ -32,22 +53,98 @@ $labels['del'] = 'Excluir'; $labels['sender'] = 'Remetente'; $labels['recipient'] = 'Destinatário'; -$labels['vacationaddresses'] = 'Lista adicional de e-mails de remetente (separado por vírgula):'; +$labels['vacationaddresses'] = 'Lista adicional de e-mails destinatários (separado por vírgula):'; $labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):'; $labels['vacationreason'] = 'Corpo da mensagem (motivo de férias):'; +$labels['vacationsubject'] = 'Título da mensagem:'; $labels['rulestop'] = 'Parar de avaliar regras'; +$labels['enable'] = 'Habilitar/Desabilitar'; +$labels['filterset'] = 'Conjunto de filtros'; +$labels['filtersets'] = 'Conjuntos de filtro'; +$labels['filtersetadd'] = 'Adicionar conjunto de filtros'; +$labels['filtersetdel'] = 'Excluir conjunto de filtros atual'; +$labels['filtersetact'] = 'Ativar conjunto de filtros atual'; +$labels['filtersetdeact'] = 'Desativar conjunto de filtros atual'; +$labels['filterdef'] = 'Definição de filtro'; +$labels['filtersetname'] = 'Nome do conjunto de filtros'; +$labels['newfilterset'] = 'Novo conjunto de filtros'; +$labels['active'] = 'ativo'; +$labels['none'] = 'nenhum'; +$labels['fromset'] = 'Do conjunto'; +$labels['fromfile'] = 'Do arquivo'; +$labels['filterdisabled'] = 'Filtro desativado'; +$labels['countisgreaterthan'] = 'contagem é maior que'; +$labels['countisgreaterthanequal'] = 'contagem é maior ou igual a'; +$labels['countislessthan'] = 'contagem é menor que'; +$labels['countislessthanequal'] = 'contagem é menor ou igual a'; +$labels['countequals'] = 'contagem é igual a'; +$labels['countnotequals'] = 'contagem não é igual a'; +$labels['valueisgreaterthan'] = 'valor é maior que'; +$labels['valueisgreaterthanequal'] = 'valor é maior ou igual a'; +$labels['valueislessthan'] = 'valor é menor que'; +$labels['valueislessthanequal'] = 'valor é menor ou igual a'; +$labels['valueequals'] = 'valor é igual a'; +$labels['valuenotequals'] = 'valor não é igual a'; +$labels['setflags'] = 'Definir marcadores à mensagem'; +$labels['addflags'] = 'Adicionar marcadores à mensagem'; +$labels['removeflags'] = 'Remover marcadores da mensagem'; +$labels['flagread'] = 'Lida'; +$labels['flagdeleted'] = 'Excluída'; +$labels['flaganswered'] = 'Respondida'; +$labels['flagflagged'] = 'Marcada'; +$labels['flagdraft'] = 'Rascunho'; +$labels['filtercreate'] = 'Criar filtro'; +$labels['usedata'] = 'Usar os seguintes dados no filtro:'; +$labels['nextstep'] = 'Próximo Passo'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Opções avançadas'; +$labels['body'] = 'Corpo'; +$labels['address'] = 'endereço'; +$labels['envelope'] = 'envelope'; +$labels['modifier'] = 'modificador:'; +$labels['text'] = 'texto'; +$labels['undecoded'] = 'decodificado (bruto)'; +$labels['contenttype'] = 'tipo de conteúdo'; +$labels['modtype'] = 'tipo:'; +$labels['allparts'] = 'todas'; +$labels['domain'] = 'domínio'; +$labels['localpart'] = 'parte local'; +$labels['user'] = 'usuário'; +$labels['detail'] = 'detalhes'; +$labels['comparator'] = 'comparador:'; +$labels['default'] = 'padrão'; +$labels['octet'] = 'estrito (octeto)'; +$labels['asciicasemap'] = 'caso insensível (mapa de caracteres ascii)'; +$labels['asciinumeric'] = 'numérico (ascii-numeric)'; +$labels['filterunknownerror'] = 'Erro desconhecido de servidor'; +$labels['filterconnerror'] = 'Não foi possível conectar ao servidor managesieve'; +$labels['filterdeleteerror'] = 'Não foi possível excluir filtro. Occorreu um erro de servidor'; +$labels['filterdeleted'] = 'Filtro excluído com sucesso'; +$labels['filtersaved'] = 'Filtro gravado com sucesso'; +$labels['filtersaveerror'] = 'Não foi possível gravar filtro. Occoreu um erro de servidor.'; +$labels['filterdeleteconfirm'] = 'Deseja realmente excluir o filtro selecionado?'; +$labels['ruledeleteconfirm'] = 'Deseja realmente excluir a regra selecionada?'; +$labels['actiondeleteconfirm'] = 'Deseja realmente excluir a ação selecionada?'; +$labels['forbiddenchars'] = 'Caracteres não permitidos no campo'; +$labels['cannotbeempty'] = 'Campo não pode ficar em branco'; +$labels['ruleexist'] = 'O filtro com o nome especificado já existe.'; +$labels['setactivateerror'] = 'Não foi possível ativar o conjunto de filtros selecionados. Ocorreu um erro no servidor.'; +$labels['setdeactivateerror'] = 'Não foi possível desativar o conjunto de filtros selecionados. Ocorreu um erro no servidor.'; +$labels['setdeleteerror'] = 'Não foi possível excluir o conjunto de filtros selecionados. Ocorreu um erro no servidor.'; +$labels['setactivated'] = 'Conjunto de filtros ativados com sucesso.'; +$labels['setdeactivated'] = 'Conjunto de filtros desativados com sucesso.'; +$labels['setdeleted'] = 'Conjunto de filtros excluídos com sucesso.'; +$labels['setdeleteconfirm'] = 'Você está certo que deseja excluir o conjunto de filtros selecionados?'; +$labels['setcreateerror'] = 'Não foi possível criar o conjunto de filtros. Ocorreu um erro no servidor.'; +$labels['setcreated'] = 'Conjunto de filtros criado com sucesso.'; +$labels['activateerror'] = 'Não foi possível habilitar o(s) filtro(s) selecionado(s). Ocorreu um erro no servidor.'; +$labels['deactivateerror'] = 'Não foi possível desabilitar o(s) filtro(s) selecionado(s). Ocorreu um erro no servidor.'; +$labels['activated'] = 'Filtro(s) desabilitado(s) com sucesso.'; +$labels['deactivated'] = 'Filtro(s) habilitado(s) com sucesso.'; +$labels['moved'] = 'Filtro movido com sucesso.'; +$labels['moveerror'] = 'Não foi possível mover o filtro selecionado. Ocorreu um erro no servidor.'; +$labels['nametoolong'] = 'Nome muito longo.'; +$labels['namereserved'] = 'Nome reservado.'; +$labels['setexist'] = 'Conjunto já existe.'; +$labels['nodata'] = 'Pelo menos uma posição precisa ser selecionada!'; -$messages = array(); -$messages['filterunknownerror'] = 'Erro desconhecido de servidor'; -$messages['filterconnerror'] = 'Não foi possível conectar ao servidor managesieve'; -$messages['filterdeleteerror'] = 'Não foi possível excluir filtro. Occorreu um erro de servidor'; -$messages['filterdeleted'] = 'Filtro excluído com sucesso'; -$messages['filterdeleteconfirm'] = 'Deseja realmente excluir o filtro selecionado?'; -$messages['filtersaved'] = 'Filtro gravado com sucesso'; -$messages['filtersaveerror'] = 'Não foi possível gravar filtro. Occoreu um erro de servidor.'; -$messages['ruledeleteconfirm'] = 'Deseja realmente excluir a regra selecionada?'; -$messages['actiondeleteconfirm'] = 'Deseja realmente excluir a ação selecionada?'; -$messages['forbiddenchars'] = 'Caracteres não permitidos no campo'; -$messages['cannotbeempty'] = 'Campo não pode ficar em branco'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/pt_PT.inc roundcube-0.7.1/plugins/managesieve/localization/pt_PT.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/pt_PT.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/pt_PT.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,13 +1,26 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ $labels = array(); $labels['filters'] = 'Filtros'; $labels['managefilters'] = 'Gerir filtros'; $labels['filtername'] = 'Nome do filtro'; -$labels['disablerule'] = 'Desactivar regra'; -$labels['disabled'] = 'Desactivado'; $labels['newfilter'] = 'Novo filtro'; +$labels['filteradd'] = 'Adicionar filtro'; +$labels['filterdel'] = 'Eliminar filtro'; $labels['moveup'] = 'Mover para cima'; $labels['movedown'] = 'Mover para baixo'; $labels['filterallof'] = 'corresponde a todas as seguintes regras'; @@ -19,22 +32,47 @@ $labels['filterisnot'] = 'é diferente de'; $labels['filterexists'] = 'existe'; $labels['filternotexists'] = 'não existe'; +$labels['filtermatches'] = 'expressão corresponde'; +$labels['filternotmatches'] = 'expressão não corresponde'; $labels['filterregex'] = 'corresponde à expressão'; $labels['filternotregex'] = 'não corresponde à expressão'; $labels['filterunder'] = 'é inferior a'; $labels['filterover'] = 'é superior a'; -$labels['filterbefore'] = 'é antes'; -$labels['filterafter'] = 'é depois'; -$labels['filteradvoptions'] = 'mais opções...'; -$labels['spamtest'] = 'Probabilidade de Spam'; -$labels['operator'] = 'Operador'; -$labels['comparator'] = 'Comparador'; -$labels['isgreaterthan'] = 'é maior que'; -$labels['isgreaterthanequal'] = 'é maior ou igual a'; -$labels['islessthan'] = 'é menor que'; -$labels['islessthanequal'] = 'é menor ou igual a'; -$labels['equals'] = 'é igual a'; -$labels['notequals'] = 'é diferente de'; +$labels['addrule'] = 'Adicionar regra'; +$labels['delrule'] = 'Eliminar regra'; +$labels['messagemoveto'] = 'Mover mensagem para'; +$labels['messageredirect'] = 'Redirecionar mensagem para'; +$labels['messagecopyto'] = 'Copiar mensagem para'; +$labels['messagesendcopy'] = 'Enviar cópia da mensagem para'; +$labels['messagereply'] = 'Responder com a mensagem'; +$labels['messagedelete'] = 'Eliminar mensagem'; +$labels['messagediscard'] = 'Rejeitar mensagem'; +$labels['messagesrules'] = 'Regras para Filtros'; +$labels['messagesactions'] = 'Acções para Filtros'; +$labels['add'] = 'Adicionar'; +$labels['del'] = 'Eliminar'; +$labels['sender'] = 'Remetente'; +$labels['recipient'] = 'Destinatário'; +$labels['vacationaddresses'] = 'Lista adicional de destinatários de e-mails (separados por vírgula):'; +$labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):'; +$labels['vacationreason'] = 'Conteúdo da mensagem (motivo da ausência):'; +$labels['vacationsubject'] = 'Assunto da mensagem:'; +$labels['rulestop'] = 'Parar de avaliar regras'; +$labels['enable'] = 'Activar/Desactivar'; +$labels['filterset'] = 'Filtros definidos'; +$labels['filtersets'] = 'Filtros definidos'; +$labels['filtersetadd'] = 'Adicionar definição de filtros'; +$labels['filtersetdel'] = 'Eliminar definição de filtros actuais'; +$labels['filtersetact'] = 'Activar definição de filtros actuais'; +$labels['filtersetdeact'] = 'Desactivar definição de filtros actuais'; +$labels['filterdef'] = 'Definição de filtros'; +$labels['filtersetname'] = 'Nome da definição de filtros'; +$labels['newfilterset'] = 'Nova definição de filtros'; +$labels['active'] = 'activo'; +$labels['none'] = 'nehnum'; +$labels['fromset'] = 'definição de'; +$labels['fromfile'] = 'a partir do ficheiro'; +$labels['filterdisabled'] = 'Filtro desactivado'; $labels['countisgreaterthan'] = 'contagem é maior que'; $labels['countisgreaterthanequal'] = 'contagem é maior ou igual a'; $labels['countislessthan'] = 'contagem é menor que'; @@ -47,139 +85,66 @@ $labels['valueislessthanequal'] = 'valor é menor ou igual a'; $labels['valueequals'] = 'valor é igual a'; $labels['valuenotequals'] = 'valor diferente de'; -$labels['userpart'] = 'parte do utilizador igual a'; -$labels['notuserpart'] = 'parte do utilizador diferente de'; -$labels['detailpart'] = 'parte do detalhe igual a'; -$labels['notdetailpart'] = 'parte do detalhe diferente de'; -$labels['domainpart'] = 'parte do domínio igual a'; -$labels['notdomainpart'] = 'parte do domínio diferente de'; -$labels['teststring'] = 'Texto de teste'; -$labels['messagemoveto'] = 'Mover mensagem para'; -$labels['messageredirect'] = 'Redirecionar mensagem para'; -$labels['messageimapflags'] = 'Marcar mensagem como'; -$labels['messagereject'] = 'Rejeitar com a mensagem'; -$labels['messagevacation'] = 'Mensagem Fora do Escritório'; -$labels['messagekeep'] = 'Manter mensagem'; -$labels['messagediscard'] = 'Rejeitar mensagem'; -$labels['messagenotify'] = 'Enviar notificação'; -$labels['messagestop'] = 'Parar o processamento de filtros'; -$labels['messagehelp'] = 'O que é isto?'; -$labels['sieveorigsubj'] = 'Acrescentar assunto original à resposta'; -$labels['sievevachandle'] = 'Manusear'; -$labels['method'] = 'Método'; -$labels['options'] = 'Opções'; -$labels['messagesrules'] = 'Regras para Filtros'; -$labels['messagesactions'] = 'Acções para Filtros'; -$labels['sieveto'] = 'Alias'; -$labels['sievefrom'] = 'De'; -$labels['flag'] = 'Importância'; -$labels['importancen'] = 'Nenhum'; -$labels['importance1'] = 'Alta'; -$labels['importance2'] = 'Normal'; -$labels['importance3'] = 'Baixa'; +$labels['setflags'] = 'Definir indicadores para a mensagem'; +$labels['addflags'] = 'Adicionar indicadores para a mensagem'; +$labels['removeflags'] = 'Eliminar indicadores da mensagem'; $labels['flagread'] = 'Lida'; $labels['flagdeleted'] = 'Eliminada'; $labels['flaganswered'] = 'Respondida'; -$labels['flagdraft'] = 'Rascunho'; $labels['flagflagged'] = 'Marcada'; -$labels['addsieverule'] = 'Adicionar outra regra, depois desta'; -$labels['addsieveact'] = 'Adicionar outra acção, depois desta'; -$labels['deletesieverule'] = 'Eliminar esta regra'; -$labels['deletesieveact'] = 'Eliminar esta acção'; -$labels['envelopefrom'] = 'Envelope De'; -$labels['envelopeto'] = 'Envelope Para'; -$labels['otherheader'] = 'Outro cabeçalho'; -$labels['days'] = 'Periodo'; -$labels['message'] = 'Mensagem'; -$labels['sieveruleheaders'] = 'Ver exemplos de outros cabecalhos'; -$labels['examplefilters'] = 'Exemplo de Filtros'; -$labels['importfilters'] = 'Importar Filtros'; -$labels['usedefaultfilter'] = 'Usar filtros predefinidos'; -$labels['importfilter'] = 'Importar filtros'; -$labels['moreactions'] = 'Mais opções...'; -$labels['adveditor'] = 'Editor avançado'; -$labels['stdeditor'] = 'Editor padrão'; -$labels['messageredirectcopy'] = 'Enviar cópia para'; -$labels['messagecopyto'] = 'Copiar mensagem para'; +$labels['flagdraft'] = 'Rascunho'; +$labels['filtercreate'] = 'Criar filtro'; +$labels['usedata'] = 'Usar os seguintes dados no filtro:'; +$labels['nextstep'] = 'Próximo passo'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Opções avançadas'; $labels['body'] = 'Corpo'; -$labels['auto'] = 'Auto'; -$labels['raw'] = 'Raw'; +$labels['address'] = 'endereço'; +$labels['envelope'] = 'envelope'; +$labels['modifier'] = 'modificador:'; $labels['text'] = 'Texto'; -$labels['other'] = 'Outro'; -$labels['bodycontentpart'] = 'Parte Conteúdo'; -$labels['spamnotchecked'] = 'não verificado'; -$labels['spamlevelisgreaterthanequal'] = 'é maior ou igual a'; -$labels['spamlevelislessthanequal'] = 'é menor ou igual a'; -$labels['spamlevelequals'] = 'é igual a'; -$labels['i;ascii-casemap'] = 'correspondência de texto indeferente a maiúsculas e minúsculas'; -$labels['i;octet'] = 'correspondência exacta do texto'; -$labels['i;ascii-numeric'] = 'correspondência numérica'; -$labels['selectruleset'] = 'Seleccionar conjunto de regras'; -$labels['activeruleset'] = '%s (activo)'; -$labels['activateruleset'] = 'Activar este conjunto de regras'; -$labels['newruleset'] = 'Criar um no grupo de regras'; -$labels['delruleset'] = 'Eliminar este conjunto de regras'; -$labels['renameruleset'] = 'Renomear este conjunto de regras'; -$labels['copy'] = 'Copiar'; -$labels['copyexistingfilter'] = 'Copiar filtros existentes'; -$labels['copytoruleset'] = 'Copiar o filtro para outro conjunto de regras'; -$labels['copyfromruleset'] = 'Copiar filtros de um conjunto regras existente'; -$labels['time'] = 'Tempo'; -$labels['weekday'] = 'dia da semana'; - -$messages = array(); -$messages['nosieverules'] = 'Nenhum filtro encontrado.'; -$messages['filterdeleteconfirm'] = 'Tem a certeza que pretende eliminar este filtro?'; -$messages['ruledeleteconfirm'] = 'Tem a certeza que pretende eliminar esta regra?'; -$messages['actiondeleteconfirm'] = 'Tem a certeza que pretende eliminar esta acção?'; -$messages['filterunknownerror'] = 'Erro de servidor desconhecido'; -$messages['filterconnerror'] = 'Não é possível ligar ao servidor Sieve'; -$messages['filterdeleteerror'] = 'Não foi possível eliminar o filtro. Erro no servidor'; -$messages['filterdeleted'] = 'Filtro eliminado com sucesso'; -$messages['filtersaved'] = 'Filtro guardado com sucesso'; -$messages['filtersaveerror'] = 'Não foi possível guardar o filtro. Erro no servidor'; -$messages['vacdaysexp'] = 'O período é o número de dias durante o qual a mensagem não será reenviado para o mesmo remetente, não importa quantas vezes ele entre contacto consigo.

Por exemplo: Se o João lhe enviar e-mails na segunda-feira e o período está definido para 7 dias, o João irá receber uma mensagem de Fora do Escritório na segunda-feira, mas não irá receber mais nenhuma até à segunda-feira seguinte, não importa quantos e-mails ele lhe envie durante a semana.'; -$messages['vachandleexp'] = 'Um identificador pode ser usado para ligar as diferentes mensagens de Fora do Escritório em conjunto, uma vez que uma mensagem foi enviada outra mensagem com o mesmo identificador será reenviado no mesmo período.'; -$messages['vactoexp'] = 'Lista de endereços de destinatários adicionais que estão incluídos na resposta automática. Se um destinatário de e-mail não é o seu endereço principal e não está nesta lista, nenhuma mensagem será enviada.'; -$messages['vactoexp_adv'] = 'Separar múltiplos endereços com virgula (,). Exemplo: test1@example.com,test2@example.com,test3@example.com'; -$messages['vactoexp_err'] = 'Erro: Múltiplos endereços devem ser separados por virgula (,).'; -$messages['norulename'] = 'Por favor, indique um nome para este filtro'; -$messages['ruleexists'] = 'Já existe um filtro com este nome. Por favor, indique outro'; -$messages['noheader'] = 'Por favor, indique o nome do cabeçalho para testar'; -$messages['headerbadchars'] = 'Erro: O cabeçalho contém caracteres proibidos'; -$messages['noheadervalue'] = 'Por favor indique um valor para testar o cabeçalho contra'; -$messages['sizewrongformat'] = 'Erro: O tamanho da mensagem deve ser numérico'; -$messages['noredirect'] = 'Indique um endereço de e-mail para redirecionar as mensagens'; -$messages['redirectaddresserror'] = 'Erro: O endereço de e-mail parece ser inválido'; -$messages['noreject'] = 'Indique uma mensagem para enviar juntamente com o e-mail rejeitado'; -$messages['vacnodays'] = 'Por favor insira um número de dias para o período em que a mensagem não será reenviado para a mesma pessoa'; -$messages['vacdayswrongformat'] = 'Erro: O período deve ser um número maior ou igual a 1'; -$messages['vacnomsg'] = 'Insira o texto para a sua mensagem'; -$messages['notifynomethod'] = 'Por favor, indique um método pelo qual a notificação deve ser enviada'; -$messages['notifynomsg'] = 'Insira o texto para a sua mensagem'; -$messages['sieveruleexp'] = 'Por favor, defina uma ou mais regras sobre as quais cada mensagem será testada. Os filtros são executados na ordem em que aparecem à esquerda do ecrã, se for encontrada uma correspondência mais nenhum filtro será testado.'; -$messages['sieveruleexp_stop'] = 'Por favor, defina uma ou mais regras sobre as quais cada mensagem será testada. Os filtros são executados na ordem em que aparecem à esquerda do ecrã até uma acção de \'Stop\' ser encontrada.'; -$messages['sieveactexp'] = 'Por favor, seleccione uma das opções abaixo. Essas acções serão realizadas para qualquer mensagem correspondente à(s) regra(s) acima.'; -$messages['sieveheadershlp'] = 'Abaixo estão alguns exemplos de outros cabeçalhos que podem ser testados pelos filtros. Selecione um cabeçalho para adicioná-lo à regra, ou introduza um personalizado na caixa acima.'; -$messages['movingfilter'] = 'A mover filtro...'; -$messages['noexistingfilters'] = 'Não foi detectado nenhum filtro existente!'; -$messages['importdefault'] = 'Usar filtros predefinidos: Há um conjunto de filtros predefinidos disponíveis. Gostaria de usar esses filtros?'; -$messages['importother'] = 'Importação de filtros:Foi encontrado outro conjunto de filtros de %s. Gostaria de importar esses filtros para o seu conjunto actual?'; -$messages['switchtoadveditor'] = 'Mudando para o editor avançado permite editar o ficheiro Sieve directamente. Quaisquer alterações aqui efectuadas podem ser ilegíveis no editor normal e podem ser perdidas quando os filtros são guardados usando o editor normal. Deseja continuar?'; -$messages['filterimported'] = 'Filtro importado com sucesso'; -$messages['filterimporterror'] = 'Não foi possível importar o filtro. Ocorreu um erro no servidor.'; -$messages['notifyinvalidmethod'] = 'O método parece não estar escrito num formato válido, ele deve ser um URL. Por exemplo: "mailto: alert@example.com».'; -$messages['nobodycontentpart'] = 'Por favor, indique uma parte de conteúdo para testar'; -$messages['badoperator'] = 'O operador seleccionado não pode ser usado nesta regra'; -$messages['filteractionerror'] = 'A acção solicitada não é suportada pelo servidor'; -$messages['filtermissingerror'] = 'Não foi possível encontrar a regra solicitada'; -$messages['contentpartexp'] = 'O tipo de MIME ou parte específica da mensagem que deve ser testado. Por exemplo: `text/html`, `audio/mp3` or `image`.'; -$messages['delrulesetconf'] = 'Tem certeza que quer eliminar este conjunto de regras?'; -$messages['rulesetexists'] = 'Um conjunto de regras com este nome já existe. Por favor, indique outro nome'; -$messages['copyexisting'] = 'Copiar conjunto de regras existente:Gostaria de copiar os filtros de um conjunto de de regras existente para o seu conjunto actual?'; -$messages['filtercopied'] = 'Filtro copiado com sucesso'; -$messages['nosieverulesets'] = 'Nenhum conjunto de regras encontrado.'; -$messages['baddateformat'] = 'Erro: Indique a data no formato AAAA-MM-DD'; -$messages['badtimeformat'] = 'Erro: Indique a hora no formato HH:MM:SS'; +$labels['undecoded'] = 'não descodificado (raw)'; +$labels['contenttype'] = 'tipo de conteúdo'; +$labels['modtype'] = 'tipo:'; +$labels['allparts'] = 'todos'; +$labels['domain'] = 'domínio'; +$labels['localpart'] = 'parte local'; +$labels['user'] = 'utilizador'; +$labels['detail'] = 'detalhe'; +$labels['comparator'] = 'Comparador'; +$labels['default'] = 'predefinido'; +$labels['octet'] = 'estrito (octeto)'; +$labels['asciicasemap'] = 'não sensível a maiúsculas/minúsculas (caracteres ascii)'; +$labels['asciinumeric'] = 'numérico (numérico ascii)'; +$labels['filterunknownerror'] = 'Erro de servidor desconhecido'; +$labels['filterconnerror'] = 'Não é possível ligar ao servidor Sieve'; +$labels['filterdeleteerror'] = 'Não foi possível eliminar o filtro. Erro no servidor'; +$labels['filterdeleted'] = 'Filtro eliminado com sucesso'; +$labels['filtersaved'] = 'Filtro guardado com sucesso'; +$labels['filtersaveerror'] = 'Não foi possível guardar o filtro. Erro no servidor'; +$labels['filterdeleteconfirm'] = 'Tem a certeza que pretende eliminar este filtro?'; +$labels['ruledeleteconfirm'] = 'Tem a certeza que pretende eliminar esta regra?'; +$labels['actiondeleteconfirm'] = 'Tem a certeza que pretende eliminar esta acção?'; +$labels['forbiddenchars'] = 'Caracteres inválidos no campo.'; +$labels['cannotbeempty'] = 'Este campo não pode estar vazio.'; +$labels['ruleexist'] = 'Já existe um Filtro com o nome especificado.'; +$labels['setactivateerror'] = 'Não foi possível ativar os filtros selecionados. Ocorreu um erro no servidor.'; +$labels['setdeactivateerror'] = 'Não foi possível desativar os filtros selecionados. Ocorreu um erro no servidor.'; +$labels['setdeleteerror'] = 'Não foi possível eliminar os filtros selecionados. Ocorreu um erro no servidor.'; +$labels['setactivated'] = 'Filtros ativados com sucesso.'; +$labels['setdeactivated'] = 'Filtros desativados com sucesso.'; +$labels['setdeleted'] = 'Filtros eliminados com sucesso.'; +$labels['setdeleteconfirm'] = 'Tem a certeza que pretende eliminar os filtros selecionados?'; +$labels['setcreateerror'] = 'Não foi possível criar o conjunto de filtros. Ocorreu um erro no servidor.'; +$labels['setcreated'] = 'Conjunto de filtros criado com sucesso.'; +$labels['activateerror'] = 'Não foi possível ativar os filtros selecionados. Ocorreu um erro no servidor.'; +$labels['deactivateerror'] = 'Não foi possível desativar os filtros selecionados. Ocorreu um erro no servidor.'; +$labels['activated'] = 'Filtro(s) desativado(s) com sucesso.'; +$labels['deactivated'] = 'Filtro(s) ativado(s) com sucesso.'; +$labels['moved'] = 'Filtro movido com sucesso.'; +$labels['moveerror'] = 'Não foi possível mover o filtro selecionado. Ocorreu um erro no servidor.'; +$labels['nametoolong'] = 'Nome demasiado longo.'; +$labels['namereserved'] = 'Nome invertido.'; +$labels['setexist'] = 'O conjunto já existe.'; +$labels['nodata'] = 'Deve selecionar pelo menos uma posição.'; -?> \ No newline at end of file diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/ru_RU.inc roundcube-0.7.1/plugins/managesieve/localization/ru_RU.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/ru_RU.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/ru_RU.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,22 +1,20 @@ | -| Updates: Sergey Dukachev | -+-----------------------------------------------------------------------+ - -@version 2011-05-11 +/* + +-----------------------------------------------------------------------+ + | localization/ru_RU/labels.inc | + | | + | Language file of the Roundcube Webmail client | + | Copyright (C) 2012, The Roundcube Dev Team | + | Licensed under the GNU General Public License | + | | + +-----------------------------------------------------------------------+ + | Author: Nkolay Parukhin | + +-----------------------------------------------------------------------+ + @version $Id$ */ +$labels = array(); $labels['filters'] = 'Фильтры'; $labels['managefilters'] = 'Управление фильтрами для входящей почты'; $labels['filtername'] = 'Название фильтра'; @@ -54,13 +52,15 @@ $labels['vacationaddresses'] = 'Список дополнительных адресов получателя (разделённых запятыми):'; $labels['vacationdays'] = 'Как часто отправлять сообщения (в днях):'; $labels['vacationreason'] = 'Текст сообщения (причина отсутствия):'; +$labels['vacationsubject'] = 'Тема сообщения:'; $labels['rulestop'] = 'Закончить выполнение'; +$labels['enable'] = 'Включить/Выключить'; $labels['filterset'] = 'Набор фильтров'; +$labels['filtersets'] = 'Наборы фильтров'; $labels['filtersetadd'] = 'Добавить набор фильтров'; $labels['filtersetdel'] = 'Удалить текущий набор фильтров'; $labels['filtersetact'] = 'Включить текущий набор фильтров'; $labels['filtersetdeact'] = 'Отключить текущий набор фильтров'; -$labels['filtersetget'] = 'Скачать набор фильтров в виде текста'; $labels['filterdef'] = 'Описание фильтра'; $labels['filtersetname'] = 'Название набора фильтров'; $labels['newfilterset'] = 'Новый набор фильтров'; @@ -89,29 +89,40 @@ $labels['flaganswered'] = 'Отвечено'; $labels['flagflagged'] = 'Помечено'; $labels['flagdraft'] = 'Черновик'; +$labels['filtercreate'] = 'Создать фильтр'; +$labels['usedata'] = 'Использовать следующие данные в фильтре:'; +$labels['nextstep'] = 'Далее'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Дополнительные параметры'; +$labels['body'] = 'Тело письма'; +$labels['address'] = 'адрес'; +$labels['envelope'] = 'конверт'; +$labels['text'] = 'текст'; +$labels['contenttype'] = 'тип содержимого'; +$labels['modtype'] = 'тип:'; +$labels['allparts'] = 'все'; +$labels['domain'] = 'домен'; +$labels['user'] = 'пользователь'; +$labels['default'] = 'по умолчанию'; +$labels['filterunknownerror'] = 'Неизвестная ошибка сервера'; +$labels['filterconnerror'] = 'Невозможно подсоединится к серверу фильтров'; +$labels['filterdeleteerror'] = 'Невозможно удалить фильтр. Ошибка сервера'; +$labels['filterdeleted'] = 'Фильтр успешно удалён'; +$labels['filtersaved'] = 'Фильтр успешно сохранён'; +$labels['filtersaveerror'] = 'Невозможно сохранить фильтр. Ошибка сервера'; +$labels['filterdeleteconfirm'] = 'Вы действительно хотите удалить фильтр?'; +$labels['ruledeleteconfirm'] = 'Вы уверенны, что хотите удалить это правило?'; +$labels['actiondeleteconfirm'] = 'Вы уверенны, что хотите удалить это действие?'; +$labels['forbiddenchars'] = 'Недопустимые символы в поле'; +$labels['cannotbeempty'] = 'Поле не может быть пустым'; +$labels['setactivateerror'] = 'Невозможно включить выбранный набор фильтров. Ошибка сервера'; +$labels['setdeactivateerror'] = 'Невозможно отключить выбранный набор фильтров. Ошибка сервера'; +$labels['setdeleteerror'] = 'Невозможно удалить выбранный набор фильтров. Ошибка сервера'; +$labels['setactivated'] = 'Набор фильтров успешно включён'; +$labels['setdeactivated'] = 'Набор фильтров успешно отключён'; +$labels['setdeleted'] = 'Набор фильтров успешно удалён'; +$labels['setdeleteconfirm'] = 'Вы уверены в том, что хотите удалить выбранный набор фильтров?'; +$labels['setcreateerror'] = 'Невозможно создать набор фильтров. Ошибка сервера'; +$labels['setcreated'] = 'Набор фильтров успешно создан'; +$labels['nametoolong'] = 'Невозможно создать набор фильтров. Название слишком длинное'; -$messages = array(); -$messages['filterunknownerror'] = 'Неизвестная ошибка сервера'; -$messages['filterconnerror'] = 'Невозможно подсоединится к серверу фильтров'; -$messages['filterdeleteerror'] = 'Невозможно удалить фильтр. Ошибка сервера'; -$messages['filterdeleted'] = 'Фильтр успешно удалён'; -$messages['filterdeleteconfirm'] = 'Вы действительно хотите удалить фильтр?'; -$messages['filtersaved'] = 'Фильтр успешно сохранён'; -$messages['filtersaveerror'] = 'Невозможно сохранить фильтр. Ошибка сервера'; -$messages['ruledeleteconfirm'] = 'Вы уверенны, что хотите удалить это правило?'; -$messages['actiondeleteconfirm'] = 'Вы уверенны, что хотите удалить это действие?'; -$messages['forbiddenchars'] = 'Недопустимые символы в поле'; -$messages['cannotbeempty'] = 'Поле не может быть пустым'; -$messages['setactivateerror'] = 'Невозможно включить выбранный набор фильтров. Ошибка сервера'; -$messages['setdeactivateerror'] = 'Невозможно отключить выбранный набор фильтров. Ошибка сервера'; -$messages['setdeleteerror'] = 'Невозможно удалить выбранный набор фильтров. Ошибка сервера'; -$messages['setactivated'] = 'Набор фильтров успешно включён'; -$messages['setdeactivated'] = 'Набор фильтров успешно отключён'; -$messages['setdeleted'] = 'Набор фильтров успешно удалён'; -$messages['setdeleteconfirm'] = 'Вы уверены в том, что хотите удалить выбранный набор фильтров?'; -$messages['setcreateerror'] = 'Невозможно создать набор фильтров. Ошибка сервера'; -$messages['setcreated'] = 'Набор фильтров успешно создан'; -$messages['emptyname'] = 'Невозможно создать набор фильтров. Название не задано'; -$messages['nametoolong'] = 'Невозможно создать набор фильтров. Название слишком длинное' - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/sk_SK.inc roundcube-0.7.1/plugins/managesieve/localization/sk_SK.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/sk_SK.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/sk_SK.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,12 +1,20 @@ - */ + +-----------------------------------------------------------------------+ + | localization/sk_SK/labels.inc | + | | + | Language file of the Roundcube Webmail client | + | Copyright (C) 2012, The Roundcube Dev Team | + | Licensed under the GNU General Public License | + | | + +-----------------------------------------------------------------------+ + | Author: Thomas | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ +$labels = array(); $labels['filters'] = 'Filtre'; $labels['managefilters'] = 'Správa filtrov príchádzajúcej pošty'; $labels['filtername'] = 'Názov filtra'; @@ -24,12 +32,18 @@ $labels['filterisnot'] = 'nie je'; $labels['filterexists'] = 'existuje'; $labels['filternotexists'] = 'neexistuje'; +$labels['filtermatches'] = 'vyhovuje výrazu'; +$labels['filternotmatches'] = 'nevyhovuje výrazu'; +$labels['filterregex'] = 'vyhovuje regulárnemu výrazu'; +$labels['filternotregex'] = 'nevyhovuje regulárnemu výrazu'; $labels['filterunder'] = 'pod'; $labels['filterover'] = 'nad'; $labels['addrule'] = 'Pridaj pravidlo'; $labels['delrule'] = 'Zmaž pravidlo'; $labels['messagemoveto'] = 'Presuň správu do'; $labels['messageredirect'] = 'Presmeruj správu na'; +$labels['messagecopyto'] = 'Kopírovať správu do'; +$labels['messagesendcopy'] = 'Poslať kópiu správy'; $labels['messagereply'] = 'Pošli automatickú odpoveď'; $labels['messagedelete'] = 'Zmaž správu'; $labels['messagediscard'] = 'Zmaž a pošli správu na'; @@ -42,13 +56,15 @@ $labels['vacationaddresses'] = 'Dodatoční príjemcovia správy (oddelení čiarkami):'; $labels['vacationdays'] = 'Počet dní medzi odoslaním správy:'; $labels['vacationreason'] = 'Dôvod neprítomnosti:'; +$labels['vacationsubject'] = 'Predmet správy:'; $labels['rulestop'] = 'Koniec pravidiel'; +$labels['enable'] = 'Povoliť/Zakázať'; $labels['filterset'] = 'Sada filtrov'; +$labels['filtersets'] = 'Množiny filtrov'; $labels['filtersetadd'] = 'Pridaj sadu filtrov'; $labels['filtersetdel'] = 'Zmaž túto sadu filtrov'; $labels['filtersetact'] = 'Aktivuj túto sadu filtrov'; $labels['filtersetdeact'] = 'Deaktivuj túto sadu filtrov'; -$labels['filtersetget'] = 'Stiahni definíciu filtrov v textovom súbore'; $labels['filterdef'] = 'Definícia filtra'; $labels['filtersetname'] = 'Názov sady filtrov'; $labels['newfilterset'] = 'Nová sada filtrov'; @@ -57,29 +73,62 @@ $labels['fromset'] = 'zo sady'; $labels['fromfile'] = 'zo súboru'; $labels['filterdisabled'] = 'Filter zakázaný'; +$labels['countisgreaterthan'] = 'počet je väčší ako'; +$labels['countisgreaterthanequal'] = 'počet je väčší alebo rovný ako'; +$labels['countislessthan'] = 'počet je menší ako'; +$labels['countislessthanequal'] = 'počet je menší alebo rovný ako'; +$labels['countequals'] = 'počet je rovný'; +$labels['countnotequals'] = 'počet sa nerovná'; +$labels['valueisgreaterthan'] = 'hodnota je väčšia ako'; +$labels['valueisgreaterthanequal'] = 'hodnota je väčšia alebo rovná ako'; +$labels['valueislessthan'] = 'hodnota je menšia ako'; +$labels['valueislessthanequal'] = 'hodnota je menšia alebo rovná'; +$labels['valueequals'] = 'hodnota je rovná'; +$labels['valuenotequals'] = 'hodnota je rôzna od'; +$labels['setflags'] = 'Nastaviť príznaky správy'; +$labels['addflags'] = 'Pridať príznak správy'; +$labels['removeflags'] = 'odstrániť príznaky zo správy'; +$labels['flagread'] = 'Prečítaný'; +$labels['flagdeleted'] = 'Zmazané'; +$labels['flaganswered'] = 'Odpovedané'; +$labels['flagflagged'] = 'Označené'; +$labels['flagdraft'] = 'Koncept'; +$labels['filtercreate'] = 'Vytvoriť filter'; +$labels['usedata'] = 'Použiť tieto údaje vo filtri:'; +$labels['nextstep'] = 'Ďalší krok'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Rozšírené nastavenia'; +$labels['body'] = 'Telo'; +$labels['address'] = 'adresa'; +$labels['envelope'] = 'obálka'; +$labels['text'] = 'text'; +$labels['contenttype'] = 'typ obsahu'; +$labels['modtype'] = 'typ:'; +$labels['allparts'] = 'všetko'; +$labels['domain'] = 'doména'; +$labels['localpart'] = 'lokálna časť'; +$labels['user'] = 'užívateľ'; +$labels['detail'] = 'detail'; +$labels['default'] = 'predvolené'; +$labels['filterunknownerror'] = 'Neznáma chyba serveru'; +$labels['filterconnerror'] = 'Nepodarilo sa pripojiť k managesieve serveru'; +$labels['filterdeleteerror'] = 'Nepodarilo sa zmazať filter, server ohlásil chybu'; +$labels['filterdeleted'] = 'Filter bol zmazaný'; +$labels['filtersaved'] = 'Filter bol uložený'; +$labels['filtersaveerror'] = 'Nepodarilo sa uložiť filter, server ohlásil chybu'; +$labels['filterdeleteconfirm'] = 'Naozaj si prajete zmazať tento filter?'; +$labels['ruledeleteconfirm'] = 'Naozaj si prajete zamzať toto pravidlo?'; +$labels['actiondeleteconfirm'] = 'Naozaj si prajete zmazať túto akciu?'; +$labels['forbiddenchars'] = 'Pole obsahuje nepovolené znaky'; +$labels['cannotbeempty'] = 'Pole nemôže byť prázdne'; +$labels['setactivateerror'] = 'Nepodarilo sa aktivovať zvolenú sadu filtrov, server ohlásil chybu'; +$labels['setdeactivateerror'] = 'Nepodarilo sa deaktivovať zvolenú sadu filtrov, server ohlásil chybu'; +$labels['setdeleteerror'] = 'Nepodarilo sa zmazať zvolenú sadu filtrov, server ohlásil chybu'; +$labels['setactivated'] = 'Sada filtrov bola aktivovaná'; +$labels['setdeactivated'] = 'Sada filtrov bola deaktivovaná'; +$labels['setdeleted'] = 'Sada filtrov bola zmazaná'; +$labels['setdeleteconfirm'] = 'Naozaj si prajete zmazať túto sadu filtrov?'; +$labels['setcreateerror'] = 'Nepodarilo sa vytvoriť sadu filtrov, server ohlásil chybu'; +$labels['setcreated'] = 'Sada filtrov bola vytvorená'; +$labels['nametoolong'] = 'Názov sady filtrov je príliš dlhý'; -$messages = array(); -$messages['filterunknownerror'] = 'Neznáma chyba serveru'; -$messages['filterconnerror'] = 'Nepodarilo sa pripojiť k managesieve serveru'; -$messages['filterdeleteerror'] = 'Nepodarilo sa zmazať filter, server ohlásil chybu'; -$messages['filterdeleted'] = 'Filter bol zmazaný'; -$messages['filtersaved'] = 'Filter bol uložený'; -$messages['filtersaveerror'] = 'Nepodarilo sa uložiť filter, server ohlásil chybu'; -$messages['filterdeleteconfirm'] = 'Naozaj si prajete zmazať tento filter?'; -$messages['ruledeleteconfirm'] = 'Naozaj si prajete zamzať toto pravidlo?'; -$messages['actiondeleteconfirm'] = 'Naozaj si prajete zmazať túto akciu?'; -$messages['forbiddenchars'] = 'Pole obsahuje nepovolené znaky'; -$messages['cannotbeempty'] = 'Pole nemôže byť prázdne'; -$messages['setactivateerror'] = 'Nepodarilo sa aktivovať zvolenú sadu filtrov, server ohlásil chybu'; -$messages['setdeactivateerror'] = 'Nepodarilo sa deaktivovať zvolenú sadu filtrov, server ohlásil chybu'; -$messages['setdeleteerror'] = 'Nepodarilo sa zmazať zvolenú sadu filtrov, server ohlásil chybu'; -$messages['setactivated'] = 'Sada filtrov bola aktivovaná'; -$messages['setdeactivated'] = 'Sada filtrov bola deaktivovaná'; -$messages['setdeleted'] = 'Sada filtrov bola zmazaná'; -$messages['setdeleteconfirm'] = 'Naozaj si prajete zmazať túto sadu filtrov?'; -$messages['setcreateerror'] = 'Nepodarilo sa vytvoriť sadu filtrov, server ohlásil chybu'; -$messages['setcreated'] = 'Sada filtrov bola vytvorená'; -$messages['emptyname'] = 'Názov sady filtrov nemôže byť prázdny'; -$messages['nametoolong'] = 'Názov sady filtrov je príliš dlhý' - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/sl_SI.inc roundcube-0.7.1/plugins/managesieve/localization/sl_SI.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/sl_SI.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/sl_SI.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,20 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + +$labels = array(); $labels['filters'] = 'Pravila'; $labels['managefilters'] = 'Uredi sporočilna pravila'; $labels['filtername'] = 'Ime pravila'; @@ -36,18 +51,15 @@ $labels['vacationdays'] = 'Kako pogosto naj bodo sporočila poslana (v dnevih):'; $labels['vacationreason'] = 'Vsebina sporočila (vzrok za odsotnost):'; $labels['rulestop'] = 'Prekini z izvajanjem pravil'; +$labels['filterunknownerror'] = 'Prišlo je do neznane napake.'; +$labels['filterconnerror'] = 'Povezave s strežnikom (managesieve) ni bilo mogoče vzpostaviti'; +$labels['filterdeleteerror'] = 'Pravila ni bilo mogoče izbrisati. Prišlo je do napake.'; +$labels['filterdeleted'] = 'Pravilo je bilo uspešno izbrisano.'; +$labels['filtersaved'] = 'Pravilo je bilo uspešno shranjeno'; +$labels['filtersaveerror'] = 'Pravilo ni bilo shranjeno. Prišlo je do napake.'; +$labels['filterdeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano pravilo?'; +$labels['ruledeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano pravilo?'; +$labels['actiondeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano dejanje?'; +$labels['forbiddenchars'] = 'V polju so neveljavni znaki'; +$labels['cannotbeempty'] = 'Polje ne sme biti prazno'; -$messages = array(); -$messages['filterunknownerror'] = 'Prišlo je do neznane napake.'; -$messages['filterconnerror'] = 'Povezave s strežnikom (managesieve) ni bilo mogoče vzpostaviti'; -$messages['filterdeleteerror'] = 'Pravila ni bilo mogoče izbrisati. Prišlo je do napake.'; -$messages['filterdeleted'] = 'Pravilo je bilo uspešno izbrisano.'; -$messages['filterdeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano pravilo?'; -$messages['filtersaved'] = 'Pravilo je bilo uspešno shranjeno'; -$messages['filtersaveerror'] = 'Pravilo ni bilo shranjeno. Prišlo je do napake.'; -$messages['ruledeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano pravilo?'; -$messages['actiondeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano dejanje?'; -$messages['forbiddenchars'] = 'V polju so neveljavni znaki'; -$messages['cannotbeempty'] = 'Polje ne sme biti prazno'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/sv_SE.inc roundcube-0.7.1/plugins/managesieve/localization/sv_SE.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/sv_SE.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/sv_SE.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,19 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + $labels = array(); $labels['filters'] = 'Filter'; $labels['managefilters'] = 'Administrera filter'; @@ -18,6 +32,10 @@ $labels['filterisnot'] = 'är inte lika med'; $labels['filterexists'] = 'finns'; $labels['filternotexists'] = 'inte finns'; +$labels['filtermatches'] = 'matchar uttryck'; +$labels['filternotmatches'] = 'inte matchar uttryck'; +$labels['filterregex'] = 'matchar reguljärt uttryck'; +$labels['filternotregex'] = 'inte matchar reguljärt uttryck'; $labels['filterunder'] = 'under'; $labels['filterover'] = 'över'; $labels['addrule'] = 'Lägg till regel'; @@ -38,13 +56,15 @@ $labels['vacationaddresses'] = 'Ytterligare mottagaradresser (avdelade med kommatecken)'; $labels['vacationdays'] = 'Antal dagar mellan auto-svar:'; $labels['vacationreason'] = 'Meddelande i auto-svar:'; +$labels['vacationsubject'] = 'Meddelandeämne:'; $labels['rulestop'] = 'Avsluta filtrering'; +$labels['enable'] = 'Aktivera/inaktivera'; $labels['filterset'] = 'Filtergrupp'; +$labels['filtersets'] = 'Filtergrupper'; $labels['filtersetadd'] = 'Lägg till filtergrupp'; $labels['filtersetdel'] = 'Ta bort filtergrupp'; $labels['filtersetact'] = 'Aktivera filtergrupp'; $labels['filtersetdeact'] = 'Deaktivera filtergrupp'; -$labels['filtersetget'] = 'Exportera filtergrupp i textformat'; $labels['filterdef'] = 'Filterdefinition'; $labels['filtersetname'] = 'Filtergruppsnamn'; $labels['newfilterset'] = 'Ny filtergrupp'; @@ -65,29 +85,56 @@ $labels['valueislessthanequal'] = 'värde är mindre än eller lika med'; $labels['valueequals'] = 'värde är lika med'; $labels['valuenotequals'] = 'värde är inte lika med'; +$labels['setflags'] = 'Flagga meddelande'; +$labels['addflags'] = 'Lägg till meddelandeflaggor'; +$labels['removeflags'] = 'Ta bort meddelandeflaggor'; +$labels['flagread'] = 'Läst'; +$labels['flagdeleted'] = 'Borttaget'; +$labels['flaganswered'] = 'Besvarat'; +$labels['flagflagged'] = 'Flaggat'; +$labels['flagdraft'] = 'Utkast'; +$labels['filtercreate'] = 'Skapa filter'; +$labels['usedata'] = 'Använd följande information i filtret:'; +$labels['nextstep'] = 'Nästa steg'; +$labels['...'] = '...'; +$labels['advancedopts'] = 'Avancerade inställningar'; +$labels['body'] = 'Meddelandeinnehåll'; +$labels['address'] = 'adress'; +$labels['envelope'] = 'kuvert'; +$labels['modifier'] = 'modifierare:'; +$labels['text'] = 'text'; +$labels['undecoded'] = 'obearbetat (rå)'; +$labels['contenttype'] = 'innehållstyp'; +$labels['modtype'] = 'typ:'; +$labels['allparts'] = 'allt'; +$labels['domain'] = 'domän'; +$labels['localpart'] = 'lokal del'; +$labels['user'] = 'användare'; +$labels['detail'] = 'detalj'; +$labels['comparator'] = 'jämförelse:'; +$labels['default'] = 'standard'; +$labels['octet'] = 'strikt (oktalt)'; +$labels['asciicasemap'] = 'teckenlägesokänslig (ascii-casemap)'; +$labels['asciinumeric'] = 'numerisk (ascii-numeric)'; +$labels['filterunknownerror'] = 'Okänt serverfel'; +$labels['filterconnerror'] = 'Anslutning till serverns filtertjänst misslyckades'; +$labels['filterdeleteerror'] = 'Filtret kunde inte tas bort på grund av serverfel'; +$labels['filterdeleted'] = 'Filtret är borttaget'; +$labels['filtersaved'] = 'Filtret har sparats'; +$labels['filtersaveerror'] = 'Filtret kunde inte sparas på grund av serverfel'; +$labels['filterdeleteconfirm'] = 'Vill du ta bort det markerade filtret?'; +$labels['ruledeleteconfirm'] = 'Vill du ta bort filterregeln?'; +$labels['actiondeleteconfirm'] = 'Vill du ta bort filteråtgärden?'; +$labels['forbiddenchars'] = 'Otillåtet tecken i fältet'; +$labels['cannotbeempty'] = 'Fältet kan inte lämnas tomt'; +$labels['setactivateerror'] = 'Filtergruppen kunde inte aktiveras på grund av serverfel'; +$labels['setdeactivateerror'] = 'Filtergruppen kunde inte deaktiveras på grund av serverfel'; +$labels['setdeleteerror'] = 'Filtergruppen kunde inte tas bort på grund av serverfel'; +$labels['setactivated'] = 'Filtergruppen är aktiverad'; +$labels['setdeactivated'] = 'Filtergruppen är deaktiverad'; +$labels['setdeleted'] = 'Filtergruppen är borttagen'; +$labels['setdeleteconfirm'] = 'Vill du ta bort filtergruppen?'; +$labels['setcreateerror'] = 'Filtergruppen kunde inte läggas till på grund av serverfel'; +$labels['setcreated'] = 'Filtergruppen har lagts till'; +$labels['nametoolong'] = 'Filtergruppen kan inte läggas till med för långt namn'; -$messages = array(); -$messages['filterunknownerror'] = 'Okänt serverfel'; -$messages['filterconnerror'] = 'Anslutning till serverns filtertjänst misslyckades'; -$messages['filterdeleteerror'] = 'Filtret kunde inte tas bort på grund av serverfel'; -$messages['filterdeleted'] = 'Filtret är borttaget'; -$messages['filtersaved'] = 'Filtret har sparats'; -$messages['filtersaveerror'] = 'Filtret kunde inte sparas på grund av serverfel'; -$messages['filterdeleteconfirm'] = 'Vill du ta bort det markerade filtret?'; -$messages['ruledeleteconfirm'] = 'Vill du ta bort filterregeln?'; -$messages['actiondeleteconfirm'] = 'Vill du ta bort filteråtgärden?'; -$messages['forbiddenchars'] = 'Otillåtet tecken i fältet'; -$messages['cannotbeempty'] = 'Fältet kan inte lämnas tomt'; -$messages['setactivateerror'] = 'Filtergruppen kunde inte aktiveras på grund av serverfel'; -$messages['setdeactivateerror'] = 'Filtergruppen kunde inte deaktiveras på grund av serverfel'; -$messages['setdeleteerror'] = 'Filtergruppen kunde inte tas bort på grund av serverfel'; -$messages['setactivated'] = 'Filtergruppen är aktiverad'; -$messages['setdeactivated'] = 'Filtergruppen är deaktiverad'; -$messages['setdeleted'] = 'Filtergruppen är borttagen'; -$messages['setdeleteconfirm'] = 'Vill du ta bort filtergruppen?'; -$messages['setcreateerror'] = 'Filtergruppen kunde inte läggas till på grund av serverfel'; -$messages['setcreated'] = 'Filtergruppen har lagts till'; -$messages['emptyname'] = 'Filtergruppen kan inte läggas till utan namn'; -$messages['nametoolong'] = 'Filtergruppen kan inte läggas till med för långt namn'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/uk_UA.inc roundcube-0.7.1/plugins/managesieve/localization/uk_UA.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/uk_UA.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/uk_UA.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,19 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + $labels = array(); $labels['filters'] = 'Фільтри'; $labels['managefilters'] = 'Керування фільтрами вхідної пошти'; @@ -41,7 +55,6 @@ $labels['filtersetadd'] = 'Додати набір фільтрів'; $labels['filtersetdel'] = 'Видалити поточний набір'; $labels['filtersetact'] = 'Активувати поточний набір'; -$labels['filtersetget'] = 'Зберегти набір у текстовому форматі'; $labels['filterdef'] = 'Параметри фільтру'; $labels['filtersetname'] = 'Назва набору фільтрів'; $labels['newfilterset'] = 'Новий набір фільтрів'; @@ -50,27 +63,23 @@ $labels['fromset'] = 'з набору'; $labels['fromfile'] = 'з файлу'; $labels['filterdisabled'] = 'Фільтр вимкнено'; +$labels['filterunknownerror'] = 'Невідома помилка сервера'; +$labels['filterconnerror'] = 'Неможливо з\'єднатися з сервером'; +$labels['filterdeleteerror'] = 'Неможливо видалити фільтр. Помилка сервера'; +$labels['filterdeleted'] = 'Фільтр успішно видалено'; +$labels['filtersaved'] = 'Фільтр успішно збережено'; +$labels['filtersaveerror'] = 'Неможливо зберегти фільтр. Помилка сервера'; +$labels['filterdeleteconfirm'] = 'Ви дійсно хочете видалити обраний фільтр?'; +$labels['ruledeleteconfirm'] = 'Ви дійсно хочете видалити обране правило?'; +$labels['actiondeleteconfirm'] = 'Ви дійсно хочете видалити обрану дію?'; +$labels['forbiddenchars'] = 'Введено заборонений символ'; +$labels['cannotbeempty'] = 'Поле не може бути пустим'; +$labels['setactivateerror'] = 'Неможливо активувати обраний набір. Помилка сервера'; +$labels['setdeleteerror'] = 'Неможливо видалити обраний набір. Помилка сервера'; +$labels['setactivated'] = 'Набір фільтрів активовано успішно'; +$labels['setdeleted'] = 'Набір фільтрів видалено успішно'; +$labels['setdeleteconfirm'] = 'Ви впевнені, що хочете видалити обраний набір?'; +$labels['setcreateerror'] = 'Не вдалося створити набір. Помилка сервера'; +$labels['setcreated'] = 'Набір фільтрів створено успішно'; +$labels['nametoolong'] = 'Не вдалося створити набір. Занадто довга назва'; -$messages = array(); -$messages['filterunknownerror'] = 'Невідома помилка сервера'; -$messages['filterconnerror'] = 'Неможливо з\'єднатися з сервером'; -$messages['filterdeleteerror'] = 'Неможливо видалити фільтр. Помилка сервера'; -$messages['filterdeleted'] = 'Фільтр успішно видалено'; -$messages['filtersaved'] = 'Фільтр успішно збережено'; -$messages['filtersaveerror'] = 'Неможливо зберегти фільтр. Помилка сервера'; -$messages['filterdeleteconfirm'] = 'Ви дійсно хочете видалити обраний фільтр?'; -$messages['ruledeleteconfirm'] = 'Ви дійсно хочете видалити обране правило?'; -$messages['actiondeleteconfirm'] = 'Ви дійсно хочете видалити обрану дію?'; -$messages['forbiddenchars'] = 'Введено заборонений символ'; -$messages['cannotbeempty'] = 'Поле не може бути пустим'; -$messages['setactivateerror'] = 'Неможливо активувати обраний набір. Помилка сервера'; -$messages['setdeleteerror'] = 'Неможливо видалити обраний набір. Помилка сервера'; -$messages['setactivated'] = 'Набір фільтрів активовано успішно'; -$messages['setdeleted'] = 'Набір фільтрів видалено успішно'; -$messages['setdeleteconfirm'] = 'Ви впевнені, що хочете видалити обраний набір?'; -$messages['setcreateerror'] = 'Не вдалося створити набір. Помилка сервера'; -$messages['setcreated'] = 'Набір фільтрів створено успішно'; -$messages['emptyname'] = 'Не вдалося створити набір. Введіть назву набору'; -$messages['nametoolong'] = 'Не вдалося створити набір. Занадто довга назва' - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/zh_CN.inc roundcube-0.7.1/plugins/managesieve/localization/zh_CN.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/zh_CN.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/zh_CN.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,20 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + +$labels = array(); $labels['filters'] = '过滤器'; $labels['managefilters'] = '管理邮件过滤器'; $labels['filtername'] = '过滤器名称'; @@ -17,12 +32,18 @@ $labels['filterisnot'] = '不等于'; $labels['filterexists'] = '存在'; $labels['filternotexists'] = '不存在'; +$labels['filtermatches'] = '匹配表达式'; +$labels['filternotmatches'] = '无匹配的表达式'; +$labels['filterregex'] = '匹配正则表达式'; +$labels['filternotregex'] = '无匹配的正则表达式'; $labels['filterunder'] = '小于'; $labels['filterover'] = '大于'; $labels['addrule'] = '添加规则'; $labels['delrule'] = '删除规则'; $labels['messagemoveto'] = '将邮件移动到'; $labels['messageredirect'] = '将邮件转发到'; +$labels['messagecopyto'] = '复制邮件至'; +$labels['messagesendcopy'] = '发送复制邮件至'; $labels['messagereply'] = '回复以下信息'; $labels['messagedelete'] = '删除邮件'; $labels['messagediscard'] = '丢弃邮件并回复以下信息'; @@ -32,18 +53,78 @@ $labels['del'] = '删除'; $labels['sender'] = '发件人'; $labels['recipient'] = '收件人'; +$labels['vacationaddresses'] = '收件人地址的附加名单(以逗号分隔)'; +$labels['vacationdays'] = '平常如何发送邮件(天数):'; +$labels['vacationreason'] = '邮件主体(休假原因)'; +$labels['vacationsubject'] = '邮件主题'; +$labels['rulestop'] = '停止评价规则'; +$labels['enable'] = '启用/禁用'; +$labels['filterset'] = '过滤器设置'; +$labels['filtersets'] = '过滤器设置集'; +$labels['filtersetadd'] = '增加过滤器设置集'; +$labels['filtersetdel'] = '删除当前的过滤器设置集'; +$labels['filtersetact'] = '激活当前的过滤器设置集'; +$labels['filtersetdeact'] = '停用当前的过滤器设置集'; +$labels['filterdef'] = '过滤器定义'; +$labels['filtersetname'] = '过滤器集的名称'; +$labels['newfilterset'] = '新的过滤器集'; +$labels['active'] = '活动'; +$labels['none'] = '无'; +$labels['fromset'] = '从设置'; +$labels['fromfile'] = '从文件'; +$labels['filterdisabled'] = '禁用过滤器'; +$labels['countisgreaterthan'] = '计数大于'; +$labels['countisgreaterthanequal'] = '计数大于或等于'; +$labels['countislessthan'] = '计数小于'; +$labels['countislessthanequal'] = '计数小于或等于'; +$labels['countequals'] = '计数等于'; +$labels['countnotequals'] = '计数不等于'; +$labels['valueisgreaterthan'] = '值大于'; +$labels['valueisgreaterthanequal'] = '值大于或等于'; +$labels['valueislessthan'] = '值小于'; +$labels['valueislessthanequal'] = '值小于或等于'; +$labels['valueequals'] = '值等于'; +$labels['valuenotequals'] = '值不等于'; +$labels['setflags'] = '设定邮件的标识'; +$labels['addflags'] = '增加邮件的标识'; +$labels['removeflags'] = '删除邮件的标识'; +$labels['flagread'] = '阅读'; +$labels['flagdeleted'] = '删除'; +$labels['flaganswered'] = '已答复'; +$labels['flagflagged'] = '已标记'; +$labels['flagdraft'] = '草稿'; +$labels['filtercreate'] = '创建过滤器'; +$labels['usedata'] = '在过滤器中使用以下数据'; +$labels['nextstep'] = '下一步'; +$labels['...'] = '……'; +$labels['advancedopts'] = '高级选项'; +$labels['body'] = '正文'; +$labels['address'] = '地址'; +$labels['envelope'] = '信封'; +$labels['modifier'] = '修饰符:'; +$labels['text'] = '文本'; +$labels['undecoded'] = '未解码(RAW)'; +$labels['contenttype'] = '内容类型'; +$labels['modtype'] = '类型:'; +$labels['allparts'] = '全部'; +$labels['domain'] = '域'; +$labels['localpart'] = '本地部份'; +$labels['user'] = '用户'; +$labels['detail'] = '细节'; +$labels['comparator'] = '比较:'; +$labels['default'] = '默认'; +$labels['octet'] = '严格的(字节)'; +$labels['asciicasemap'] = '不区分大小写(ascii字符)'; +$labels['asciinumeric'] = '数字(ascii数字)'; +$labels['filterunknownerror'] = '未知的服务器错误'; +$labels['filterconnerror'] = '无法连接到 managesieve 服务器'; +$labels['filterdeleteerror'] = '无法删除过滤器。服务器错误'; +$labels['filterdeleted'] = '过滤器已成功删除'; +$labels['filtersaved'] = '过滤器已成功保存。'; +$labels['filtersaveerror'] = '无法保存过滤器。服务器错误'; +$labels['filterdeleteconfirm'] = '您确定要删除所选择的过滤器吗?'; +$labels['ruledeleteconfirm'] = '您确定要删除所选择的规则吗?'; +$labels['actiondeleteconfirm'] = '您确定要删除所选择的动作吗?'; +$labels['forbiddenchars'] = '内容中包含禁用的字符'; +$labels['cannotbeempty'] = '内容不能为空'; -$messages = array(); -$messages['filterunknownerror'] = '未知的服务器错误'; -$messages['filterconnerror'] = '无法连接到 managesieve 服务器'; -$messages['filterdeleteerror'] = '无法删除过滤器。服务器错误'; -$messages['filterdeleted'] = '过滤器已成功删除'; -$messages['filterdeleteconfirm'] = '您确定要删除所选择的过滤器吗?'; -$messages['filtersaved'] = '过滤器已成功保存。'; -$messages['filtersaveerror'] = '无法保存过滤器。服务器错误'; -$messages['ruledeleteconfirm'] = '您确定要删除所选择的规则吗?'; -$messages['actiondeleteconfirm'] = '您确定要删除所选择的动作吗?'; -$messages['forbiddenchars'] = '内容中包含禁用的字符'; -$messages['cannotbeempty'] = '内容不能为空'; - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/localization/zh_TW.inc roundcube-0.7.1/plugins/managesieve/localization/zh_TW.inc --- roundcube-0.6+dfsg/plugins/managesieve/localization/zh_TW.inc 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/localization/zh_TW.inc 2012-01-17 07:50:40.000000000 +0000 @@ -1,5 +1,20 @@ | + +-----------------------------------------------------------------------+ + @version $Id$ +*/ + +$labels = array(); $labels['filters'] = '篩選器'; $labels['managefilters'] = '設定篩選器'; $labels['filtername'] = '篩選器名稱'; @@ -17,12 +32,18 @@ $labels['filterisnot'] = '不等於'; $labels['filterexists'] = '存在'; $labels['filternotexists'] = '不存在'; +$labels['filtermatches'] = '符合表達式'; +$labels['filternotmatches'] = '不符合表達式'; +$labels['filterregex'] = '符合正規表達式'; +$labels['filternotregex'] = '不符合正規表達式'; $labels['filterunder'] = '小於'; $labels['filterover'] = '大於'; $labels['addrule'] = '新增規則'; $labels['delrule'] = '刪除規則'; $labels['messagemoveto'] = '將信件移至'; $labels['messageredirect'] = '將信件轉寄至'; +$labels['messagecopyto'] = '複製訊息至'; +$labels['messagesendcopy'] = '寄送訊息複本至'; $labels['messagereply'] = '以下列內容回覆'; $labels['messagedelete'] = '刪除信件'; $labels['messagediscard'] = '刪除信件並以下列內容回覆'; @@ -35,13 +56,14 @@ $labels['vacationaddresses'] = '其他收件者(用半形逗號隔開):'; $labels['vacationdays'] = '多久回覆一次(單位:天):'; $labels['vacationreason'] = '信件內容(休假原因):'; +$labels['vacationsubject'] = '訊息主旨:'; $labels['rulestop'] = '停止評估規則'; +$labels['enable'] = '啟用/停用'; $labels['filterset'] = '篩選器集合'; $labels['filtersetadd'] = '加入篩選器集合'; $labels['filtersetdel'] = '刪除目前的篩選器集合'; $labels['filtersetact'] = '啟用目前的篩選器集合'; $labels['filtersetdeact'] = '停用目前的篩選器集合'; -$labels['filtersetget'] = '以純文字下載篩選器集合'; $labels['filterdef'] = '篩選器定義'; $labels['filtersetname'] = '篩選器集合名稱'; $labels['newfilterset'] = '建立篩選器集合'; @@ -50,29 +72,58 @@ $labels['fromset'] = '從集合'; $labels['fromfile'] = '重檔案'; $labels['filterdisabled'] = '篩選器已停用'; +$labels['countislessthanequal'] = '數量小於或等於'; +$labels['countequals'] = '數量等於'; +$labels['countnotequals'] = '數量不等於'; +$labels['valueisgreaterthan'] = '值大於'; +$labels['valueisgreaterthanequal'] = '值大於等於'; +$labels['valueislessthan'] = '值小於'; +$labels['valueislessthanequal'] = '值小於或等於'; +$labels['valueequals'] = '值等於'; +$labels['valuenotequals'] = '值不等於'; +$labels['setflags'] = '設定標幟'; +$labels['addflags'] = '新增標記到訊息'; +$labels['removeflags'] = '移除訊息標記'; +$labels['flagread'] = '讀取'; +$labels['flagdeleted'] = '刪除'; +$labels['flagflagged'] = '已加標記的郵件'; +$labels['flagdraft'] = '草稿'; +$labels['filtercreate'] = '建立郵件規則'; +$labels['usedata'] = '於規則中使用轉寄時間'; +$labels['nextstep'] = '下一步'; +$labels['...'] = '…'; +$labels['advancedopts'] = '進階選項'; +$labels['body'] = '內文'; +$labels['address'] = '郵件位址'; +$labels['text'] = '文字'; +$labels['undecoded'] = '未解碼(raw)'; +$labels['modtype'] = '型態:'; +$labels['allparts'] = '全部'; +$labels['domain'] = '網域'; +$labels['localpart'] = '本機連接埠'; +$labels['user'] = '使用者'; +$labels['detail'] = '細節'; +$labels['default'] = '預設'; +$labels['filterunknownerror'] = '未知的伺服器錯誤'; +$labels['filterconnerror'] = '無法與伺服器連線'; +$labels['filterdeleteerror'] = '無法刪除篩選器。發生伺服器錯誤'; +$labels['filterdeleted'] = '成功刪除篩選器'; +$labels['filtersaved'] = '成功儲存篩選器。'; +$labels['filtersaveerror'] = '無法儲存篩選器。發生伺服器錯誤'; +$labels['filterdeleteconfirm'] = '您確定要刪除選擇的郵件規則嗎?'; +$labels['ruledeleteconfirm'] = '您確定要刪除選的規則嗎?'; +$labels['actiondeleteconfirm'] = '您確定要刪除選擇的動作嗎?'; +$labels['forbiddenchars'] = '內容包含禁用字元'; +$labels['cannotbeempty'] = '內容不能為空白'; +$labels['ruleexist'] = '規則名稱重複'; +$labels['setactivateerror'] = '無法啟用選擇的篩選器集合。 伺服器發生錯誤'; +$labels['setdeactivateerror'] = '無法停用選擇的篩選器集合。 伺服器發生錯誤'; +$labels['setdeleteerror'] = '無法刪除選擇的篩選器集合。 伺服器發生錯誤'; +$labels['setactivated'] = '篩選器集合成功啟用'; +$labels['setdeactivated'] = '篩選器集合成功停用'; +$labels['setdeleted'] = '篩選器集合成功刪除'; +$labels['setdeleteconfirm'] = '你確定要刪除選擇的篩選器集合嗎?'; +$labels['setcreateerror'] = '無法建立篩選器集合。 伺服器發生錯誤'; +$labels['setcreated'] = '篩選器集合成功建立'; +$labels['nametoolong'] = '無法建立篩選器集合。 名稱太長'; -$messages = array(); -$messages['filterunknownerror'] = '未知的伺服器錯誤'; -$messages['filterconnerror'] = '無法與伺服器連線'; -$messages['filterdeleteerror'] = '無法刪除篩選器。發生伺服器錯誤'; -$messages['filterdeleted'] = '成功刪除篩選器'; -$messages['filterconfirmdelete'] = '您確定要刪除選擇的篩選器嗎?'; -$messages['filtersaved'] = '成功儲存篩選器。'; -$messages['filtersaveerror'] = '無法儲存篩選器。發生伺服器錯誤'; -$messages['ruledeleteconfirm'] = '您確定要刪除選的規則嗎?'; -$messages['actiondeleteconfirm'] = '您確定要刪除選擇的動作嗎?'; -$messages['forbiddenchars'] = '內容包含禁用字元'; -$messages['cannotbeempty'] = '內容不能為空白'; -$messages['setactivateerror'] = '無法啟用選擇的篩選器集合。 伺服器發生錯誤'; -$messages['setdeactivateerror'] = '無法停用選擇的篩選器集合。 伺服器發生錯誤'; -$messages['setdeleteerror'] = '無法刪除選擇的篩選器集合。 伺服器發生錯誤'; -$messages['setactivated'] = '篩選器集合成功啟用'; -$messages['setdeactivated'] = '篩選器集合成功停用'; -$messages['setdeleted'] = '篩選器集合成功刪除'; -$messages['setdeleteconfirm'] = '你確定要刪除選擇的篩選器集合嗎?'; -$messages['setcreateerror'] = '無法建立篩選器集合。 伺服器發生錯誤'; -$messages['setcreated'] = '篩選器集合成功建立'; -$messages['emptyname'] = '無法建立篩選器集合。 集合名稱空白'; -$messages['nametoolong'] = '無法建立篩選器集合。 名稱太長' - -?> diff -Nru roundcube-0.6+dfsg/plugins/managesieve/managesieve.js roundcube-0.7.1/plugins/managesieve/managesieve.js --- roundcube-0.6+dfsg/plugins/managesieve/managesieve.js 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/plugins/managesieve/managesieve.js 2012-01-17 07:50:40.000000000 +0000 @@ -1,56 +1,100 @@ -/* Sieve Filters (tab) */ +/* (Manage)Sieve Filters */ if (window.rcmail) { rcmail.addEventListener('init', function(evt) { + // add managesieve-create command to message_commands array, + // so it's state will be updated on message selection/unselection + if (rcmail.env.task == 'mail') { + if (rcmail.env.action != 'show') + rcmail.env.message_commands.push('managesieve-create'); + else + rcmail.enable_command('managesieve-create', true); + } + else { + var tab = $('').attr('id', 'settingstabpluginmanagesieve').addClass('tablink'), + button = $('').attr('href', rcmail.env.comm_path+'&_action=plugin.managesieve') + .attr('title', rcmail.gettext('managesieve.managefilters')) + .html(rcmail.gettext('managesieve.filters')) + .appendTo(tab); + + // add tab + rcmail.add_element(tab, 'tabs'); + } + + if (rcmail.env.task == 'mail' || rcmail.env.action.indexOf('plugin.managesieve') != -1) { + // Create layer for form tips + if (!rcmail.env.framed) { + rcmail.env.ms_tip_layer = $('
'); + rcmail.env.ms_tip_layer.appendTo(document.body); + } + } - var tab = $('').attr('id', 'settingstabpluginmanagesieve').addClass('tablink'); - var button = $('
').attr('href', rcmail.env.comm_path+'&_action=plugin.managesieve') - .attr('title', rcmail.gettext('managesieve.managefilters')) - .html(rcmail.gettext('managesieve.filters')) - .appendTo(tab); - - // add button and register commands - rcmail.add_element(tab, 'tabs'); - rcmail.register_command('plugin.managesieve-save', function() { rcmail.managesieve_save() }, true); - rcmail.register_command('plugin.managesieve-add', function() { rcmail.managesieve_add() }, true); - rcmail.register_command('plugin.managesieve-del', function() { rcmail.managesieve_del() }, true); - rcmail.register_command('plugin.managesieve-up', function() { rcmail.managesieve_up() }, true); - rcmail.register_command('plugin.managesieve-down', function() { rcmail.managesieve_down() }, true); - rcmail.register_command('plugin.managesieve-set', function() { rcmail.managesieve_set() }, true); - rcmail.register_command('plugin.managesieve-setadd', function() { rcmail.managesieve_setadd() }, true); - rcmail.register_command('plugin.managesieve-setdel', function() { rcmail.managesieve_setdel() }, true); - rcmail.register_command('plugin.managesieve-setact', function() { rcmail.managesieve_setact() }, true); - rcmail.register_command('plugin.managesieve-setget', function() { rcmail.managesieve_setget() }, true); + // register commands + rcmail.register_command('plugin.managesieve-save', function() { rcmail.managesieve_save() }); + rcmail.register_command('plugin.managesieve-act', function() { rcmail.managesieve_act() }); + rcmail.register_command('plugin.managesieve-add', function() { rcmail.managesieve_add() }); + rcmail.register_command('plugin.managesieve-del', function() { rcmail.managesieve_del() }); + rcmail.register_command('plugin.managesieve-move', function() { rcmail.managesieve_move() }); + rcmail.register_command('plugin.managesieve-setadd', function() { rcmail.managesieve_setadd() }); + rcmail.register_command('plugin.managesieve-setdel', function() { rcmail.managesieve_setdel() }); + rcmail.register_command('plugin.managesieve-setact', function() { rcmail.managesieve_setact() }); + rcmail.register_command('plugin.managesieve-setget', function() { rcmail.managesieve_setget() }); - if (rcmail.env.action == 'plugin.managesieve') { + if (rcmail.env.action == 'plugin.managesieve' || rcmail.env.action == 'plugin.managesieve-save') { if (rcmail.gui_objects.sieveform) { rcmail.enable_command('plugin.managesieve-save', true); + + // small resize for header element + $('select[name="_header[]"]', rcmail.gui_objects.sieveform).each(function() { + if (this.value == '...') this.style.width = '40px'; + }); + + // resize dialog window + if (rcmail.env.action == 'plugin.managesieve' && rcmail.env.task == 'mail') { + parent.rcmail.managesieve_dialog_resize(rcmail.gui_objects.sieveform); + } + + $('input[type="text"]:first', rcmail.gui_objects.sieveform).focus(); } else { - rcmail.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', - 'plugin.managesieve-down', false); rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror); } - // Create layer for form tips - if (!rcmail.env.framed) { - rcmail.env.ms_tip_layer = $('
'); - rcmail.env.ms_tip_layer.appendTo(document.body); - } + var i, p = rcmail, setcnt, set = rcmail.env.currentset; if (rcmail.gui_objects.filterslist) { - var p = rcmail; - rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, {multiselect:false, draggable:false, keyboard:false}); - rcmail.filters_list.addEventListener('select', function(o){ p.managesieve_select(o); }); + rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, + {multiselect:false, draggable:true, keyboard:false}); + rcmail.filters_list.addEventListener('select', function(e) { p.managesieve_select(e); }); + rcmail.filters_list.addEventListener('dragstart', function(e) { p.managesieve_dragstart(e); }); + rcmail.filters_list.addEventListener('dragend', function(e) { p.managesieve_dragend(e); }); + rcmail.filters_list.row_init = function (row) { + row.obj.onmouseover = function() { p.managesieve_focus_filter(row); }; + row.obj.onmouseout = function() { p.managesieve_unfocus_filter(row); }; + }; rcmail.filters_list.init(); rcmail.filters_list.focus(); + } + if (rcmail.gui_objects.filtersetslist) { + rcmail.filtersets_list = new rcube_list_widget(rcmail.gui_objects.filtersetslist, {multiselect:false, draggable:false, keyboard:false}); + rcmail.filtersets_list.addEventListener('select', function(e) { p.managesieve_setselect(e); }); + rcmail.filtersets_list.init(); + rcmail.filtersets_list.focus(); + + if (set != null) { + set = rcmail.managesieve_setid(set); + rcmail.filtersets_list.shift_start = set; + rcmail.filtersets_list.highlight_row(set, false); + } + + setcnt = rcmail.filtersets_list.rowcount; rcmail.enable_command('plugin.managesieve-set', true); - rcmail.enable_command('plugin.managesieve-setact', 'plugin.managesieve-setget', rcmail.gui_objects.filtersetslist.length); - rcmail.enable_command('plugin.managesieve-setdel', rcmail.gui_objects.filtersetslist.length > 1); + rcmail.enable_command('plugin.managesieve-setact', 'plugin.managesieve-setget', setcnt); + rcmail.enable_command('plugin.managesieve-setdel', setcnt > 1); - $('#'+rcmail.buttons['plugin.managesieve-setact'][0].id).attr('title', rcmail.gettext('managesieve.filterset' - + (rcmail.gui_objects.filtersetslist.value == rcmail.env.active_set ? 'deact' : 'act'))); + // Fix dragging filters over sets list + $('tr', rcmail.gui_objects.filtersetslist).each(function (i, e) { p.managesieve_fixdragend(e); }); } } if (rcmail.gui_objects.sieveform && rcmail.env.rule_disabled) @@ -59,7 +103,7 @@ }; /*********************************************************/ -/********* Managesieve filters methods *********/ +/********* Managesieve UI methods *********/ /*********************************************************/ rcube_webmail.prototype.managesieve_add = function() @@ -71,23 +115,41 @@ rcube_webmail.prototype.managesieve_del = function() { var id = this.filters_list.get_single_selection(); - if (confirm(this.get_label('managesieve.filterdeleteconfirm'))) - this.http_request('plugin.managesieve', - '_act=delete&_fid='+this.filters_list.rows[id].uid, true); + if (confirm(this.get_label('managesieve.filterdeleteconfirm'))) { + var lock = this.set_busy(true, 'loading'); + this.http_post('plugin.managesieve', + '_act=delete&_fid='+this.filters_list.rows[id].uid, lock); + } }; -rcube_webmail.prototype.managesieve_up = function() +rcube_webmail.prototype.managesieve_act = function() { - var id = this.filters_list.get_single_selection(); - this.http_request('plugin.managesieve', - '_act=up&_fid='+this.filters_list.rows[id].uid, true); + var id = this.filters_list.get_single_selection(), + lock = this.set_busy(true, 'loading'); + + this.http_post('plugin.managesieve', + '_act=act&_fid='+this.filters_list.rows[id].uid, lock); +}; + +// Filter selection +rcube_webmail.prototype.managesieve_select = function(list) +{ + var id = list.get_single_selection(); + if (id != null) + this.load_managesieveframe(list.rows[id].uid); }; -rcube_webmail.prototype.managesieve_down = function() +// Set selection +rcube_webmail.prototype.managesieve_setselect = function(list) { - var id = this.filters_list.get_single_selection(); - this.http_request('plugin.managesieve', - '_act=down&_fid='+this.filters_list.rows[id].uid, true); + this.show_contentframe(false); + this.filters_list.clear(true); + this.enable_command('plugin.managesieve-setdel', list.rowcount > 1); + this.enable_command( 'plugin.managesieve-setact', 'plugin.managesieve-setget', true); + + var id = list.get_single_selection(); + if (id != null) + this.managesieve_list(this.env.filtersets[id]); }; rcube_webmail.prototype.managesieve_rowid = function(id) @@ -99,194 +161,289 @@ return i; }; -rcube_webmail.prototype.managesieve_updatelist = function(action, name, id, disabled) +// Returns set's identifier +rcube_webmail.prototype.managesieve_setid = function(name) +{ + for (var i in this.env.filtersets) + if (this.env.filtersets[i] == name) + return i; +}; + +// Filters listing request +rcube_webmail.prototype.managesieve_list = function(script) +{ + var lock = this.set_busy(true, 'loading'); + + this.http_post('plugin.managesieve', '_act=list&_set='+urlencode(script), lock); +}; + +// Script download request +rcube_webmail.prototype.managesieve_setget = function() +{ + var id = this.filtersets_list.get_single_selection(), + script = this.env.filtersets[id]; + + location.href = this.env.comm_path+'&_action=plugin.managesieve&_act=setget&_set='+urlencode(script); +}; + +// Set activate/deactivate request +rcube_webmail.prototype.managesieve_setact = function() +{ + var id = this.filtersets_list.get_single_selection(), + lock = this.set_busy(true, 'loading'), + script = this.env.filtersets[id], + action = $('#rcmrow'+id).hasClass('disabled') ? 'setact' : 'deact'; + + this.http_post('plugin.managesieve', '_act='+action+'&_set='+urlencode(script), lock); +}; + +// Set delete request +rcube_webmail.prototype.managesieve_setdel = function() +{ + if (!confirm(this.get_label('managesieve.setdeleteconfirm'))) + return false; + + var id = this.filtersets_list.get_single_selection(), + lock = this.set_busy(true, 'loading'), + script = this.env.filtersets[id]; + + this.http_post('plugin.managesieve', '_act=setdel&_set='+urlencode(script), lock); +}; + +// Set add request +rcube_webmail.prototype.managesieve_setadd = function() +{ + this.filters_list.clear_selection(); + this.enable_command('plugin.managesieve-act', 'plugin.managesieve-del', false); + + if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { + var lock = this.set_busy(true, 'loading'); + target = window.frames[this.env.contentframe]; + target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_newset=1&_unlock='+lock; + } +}; + +rcube_webmail.prototype.managesieve_updatelist = function(action, o) { this.set_busy(true); switch (action) { - case 'delete': - this.filters_list.remove_row(this.managesieve_rowid(id)); - this.filters_list.clear_selection(); - this.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', 'plugin.managesieve-down', false); + + // Delete filter row + case 'del': + var i, list = this.filters_list, rows = list.rows; + + list.remove_row(this.managesieve_rowid(o.id)); + list.clear_selection(); this.show_contentframe(false); + this.enable_command('plugin.managesieve-del', 'plugin.managesieve-act', false); // re-numbering filters - var i, rows = this.filters_list.rows; for (i=0; i id) + if (rows[i] != null && rows[i].uid > o.id) rows[i].uid = rows[i].uid-1; } + break; - case 'down': - var from, fromstatus, status, rows = this.filters_list.rows; + // Update filter row + case 'update': + var i, row = $('#rcmrow'+o.id); + + if (o.name) + $('td', row).html(o.name); + if (o.disabled) + row.addClass('disabled'); + else + row.removeClass('disabled'); + + $('#disabled', $('iframe').contents()).prop('checked', o.disabled); - // we need only to replace filter names... - for (var i=0; i'); - // we need only to replace filter names... - for (var i=0; i'); + + $('td', row).html(o.name); + row.attr('id', 'rcmrow'+id); + + this.env.filtersets[id] = o.name; + list.insert_row(row.get(0)); + + // move row into its position on the list + if (o.index != list.rowcount-1) { + row.detach(); + var elem = $('tr:visible', list.list).get(o.index); + row.insertBefore(elem); } - else // refresh whole page - parent.rcmail.goto_url('plugin.managesieve'); - break; - } - this.set_busy(false); -}; + list.select(id); -rcube_webmail.prototype.managesieve_select = function(list) -{ - var id = list.get_single_selection(); - if (id != null) - this.load_managesieveframe(list.rows[id].uid); -}; + // Fix dragging filters over sets list + this.managesieve_fixdragend(row); -rcube_webmail.prototype.managesieve_save = function() -{ - if (parent.rcmail && parent.rcmail.filters_list && this.gui_objects.sieveform.name != 'filtersetform') { - var id = parent.rcmail.filters_list.get_single_selection(); - if (id != null) - this.gui_objects.sieveform.elements['_fid'].value = parent.rcmail.filters_list.rows[id].uid; + break; } - this.gui_objects.sieveform.submit(); + + this.set_busy(false); }; // load filter frame rcube_webmail.prototype.load_managesieveframe = function(id) { - if (typeof(id) != 'undefined' && id != null) { - this.enable_command('plugin.managesieve-del', true); - this.filters_listbuttons(); - } - else - this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false); + var has_id = typeof(id) != 'undefined' && id != null; + this.enable_command('plugin.managesieve-act', 'plugin.managesieve-del', has_id); if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { target = window.frames[this.env.contentframe]; var msgid = this.set_busy(true, 'loading'); - target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_fid='+id+'&_unlock='+msgid; + target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1' + +(id ? '&_fid='+id : '')+'&_unlock='+msgid; } }; -// enable/disable Up/Down buttons -rcube_webmail.prototype.filters_listbuttons = function() +// load filter frame +rcube_webmail.prototype.managesieve_dragstart = function(list) { - var id = this.filters_list.get_single_selection(), - rows = this.filters_list.rows; + var id = this.filters_list.get_single_selection(); - for (var i=0; i0 || buttons.length>1) { $(button).removeClass('disabled'); - button.removeAttribute('disabled'); } else { $(button).addClass('disabled'); - button.setAttribute('disabled', true); } } }; -// Set change -rcube_webmail.prototype.managesieve_set = function() -{ - var script = $(this.gui_objects.filtersetslist).val(); - location.href = this.env.comm_path+'&_action=plugin.managesieve&_set='+script; -}; - -// Script download -rcube_webmail.prototype.managesieve_setget = function() -{ - var script = $(this.gui_objects.filtersetslist).val(); - location.href = this.env.comm_path+'&_action=plugin.managesieve&_act=setget&_set='+script; -}; - -// Set activate -rcube_webmail.prototype.managesieve_setact = function() -{ - if (!this.gui_objects.filtersetslist) - return false; - - var script = this.gui_objects.filtersetslist.value, - action = (script == rcmail.env.active_set ? 'deact' : 'setact'); - - this.http_post('plugin.managesieve', '_act='+action+'&_set='+script); -}; - -// Set activate flag in sets list after set activation -rcube_webmail.prototype.managesieve_reset = function() -{ - if (!this.gui_objects.filtersetslist) - return false; - - var list = this.gui_objects.filtersetslist, - opts = list.getElementsByTagName('option'), - label = ' (' + this.get_label('managesieve.active') + ')', - regx = new RegExp(RegExp.escape(label)+'$'); - - for (var x=0; x iframe' : '#filter-box'), parent.document).offset(); + top += offset.top; + left += offset.left; + } + + tip.html(e.data.str) + top -= tip.height(); + + tip.css({left: left, top: top}).show(); + }) + .bind('mouseleave', function(e) { tip.hide(); }); + } +}; + +/*********************************************************/ +/********* Mail UI methods *********/ +/*********************************************************/ + +rcube_webmail.prototype.managesieve_create = function() +{ + if (!rcmail.env.sieve_headers || !rcmail.env.sieve_headers.length) + return; + + var i, html, buttons = {}, dialog = $("#sievefilterform"); + + // create dialog window + if (!dialog.length) { + dialog = $('
'); + $('body').append(dialog); + } + + // build dialog window content + html = '
'+this.gettext('managesieve.usedata')+'
    '; + for (i in rcmail.env.sieve_headers) + html += '
  • ' + +' '+rcmail.env.sieve_headers[i][1]+'
  • '; + html += '
'; + + dialog.html(html); + + // [Next Step] button action + buttons[this.gettext('managesieve.nextstep')] = function () { + // check if there's at least one checkbox checked + var hdrs = $('input[name="headers[]"]:checked', dialog); + if (!hdrs.length) { + alert(rcmail.gettext('managesieve.nodata')); + return; + } + + // build frame URL + var url = rcmail.get_task_url('mail'); + url = rcmail.add_url(url, '_action', 'plugin.managesieve'); + url = rcmail.add_url(url, '_framed', 1); + + hdrs.map(function() { + var val = rcmail.env.sieve_headers[this.value]; + url = rcmail.add_url(url, 'r['+this.value+']', val[0]+':'+val[1]); + }); + + // load form in the iframe + var frame = $(''): -(g=document.createElement("iframe"),g.name=f,g.style.border="none",g.style.width=0,g.style.height=0,g.style.visibility="hidden",document.body.appendChild(g));$(f).bind("load",{ts:e},d);$(a).attr({target:f,action:this.url(b,{_id:this.env.compose_id||"",_uploadid:e}),method:"POST"}).attr(a.encoding?"encoding":"enctype","multipart/form-data").submit();return f};this.start_keepalive=function(){this._int&&clearInterval(this._int);if(this.env.keep_alive&&!this.env.framed&&this.task=="mail"&&this.gui_objects.mailboxlist)this._int= -setInterval(function(){l.check_for_recent(!1)},this.env.keep_alive*1E3);else if(this.env.keep_alive&&!this.env.framed&&this.task!="login"&&this.env.action!="print")this._int=setInterval(function(){l.keep_alive()},this.env.keep_alive*1E3)};this.keep_alive=function(){this.busy||this.http_request("keep-alive")};this.check_for_recent=function(a){if(!this.busy){var b,d="_mbox="+urlencode(this.env.mailbox);a&&(b=this.set_busy(!0,"checkingmail"),d+="&_refresh=1",this.start_keepalive());this.gui_objects.messagelist&& -(d+="&_list=1");this.gui_objects.quotadisplay&&(d+="&_quota=1");this.env.search_request&&(d+="&_search="+this.env.search_request);this.http_request("check-recent",d,b)}};this.get_single_uid=function(){return this.env.uid?this.env.uid:this.message_list?this.message_list.get_single_selection():null};this.get_single_cid=function(){return this.env.cid?this.env.cid:this.contact_list?this.contact_list.get_single_selection():null};this.get_caret_pos=function(a){if(a.selectionEnd!==void 0)return a.selectionEnd; -else if(document.selection&&document.selection.createRange){var b=document.selection.createRange();if(b.parentElement()!=a)return 0;var d=b.duplicate();a.tagName=="TEXTAREA"?d.moveToElementText(a):d.expand("textedit");d.setEndPoint("EndToStart",b);b=d.text.length;return b<=a.value.length?b:-1}else return a.value.length};this.set_caret_pos=function(a,b){if(a.setSelectionRange)a.setSelectionRange(b,b);else if(a.createTextRange){var d=a.createTextRange();d.collapse(!0);d.moveEnd("character",b);d.moveStart("character", -b);d.select()}};this.lock_form=function(a,b){if(a&&a.elements){var d,e,f;if(b)this.disabled_form_elements=[];for(d=0,e=a.elements.length;da.parent().width())l.title=a.html()}};rcube_webmail.prototype.addEventListener=rcube_event_engine.prototype.addEventListener; -rcube_webmail.prototype.removeEventListener=rcube_event_engine.prototype.removeEventListener;rcube_webmail.prototype.triggerEvent=rcube_event_engine.prototype.triggerEvent; +function rcube_webmail(){this.env={recipients_separator:",",recipients_delimiter:", "};this.labels={};this.buttons={};this.buttons_sel={};this.gui_objects={};this.gui_containers={};this.commands={};this.command_handlers={};this.onloads=[];this.messages={};this.ref="rcmail";var i=this;this.dblclick_time=500;this.message_time=4E3;this.identifier_expr=RegExp("[^0-9a-z-_]","gi");this.env.keep_alive=60;this.env.request_timeout=180;this.env.draft_autosave=0;this.env.comm_path="./";this.env.blankpage="program/blank.gif"; +$.ajaxSetup({cache:!1,error:function(a,b,d){i.http_error(a,b,d)},beforeSend:function(a){a.setRequestHeader("X-Roundcube-Request",i.env.request_token)}});this.set_env=function(a,b){if(null!=a&&"object"===typeof a&&!b)for(var d in a)this.env[d]=a[d];else this.env[a]=b};this.add_label=function(a,b){"string"==typeof a?this.labels[a]=b:"object"==typeof a&&$.extend(this.labels,a)};this.register_button=function(a,b,d,e,f,h){this.buttons[a]||(this.buttons[a]=[]);b={id:b,type:d};if(e)b.act=e;if(f)b.sel=f; +if(h)b.over=h;this.buttons[a].push(b);this.loaded&&s(a,b)};this.gui_object=function(a,b){this.gui_objects[a]=this.loaded?rcube_find_object(b):b};this.gui_container=function(a,b){this.gui_containers[a]=b};this.add_element=function(a,b){this.gui_containers[b]&&this.gui_containers[b].jquery&&this.gui_containers[b].append(a)};this.register_command=function(a,b,d){this.command_handlers[a]=b;d&&this.enable_command(a,!0)};this.add_onload=function(a){this.onloads.push(a)};this.init=function(){var a,b=this; +this.task=this.env.task;if(!bw.dom||!bw.xmlhttp_test())this.goto_url("error","_code=0x199");else{for(a in this.gui_containers)this.gui_containers[a]=$("#"+this.gui_containers[a]);for(a in this.gui_objects)this.gui_objects[a]=rcube_find_object(this.gui_objects[a]);if(this.env.x_frame_options)try{if("deny"==this.env.x_frame_options&&top.location.href!=self.location.href)top.location.href=self.location.href;else if(top.location.hostname!=self.location.hostname)throw 1;}catch(d){$("form").each(function(){i.lock_form(this, +!0)});this.display_message("Blocked: possible clickjacking attack!","error");return}this.init_buttons();if(this.is_framed())parent.rcmail.set_busy(!1,null,parent.rcmail.env.frame_lock),parent.rcmail.env.frame_lock=null;this.enable_command("logout","mail","addressbook","settings","save-pref","compose","undo",!0);this.env.permaurl&&this.enable_command("permaurl",!0);switch(this.task){case "mail":this.enable_command("list","checkmail","add-contact","search","reset-search","collapse-folder",!0);if(this.gui_objects.messagelist)this.message_list= +new rcube_list_widget(this.gui_objects.messagelist,{multiselect:!0,multiexpand:!0,draggable:!0,keyboard:!0,column_movable:this.env.col_movable,dblclick_time:this.dblclick_time}),this.message_list.row_init=function(a){b.init_message_row(a)},this.message_list.addEventListener("dblclick",function(a){b.msglist_dbl_click(a)}),this.message_list.addEventListener("click",function(a){b.msglist_click(a)}),this.message_list.addEventListener("keypress",function(a){b.msglist_keypress(a)}),this.message_list.addEventListener("select", +function(a){b.msglist_select(a)}),this.message_list.addEventListener("dragstart",function(a){b.drag_start(a)}),this.message_list.addEventListener("dragmove",function(a){b.drag_move(a)}),this.message_list.addEventListener("dragend",function(a){b.drag_end(a)}),this.message_list.addEventListener("expandcollapse",function(a){b.msglist_expand(a)}),this.message_list.addEventListener("column_replace",function(a){b.msglist_set_coltypes(a)}),document.onmouseup=function(a){return b.doc_mouse_up(a)},this.gui_objects.messagelist.parentNode.onmousedown= +function(a){return b.click_on_list(a)},this.message_list.init(),this.enable_command("toggle_status","toggle_flag","menu-open","menu-save",!0),this.command("list");if(this.gui_objects.qsearchbox){if(null!=this.env.search_text)this.gui_objects.qsearchbox.value=this.env.search_text;$(this.gui_objects.qsearchbox).focusin(function(){rcmail.message_list.blur()})}!this.env.flag_for_deletion&&this.env.trash_mailbox&&this.env.mailbox!=this.env.trash_mailbox&&this.set_alttext("delete","movemessagetotrash"); +this.env.message_commands="show,reply,reply-all,reply-list,forward,moveto,copy,delete,open,mark,edit,viewsource,download,print,load-attachment,load-headers,forward-attachment".split(",");if("show"==this.env.action||"preview"==this.env.action){this.enable_command(this.env.message_commands,this.env.uid);this.enable_command("reply-list",this.env.list_post);"show"==this.env.action&&this.http_request("pagenav","_uid="+this.env.uid+"&_mbox="+urlencode(this.env.mailbox)+(this.env.search_request?"&_search="+ +this.env.search_request:""),this.display_message("","loading"));if(this.env.blockedobjects){if(this.gui_objects.remoteobjectsmsg)this.gui_objects.remoteobjectsmsg.style.display="block";this.enable_command("load-images","always-load",!0)}"preview"==this.env.action&&this.is_framed()&&(this.enable_command("compose","add-contact",!1),parent.rcmail.show_contentframe(!0))}else if("compose"==this.env.action){this.env.compose_commands=["send-attachment","remove-attachment","send","cancel","toggle-editor"]; +this.env.drafts_mailbox&&this.env.compose_commands.push("savedraft");this.enable_command(this.env.compose_commands,"identities",!0);if(this.env.spellcheck)this.env.spellcheck.spelling_state_observer=function(a){i.set_spellcheck_state(a)},this.env.compose_commands.push("spellcheck"),this.set_spellcheck_state("ready"),"1"==$("input[name='_is_html']").val()&&this.display_spellcheck_controls(!1);document.onmouseup=function(a){return b.doc_mouse_up(a)};this.init_messageform()}else"print"==this.env.action&& +this.env.uid&&(bw.safari?window.setTimeout("window.print()",10):window.print());if(this.gui_objects.mailboxlist)this.env.unread_counts={},this.gui_objects.folderlist=this.gui_objects.mailboxlist,this.http_request("getunread","");this.env.mdn_request&&this.env.uid&&(a="_uid="+this.env.uid+"&_mbox="+urlencode(this.env.mailbox),confirm(this.get_label("mdnrequest"))?this.http_post("sendmdn",a):this.http_post("mark",a+"&_flag=mdnsent"));break;case "addressbook":if(this.gui_objects.folderlist)this.env.contactfolders= +$.extend($.extend({},this.env.address_sources),this.env.contactgroups);this.enable_command("add","import",this.env.writable_source);this.enable_command("list","listgroup","listsearch","advanced-search",!0);if(this.gui_objects.contactslist)this.contact_list=new rcube_list_widget(this.gui_objects.contactslist,{multiselect:!0,draggable:this.gui_objects.folderlist?!0:!1,keyboard:!0}),this.contact_list.row_init=function(a){b.triggerEvent("insertrow",{cid:a.uid,row:a})},this.contact_list.addEventListener("keypress", +function(a){b.contactlist_keypress(a)}),this.contact_list.addEventListener("select",function(a){b.contactlist_select(a)}),this.contact_list.addEventListener("dragstart",function(a){b.drag_start(a)}),this.contact_list.addEventListener("dragmove",function(a){b.drag_move(a)}),this.contact_list.addEventListener("dragend",function(a){b.drag_end(a)}),this.contact_list.init(),this.env.cid&&this.contact_list.highlight_row(this.env.cid),this.gui_objects.contactslist.parentNode.onmousedown=function(a){return b.click_on_list(a)}, +document.onmouseup=function(a){return b.doc_mouse_up(a)},this.gui_objects.qsearchbox&&$(this.gui_objects.qsearchbox).focusin(function(){rcmail.contact_list.blur()}),this.update_group_commands(),this.command("list");this.set_page_buttons();this.env.cid&&(this.enable_command("show","edit",!0),this.gui_objects.editform&&$("input.groupmember").change(function(){i.group_member_change(this.checked?"add":"del",i.env.cid,i.env.source,this.value)}));this.gui_objects.editform&&(this.enable_command("save",!0), +("add"==this.env.action||"edit"==this.env.action)&&this.init_contact_form());this.gui_objects.qsearchbox&&this.enable_command("search","reset-search","moveto",!0);break;case "settings":this.enable_command("preferences","identities","save","folders",!0);if("identities"==this.env.action)this.enable_command("add",2>this.env.identities_level);else if("edit-identity"==this.env.action||"add-identity"==this.env.action)this.enable_command("add",2>this.env.identities_level),this.enable_command("save","delete", +"edit","toggle-editor",!0);else if("folders"==this.env.action)this.enable_command("subscribe","unsubscribe","create-folder","rename-folder",!0);else if("edit-folder"==this.env.action&&this.gui_objects.editform)this.enable_command("save","folder-size",!0),parent.rcmail.env.messagecount=this.env.messagecount,parent.rcmail.enable_command("purge",this.env.messagecount),$("input[type='text']").first().select();this.gui_objects.identitieslist?(this.identity_list=new rcube_list_widget(this.gui_objects.identitieslist, +{multiselect:!1,draggable:!1,keyboard:!1}),this.identity_list.addEventListener("select",function(a){b.identity_select(a)}),this.identity_list.init(),this.identity_list.focus(),this.env.iid&&this.identity_list.highlight_row(this.env.iid)):this.gui_objects.sectionslist?(this.sections_list=new rcube_list_widget(this.gui_objects.sectionslist,{multiselect:!1,draggable:!1,keyboard:!1}),this.sections_list.addEventListener("select",function(a){b.section_select(a)}),this.sections_list.init(),this.sections_list.focus()): +this.gui_objects.subscriptionlist&&this.init_subscription_list();break;case "login":a=$("#rcmloginuser");a.bind("keyup",function(a){return rcmail.login_user_keyup(a)});""==a.val()?a.focus():$("#rcmloginpwd").focus();var e=new Date;a=e.getTimezoneOffset()/-60;e=e.getStdTimezoneOffset()/-60;$("#rcmlogintz").val(e);$("#rcmlogindst").val(a>e?1:0);$("form").submit(function(){$("input[type=submit]",this).prop("disabled",!0);rcmail.display_message("","loading")});this.enable_command("login",!0)}bw.ie&&$("input[type=file]").keydown(function(a){"13"== +a.keyCode&&a.preventDefault()});this.loaded=!0;this.pending_message&&this.display_message(this.pending_message[0],this.pending_message[1],this.pending_message[2]);if(this.gui_objects.folderlist)this.gui_containers.foldertray=$(this.gui_objects.folderlist);this.triggerEvent("init",{task:this.task,action:this.env.action});for(var f in this.onloads)if("string"===typeof this.onloads[f])eval(this.onloads[f]);else if("function"===typeof this.onloads[f])this.onloads[f]();this.start_keepalive()}};this.log= +function(a){window.console&&console.log&&console.log(a)};this.command=function(a,b,d){var e,f,h,g;d&&d.blur&&d.blur();if(this.busy)return!1;if(!this.commands[a])return this.is_framed()&&parent.rcmail.command(a,b),!1;if("mail"==this.task&&"compose"==this.env.action&&0>$.inArray(a,this.env.compose_commands)&&this.cmp_hash!=this.compose_field_hash()&&!confirm(this.get_label("notsentwarning")))return!1;if("function"===typeof this.command_handlers[a])return e=this.command_handlers[a](b,d),void 0!==e?e: +d?!1:!0;if("string"===typeof this.command_handlers[a])return e=window[this.command_handlers[a]](b,d),void 0!==e?e:d?!1:!0;this.triggerEvent("actionbefore",{props:b,action:a});e=this.triggerEvent("before"+a,b);if(void 0!==e){if(!1===e)return!1;b=e}e=void 0;switch(a){case "login":this.gui_objects.loginform&&this.gui_objects.loginform.submit();break;case "mail":case "addressbook":case "settings":case "logout":this.switch_task(a);break;case "permaurl":if(d&&d.href&&d.target)return!0;if(this.env.permaurl)parent.location.href= +this.env.permaurl;break;case "menu-open":case "menu-save":return this.triggerEvent(a,{props:b}),!1;case "open":if(f=this.get_single_uid())return d.href="?_task="+this.env.task+"&_action=show&_mbox="+urlencode(this.env.mailbox)+"&_uid="+f,!0;break;case "list":this.reset_qsearch();"mail"==this.task?(this.list_mailbox(b),this.env.trash_mailbox&&!this.env.flag_for_deletion&&this.set_alttext("delete",this.env.mailbox!=this.env.trash_mailbox?"movemessagetotrash":"deletemessage")):"addressbook"==this.task&& +this.list_contacts(b);break;case "load-headers":this.load_headers(d);break;case "sort":f=b;g=this.env.sort_col==f?"ASC"==this.env.sort_order?"DESC":"ASC":"ASC";this.set_list_sorting(f,g);this.list_mailbox("","",f+"_"+g);break;case "nextpage":this.list_page("next");break;case "lastpage":this.list_page("last");break;case "previouspage":this.list_page("prev");break;case "firstpage":this.list_page("first");break;case "expunge":this.env.messagecount&&this.expunge_mailbox(this.env.mailbox);break;case "purge":case "empty-mailbox":this.env.messagecount&& +this.purge_mailbox(this.env.mailbox);break;case "show":if("mail"==this.task){if((f=this.get_single_uid())&&(!this.env.uid||f!=this.env.uid))this.env.mailbox==this.env.drafts_mailbox?this.goto_url("compose","_draft_uid="+f+"&_mbox="+urlencode(this.env.mailbox),!0):this.show_message(f)}else"addressbook"==this.task&&(h=b?b:this.get_single_cid())&&!("show"==this.env.action&&h==this.env.cid)&&this.load_contact(h,"show");break;case "add":"addressbook"==this.task?this.load_contact(0,"add"):"settings"==this.task&& +(this.identity_list.clear_selection(),this.load_identity(0,"add-identity"));break;case "edit":if("addressbook"==this.task&&(h=this.get_single_cid()))this.load_contact(h,"edit");else if("settings"==this.task&&b)this.load_identity(b,"edit-identity");else if("mail"==this.task&&(h=this.get_single_uid()))g=this.env.mailbox==this.env.drafts_mailbox?"_draft_uid=":"_uid=",this.goto_url("compose",g+h+"&_mbox="+urlencode(this.env.mailbox),!0);break;case "save":var k;if(g=this.gui_objects.editform){if("search"!= +this.env.action)if((k=$("input[name='_pagesize']",g))&&k.length&&isNaN(parseInt(k.val()))){alert(this.get_label("nopagesizewarning"));k.focus();break}else{if("reload"==b)g.action+="?_reload=1";else if("settings"==this.task&&0==this.env.identities_level%2&&(k=$("input[name='_email']",g))&&k.length&&!rcube_check_email(k.val())){alert(this.get_label("noemailwarning"));k.focus();break}$("input.placeholder").each(function(){if(this.value==this._placeholder)this.value=""})}if(parent.rcmail&&parent.rcmail.env.source)g.action= +this.add_url(g.action,"_orig_source",parent.rcmail.env.source);g.submit()}break;case "delete":"mail"==this.task?this.delete_messages():"addressbook"==this.task?this.delete_contacts():"settings"==this.task&&this.delete_identity();break;case "move":case "moveto":"mail"==this.task?this.move_messages(b):"addressbook"==this.task&&this.drag_active&&this.copy_contact(null,b);break;case "copy":"mail"==this.task&&this.copy_messages(b);break;case "mark":b&&this.mark_message(b);break;case "toggle_status":if(b&& +!b._row)break;g="read";if(b._row.uid)f=b._row.uid,this.message_list.rows[f].deleted?g="undelete":this.message_list.rows[f].unread||(g="unread");this.mark_message(g,f);break;case "toggle_flag":if(b&&!b._row)break;g="flagged";if(b._row.uid)f=b._row.uid,this.message_list.rows[f].flagged&&(g="unflagged");this.mark_message(g,f);break;case "always-load":if(this.env.uid&&this.env.sender){this.add_contact(urlencode(this.env.sender));window.setTimeout(function(){i.command("load-images")},300);break}case "load-images":this.env.uid&& +this.show_message(this.env.uid,!0,"preview"==this.env.action);break;case "load-attachment":g="_mbox="+urlencode(this.env.mailbox)+"&_uid="+this.env.uid+"&_part="+b.part;if(this.env.uid&&b.mimetype&&this.env.mimetypes&&0<=$.inArray(b.mimetype,this.env.mimetypes)&&("text/html"==b.mimetype&&(g+="&_safe=1"),this.attachment_win=window.open(this.env.comm_path+"&_action=get&"+g+"&_frame=1","rcubemailattachment"))){window.setTimeout(function(){i.attachment_win.focus()},10);break}this.goto_url("get",g+"&_download=1", +!1);break;case "select-all":this.select_all_mode=b?!1:!0;this.dummy_select=!0;"invert"==b?this.message_list.invert_selection():this.message_list.select_all("page"==b?"":b);this.dummy_select=null;break;case "select-none":this.select_all_mode=!1;this.message_list.clear_selection();break;case "expand-all":this.env.autoexpand_threads=1;this.message_list.expand_all();break;case "expand-unread":this.env.autoexpand_threads=2;this.message_list.collapse_all();this.expand_unread();break;case "collapse-all":this.env.autoexpand_threads= +0;this.message_list.collapse_all();break;case "nextmessage":this.env.next_uid&&this.show_message(this.env.next_uid,!1,"preview"==this.env.action);break;case "lastmessage":this.env.last_uid&&this.show_message(this.env.last_uid);break;case "previousmessage":this.env.prev_uid&&this.show_message(this.env.prev_uid,!1,"preview"==this.env.action);break;case "firstmessage":this.env.first_uid&&this.show_message(this.env.first_uid);break;case "checkmail":this.check_for_recent(!0);break;case "compose":g=this.url("mail/compose"); +if("mail"==this.task)g+="&_mbox="+urlencode(this.env.mailbox),b&&(g+="&_to="+urlencode(b));else if("addressbook"==this.task){if(b&&0=f.x2||a.y=f.y2){if(this.env.last_folder_target)$(this.get_folder_li(this.env.last_folder_target)).removeClass("droptarget"), +this.env.folder_coords[this.env.last_folder_target].on=0,this.env.last_folder_target=null}else for(b in this.env.folder_coords)if(f=this.env.folder_coords[b],a.x>=f.x1&&a.x=f.y1&&a.y  
',g[i.parent_uid]&&!1===g[i.parent_uid].expanded||(0==this.env.autoexpand_threads||2==this.env.autoexpand_threads)&& +(!g[i.parent_uid]||!g[i.parent_uid].expanded)?(m.style.display="none",i.expanded=!1):i.expanded=!0;else if(i.has_children){if(void 0===i.expanded&&(1==this.env.autoexpand_threads||2==this.env.autoexpand_threads&&i.unread_children))i.expanded=!0;j='
  
'}k+=' ';if(!bw.ie&&b.subject)g=d.mbox==this.env.drafts_mailbox?"_draft_uid":"_uid",b.subject='
'+b.subject+"";for(h in this.env.coltypes){f=this.env.coltypes[h];g=document.createElement("td");g.className=(""+f).toLowerCase();if("flag"==f)f=d.flagged?"flagged":"unflagged",f=' ';else if("attachment"==f)f=/application\/|multipart\/m/.test(d.ctype)? +' ':/multipart\/report/.test(d.ctype)?' ':" ";else if("status"==f)f=d.deleted?"deleted":d.seen?0 ';else if("threads"==f)f=j;else if("subject"==f){if(bw.ie)g.onmouseover=function(){rcube_webmail.long_subject_title_ie(this,i.depth+1)};f=k+b[f]}else f="priority"==f?0d.prio?' ': +" ":b[f];g.innerHTML=f;m.appendChild(g)}l.insert_row(m,e);e&&this.env.pagesize&&l.rowcount>this.env.pagesize&&(a=l.get_last_row(),l.remove_row(a),l.clear_selection(a))};this.set_list_sorting=function(a,b){$("#rcm"+this.env.sort_col).removeClass("sorted"+this.env.sort_order.toUpperCase());a&&$("#rcm"+a).addClass("sorted"+b);this.env.sort_col=a;this.env.sort_order=b};this.set_list_options=function(a,b,d,e){var f,h="";if(void 0===b)b=this.env.sort_col;if(!d)d=this.env.sort_order;if(this.env.sort_col!= +b||this.env.sort_order!=d)f=1,this.set_list_sorting(b,d);this.env.threading!=e&&(f=1,h+="&_threads="+e);if(a&&a.length){for(var g,k,j=[],i=this.env.coltypes,e=0;ed.location.href.indexOf(this.env.blankpage))d.location.href=this.env.blankpage}else if(!bw.safari&&!bw.konq)b[a?"show":"hide"]();!a&&this.busy&&this.set_busy(!1,null,this.env.frame_lock)};this.lock_frame=function(){if(!this.env.frame_lock)(this.is_framed()?parent.rcmail:this).env.frame_lock=this.set_busy(!0,"loading")};this.list_page=function(a){"next"==a?a=this.env.current_page+1:"last"==a?a=this.env.pagecount:"prev"==a&&1d.depth?(f=e-d.depth,h[b][f]&2||(h[b][f]=h[b][f]?h[b][f]+2:2)):e==d.depth&&(h[b][0]&2||(h[b][0]+=2)),d.depth>e);b--);h.push(Array(d.depth));h[h.length-1][0]=1;g.push(d.uid)}else{if(h.length){for(b in h)this.set_tree_icons(g[b],h[b]);h=[];g=[]}if(a&&k!=j[a].obj)break}k=k.nextSibling}if(h.length)for(b in h)this.set_tree_icons(g[b],h[b])};this.set_tree_icons= +function(a,b){var d,e=[],f="",h=b.length;for(d=0;d'):f+('
');f&&$("#rcmtab"+a).html(f)};this.update_thread_root=function(a,b){if(this.env.threading){var d=this.message_list.find_root(a); +if(a!=d){var e=this.message_list.rows[d];if("read"==b&&e.unread_children)e.unread_children--;else if("unread"==b&&e.has_children)e.unread_children=e.unread_children?e.unread_children+1:1;else return;this.set_message_icon(d);this.set_unread_children(d)}}};this.update_thread=function(a){if(!this.env.threading)return 0;var b,d=0,e=this.message_list.rows,f=e[a],h=e[a].depth,g=[];f.depth?f.unread&&(a=this.message_list.find_root(a),e[a].unread_children--,this.set_unread_children(a)):d--;a=f.parent_uid; +for(f=f.obj.nextSibling;f;){if(1==f.nodeType&&(b=e[f.uid])){if(!b.depth||b.depth<=h)break;b.depth--;$("#rcmtab"+b.uid).width(15*b.depth).html("");if(b.depth){if(b.depth==h)b.parent_uid=a;b.unread&&g.length&&g[g.length-1].unread_children++}else{d++;b.parent_uid=0;if(b.has_children)$("#rcmrow"+b.uid+" .leaf:first").attr("id","rcmexpando"+b.uid).attr("class","none"!=b.obj.style.display?"expanded":"collapsed").bind("mousedown",{uid:b.uid,p:this},function(a){return a.data.p.expand_message_row(a,a.data.uid)}), +b.unread_children=0,g.push(b);"none"==b.obj.style.display&&$(b.obj).show()}}f=f.nextSibling}for(b=0;b$.inArray(k,j)&&j.push(k)),this.message_list.remove_row(g,this.env.display_next&&h==i.length-1);this.env.display_next||this.message_list.clear_selection();for(h=0,len= +j.length;hf?d+="&_count="+-1*f:0e||0').html('
'+this.get_label("nosubjectwarning")+"
").appendTo(document.body);var l=$("").attr("type", +"text").attr("size",30).appendTo(b).val(this.get_label("nosubject")),d={};d[this.get_label("cancel")]=function(){g.focus();$(this).dialog("close")};d[this.get_label("sendmessage")]=function(){g.val(l.val());$(this).dialog("close");i.command(a,{nocheck:!0})};b.dialog({modal:!0,resizable:!1,buttons:d,close:function(){$(this).remove()}});l.select();return!1}this.stop_spellchecking();window.tinyMCE&&(b=tinyMCE.get(this.env.composebody));if(!b&&""==k.val()&&!confirm(this.get_label("nobodywarning")))return k.focus(), +!1;if(b){if(!b.getContent()&&!confirm(this.get_label("nobodywarning")))return b.focus(),!1;tinyMCE.triggerSave()}return!0};this.toggle_editor=function(a){if("html"==a.mode)this.display_spellcheck_controls(!1),this.plain2html($("#"+a.id).val(),a.id),tinyMCE.execCommand("mceAddControl",!1,a.id);else{var b=tinyMCE.get(a.id);b.plugins.spellchecker&&b.plugins.spellchecker.active&&b.execCommand("mceSpellCheck",!1);if(b=b.getContent()){if(!confirm(this.get_label("editorwarning")))return!1;this.html2plain(b, +a.id)}tinyMCE.execCommand("mceRemoveControl",!1,a.id);this.display_spellcheck_controls(!0)}return!0};this.stop_spellchecking=function(){var a;if(window.tinyMCE&&(a=tinyMCE.get(this.env.composebody)))a.plugins.spellchecker&&a.plugins.spellchecker.active&&a.execCommand("mceSpellCheck");else if((a=this.env.spellcheck)&&!this.spellcheck_ready)$(a.spell_span).trigger("click"),this.set_spellcheck_state("ready")};this.display_spellcheck_controls=function(a){this.env.spellcheck&&(a||this.stop_spellchecking(), +$(this.env.spellcheck.spell_container)[a?"show":"hide"]())};this.set_spellcheck_state=function(a){this.spellcheck_ready="ready"==a||"no_error_found"==a;this.enable_command("spellcheck",this.spellcheck_ready)};this.spellcheck_lang=function(){var a;if(window.tinyMCE&&(a=tinyMCE.get(this.env.composebody))&&a.plugins.spellchecker)return a.plugins.spellchecker.selectedLang;if(this.env.spellcheck)return GOOGIE_CUR_LANG};this.spellcheck_resume=function(a,b){if(a){var d=tinyMCE.get(this.env.composebody), +e=d.plugins.spellchecker;e.active=1;e._markWords(b);d.nodeChanged()}else{var e=this.env.spellcheck;e.prepare(!1,!0);e.processData(b)}};this.set_draft_id=function(a){$("input[name='_draft_saveid']").val(a)};this.auto_save_start=function(){if(this.env.draft_autosave)this.save_timer=self.setTimeout(function(){i.command("savedraft")},1E3*this.env.draft_autosave);this.busy=!1};this.compose_field_hash=function(a){var b,d="",e=$("[name='_to']").val(),f=$("[name='_cc']").val(),h=$("[name='_bcc']").val(), +g=$("[name='_subject']").val();e&&(d+=e+":");f&&(d+=f+":");h&&(d+=h+":");g&&(d+=g+":");d=window.tinyMCE&&(b=tinyMCE.get(this.env.composebody))?d+b.getContent():d+$("[name='_message']").val();if(this.env.attachments)for(var k in this.env.attachments)d+=k;if(a)this.cmp_hash=d;return d};this.change_identity=function(a,b){if(!a||!a.options)return!1;if(!b)b=this.env.show_sig;var d,e=-1,f=a.options[a.selectedIndex].value,h=$("[name='_message']"),g=h.val(),k="1"==$("input[name='_is_html']").val(),j=this.env.identity; +d=this.env.sig_above&&("reply"==this.env.compose_mode||"forward"==this.env.compose_mode)?"---":"-- ";this.env.signatures&&this.env.signatures[f]?(this.enable_command("insert-sig",!0),this.env.compose_commands.push("insert-sig")):this.enable_command("insert-sig",!1);if(k){if(b&&this.env.signatures&&(e=tinyMCE.get(this.env.composebody),h=e.dom.get("_rc_sig"),h||(j=e.getBody(),g=e.getDoc(),h=g.createElement("div"),h.setAttribute("id","_rc_sig"),this.env.sig_above?(e.getWin().focus(),e=e.selection.getNode(), +"BODY"==e.nodeName?(j.insertBefore(h,j.firstChild),j.insertBefore(g.createElement("br"),j.firstChild)):(j.insertBefore(h,e.nextSibling),j.insertBefore(g.createElement("br"),e.nextSibling))):(bw.ie&&j.appendChild(g.createElement("br")),j.appendChild(h))),this.env.signatures[f]))this.env.signatures[f].is_html?(j=this.env.signatures[f].text,this.env.signatures[f].plain_text.match(/^--[ -]\r?\n/m)||(j=d+"
"+j)):(j=this.env.signatures[f].text,j.match(/^--[ -]\r?\n/m)||(j=d+"\n"+j),j="
"+j+"
"), +h.innerHTML=j}else b&&j&&this.env.signatures&&this.env.signatures[j]&&(j=this.env.signatures[j].is_html?this.env.signatures[j].plain_text:this.env.signatures[j].text,j=j.replace(/\r\n/g,"\n"),j.match(/^--[ -]\n/m)||(j=d+"\n"+j),e=this.env.sig_above?g.indexOf(j):g.lastIndexOf(j),0<=e&&(g=g.substring(0,e)+g.substring(e+j.length,g.length))),b&&this.env.signatures&&this.env.signatures[f]?(j=this.env.signatures[f].is_html?this.env.signatures[f].plain_text:this.env.signatures[f].text,j=j.replace(/\r\n/g, +"\n"),j.match(/^--[ -]\n/m)||(j=d+"\n"+j),this.env.sig_above?0<=e?(g=g.substring(0,e)+j+g.substring(e,g.length),d=e-1):(pos=this.get_caret_pos(h.get(0)))?(g=g.substring(0,pos)+"\n"+j+"\n\n"+g.substring(pos,g.length),d=pos):(d=0,g="\n\n"+j+"\n\n"+g.replace(/^[\r\n]+/,"")):(g=g.replace(/[\r\n]+$/,""),d=!this.env.top_posting&&g.length?g.length+1:0,g+="\n\n"+j)):d=this.env.top_posting?0:g.length,h.val(g),this.set_caret_pos(h.get(0),d);this.env.identity=f;return!0};this.upload_file=function(a){if(!a)return!1; +var b,d=0,e=$("input[type=file]",a).get(0),f=e.files?e.files.length:e.value?1:0;if(f){if(e.files&&this.env.max_filesize&&this.env.filesizeerror){for(b=0;bthis.env.max_filesize){this.display_message(this.env.filesizeerror,"error");return}}b=this.async_upload_form(a,"upload",function(a){var b,d="";try{if(this.contentDocument)b=this.contentDocument;else if(this.contentWindow)b=this.contentWindow.document;d=b.childNodes[0].innerHTML}catch(e){}if(!d.match(/add2attachment/)&& +(!bw.opera||rcmail.env.uploadframe&&rcmail.env.uploadframe==a.data.ts))d.match(/display_message/)||rcmail.display_message(rcmail.get_label("fileuploaderror"),"error"),rcmail.remove_from_attachment_list(a.data.ts);if(bw.opera)rcmail.env.uploadframe=a.data.ts});f=""+this.get_label("uploading"+(1";d=b.replace(/^rcmupload/,"");this.env.loadingicon&&(f=''+f);this.env.cancelicon&&(f=''+f);this.add2attachment_list(d,{name:"",html:f,complete:!1});this.env.upload_progress_time&&this.upload_progress_start("upload",d)}this.gui_objects.attachmentform=a;return!0};this.add2attachment_list=function(a,b,d){if(!this.gui_objects.attachmentlist)return!1;var e,f=$("
  • ").attr("id",a).html(b.html);d&&(e=document.getElementById(d))?f.replaceAll(e):f.appendTo(this.gui_objects.attachmentlist);d&&this.env.attachments[d]&& +delete this.env.attachments[d];this.env.attachments[a]=b;return!0};this.remove_from_attachment_list=function(a){delete this.env.attachments[a];$("#"+a).remove()};this.remove_attachment=function(a){a&&this.env.attachments[a]&&this.http_post("remove-attachment",{_id:this.env.compose_id,_file:a});return!0};this.cancel_attachment_upload=function(a,b){if(!a||!b)return!1;this.remove_from_attachment_list(a);$("iframe[name='"+b+"']").remove();return!1};this.upload_progress_start=function(a,b){window.setTimeout(function(){rcmail.http_request(a, +{_progress:b})},1E3*this.env.upload_progress_time)};this.upload_progress_update=function(a){var b=$("#"+a.name+"> span");b.length&&a.text&&(b.text(a.text),a.done||this.upload_progress_start(a.action,a.name))};this.add_contact=function(a){a&&this.http_post("addcontact","_address="+a);return!0};this.qsearch=function(a){if(""!=a){var b=this.set_busy(!0,"searching");this.message_list?this.clear_message_list():this.contact_list&&this.list_contacts_clear();this.env.current_page=1;r=this.http_request("search", +this.search_params(a)+(this.env.source?"&_source="+urlencode(this.env.source):"")+(this.env.group?"&_gid="+urlencode(this.env.group):""),b);this.env.qsearch={lock:b,request:r}}};this.search_params=function(a,b){var d,e=[],f=[],h=this.env.search_mods,g=this.env.mailbox;if(!b&&this.gui_objects.search_filter)b=this.gui_objects.search_filter.value;if(!a&&this.gui_objects.qsearchbox)a=this.gui_objects.qsearchbox.value;b&&e.push("_filter="+urlencode(b));if(a&&(e.push("_q="+urlencode(a)),h&&this.message_list&& +(h=h[g]?h[g]:h["*"]),h)){for(d in h)f.push(d);e.push("_headers="+f.join(","))}g&&e.push("_mbox="+urlencode(g));return e.join("&")};this.reset_qsearch=function(){if(this.gui_objects.qsearchbox)this.gui_objects.qsearchbox.value="";this.env.qsearch&&this.abort_request(this.env.qsearch);this.env.qsearch=null;this.env.search_request=null;this.env.search_id=null};this.sent_successfully=function(a,b){this.display_message(b,a);window.setTimeout(function(){i.list_mailbox()},500)};this.ksearch_keydown=function(a, +b,d){this.ksearch_timer&&clearTimeout(this.ksearch_timer);var e=rcube_event.get_keycode(a),f=rcube_event.get_modifier(a);switch(e){case 38:case 40:if(!this.ksearch_pane)break;e=38==e?1:0;b=document.getElementById("rcmksearchSelected");if(!b)b=this.ksearch_pane.__ul.firstChild;b&&this.ksearch_select(e?b.previousSibling:b.nextSibling);return rcube_event.cancel(a);case 9:if(f==SHIFT_KEY||!this.ksearch_visible()){this.ksearch_hide();return}case 13:if(!this.ksearch_visible())return!1;this.insert_recipient(this.ksearch_selected); +this.ksearch_hide();return rcube_event.cancel(a);case 27:this.ksearch_hide();return;case 37:case 39:if(f!=SHIFT_KEY)return}this.ksearch_timer=window.setTimeout(function(){i.ksearch_get_results(d)},200);this.ksearch_input=b;return!0};this.ksearch_visible=function(){return null!==this.ksearch_selected&&void 0!==this.ksearch_selected&&this.ksearch_value};this.ksearch_select=function(a){var b=$("#rcmksearchSelected");b[0]&&a&&b.removeAttr("id").removeClass("selected");if(a)$(a).attr("id","rcmksearchSelected").addClass("selected"), +this.ksearch_selected=a._rcm_id};this.insert_recipient=function(a){if(!(null===a||!this.env.contacts[a]||!this.ksearch_input)){var b=this.ksearch_input.value,d=this.get_caret_pos(this.ksearch_input),d=b.lastIndexOf(this.ksearch_value,d),e=!1,f="",h=b.substring(0,d),b=b.substring(d+this.ksearch_value.length,b.length);this.ksearch_destroy();"object"===typeof this.env.contacts[a]&&this.env.contacts[a].id?(f+=this.env.contacts[a].name+this.env.recipients_delimiter,this.group2expand=$.extend({},this.env.contacts[a]), +this.group2expand.input=this.ksearch_input,this.http_request("mail/group-expand","_source="+urlencode(this.env.contacts[a].source)+"&_gid="+urlencode(this.env.contacts[a].id),!1)):"string"===typeof this.env.contacts[a]&&(f=this.env.contacts[a]+this.env.recipients_delimiter,e=!0);this.ksearch_input.value=h+f+b;d+=f.length;this.ksearch_input.setSelectionRange&&this.ksearch_input.setSelectionRange(d,d);e&&this.triggerEvent("autocomplete_insert",{field:this.ksearch_input,insert:f})}};this.replace_group_recipients= +function(a,b){if(this.group2expand&&this.group2expand.id==a)this.group2expand.input.value=this.group2expand.input.value.replace(this.group2expand.name,b),this.triggerEvent("autocomplete_insert",{field:this.group2expand.input,insert:b}),this.group2expand=null};this.ksearch_get_results=function(a){var b=this.ksearch_input?this.ksearch_input.value:null;if(null!==b){this.ksearch_pane&&this.ksearch_pane.is(":visible")&&this.ksearch_pane.hide();var d=this.get_caret_pos(this.ksearch_input),e=b.lastIndexOf(this.env.recipients_separator, +d-1),b=b.substring(e+1,d),e=this.env.autocomplete_min_length,d=this.ksearch_data,b=$.trim(b);if(b!=this.ksearch_value)if(this.ksearch_destroy(),b.length&&b.length"),this.ksearch_pane=$("
    ").attr("id","rcmKSearchpane").css({position:"absolute","z-index":3E4}).append(h).appendTo(document.body),this.ksearch_pane.__ul=h[0];h=this.ksearch_pane.__ul;d&&this.ksearch_pane.data("reqid")==d?l-=h.childNodes.length:(this.ksearch_pane.data("reqid",d),h.innerHTML="",this.env.contacts= +[],e=$(this.ksearch_input).offset(),this.ksearch_pane.css({left:e.left+"px",top:e.top+this.ksearch_input.offsetHeight+"px",display:"none"}));if(a&&(f=a.length))for(e=0;e/g,">").replace(/##([^%]+)%%/g,"$1"),g.onmouseover=function(){i.ksearch_select(this)},g.onmouseup=function(){i.ksearch_click(this)},g._rcm_id= +this.env.contacts.length+e,h.appendChild(g),l-=1;if(h.childNodes.length&&(this.ksearch_pane.show(),!this.env.contacts.length))$("li:first",h).attr("id","rcmksearchSelected").addClass("selected"),this.ksearch_selected=0;if(f)this.env.contacts=this.env.contacts.concat(a);if(j.id==d)if(j.num--,0").attr("type","text").val(this.env.contactgroups["G"+ +this.env.source+this.env.group].name);this.name_input.bind("keydown",function(a){return rcmail.add_input_keydown(a)});this.env.group_renaming=!0;var a,b=this.get_folder_li(this.env.source+this.env.group,"rcmliG");b&&(a=b.firstChild)&&$(a).hide().before(this.name_input)}this.name_input.select().focus()}};this.group_delete=function(){if(this.env.group&&confirm(this.get_label("deletegroupconfirm"))){var a=this.set_busy(!0,"groupdeleting");this.http_post("group-delete","_source="+urlencode(this.env.source)+ +"&_gid="+urlencode(this.env.group),a)}};this.remove_group_item=function(a){var b,d="G"+a.source+a.id;if(b=this.get_folder_li(d))this.triggerEvent("group_delete",{source:a.source,id:a.id,li:b}),b.parentNode.removeChild(b),delete this.env.contactfolders[d],delete this.env.contactgroups[d];this.list_contacts(a.source,0)};this.add_input_row=function(a){if(this.gui_objects.folderlist){if(!this.name_input)this.name_input=$("").attr("type","text").data("tt",a),this.name_input.bind("keydown",function(a){return rcmail.add_input_keydown(a)}), +this.name_input_li=$("
  • ").addClass(a).append(this.name_input),this.name_input_li.insertAfter("contactsearch"==a?$("li:last",this.gui_objects.folderlist):this.get_folder_li(this.env.source));this.name_input.select().focus()}};this.add_input_keydown=function(a){var b=rcube_event.get_keycode(a),d=$(a.target),a=d.data("tt");if(13==b){if(b=d.val())d=this.set_busy(!0,"loading"),"contactsearch"==a?this.http_post("search-create","_search="+urlencode(this.env.search_request)+"&_name="+urlencode(b),d):this.env.group_renaming? +this.http_post("group-rename","_source="+urlencode(this.env.source)+"&_gid="+urlencode(this.env.group)+"&_name="+urlencode(b),d):this.http_post("group-create","_source="+urlencode(this.env.source)+"&_name="+urlencode(b),d);return!1}27==b&&this.reset_add_input();return!0};this.reset_add_input=function(){if(this.name_input){if(this.env.group_renaming)this.name_input.parent().children().last().show(),this.env.group_renaming=!1;this.name_input.remove();this.name_input_li&&this.name_input_li.remove(); +this.name_input=this.name_input_li=null}this.enable_command("list","listgroup",!0)};this.insert_contact_group=function(a){this.reset_add_input();a.type="group";var b="G"+a.source+a.id,d=$("").attr("href","#").attr("rel",a.source+":"+a.id).click(function(){return rcmail.command("listgroup",a,this)}).html(a.name),d=$("
  • ").attr({id:"rcmli"+this.html_identifier(b),"class":"contactgroup"}).append(d);this.env.contactfolders[b]=this.env.contactgroups[b]=a;this.add_contact_group_row(a,d);this.triggerEvent("group_insert", +{id:a.id,source:a.source,name:a.name,li:d[0]})};this.update_contact_group=function(a){this.reset_add_input();var b="G"+a.source+a.id,d=this.get_folder_li(b),e;if(d&&a.newid){e="G"+a.source+a.newid;var f=$.extend({},a);d.id="rcmli"+this.html_identifier(e);this.env.contactfolders[e]=this.env.contactfolders[b];this.env.contactfolders[e].id=a.newid;this.env.group=a.newid;delete this.env.contactfolders[b];delete this.env.contactgroups[b];f.id=a.newid;f.type="group";e=$("").attr("href","#").attr("rel", +a.source+":"+a.newid).click(function(){return rcmail.command("listgroup",f,this)}).html(a.name);$(d).children().replaceWith(e)}else if(d&&(e=d.firstChild)&&"a"==e.tagName.toLowerCase())e.innerHTML=a.name;this.env.contactfolders[b].name=this.env.contactgroups[b].name=a.name;this.add_contact_group_row(a,$(d),!0);this.triggerEvent("group_update",{id:a.id,source:a.source,name:a.name,li:d[0],newid:a.newid})};this.add_contact_group_row=function(a,b,d){var e=a.name.toUpperCase(),f=this.get_folder_li(a.source), +a="rcmliG"+this.html_identifier(a.source);d?(d=b.clone(!0),b.remove()):d=b;$('li[id^="'+a+'"]',this.gui_objects.folderlist).each(function(a,b){if(e>=$(this).text().toUpperCase())f=b;else return!1});d.insertAfter(f)};this.update_group_commands=function(){var a=""!=this.env.source?this.env.address_sources[this.env.source]:null;this.enable_command("group-create",a&&a.groups&&!a.readonly);this.enable_command("group-rename","group-delete",a&&a.groups&&this.env.group&&!a.readonly)};this.init_edit_field= +function(a,b){b||(b=$(".ff_"+a));b.focus(function(){i.focus_textfield(this)}).blur(function(){i.blur_textfield(this)}).each(function(){this._placeholder=this.title=i.env.coltypes[a].label;i.blur_textfield(this)})};this.insert_edit_field=function(a,b,d){var e=$("#ff_"+a);if(e.length)e.show().focus(),$(d).children('option[value="'+a+'"]').prop("disabled",!0);else if($(".ff_"+a),e=$("#contactsection"+b+" .contactcontroller"+a),e.length||(e=$("
    ").addClass("contactfieldgroup contactcontroller"+ +a).insertAfter($("#contactsection"+b+" .contactfieldgroup").last())),e.length&&"FIELDSET"==e.get(0).nodeName){var f,b=this.env.coltypes[a],h=$("
    ").addClass("row"),g=$("
    ").addClass("contactfieldcontent data"),k=$("
    ").addClass("contactfieldlabel label");b.subtypes_select?k.html(b.subtypes_select):k.html(b.label);var j=1!=b.limit?"[]":"";if("text"==b.type||"date"==b.type)f=$("").addClass("ff_"+a).attr({type:"text",name:"_"+a+j,size:b.size}).appendTo(g),this.init_edit_field(a,f), +"date"==b.type&&$.datepicker&&f.datepicker();else if("composite"==b.type){var l,n,m=[],o=[];if(f=this.env[a+"_template"])for(l=0;l").addClass("ff_"+l).attr({type:"text",name:"_"+l+j,size:f.size}).appendTo(g),g.append(o[p]||" "),this.init_edit_field(l,f),n||(n=f);f=n}else if("select"==b.type){f=$("').attr('type', 'text').attr('size', 30).appendTo(myprompt).val(this.get_label('nosubject')); - // user hit cancel, so don't send - if (!subject && subject !== '') { + var buttons = {}; + buttons[this.get_label('cancel')] = function(){ input_subject.focus(); - return false; - } - else - input_subject.val((subject ? subject : this.get_label('nosubject'))); + $(this).dialog('close'); + }; + buttons[this.get_label('sendmessage')] = function(){ + input_subject.val(prompt_value.val()); + $(this).dialog('close'); + ref.command(cmd, { nocheck:true }); // repeat command which triggered this + }; + + myprompt.dialog({ + modal: true, + resizable: false, + buttons: buttons, + close: function(event, ui) { $(this).remove() } + }); + prompt_value.select(); + return false; } // Apply spellcheck changes if spell checker is active @@ -3033,7 +3082,7 @@ if (!vis) this.stop_spellchecking(); - $(this.env.spellcheck.spell_container).css('visibility', vis ? 'visible' : 'hidden'); + $(this.env.spellcheck.spell_container)[vis ? 'show' : 'hide'](); } }; @@ -3151,7 +3200,7 @@ sig = this.env.signatures[sig].is_html ? this.env.signatures[sig].plain_text : this.env.signatures[sig].text; sig = sig.replace(/\r\n/g, '\n'); - if (!sig.match(/^--[ -]\n/)) + if (!sig.match(/^--[ -]\n/m)) sig = sig_separator + '\n' + sig; p = this.env.sig_above ? message.indexOf(sig) : message.lastIndexOf(sig); @@ -3163,7 +3212,7 @@ sig = this.env.signatures[id]['is_html'] ? this.env.signatures[id]['plain_text'] : this.env.signatures[id]['text']; sig = sig.replace(/\r\n/g, '\n'); - if (!sig.match(/^--[ -]\n/)) + if (!sig.match(/^--[ -]\n/m)) sig = sig_separator + '\n' + sig; if (this.env.sig_above) { @@ -3232,12 +3281,12 @@ if (this.env.signatures[id]) { if (this.env.signatures[id].is_html) { sig = this.env.signatures[id].text; - if (!this.env.signatures[id].plain_text.match(/^--[ -]\r?\n/)) + if (!this.env.signatures[id].plain_text.match(/^--[ -]\r?\n/m)) sig = sig_separator + '
    ' + sig; } else { sig = this.env.signatures[id].text; - if (!sig.match(/^--[ -]\r?\n/)) + if (!sig.match(/^--[ -]\r?\n/m)) sig = sig_separator + '\n' + sig; sig = '
    ' + sig + '
    '; } @@ -3341,16 +3390,8 @@ this.remove_from_attachment_list = function(name) { - if (this.env.attachments[name]) - delete this.env.attachments[name]; - - if (!this.gui_objects.attachmentlist) - return false; - - var list = this.gui_objects.attachmentlist.getElementsByTagName("li"); - for (i=0; i 0; i++) { + if (results && (len = results.length)) { + for (i=0; i < len && maxlen > 0; i++) { text = typeof results[i] === 'object' ? results[i].name : results[i]; li = document.createElement('LI'); - li.innerHTML = text.replace(new RegExp('('+RegExp.escape(s_val)+')', 'ig'), '##$1%%').replace(//g, '>').replace(/##([^%]+)%%/g, '$1'); + li.innerHTML = text.replace(new RegExp('('+RegExp.escape(value)+')', 'ig'), '##$1%%').replace(//g, '>').replace(/##([^%]+)%%/g, '$1'); li.onmouseover = function(){ ref.ksearch_select(this); }; li.onmouseup = function(){ ref.ksearch_click(this) }; li._rcm_id = this.env.contacts.length + i; @@ -3722,20 +3781,28 @@ } } - if (results && results.length) + if (len) this.env.contacts = this.env.contacts.concat(results); // run next parallel search - if (maxlen > 0 && this.ksearch_data.id == reqid && this.ksearch_data.sources.length) { - var lock, xhr, props = this.ksearch_data, source = props.sources.shift(); - if (source) { + if (data.id == reqid) { data.num--; - lock = this.display_message(this.get_label('searching'), 'loading'); - xhr = this.http_post(props.action, '_search='+urlencode(s_val)+'&_id='+reqid - +'&_source='+urlencode(source), lock); - - this.ksearch_data.locks.push(lock); - this.ksearch_data.requests.push(xhr); + if (maxlen > 0 && data.sources.length) { + var lock, xhr, source = data.sources.shift(); + if (source) { + lock = this.display_message(this.get_label('searching'), 'loading'); + xhr = this.http_post(data.action, '_search='+urlencode(value)+'&_id='+reqid + +'&_source='+urlencode(source), lock); + + this.ksearch_data.locks.push(lock); + this.ksearch_data.requests.push(xhr); + } + } + else if (!maxlen) { + if (!this.ksearch_msg) + this.ksearch_msg = this.display_message(this.get_label('autocompletemore')); + // abort pending searches + this.ksearch_abort(); } } }; @@ -3769,9 +3836,25 @@ this.ksearch_destroy(); }; - // Aborts pending autocomplete requests + // Clears autocomplete data/requests this.ksearch_destroy = function() { + this.ksearch_abort(); + + if (this.ksearch_info) + this.hide_message(this.ksearch_info); + + if (this.ksearch_msg) + this.hide_message(this.ksearch_msg); + + this.ksearch_data = null; + this.ksearch_info = null; + this.ksearch_msg = null; + } + + // Aborts pending autocomplete requests + this.ksearch_abort = function() + { var i, len, ac = this.ksearch_data; if (!ac) @@ -3779,9 +3862,8 @@ for (i=0, len=ac.locks.length; i 0); + this.enable_command('compose', this.env.group || list.selection.length > 0); this.enable_command('edit', id && writable); this.enable_command('delete', list.selection.length && writable); @@ -3832,7 +3914,7 @@ this.list_contacts = function(src, group, page) { - var add_url = '', + var folder, add_url = '', target = window; if (!src) @@ -3848,7 +3930,12 @@ else if (group != this.env.group) page = this.env.current_page = 1; - this.select_folder((group ? 'G'+src+group : src), (this.env.group ? 'G'+this.env.source+this.env.group : this.env.source)); + if (this.env.search_id) + folder = 'S'+this.env.search_id; + else + folder = group ? 'G'+src+group : src; + + this.select_folder(folder); this.env.source = src; this.env.group = group; @@ -3893,8 +3980,8 @@ if (group) url += '&_gid='+group; - // also send search request to get the right messages - if (this.env.search_request) + // also send search request to get the right messages + if (this.env.search_request) url += '&_search='+this.env.search_request; this.http_request('list', url, lock); @@ -3904,7 +3991,8 @@ { this.contact_list.clear(true); this.show_contentframe(false); - this.enable_command('delete', 'compose', false); + this.enable_command('delete', false); + this.enable_command('compose', this.env.group ? true : false); }; // load contact record @@ -3976,9 +4064,11 @@ this.delete_contacts = function() { + var selection = this.contact_list.get_selection(), + undelete = this.env.source && this.env.address_sources[this.env.source].undelete; + // exit if no mailbox specified or if selection is empty - var selection = this.contact_list.get_selection(); - if (!(selection.length || this.env.cid) || !confirm(this.get_label('deletecontactconfirm'))) + if (!(selection.length || this.env.cid) || (!undelete && !confirm(this.get_label('deletecontactconfirm')))) return; var id, n, a_cids = [], qs = ''; @@ -4005,7 +4095,10 @@ qs += '&_search='+this.env.search_request; // send request to server - this.http_post('delete', '_cid='+urlencode(a_cids.join(','))+'&_source='+urlencode(this.env.source)+'&_from='+(this.env.action ? this.env.action : '')+qs); + this.http_post('delete', '_cid='+urlencode(a_cids.join(',')) + +'&_source='+urlencode(this.env.source) + +'&_from='+(this.env.action ? this.env.action : '')+qs, + this.display_message(this.get_label('contactdeleting'), 'loading')); return true; }; @@ -4015,7 +4108,7 @@ { var c, row, list = this.contact_list; - cid = String(cid).replace(this.identifier_expr, '_'); + cid = this.html_identifier(cid); // when in searching mode, concat cid with the source name if (!list.rows[cid]) { @@ -4031,7 +4124,7 @@ // cid change if (newcid) { - newcid = String(newcid).replace(this.identifier_expr, '_'); + newcid = this.html_identifier(newcid); row.id = 'rcmrow' + newcid; list.remove_row(cid); list.init_row(row); @@ -4044,31 +4137,29 @@ // add row to contacts list this.add_contact_row = function(cid, cols, select) { - if (!this.gui_objects.contactslist || !this.gui_objects.contactslist.tBodies[0]) + if (!this.gui_objects.contactslist) return false; - var tbody = this.gui_objects.contactslist.tBodies[0], - rowcount = tbody.rows.length, - even = rowcount%2, + var c, list = this.contact_list, row = document.createElement('tr'); - row.id = 'rcmrow'+String(cid).replace(this.identifier_expr, '_'); - row.className = 'contact '+(even ? 'even' : 'odd'); + row.id = 'rcmrow'+this.html_identifier(cid); + row.className = 'contact'; - if (this.contact_list.in_selection(cid)) + if (list.in_selection(cid)) row.className += ' selected'; // add each submitted col - for (var c in cols) { + for (c in cols) { col = document.createElement('td'); col.className = String(c).toLowerCase(); col.innerHTML = cols[c]; row.appendChild(col); } - this.contact_list.insert_row(row); + list.insert_row(row); - this.enable_command('export', (this.contact_list.rowcount > 0)); + this.enable_command('export', list.rowcount > 0); }; this.init_contact_form = function() @@ -4090,24 +4181,27 @@ this.selectedIndex = 0; }); + // enable date pickers on date fields + if ($.datepicker && this.env.date_format) { + $.datepicker.setDefaults({ + dateFormat: this.env.date_format, + changeMonth: true, + changeYear: true, + yearRange: '-100:+10', + showOtherMonths: true, + selectOtherMonths: true, + monthNamesShort: this.env.month_names, + onSelect: function(dateText) { $(this).focus().val(dateText) } + }); + $('input.datepicker').datepicker(); + } + $("input[type='text']:visible").first().focus(); }; this.group_create = function() { - if (!this.gui_objects.folderlist) - return; - - if (!this.name_input) { - this.name_input = $('').attr('type', 'text'); - this.name_input.bind('keydown', function(e){ return rcmail.add_input_keydown(e); }); - this.name_input_li = $('
  • ').addClass('contactgroup').append(this.name_input); - - var li = this.get_folder_li(this.env.source) - this.name_input_li.insertAfter(li); - } - - this.name_input.select().focus(); + this.add_input_row('contactgroup'); }; this.group_rename = function() @@ -4153,18 +4247,40 @@ this.list_contacts(prop.source, 0); }; + // @TODO: maybe it would be better to use popup instead of inserting input to the list? + this.add_input_row = function(type) + { + if (!this.gui_objects.folderlist) + return; + + if (!this.name_input) { + this.name_input = $('').attr('type', 'text').data('tt', type); + this.name_input.bind('keydown', function(e){ return rcmail.add_input_keydown(e); }); + this.name_input_li = $('
  • ').addClass(type).append(this.name_input); + + var li = type == 'contactsearch' ? $('li:last', this.gui_objects.folderlist) : this.get_folder_li(this.env.source); + this.name_input_li.insertAfter(li); + } + + this.name_input.select().focus(); + }; + // handler for keyboard events on the input field this.add_input_keydown = function(e) { - var key = rcube_event.get_keycode(e); + var key = rcube_event.get_keycode(e), + input = $(e.target), itype = input.data('tt'); // enter if (key == 13) { - var newname = this.name_input.val(); + var newname = input.val(); if (newname) { var lock = this.set_busy(true, 'loading'); - if (this.env.group_renaming) + + if (itype == 'contactsearch') + this.http_post('search-create', '_search='+urlencode(this.env.search_request)+'&_name='+urlencode(newname), lock); + else if (this.env.group_renaming) this.http_post('group-rename', '_source='+urlencode(this.env.source)+'&_gid='+urlencode(this.env.group)+'&_name='+urlencode(newname), lock); else this.http_post('group-create', '_source='+urlencode(this.env.source)+'&_name='+urlencode(newname), lock); @@ -4209,7 +4325,7 @@ .attr('rel', prop.source+':'+prop.id) .click(function() { return rcmail.command('listgroup', prop, this); }) .html(prop.name), - li = $('
  • ').attr({id: 'rcmli'+key.replace(this.identifier_expr, '_'), 'class': 'contactgroup'}) + li = $('
  • ').attr({id: 'rcmli'+this.html_identifier(key), 'class': 'contactgroup'}) .append(link); this.env.contactfolders[key] = this.env.contactgroups[key] = prop; @@ -4232,7 +4348,7 @@ var newkey = 'G'+prop.source+prop.newid, newprop = $.extend({}, prop);; - li.id = String('rcmli'+newkey).replace(this.identifier_expr, '_'); + li.id = 'rcmli' + this.html_identifier(newkey); this.env.contactfolders[newkey] = this.env.contactfolders[key]; this.env.contactfolders[newkey].id = prop.newid; this.env.group = prop.newid; @@ -4264,7 +4380,7 @@ { var row, name = prop.name.toUpperCase(), sibling = this.get_folder_li(prop.source), - prefix = 'rcmliG'+(prop.source).replace(this.identifier_expr, '_'); + prefix = 'rcmliG' + this.html_identifier(prop.source); // When renaming groups, we need to remove it from DOM and insert it in the proper place if (reloc) { @@ -4335,6 +4451,9 @@ .appendTo(cell); this.init_edit_field(col, input); + + if (colprop.type == 'date' && $.datepicker) + input.datepicker(); } else if (colprop.type == 'composite') { var childcol, cp, first, templ, cols = [], suffices = []; @@ -4480,11 +4599,106 @@ // unselect directory/group this.unselect_directory = function() { - if (this.env.address_sources.length > 1 || this.env.group != '') { - this.select_folder('', (this.env.group ? 'G'+this.env.source+this.env.group : this.env.source)); - this.env.group = ''; - this.env.source = ''; + this.select_folder(''); + this.enable_command('search-delete', false); + }; + + // callback for creating a new saved search record + this.insert_saved_search = function(name, id) + { + this.reset_add_input(); + + var key = 'S'+id, + link = $('').attr('href', '#') + .attr('rel', id) + .click(function() { return rcmail.command('listsearch', id, this); }) + .html(name), + li = $('
  • ').attr({id: 'rcmli' + this.html_identifier(key), 'class': 'contactsearch'}) + .append(link), + prop = {name:name, id:id, li:li[0]}; + + this.add_saved_search_row(prop, li); + this.select_folder('S'+id); + this.enable_command('search-delete', true); + this.env.search_id = id; + + this.triggerEvent('abook_search_insert', prop); + }; + + // add saved search row to the list, with sorting + this.add_saved_search_row = function(prop, li, reloc) + { + var row, sibling, name = prop.name.toUpperCase(); + + // When renaming groups, we need to remove it from DOM and insert it in the proper place + if (reloc) { + row = li.clone(true); + li.remove(); + } + else + row = li; + + $('li[class~="contactsearch"]', this.gui_objects.folderlist).each(function(i, elem) { + if (!sibling) + sibling = this.previousSibling; + + if (name >= $(this).text().toUpperCase()) + sibling = elem; + else + return false; + }); + + if (sibling) + row.insertAfter(sibling); + else + row.appendTo(this.gui_objects.folderlist); + }; + + // creates an input for saved search name + this.search_create = function() + { + this.add_input_row('contactsearch'); + }; + + this.search_delete = function() + { + if (this.env.search_request) { + var lock = this.set_busy(true, 'savedsearchdeleting'); + this.http_post('search-delete', '_sid='+urlencode(this.env.search_id), lock); + } + }; + + // callback from server upon search-delete command + this.remove_search_item = function(id) + { + var li, key = 'S'+id; + if ((li = this.get_folder_li(key))) { + this.triggerEvent('search_delete', { id:id, li:li }); + + li.parentNode.removeChild(li); } + + this.env.search_id = null; + this.env.search_request = null; + this.list_contacts_clear(); + this.reset_qsearch(); + this.enable_command('search-delete', 'search-create', false); + }; + + this.listsearch = function(id) + { + var folder, lock = this.set_busy(true, 'searching'); + + if (this.contact_list) { + this.list_contacts_clear(); + } + + this.reset_qsearch(); + this.select_folder('S'+id); + + // reset vars + this.env.current_page = 1; + this.http_request('search', '_sid='+urlencode(id), lock); }; @@ -4970,17 +5184,18 @@ init_button(cmd, this.buttons[cmd][i]); } } + + // set active task button + this.set_button(this.task, 'sel'); }; // set button to a specific state this.set_button = function(command, state) { - var button, obj, a_buttons = this.buttons[command]; + var n, button, obj, a_buttons = this.buttons[command], + len = a_buttons ? a_buttons.length : 0; - if (!a_buttons || !a_buttons.length) - return false; - - for (var n=0; n'+plainText+''); + + plain = plain.replace(/&/g, '&').replace(//g, '>'); + $('#'+id).val(plain ? '
    '+plain+'
    ' : ''); + this.set_busy(false, null, lock); }; @@ -5580,7 +5790,7 @@ var base = this.env.comm_path; // overwrite task name - if (query._action.match(/([a-z]+)\/([a-z-_.]+)/)) { + if (query._action.match(/([a-z]+)\/([a-z0-9-_.]+)/)) { query._action = RegExp.$2; base = base.replace(/\_task=[a-z]+/, '_task='+RegExp.$1); } @@ -5794,6 +6004,8 @@ this.enable_command('export', (this.contact_list && this.contact_list.rowcount > 0)); if (response.action == 'list' || response.action == 'search') { + this.enable_command('search-create', this.env.source == ''); + this.enable_command('search-delete', this.env.search_id); this.update_group_commands(); this.triggerEvent('listupdate', { folder:this.env.source, rowcount:this.contact_list.rowcount }); } @@ -6008,6 +6220,23 @@ } }; +rcube_webmail.long_subject_title_ie = function(elem, indent) +{ + if (!elem.title) { + var $elem = $(elem), + txt = $.trim($elem.text()), + tmp = $('').text(txt) + .css({'position': 'absolute', 'float': 'left', 'visibility': 'hidden', + 'font-size': $elem.css('font-size'), 'font-weight': $elem.css('font-weight')}) + .appendTo($('body')), + w = tmp.width(); + + tmp.remove(); + if (w + indent * 15 > $elem.width()) + elem.title = txt; + } +}; + // copy event engine prototype rcube_webmail.prototype.addEventListener = rcube_event_engine.prototype.addEventListener; rcube_webmail.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener; diff -Nru roundcube-0.6+dfsg/program/js/common.js roundcube-0.7.1/program/js/common.js --- roundcube-0.6+dfsg/program/js/common.js 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/program/js/common.js 2012-01-17 07:50:40.000000000 +0000 @@ -1,25 +1,28 @@ var CONTROL_KEY=1,SHIFT_KEY=2,CONTROL_SHIFT_KEY=3; -function roundcube_browser(){var a=navigator;this.ver=parseFloat(a.appVersion);this.appver=a.appVersion;this.agent=a.userAgent;this.agent_lc=a.userAgent.toLowerCase();this.name=a.appName;this.vendor=a.vendor?a.vendor:"";this.vendver=a.vendorSub?parseFloat(a.vendorSub):0;this.product=a.product?a.product:"";this.platform=String(a.platform).toLowerCase();this.lang=a.language?a.language.substring(0,2):a.browserLanguage?a.browserLanguage.substring(0,2):a.systemLanguage?a.systemLanguage.substring(0,2): -"en";this.win=this.platform.indexOf("win")>=0;this.mac=this.platform.indexOf("mac")>=0;this.linux=this.platform.indexOf("linux")>=0;this.unix=this.platform.indexOf("unix")>=0;this.dom=document.getElementById?!0:!1;this.dom2=document.addEventListener&&document.removeEventListener;this.ie4=(this.ie=document.all&&!window.opera)&&!this.dom;this.ie5=this.dom&&this.appver.indexOf("MSIE 5")>0;this.ie8=this.dom&&this.appver.indexOf("MSIE 8")>0;this.ie7=this.dom&&this.appver.indexOf("MSIE 7")>0;this.ie6=this.dom&& -!this.ie8&&!this.ie7&&this.appver.indexOf("MSIE 6")>0;this.ns=this.ver<5&&this.name=="Netscape"||this.ver>=5&&this.vendor.indexOf("Netscape")>=0;this.chrome=this.agent_lc.indexOf("chrome")>0;this.safari=!this.chrome&&(this.agent_lc.indexOf("safari")>0||this.agent_lc.indexOf("applewebkit")>0);this.mz=this.dom&&!this.ie&&!this.ns&&!this.chrome&&!this.safari&&this.agent.indexOf("Mozilla")>=0;this.konq=this.agent_lc.indexOf("konqueror")>0;this.iphone=this.safari&&this.agent_lc.indexOf("iphone")>0;this.ipad= -this.safari&&this.agent_lc.indexOf("ipad")>0;if((this.opera=window.opera?!0:!1)&&window.RegExp)this.vendver=/opera(\s|\/)([0-9\.]+)/.test(this.agent_lc)?parseFloat(RegExp.$2):-1;else if(this.chrome&&window.RegExp)this.vendver=/chrome\/([0-9\.]+)/.test(this.agent_lc)?parseFloat(RegExp.$1):0;else if(!this.vendver&&this.safari)this.vendver=/(safari|applewebkit)\/([0-9]+)/.test(this.agent_lc)?parseInt(RegExp.$2):0;else if(!this.vendver&&this.mz||this.agent.indexOf("Camino")>0)this.vendver=/rv:([0-9\.]+)/.test(this.agent)? -parseFloat(RegExp.$1):0;else if(this.ie&&window.RegExp)this.vendver=/msie\s+([0-9\.]+)/.test(this.agent_lc)?parseFloat(RegExp.$1):0;else if(this.konq&&window.RegExp)this.vendver=/khtml\/([0-9\.]+)/.test(this.agent_lc)?parseFloat(RegExp.$1):0;if(this.safari&&/;\s+([a-z]{2})-[a-z]{2}\)/.test(this.agent_lc))this.lang=RegExp.$1;this.dhtml=this.ie4&&this.win||this.ie5||this.ie6||this.ns4||this.mz;this.vml=this.win&&this.ie&&this.dom&&!this.opera;this.pngalpha=this.mz||this.opera&&this.vendver>=6||this.ie&& -this.mac&&this.vendver>=5||this.ie&&this.win&&this.vendver>=5.5||this.safari;this.opacity=this.mz||this.ie&&this.vendver>=5.5&&!this.opera||this.safari&&this.vendver>=100;this.cookies=a.cookieEnabled;this.xmlhttp_test=function(){var a=new Function("try{var o=new ActiveXObject('Microsoft.XMLHTTP');return true;}catch(err){return false;}");return this.xmlhttp=window.XMLHttpRequest||window.ActiveXObject&&a()};this.set_html_class=function(){var a=" js";this.ie?(a+=" ie",this.ie5?a+=" ie5":this.ie6?a+= +function roundcube_browser(){var a=navigator;this.ver=parseFloat(a.appVersion);this.appver=a.appVersion;this.agent=a.userAgent;this.agent_lc=a.userAgent.toLowerCase();this.name=a.appName;this.vendor=a.vendor?a.vendor:"";this.vendver=a.vendorSub?parseFloat(a.vendorSub):0;this.product=a.product?a.product:"";this.platform=(""+a.platform).toLowerCase();this.lang=a.language?a.language.substring(0,2):a.browserLanguage?a.browserLanguage.substring(0,2):a.systemLanguage?a.systemLanguage.substring(0,2):"en"; +this.win=0<=this.platform.indexOf("win");this.mac=0<=this.platform.indexOf("mac");this.linux=0<=this.platform.indexOf("linux");this.unix=0<=this.platform.indexOf("unix");this.dom=document.getElementById?!0:!1;this.dom2=document.addEventListener&&document.removeEventListener;this.ie4=(this.ie=document.all&&!window.opera)&&!this.dom;this.ie5=this.dom&&0this.ver&&"Netscape"==this.name||5<=this.ver&&0<=this.vendor.indexOf("Netscape");this.chrome=0|[,;s\n])","i"): RegExp("^((([^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+|\\x22([^\\x0d\\x22\\x5c\\x80-\\xff]|\\x5c[\\x00-\\x7f])*\\x22)(\\x2e([^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+|\\x22([^\\x0d\\x22\\x5c\\x80-\\xff]|\\x5c[\\x00-\\x7f])*\\x22))*\\x40([^@\\x2e]+\\x2e)+([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,}))|(mailtest\\x40(\\u0645\\u062b\\u0627\\u0644\\x2e\\u0625\\u062e\\u062a\\u0628\\u0627\\u0631|\\u4f8b\\u5b50\\x2e\\u6d4b\\u8bd5|\\u4f8b\\u5b50\\x2e\\u6e2c\\u8a66|\\u03c0\\u03b1\\u03c1\\u03ac\\u03b4\\u03b5\\u03b9\\u03b3\\u03bc\\u03b1\\x2e\\u03b4\\u03bf\\u03ba\\u03b9\\u03bc\\u03ae|\\u0909\\u0926\\u093e\\u0939\\u0930\\u0923\\x2e\\u092a\\u0930\\u0940\\u0915\\u094d\\u0937\\u093e|\\u4f8b\\u3048\\x2e\\u30c6\\u30b9\\u30c8|\\uc2e4\\ub840\\x2e\\ud14c\\uc2a4\\ud2b8|\\u0645\\u062b\\u0627\\u0644\\x2e\\u0622\\u0632\\u0645\\u0627\\u06cc\\u0634\u06cc|\\u043f\\u0440\\u0438\\u043c\\u0435\\u0440\\x2e\\u0438\\u0441\\u043f\\u044b\\u0442\\u0430\\u043d\\u0438\\u0435|\\u0b89\\u0ba4\\u0bbe\\u0bb0\\u0ba3\\u0bae\\u0bcd\\x2e\\u0baa\\u0bb0\\u0bbf\\u0b9f\\u0bcd\\u0b9a\\u0bc8|\\u05d1\\u05f2\\u05b7\\u05e9\\u05e4\\u05bc\\u05d9\\u05dc\\x2e\\u05d8\\u05e2\\u05e1\\u05d8)))$", -"i")).test(a)?!0:!1:!1}function rcube_clone_object(a){var b={},c;for(c in a)b[c]=a[c]&&typeof a[c]==="object"?clone_object(a[c]):a[c];return b}function urlencode(a){return window.encodeURIComponent?encodeURIComponent(a):escape(a)} +"i")).test(a)?!0:!1:!1}function rcube_clone_object(a){var b={},c;for(c in a)b[c]=a[c]&&"object"===typeof a[c]?clone_object(a[c]):a[c];return b}function urlencode(a){return window.encodeURIComponent?encodeURIComponent(a).replace("*","%2A"):escape(a).replace("+","%2B").replace("*","%2A").replace("/","%2F").replace("@","%40")} function rcube_find_object(a,b){var c,d;b||(b=document);if(b.getElementsByName&&(c=b.getElementsByName(a)))d=c[0];!d&&b.getElementById&&(d=b.getElementById(a));!d&&b.all&&(d=b.all[a]);!d&&b.images.length&&(d=b.images[a]);if(!d&&b.forms.length)for(c=0;c=d.left&&c.x=d.top&&c.y=d.left&&c.x=d.top&&c.y>2,b=(b&3)<<4|c>>4,f=(c&15)<<2|d>>6,h=d&63,isNaN(c)?f=h=64:isNaN(d)&&(h=64),g=g+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(e)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(b)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(f)+ +"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(h);while(i>4,c=(c&15)<<4|e>>2,d=(e&3)<<6|f,g+=String.fromCharCode(b),64!=e&&(g+=String.fromCharCode(c)),64!=f&&(g+=String.fromCharCode(d));while(i | +-----------------------------------------------------------------------+ - $Id: common.js 5281 2011-09-27 07:29:49Z alec $ + $Id: common.js 5481 2011-11-24 07:53:00Z alec $ */ // Constants @@ -171,14 +171,12 @@ var opcode = 0; e = e || window.event; - if (bw.mac && e) { + if (bw.mac && e) opcode += (e.metaKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY); - return opcode; - } - if (e) { + else if (e) opcode += (e.ctrlKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY); - return opcode; - } + + return opcode; }, /** @@ -544,10 +542,17 @@ return out; }; -// make a string URL safe +// make a string URL safe (and compatible with PHP's rawurlencode()) function urlencode(str) { - return window.encodeURIComponent ? encodeURIComponent(str) : escape(str); + if (window.encodeURIComponent) + return encodeURIComponent(str).replace('*', '%2A'); + + return escape(str) + .replace('+', '%2B') + .replace('*', '%2A') + .replace('/', '%2F') + .replace('@', '%40'); }; @@ -673,6 +678,23 @@ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); }; +// Extend Date prototype to detect Standard timezone without DST +// from http://www.michaelapproved.com/articles/timezone-detect-and-ignore-daylight-saving-time-dst/ +Date.prototype.getStdTimezoneOffset = function() +{ + var m = 12, + d = new Date(null, m, 1), + tzo = d.getTimezoneOffset(); + + while (--m) { + d.setUTCMonth(m); + if (tzo != d.getTimezoneOffset()) { + return Math.max(tzo, d.getTimezoneOffset()); + } + } + + return tzo; +} // Make getElementById() case-sensitive on IE if (bw.ie) @@ -689,3 +711,82 @@ return obj; } } + +// This code was written by Tyler Akins and has been placed in the +// public domain. It would be nice if you left this header intact. +// Base64 code from Tyler Akins -- http://rumkin.com +var Base64 = (function () { + var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + var obj = { + /** + * Encodes a string in base64 + * @param {String} input The string to encode in base64. + */ + encode: function (input) { + if (typeof(window.btoa) === 'function') + return btoa(input); + + var chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0, output = '', len = input.length; + + do { + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + + if (isNaN(chr2)) + enc3 = enc4 = 64; + else if (isNaN(chr3)) + enc4 = 64; + + output = output + + keyStr.charAt(enc1) + keyStr.charAt(enc2) + + keyStr.charAt(enc3) + keyStr.charAt(enc4); + } while (i < len); + + return output; + }, + + /** + * Decodes a base64 string. + * @param {String} input The string to decode. + */ + decode: function (input) { + if (typeof(window.atob) === 'function') + return atob(input); + + var chr1, chr2, chr3, enc1, enc2, enc3, enc4, len, i = 0, output = ''; + + // remove all characters that are not A-Z, a-z, 0-9, +, /, or = + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + len = input.length; + + do { + enc1 = keyStr.indexOf(input.charAt(i++)); + enc2 = keyStr.indexOf(input.charAt(i++)); + enc3 = keyStr.indexOf(input.charAt(i++)); + enc4 = keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output = output + String.fromCharCode(chr1); + + if (enc3 != 64) + output = output + String.fromCharCode(chr2); + if (enc4 != 64) + output = output + String.fromCharCode(chr3); + } while (i < len); + + return output; + } + }; + + return obj; +})(); diff -Nru roundcube-0.6+dfsg/program/js/editor.js roundcube-0.7.1/program/js/editor.js --- roundcube-0.6+dfsg/program/js/editor.js 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/program/js/editor.js 2012-01-17 07:50:40.000000000 +0000 @@ -14,15 +14,15 @@ */ // Initialize HTML editor -function rcmail_editor_init(skin_path, editor_lang, spellcheck, mode) +function rcmail_editor_init(config) { var ret, conf = { mode: 'textareas', editor_selector: 'mce_editor', apply_source_formatting: true, theme: 'advanced', - language: editor_lang, - content_css: skin_path + '/editor_content.css', + language: config.lang, + content_css: config.skin_path + '/editor_content.css', theme_advanced_toolbar_location: 'top', theme_advanced_toolbar_align: 'left', theme_advanced_buttons3: '', @@ -35,7 +35,7 @@ rc_client: rcmail }; - if (mode == 'identity') + if (config.mode == 'identity') $.extend(conf, { plugins: 'paste,tabfocus', theme_advanced_buttons1: 'bold,italic,underline,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,separator,outdent,indent,charmap,hr,link,unlink,code,forecolor', @@ -43,11 +43,12 @@ }); else // mail compose $.extend(conf, { - plugins: 'paste,emotions,media,nonbreaking,table,searchreplace,visualchars,directionality,tabfocus' + (spellcheck ? ',spellchecker' : ''), + plugins: 'paste,emotions,media,nonbreaking,table,searchreplace,visualchars,directionality,tabfocus' + (config.spellcheck ? ',spellchecker' : ''), theme_advanced_buttons1: 'bold,italic,underline,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,outdent,indent,ltr,rtl,blockquote,|,forecolor,backcolor,fontselect,fontsizeselect', - theme_advanced_buttons2: 'link,unlink,table,|,emotions,charmap,image,media,|,code,search' + (spellcheck ? ',spellchecker' : '') + ',undo,redo', + theme_advanced_buttons2: 'link,unlink,table,|,emotions,charmap,image,media,|,code,search' + (config.spellcheck ? ',spellchecker' : '') + ',undo,redo', spellchecker_languages: (rcmail.env.spellcheck_langs ? rcmail.env.spellcheck_langs : 'Dansk=da,Deutsch=de,+English=en,Espanol=es,Francais=fr,Italiano=it,Nederlands=nl,Polski=pl,Portugues=pt,Suomi=fi,Svenska=sv'), spellchecker_rpc_url: '?_task=utils&_action=spell_html', + spellchecker_enable_learn_rpc: config.spelldict, accessibility_focus: false, oninit: 'rcmail_editor_callback' }); @@ -114,13 +115,17 @@ if (flagElement && (flag = rcube_find_object(flagElement))) flag.value = '1'; } - else { - if (!res && select.tagName == 'SELECT') - select.value = 'html'; + else if (res) { if (flagElement && (flag = rcube_find_object(flagElement))) flag.value = '0'; if (rcmail.env.composebody) rcube_find_object(rcmail.env.composebody).focus(); } + else { // !res + if (select.tagName == 'SELECT') + select.value = 'html'; + else if (select.tagName == 'INPUT') + select.checked = true; + } } diff -Nru roundcube-0.6+dfsg/program/js/googiespell.js roundcube-0.7.1/program/js/googiespell.js --- roundcube-0.6+dfsg/program/js/googiespell.js 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/program/js/googiespell.js 2012-01-17 07:50:40.000000000 +0000 @@ -1,38 +1,39 @@ var GOOGIE_CUR_LANG,GOOGIE_DEFAULT_LANG="en"; -function GoogieSpell(s,t){var l=this,r=getCookie("language");GOOGIE_CUR_LANG=r!=null?r:GOOGIE_DEFAULT_LANG;this.array_keys=function(a){var b=[],c;for(c in a)b.push([c]);return b};this.img_dir=s;this.server_url=t;this.lang_to_word=this.org_lang_to_word={da:"Dansk",de:"Deutsch",en:"English",es:"Español",fr:"Français",it:"Italiano",nl:"Nederlands",pl:"Polski",pt:"Português",fi:"Suomi",sv:"Svenska"};this.langlist_codes=this.array_keys(this.lang_to_word);this.show_change_lang_pic=!0;this.change_lang_pic_placement= -"right";this.report_state_change=!0;this.el_scroll_top=this.ta_scroll_top=0;this.lang_chck_spell="Check spelling";this.lang_revert="Revert to";this.lang_close="Close";this.lang_rsm_edt="Resume editing";this.lang_no_error_found="No spelling errors found";this.lang_no_suggestions="No suggestions";this.show_spell_img=!1;this.decoration=!0;this.use_close_btn=!1;this.report_ta_not_found=this.edit_layer_dbl_click=!0;this.custom_no_spelling_error=this.custom_ajax_error=null;this.custom_menu_builder=[];this.custom_item_evaulator= -null;this.extra_menu_items=[];this.custom_spellcheck_starter=null;this.main_controller=!0;this.all_errors_fixed_observer=this.show_menu_observer=this.spelling_state_observer=this.lang_state_observer=null;this.use_focus=!1;this.focus_link_b=this.focus_link_t=null;this.cnt_errors_fixed=this.cnt_errors=0;$(document).bind("click",function(a){a=$(a.target);a.attr("googie_action_btn")!="1"&&l.isLangWindowShown()&&l.hideLangWindow();a.attr("googie_action_btn")!="1"&&l.isErrorWindowShown()&&l.hideErrorWindow()}); -this.decorateTextarea=function(a){if(this.text_area=typeof a==="string"?document.getElementById(a):a){if(!this.spell_container&&this.decoration){var a=document.createElement("table"),b=document.createElement("tbody"),c=document.createElement("tr"),d=document.createElement("td"),e=this.isDefined(this.force_width)?this.force_width:this.text_area.offsetWidth,f=this.isDefined(this.force_height)?this.force_height:16;c.appendChild(d);b.appendChild(c);$(a).append(b).insertBefore(this.text_area).width("100%").height(f); -$(d).height(f).width(e).css("text-align","right");this.spell_container=d}this.checkSpellingState()}else this.report_ta_not_found&&alert("Text area not found")};this.setSpellContainer=function(a){this.spell_container=typeof a==="string"?document.getElementById(a):a};this.setLanguages=function(a){this.lang_to_word=a;this.langlist_codes=this.array_keys(a)};this.setCurrentLanguage=function(a){GOOGIE_CUR_LANG=a;var b=new Date;b.setTime(b.getTime()+31536E6);setCookie("language",a,b)};this.setForceWidthHeight= -function(a,b){this.force_width=a;this.force_height=b};this.setDecoration=function(a){this.decoration=a};this.dontUseCloseButtons=function(){this.use_close_btn=!1};this.appendNewMenuItem=function(a,b,c){this.extra_menu_items.push([a,b,c])};this.appendCustomMenuBuilder=function(a,b){this.custom_menu_builder.push([a,b])};this.setFocus=function(){try{return this.focus_link_b.focus(),this.focus_link_t.focus(),!0}catch(a){return!1}};this.setStateChanged=function(a){this.state=a;this.spelling_state_observer!= -null&&this.report_state_change&&this.spelling_state_observer(a,this)};this.setReportStateChange=function(a){this.report_state_change=a};this.getUrl=function(){return this.server_url+GOOGIE_CUR_LANG};this.escapeSpecial=function(a){return a?a.replace(/&/g,"&").replace(//g,">"):""};this.createXMLReq=function(a){return''+a+""}; -this.spellCheck=function(a){this.prepare(a);var a=this.escapeSpecial(this.orginal_text),b=this;$.ajax({type:"POST",url:this.getUrl(),data:this.createXMLReq(a),dataType:"text",error:function(){b.custom_ajax_error?b.custom_ajax_error(b):alert("An error was encountered on the server. Please try again later.");b.main_controller&&($(b.spell_span).remove(),b.removeIndicator());b.checkSpellingState()},success:function(a){b.processData(a);b.results.length||(b.custom_no_spelling_error?b.custom_no_spelling_error(b): -b.flashNoSpellingErrorState());b.removeIndicator()}})};this.prepare=function(a,b){this.cnt_errors=this.cnt_errors_fixed=0;this.setStateChanged("checking_spell");!b&&this.main_controller&&this.appendIndicator(this.spell_span);this.error_links=[];this.ta_scroll_top=this.text_area.scrollTop;this.ignore=a;this.hideLangWindow();if($(this.text_area).val()==""||a)this.custom_no_spelling_error?this.custom_no_spelling_error(this):this.flashNoSpellingErrorState(),this.removeIndicator();else{this.createEditLayer(this.text_area.offsetWidth, -this.text_area.offsetHeight);this.createErrorWindow();$("body").append(this.error_window);try{netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead")}catch(c){}this.main_controller&&$(this.spell_span).unbind("click");this.orginal_text=$(this.text_area).val()}};this.parseResult=function(a){var b=/\w+="(\d+|true)"/g,c=/\t/g,a=a.match(/]*>[^<]*<\/c>/g),d=[];if(a==null)return d;for(var e=0,f=a.length;e]*>/g,"").split(c);for(h=0;hd&&(this.results[c].attrs.o+=b)};this.saveOldValue=function(a,b){a.is_changed= -!0;a.old_value=b};this.createListSeparator=function(){var a=document.createElement("td"),b=document.createElement("tr");$(a).html(" ").attr("googie_action_btn","1").css({cursor:"default","font-size":"3px","border-top":"1px solid #ccc","padding-top":"3px"});b.appendChild(a);return b};this.correctError=function(a,b,c,d){var e=b.innerHTML,c=c.nodeType==3?c.nodeValue:c.innerHTML,f=this.results[a].attrs.o;if(d)d=b.previousSibling.innerHTML,b.previousSibling.innerHTML=d.slice(0,d.length-1),e=" "+e,f--; -this.hideErrorWindow();this.updateOrginalText(f,e,c,a);$(b).html(c).css("color","green").attr("is_corrected",!0);this.results[a].attrs.l=c.length;this.isDefined(b.old_value)||this.saveOldValue(b,e);this.errorFixed()};this.showErrorWindow=function(a,b){this.show_menu_observer&&this.show_menu_observer(this);var c=this,d=$(a).offset(),e=document.createElement("table"),f=document.createElement("tbody");$(this.error_window).html("");$(e).addClass("googie_list").attr("googie_action_btn","1");for(var j= -!1,g=0;g0&&f.appendChild(this.createListSeparator());var q=function(b){if(b/g,">"):""};this.createXMLReq=function(a){return''+ +a+""};this.spellCheck=function(a){this.prepare(a);var a=this.escapeSpecial(this.orginal_text),b=this;$.ajax({type:"POST",url:this.getUrl(),data:this.createXMLReq(a),dataType:"text",error:function(){b.custom_ajax_error?b.custom_ajax_error(b):alert("An error was encountered on the server. Please try again later.");b.main_controller&&($(b.spell_span).remove(),b.removeIndicator());b.checkSpellingState()},success:function(a){b.processData(a);b.results.length||(b.custom_no_spelling_error? +b.custom_no_spelling_error(b):b.flashNoSpellingErrorState());b.removeIndicator()}})};this.learnWord=function(a){var a=this.escapeSpecial(a.innerHTML),b=this,a=''+a+"";$.ajax({type:"POST",url:this.getUrl(),data:a,dataType:"text",error:function(){b.custom_ajax_error?b.custom_ajax_error(b):alert("An error was encountered on the server. Please try again later.")},success:function(){}})};this.prepare=function(a,b){this.cnt_errors= +this.cnt_errors_fixed=0;this.setStateChanged("checking_spell");!b&&this.main_controller&&this.appendIndicator(this.spell_span);this.error_links=[];this.ta_scroll_top=this.text_area.scrollTop;this.ignore=a;this.hideLangWindow();if(""==$(this.text_area).val()||a)this.custom_no_spelling_error?this.custom_no_spelling_error(this):this.flashNoSpellingErrorState(),this.removeIndicator();else{this.createEditLayer(this.text_area.offsetWidth,this.text_area.offsetHeight);this.createErrorWindow();$("body").append(this.error_window); +try{netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead")}catch(c){}this.main_controller&&$(this.spell_span).unbind("click");this.orginal_text=$(this.text_area).val()}};this.parseResult=function(a){var b=/\w+="(\d+|true)"/g,c=/\t/g,a=a.match(/]*>[^<]*<\/c>/g),d=[];if(null==a)return d;for(var e=0,f=a.length;e]*>/g,"").split(c);for(h=0;hd&&(this.results[c].attrs.o+=b)};this.saveOldValue=function(a,b){a.is_changed=!0;a.old_value=b};this.createListSeparator=function(){var a=document.createElement("td"), +b=document.createElement("tr");$(a).html(" ").attr("googie_action_btn","1").css({cursor:"default","font-size":"3px","border-top":"1px solid #ccc","padding-top":"3px"});b.appendChild(a);return b};this.correctError=function(a,b,c,d){var e=b.innerHTML,c=3==c.nodeType?c.nodeValue:c.innerHTML,f=this.results[a].attrs.o;if(d)d=b.previousSibling.innerHTML,b.previousSibling.innerHTML=d.slice(0,d.length-1),e=" "+e,f--;this.hideErrorWindow();this.updateOrginalText(f,e,c,a);$(b).html(c).css("color","green").attr("is_corrected", +!0);this.results[a].attrs.l=c.length;this.isDefined(b.old_value)||this.saveOldValue(b,e);this.errorFixed()};this.ignoreError=function(a){$(a).removeAttr("class").css("color","").unbind();this.hideErrorWindow()};this.showErrorWindow=function(a,b){this.show_menu_observer&&this.show_menu_observer(this);var c=this,d=$(a).offset(),e=document.createElement("table"),f=document.createElement("tbody");$(this.error_window).html("");$(e).addClass("googie_list").attr("googie_action_btn","1");for(var j=!1,g=0;g< +this.custom_menu_builder.length;g++){var h=this.custom_menu_builder[g];if(h[0](this.results[b])){j=h[1](this,f,a);break}}if(!j){var j=this.results[b].suggestions,l=this.results[b].attrs.o,g=this.results[b].attrs.l,k,m;this.has_dictionary&&!$(a).attr("is_corrected")&&(h=document.createElement("tr"),k=document.createElement("td"),m=document.createElement("span"),$(m).text(this.lang_learn_word),$(k).attr("googie_action_btn","1").css("cursor","default").mouseover(c.item_onmouseover).mouseout(c.item_onmouseout).click(function(){c.learnWord(a, +b);c.ignoreError(a,b)}),k.appendChild(m),h.appendChild(k),f.appendChild(h));for(var o=0,g=j.length;o").css({position:"absolute", -"z-index":-1}),$("body").append(d),this.error_window_iframe=d;$(this.error_window_iframe).css({top:this.error_window.offsetTop,left:this.error_window.offsetLeft,width:this.error_window.offsetWidth,height:this.error_window.offsetHeight}).show()}};this.createEditLayer=function(a,b){this.edit_layer=document.createElement("div");$(this.edit_layer).addClass("googie_edit_layer").attr("id","googie_edit_layer").width("auto").height(b);this.text_area.nodeName.toLowerCase()!="input"||$(this.text_area).val()== -""?$(this.edit_layer).css("overflow","auto").height(b-4):$(this.edit_layer).css("overflow","hidden");var c=this;this.edit_layer_dbl_click&&$(this.edit_layer).dblclick(function(a){if(a.target.className!="googie_link"&&!c.isErrorWindowShown()){c.resumeEditing();var b=function(){$(c.text_area).focus();b=null};window.setTimeout(b,10)}return!1})};this.resumeEditing=function(){this.setStateChanged("ready");if(this.edit_layer)this.el_scroll_top=this.edit_layer.scrollTop;this.hideErrorWindow();this.main_controller&& -$(this.spell_span).removeClass().addClass("googie_no_style");if(!this.ignore&&(this.use_focus&&($(this.focus_link_t).remove(),$(this.focus_link_b).remove()),$(this.edit_layer).remove(),$(this.text_area).show(),this.el_scroll_top!=void 0))this.text_area.scrollTop=this.el_scroll_top;this.checkSpellingState(!1)};this.createErrorLink=function(a,b){var c=document.createElement("span"),d=this,e=function(){d.showErrorWindow(c,b);e=null;return!1};$(c).html(a).addClass("googie_link").bind("click",e).attr({googie_action_btn:"1", -g_id:b,is_corrected:!1});return c};this.createPart=function(a){if(a==" ")return document.createTextNode(" ");var a=this.escapeSpecial(a),a=a.replace(/\n/g,"
    "),a=a.replace(/ /g,"  "),a=a.replace(/^ /g," "),a=a.replace(/ $/g," "),b=document.createElement("span");$(b).html(a);return b};this.showErrorsInIframe=function(){var a=document.createElement("div"),b=0,c=this.results;if(c.length>0){for(var d=0,e=c.length;d"),a=a.replace(/ /g,"  "),a=a.replace(/^ /g," "),a=a.replace(/ $/g," "),b=document.createElement("span");$(b).html(a);return b};this.showErrorsInIframe=function(){var a=document.createElement("div"),b=0,c=this.results;if(0").attr({src:this.img_dir+"change_lang.gif",alt:"Change language",googie_action_btn:"1"}),b=document.createElement("span");l= -this;$(b).addClass("googie_lang_3d_on").append(a).bind("click",function(){var a=this.tagName.toLowerCase()=="img"?this.parentNode:this;$(a).hasClass("googie_lang_3d_click")?(a.className="googie_lang_3d_on",l.hideLangWindow()):(a.className="googie_lang_3d_click",l.showLangWindow(a))});return b};this.createSpellDiv=function(){var a=document.createElement("span");$(a).addClass("googie_check_spelling_link").text(this.lang_chck_spell);this.show_spell_img&&$(a).append(" ").append($("").attr("src", -this.img_dir+"spellc.gif"));return a};this.flashNoSpellingErrorState=function(a){this.setStateChanged("no_error_found");var b=this;if(this.main_controller){var c;c=a?function(){a();b.checkSpellingState()}:function(){b.checkSpellingState()};var d=$("").text(this.lang_no_error_found);$(this.switch_lan_pic).hide();$(this.spell_span).empty().append(d).removeClass().addClass("googie_check_spelling_ok");window.setTimeout(c,1E3)}};this.resumeEditingState=function(){this.setStateChanged("resume_editing"); -if(this.main_controller){var a=$("").text(this.lang_rsm_edt),b=this;$(this.switch_lan_pic).hide();$(this.spell_span).empty().unbind().append(a).bind("click",function(){b.resumeEditing()}).removeClass().addClass("googie_resume_editing")}try{this.edit_layer.scrollTop=this.ta_scroll_top}catch(c){}};this.checkSpellingState=function(a){a&&this.setStateChanged("ready");this.switch_lan_pic=this.show_change_lang_pic?this.createChangeLangPic():document.createElement("span");var a=this.createSpellDiv(), -b=this;this.custom_spellcheck_starter?$(a).bind("click",function(){b.custom_spellcheck_starter()}):$(a).bind("click",function(){b.spellCheck()});this.main_controller&&(this.change_lang_pic_placement=="left"?$(this.spell_container).empty().append(this.switch_lan_pic).append(" ").append(a):$(this.spell_container).empty().append(a).append(" ").append(this.switch_lan_pic));this.spell_span=a};this.isDefined=function(a){return a!==void 0&&a!==null};this.errorFixed=function(){this.cnt_errors_fixed++;this.all_errors_fixed_observer&& -this.cnt_errors_fixed==this.cnt_errors&&(this.hideErrorWindow(),this.all_errors_fixed_observer())};this.errorFound=function(){this.cnt_errors++};this.createCloseButton=function(a){return this.createButton(this.lang_close,"googie_list_close",a)};this.createButton=function(a,b,c){var d=document.createElement("tr"),e=document.createElement("td"),f;b?(f=document.createElement("span"),$(f).addClass(b).html(a)):f=document.createTextNode(a);$(e).bind("click",c).bind("mouseover",this.item_onmouseover).bind("mouseout", -this.item_onmouseout);e.appendChild(f);d.appendChild(e);return d};this.removeIndicator=function(){window.rcmail&&rcmail.set_busy(!1,null,this.rc_msg_id)};this.appendIndicator=function(){if(window.rcmail)this.rc_msg_id=rcmail.set_busy(!0,"checking")};this.createFocusLink=function(a){var b=document.createElement("a");$(b).attr({href:"javascript:;",name:a});return b};this.item_onmouseover=function(){this.className!="googie_list_revert"&&this.className!="googie_list_close"?this.className="googie_list_onhover": -this.parentNode.className="googie_list_onhover"};this.item_onmouseout=function(){this.className!="googie_list_revert"&&this.className!="googie_list_close"?this.className="googie_list_onout":this.parentNode.className="googie_list_onout"}}; +[];for(i=0;i").attr({src:this.img_dir+ +"change_lang.gif",alt:"Change language",googie_action_btn:"1"}),b=document.createElement("span");l=this;$(b).addClass("googie_lang_3d_on").append(a).bind("click",function(){var a="img"==this.tagName.toLowerCase()?this.parentNode:this;$(a).hasClass("googie_lang_3d_click")?(a.className="googie_lang_3d_on",l.hideLangWindow()):(a.className="googie_lang_3d_click",l.showLangWindow(a))});return b};this.createSpellDiv=function(){var a=document.createElement("span");$(a).addClass("googie_check_spelling_link").text(this.lang_chck_spell); +this.show_spell_img&&$(a).append(" ").append($("").attr("src",this.img_dir+"spellc.gif"));return a};this.flashNoSpellingErrorState=function(a){this.setStateChanged("no_error_found");var b=this;if(this.main_controller){var c;c=a?function(){a();b.checkSpellingState()}:function(){b.checkSpellingState()};var d=$("").text(this.lang_no_error_found);$(this.switch_lan_pic).hide();$(this.spell_span).empty().append(d).removeClass().addClass("googie_check_spelling_ok");window.setTimeout(c,1E3)}}; +this.resumeEditingState=function(){this.setStateChanged("resume_editing");if(this.main_controller){var a=$("").text(this.lang_rsm_edt),b=this;$(this.switch_lan_pic).hide();$(this.spell_span).empty().unbind().append(a).bind("click",function(){b.resumeEditing()}).removeClass().addClass("googie_resume_editing")}try{this.edit_layer.scrollTop=this.ta_scroll_top}catch(c){}};this.checkSpellingState=function(a){a&&this.setStateChanged("ready");this.switch_lan_pic=this.show_change_lang_pic?this.createChangeLangPic(): +document.createElement("span");var a=this.createSpellDiv(),b=this;this.custom_spellcheck_starter?$(a).bind("click",function(){b.custom_spellcheck_starter()}):$(a).bind("click",function(){b.spellCheck()});this.main_controller&&("left"==this.change_lang_pic_placement?$(this.spell_container).empty().append(this.switch_lan_pic).append(" ").append(a):$(this.spell_container).empty().append(a).append(" ").append(this.switch_lan_pic));this.spell_span=a};this.isDefined=function(a){return void 0!==a&&null!== +a};this.errorFixed=function(){this.cnt_errors_fixed++;this.all_errors_fixed_observer&&this.cnt_errors_fixed==this.cnt_errors&&(this.hideErrorWindow(),this.all_errors_fixed_observer())};this.errorFound=function(){this.cnt_errors++};this.createCloseButton=function(a){return this.createButton(this.lang_close,"googie_list_close",a)};this.createButton=function(a,b,c){var d=document.createElement("tr"),e=document.createElement("td"),f;b?(f=document.createElement("span"),$(f).addClass(b).html(a)):f=document.createTextNode(a); +$(e).bind("click",c).bind("mouseover",this.item_onmouseover).bind("mouseout",this.item_onmouseout);e.appendChild(f);d.appendChild(e);return d};this.removeIndicator=function(){window.rcmail&&rcmail.set_busy(!1,null,this.rc_msg_id)};this.appendIndicator=function(){if(window.rcmail)this.rc_msg_id=rcmail.set_busy(!0,"checking")};this.createFocusLink=function(a){var b=document.createElement("a");$(b).attr({href:"javascript:;",name:a});return b};this.item_onmouseover=function(){"googie_list_revert"!=this.className&& +"googie_list_close"!=this.className?this.className="googie_list_onhover":this.parentNode.className="googie_list_onhover"};this.item_onmouseout=function(){"googie_list_revert"!=this.className&&"googie_list_close"!=this.className?this.className="googie_list_onout":this.parentNode.className="googie_list_onout"}}; diff -Nru roundcube-0.6+dfsg/program/js/googiespell.js.src roundcube-0.7.1/program/js/googiespell.js.src --- roundcube-0.6+dfsg/program/js/googiespell.js.src 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/program/js/googiespell.js.src 2012-01-17 07:50:40.000000000 +0000 @@ -1,8 +1,11 @@ /* SpellCheck jQuery'fied spell checker based on GoogieSpell 4.0 - Copyright Amir Salihefendic 2006 - Copyright Aleksander Machniak 2009 + (which was published under GPL "version 2 or any later version") + + Copyright (C) 2006 Amir Salihefendic + Copyright (C) 2009 Aleksander Machniak + Copyright (C) 2011 Kolab Systems AG LICENSE GPL AUTHORS @@ -13,7 +16,8 @@ var GOOGIE_CUR_LANG, GOOGIE_DEFAULT_LANG = 'en'; -function GoogieSpell(img_dir, server_url) { +function GoogieSpell(img_dir, server_url, has_dict) +{ var ref = this, cookie_value = getCookie('language'); @@ -49,6 +53,7 @@ this.lang_rsm_edt = "Resume editing"; this.lang_no_error_found = "No spelling errors found"; this.lang_no_suggestions = "No suggestions"; + this.lang_learn_word = "Add to dictionary"; this.show_spell_img = false; // roundcube mod. this.decoration = true; @@ -64,6 +69,7 @@ this.extra_menu_items = []; this.custom_spellcheck_starter = null; this.main_controller = true; + this.has_dictionary = has_dict; // Observers this.lang_state_observer = null; @@ -90,7 +96,8 @@ }); -this.decorateTextarea = function(id) { +this.decorateTextarea = function(id) +{ this.text_area = typeof id === 'string' ? document.getElementById(id) : id; if (this.text_area) { @@ -119,16 +126,19 @@ ////// // API Functions (the ones that you can call) ///// -this.setSpellContainer = function(id) { +this.setSpellContainer = function(id) +{ this.spell_container = typeof id === 'string' ? document.getElementById(id) : id; }; -this.setLanguages = function(lang_dict) { +this.setLanguages = function(lang_dict) +{ this.lang_to_word = lang_dict; this.langlist_codes = this.array_keys(lang_dict); }; -this.setCurrentLanguage = function(lan_code) { +this.setCurrentLanguage = function(lan_code) +{ GOOGIE_CUR_LANG = lan_code; //Set cookie @@ -137,29 +147,35 @@ setCookie('language', lan_code, now); }; -this.setForceWidthHeight = function(width, height) { +this.setForceWidthHeight = function(width, height) +{ // Set to null if you want to use one of them this.force_width = width; this.force_height = height; }; -this.setDecoration = function(bool) { +this.setDecoration = function(bool) +{ this.decoration = bool; }; -this.dontUseCloseButtons = function() { +this.dontUseCloseButtons = function() +{ this.use_close_btn = false; }; -this.appendNewMenuItem = function(name, call_back_fn, checker) { +this.appendNewMenuItem = function(name, call_back_fn, checker) +{ this.extra_menu_items.push([name, call_back_fn, checker]); }; -this.appendCustomMenuBuilder = function(eval_fn, builder) { +this.appendCustomMenuBuilder = function(eval_fn, builder) +{ this.custom_menu_builder.push([eval_fn, builder]); }; -this.setFocus = function() { +this.setFocus = function() +{ try { this.focus_link_b.focus(); this.focus_link_t.focus(); @@ -174,13 +190,15 @@ ////// // Set functions (internal) ///// -this.setStateChanged = function(current_state) { +this.setStateChanged = function(current_state) +{ this.state = current_state; if (this.spelling_state_observer != null && this.report_state_change) this.spelling_state_observer(current_state, this); }; -this.setReportStateChange = function(bool) { +this.setReportStateChange = function(bool) +{ this.report_state_change = bool; }; @@ -188,28 +206,31 @@ ////// // Request functions ///// -this.getUrl = function() { +this.getUrl = function() +{ return this.server_url + GOOGIE_CUR_LANG; }; -this.escapeSpecial = function(val) { +this.escapeSpecial = function(val) +{ return val ? val.replace(/&/g, "&").replace(//g, ">") : ''; }; -this.createXMLReq = function (text) { +this.createXMLReq = function (text) +{ return '' + '' + '' + text + ''; }; -this.spellCheck = function(ignore) { +this.spellCheck = function(ignore) +{ this.prepare(ignore); var req_text = this.escapeSpecial(this.orginal_text), ref = this; - $.ajax({ type: 'POST', url: this.getUrl(), - data: this.createXMLReq(req_text), dataType: 'text', + $.ajax({ type: 'POST', url: this.getUrl(), data: this.createXMLReq(req_text), dataType: 'text', error: function(o) { if (ref.custom_ajax_error) ref.custom_ajax_error(ref); @@ -234,6 +255,25 @@ }); }; +this.learnWord = function(word, id) +{ + word = this.escapeSpecial(word.innerHTML); + + var ref = this, + req_text = '' + word + ''; + + $.ajax({ type: 'POST', url: this.getUrl(), data: req_text, dataType: 'text', + error: function(o) { + if (ref.custom_ajax_error) + ref.custom_ajax_error(ref); + else + alert('An error was encountered on the server. Please try again later.'); + }, + success: function(data) { + } + }); +}; + ////// // Spell checking functions @@ -274,7 +314,8 @@ this.orginal_text = $(this.text_area).val(); }; -this.parseResult = function(r_text) { +this.parseResult = function(r_text) +{ // Returns an array: result[item] -> ['attrs'], ['suggestions'] var re_split_attr_c = /\w+="(\d+|true)"/g, re_split_text = /\t/g, @@ -324,21 +365,25 @@ ////// // Error menu functions ///// -this.createErrorWindow = function() { +this.createErrorWindow = function() +{ this.error_window = document.createElement('div'); $(this.error_window).addClass('googie_window popupmenu').attr('googie_action_btn', '1'); }; -this.isErrorWindowShown = function() { +this.isErrorWindowShown = function() +{ return $(this.error_window).is(':visible'); }; -this.hideErrorWindow = function() { +this.hideErrorWindow = function() +{ $(this.error_window).hide(); $(this.error_window_iframe).hide(); }; -this.updateOrginalText = function(offset, old_value, new_value, id) { +this.updateOrginalText = function(offset, old_value, new_value, id) +{ var part_1 = this.orginal_text.substring(0, offset), part_2 = this.orginal_text.substring(offset+old_value.length), add_2_offset = new_value.length - old_value.length; @@ -357,18 +402,20 @@ elm.old_value = old_value; }; -this.createListSeparator = function() { +this.createListSeparator = function() +{ var td = document.createElement('td'), tr = document.createElement('tr'); $(td).html(' ').attr('googie_action_btn', '1') - .css({'cursor': 'default', 'font-size': '3px', 'border-top': '1px solid #ccc', 'padding-top': '3px'}); + .css({'cursor': 'default', 'font-size': '3px', 'border-top': '1px solid #ccc', 'padding-top': '3px'}); tr.appendChild(td); return tr; }; -this.correctError = function(id, elm, l_elm, rm_pre_space) { +this.correctError = function(id, elm, l_elm, rm_pre_space) +{ var old_value = elm.innerHTML, new_value = l_elm.nodeType == 3 ? l_elm.nodeValue : l_elm.innerHTML, offset = this.results[id]['attrs']['o']; @@ -393,7 +440,15 @@ this.errorFixed(); }; -this.showErrorWindow = function(elm, id) { +this.ignoreError = function(elm, id) +{ + // @TODO: ignore all same words + $(elm).removeAttr('class').css('color', '').unbind(); + this.hideErrorWindow(); +}; + +this.showErrorWindow = function(elm, id) +{ if (this.show_menu_observer) this.show_menu_observer(this); @@ -414,6 +469,7 @@ break; } } + if (!changed) { // Build up the result list var suggestions = this.results[id]['suggestions'], @@ -421,6 +477,26 @@ len = this.results[id]['attrs']['l'], row, item, dummy; + // [Add to dictionary] button + if (this.has_dictionary && !$(elm).attr('is_corrected')) { + row = document.createElement('tr'), + item = document.createElement('td'), + dummy = document.createElement('span'); + + $(dummy).text(this.lang_learn_word); + $(item).attr('googie_action_btn', '1').css('cursor', 'default') + .mouseover(ref.item_onmouseover) + .mouseout(ref.item_onmouseout) + .click(function(e) { + ref.learnWord(elm, id); + ref.ignoreError(elm, id); + }); + + item.appendChild(dummy); + row.appendChild(item); + list.appendChild(row); + } +/* if (suggestions.length == 0) { row = document.createElement('tr'), item = document.createElement('td'), @@ -433,7 +509,7 @@ row.appendChild(item); list.appendChild(row); } - +*/ for (var i=0, len=suggestions.length; i < len; i++) { row = document.createElement('tr'), item = document.createElement('td'), @@ -441,16 +517,15 @@ $(dummy).html(suggestions[i]); - $(item).bind('mouseover', this.item_onmouseover) - .bind('mouseout', this.item_onmouseout) - .bind('click', function(e) { ref.correctError(id, elm, e.target.firstChild) }); + $(item).mouseover(this.item_onmouseover).mouseout(this.item_onmouseout) + .click(function(e) { ref.correctError(id, elm, e.target.firstChild) }); item.appendChild(dummy); row.appendChild(item); list.appendChild(row); } - //The element is changed, append the revert + // The element is changed, append the revert if (elm.is_changed && elm.innerHTML != elm.old_value) { var old_value = elm.old_value, revert_row = document.createElement('tr'), @@ -459,11 +534,10 @@ $(rev_span).addClass('googie_list_revert').html(this.lang_revert + ' ' + old_value); - $(revert).bind('mouseover', this.item_onmouseover) - .bind('mouseout', this.item_onmouseout) - .bind('click', function(e) { + $(revert).mouseover(this.item_onmouseover).mouseout(this.item_onmouseout) + .click(function(e) { ref.updateOrginalText(offset, elm.innerHTML, old_value, id); - $(elm).attr('is_corrected', true).css('color', '#b91414').html(old_value); + $(elm).removeAttr('is_corrected').css('color', '#b91414').html(old_value); ref.hideErrorWindow(); }); @@ -498,11 +572,11 @@ $(ok_pic).attr('src', this.img_dir + 'ok.gif') .width(32).height(16) .css({'cursor': 'pointer', 'margin-left': '2px', 'margin-right': '2px'}) - .bind('click', onsub); + .click(onsub); $(edit_form).attr('googie_action_btn', '1') .css({'margin': 0, 'padding': 0, 'cursor': 'default', 'white-space': 'nowrap'}) - .bind('submit', onsub); + .submit(onsub); edit_form.appendChild(edit_input); edit_form.appendChild(ok_pic); @@ -523,9 +597,9 @@ e_col = document.createElement('td'); $(e_col).html(e_elm[0]) - .bind('mouseover', ref.item_onmouseover) - .bind('mouseout', ref.item_onmouseout) - .bind('click', function() { return e_elm[1](elm, ref) }); + .mouseover(ref.item_onmouseover) + .mouseout(ref.item_onmouseout) + .click(function() { return e_elm[1](elm, ref) }); e_row.appendChild(e_col); list.appendChild(e_row); @@ -575,7 +649,8 @@ ////// // Edit layer (the layer where the suggestions are stored) ////// -this.createEditLayer = function(width, height) { +this.createEditLayer = function(width, height) +{ this.edit_layer = document.createElement('div'); $(this.edit_layer).addClass('googie_edit_layer').attr('id', 'googie_edit_layer') .width('auto').height(height); @@ -603,7 +678,8 @@ } }; -this.resumeEditing = function() { +this.resumeEditing = function() +{ this.setStateChanged('ready'); if (this.edit_layer) @@ -629,7 +705,8 @@ this.checkSpellingState(false); }; -this.createErrorLink = function(text, id) { +this.createErrorLink = function(text, id) +{ var elm = document.createElement('span'), ref = this, d = function (e) { @@ -638,13 +715,14 @@ return false; }; - $(elm).html(text).addClass('googie_link').bind('click', d) - .attr({'googie_action_btn' : '1', 'g_id' : id, 'is_corrected' : false}); + $(elm).html(text).addClass('googie_link').click(d).removeAttr('is_corrected') + .attr({'googie_action_btn' : '1', 'g_id' : id}); return elm; }; -this.createPart = function(txt_part) { +this.createPart = function(txt_part) +{ if (txt_part == " ") return document.createTextNode(" "); @@ -659,7 +737,8 @@ return span; }; -this.showErrorsInIframe = function() { +this.showErrorsInIframe = function() +{ var output = document.createElement('div'), pointer = 0, results = this.results; @@ -717,7 +796,8 @@ ////// // Choose language menu ////// -this.createLangWindow = function() { +this.createLangWindow = function() +{ this.language_window = document.createElement('div'); $(this.language_window).addClass('googie_window popupmenu') .width(100).attr('googie_action_btn', '1'); @@ -776,16 +856,19 @@ this.language_window.appendChild(table); }; -this.isLangWindowShown = function() { +this.isLangWindowShown = function() +{ return $(this.language_window).is(':visible'); }; -this.hideLangWindow = function() { +this.hideLangWindow = function() +{ $(this.language_window).hide(); $(this.switch_lan_pic).removeClass().addClass('googie_lang_3d_on'); }; -this.showLangWindow = function(elm) { +this.showLangWindow = function(elm) +{ if (this.show_menu_observer) this.show_menu_observer(this); @@ -806,11 +889,13 @@ this.highlightCurSel(); }; -this.deHighlightCurSel = function() { +this.deHighlightCurSel = function() +{ $(this.lang_cur_elm).removeClass().addClass('googie_list_onout'); }; -this.highlightCurSel = function() { +this.highlightCurSel = function() +{ if (GOOGIE_CUR_LANG == null) GOOGIE_CUR_LANG = GOOGIE_DEFAULT_LANG; for (var i=0; i < this.lang_elms.length; i++) { @@ -824,7 +909,8 @@ } }; -this.createChangeLangPic = function() { +this.createChangeLangPic = function() +{ var img = $('') .attr({src: this.img_dir + 'change_lang.gif', 'alt': 'Change language', 'googie_action_btn': '1'}), switch_lan = document.createElement('span'); @@ -847,7 +933,8 @@ return switch_lan; }; -this.createSpellDiv = function() { +this.createSpellDiv = function() +{ var span = document.createElement('span'); $(span).addClass('googie_check_spelling_link').text(this.lang_chck_spell); @@ -862,7 +949,8 @@ ////// // State functions ///// -this.flashNoSpellingErrorState = function(on_finish) { +this.flashNoSpellingErrorState = function(on_finish) +{ this.setStateChanged('no_error_found'); var ref = this; @@ -888,7 +976,8 @@ } }; -this.resumeEditingState = function() { +this.resumeEditingState = function() +{ this.setStateChanged('resume_editing'); //Change link text to resume @@ -906,7 +995,8 @@ catch (e) {}; }; -this.checkSpellingState = function(fire) { +this.checkSpellingState = function(fire) +{ if (fire) this.setStateChanged('ready'); @@ -939,12 +1029,14 @@ ////// // Misc. functions ///// -this.isDefined = function(o) { +this.isDefined = function(o) +{ return (o !== undefined && o !== null) }; -this.errorFixed = function() { - this.cnt_errors_fixed++; +this.errorFixed = function() +{ + this.cnt_errors_fixed++; if (this.all_errors_fixed_observer) if (this.cnt_errors_fixed == this.cnt_errors) { this.hideErrorWindow(); @@ -952,15 +1044,18 @@ } }; -this.errorFound = function() { +this.errorFound = function() +{ this.cnt_errors++; }; -this.createCloseButton = function(c_fn) { +this.createCloseButton = function(c_fn) +{ return this.createButton(this.lang_close, 'googie_list_close', c_fn); }; -this.createButton = function(name, css_class, c_fn) { +this.createButton = function(name, css_class, c_fn) +{ var btn_row = document.createElement('tr'), btn = document.createElement('td'), spn_btn; @@ -982,14 +1077,16 @@ return btn_row; }; -this.removeIndicator = function(elm) { +this.removeIndicator = function(elm) +{ //$(this.indicator).remove(); // roundcube mod. if (window.rcmail) rcmail.set_busy(false, null, this.rc_msg_id); }; -this.appendIndicator = function(elm) { +this.appendIndicator = function(elm) +{ // modified by roundcube if (window.rcmail) this.rc_msg_id = rcmail.set_busy(true, 'checking'); @@ -1005,19 +1102,23 @@ */ } -this.createFocusLink = function(name) { +this.createFocusLink = function(name) +{ var link = document.createElement('a'); $(link).attr({'href': 'javascript:;', 'name': name}); return link; }; -this.item_onmouseover = function(e) { +this.item_onmouseover = function(e) +{ if (this.className != 'googie_list_revert' && this.className != 'googie_list_close') this.className = 'googie_list_onhover'; else this.parentNode.className = 'googie_list_onhover'; }; -this.item_onmouseout = function(e) { + +this.item_onmouseout = function(e) +{ if (this.className != 'googie_list_revert' && this.className != 'googie_list_close') this.className = 'googie_list_onout'; else diff -Nru roundcube-0.6+dfsg/program/js/list.js roundcube-0.7.1/program/js/list.js --- roundcube-0.6+dfsg/program/js/list.js 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/program/js/list.js 2012-01-17 07:50:40.000000000 +0000 @@ -1,39 +1,39 @@ -function rcube_list_widget(a,b){this.ENTER_KEY=13;this.DELETE_KEY=46;this.BACKSPACE_KEY=8;this.list=a?a:null;this.frame=null;this.rows=[];this.selection=[];this.colcount=this.rowcount=0;this.subject_col=-1;this.col_drag_active=this.drag_active=this.dont_select=this.toggleselect=this.keyboard=this.column_movable=this.draggable=this.multi_selecting=this.multiexpand=this.multiselect=this.shiftkey=!1;this.column_fixed=null;this.shift_start=this.last_selected=0;this.focused=this.in_selection_before=!1; -this.drag_mouse_start=null;this.dblclick_time=600;this.row_init=function(){};if(b&&typeof b==="object")for(var c in b)this[c]=b[c]} -rcube_list_widget.prototype={init:function(){if(this.list&&this.list.tBodies[0]){this.rows=[];this.rowcount=0;var a,b,c=this.list.tBodies[0].rows;for(a=0,b=c.length;a1){this.drag_start=!0;this.drag_mouse_start=rcube_event.get_mouse_pos(a); -rcube_event.add_listener({event:"mousemove",object:this,method:"column_drag_mouse_move"});rcube_event.add_listener({event:"mouseup",object:this,method:"column_drag_mouse_up"});this.add_dragfix();for(var c=0;c=c.depth-1)f=c.depth,$(e).css("display",""),b.expanded=!0,this.triggerEvent("expandcollapse",{uid:b.uid,expanded:b.expanded})}else if(a&&(!c||c.depth<=d))break}e=e.nextSibling}return!1}, -collapse_all:function(a){var b,c,d;if(a){if(a.expanded=!1,b=a.depth,c=a.obj.nextSibling,this.update_expando(a.uid),this.triggerEvent("expandcollapse",{uid:a.uid,expanded:a.expanded}),b&&this.multiexpand)return!1}else c=this.list.tBodies[0].firstChild,b=0;for(;c;){if(c.nodeType==1&&(d=this.rows[c.uid])){if(a&&(!d.depth||d.depth<=b))break;(a||d.depth)&&$(c).css("display","none");if(d.has_children&&d.expanded)d.expanded=!1,this.update_expando(d.uid,!1),this.triggerEvent("expandcollapse",{uid:d.uid,expanded:d.expanded})}c= -c.nextSibling}return!1},expand_all:function(a){var b,c,d;a?(a.expanded=!0,b=a.depth,c=a.obj.nextSibling,this.update_expando(a.uid,!0),this.triggerEvent("expandcollapse",{uid:a.uid,expanded:a.expanded})):(c=this.list.tBodies[0].firstChild,b=0);for(;c;){if(c.nodeType==1&&(d=this.rows[c.uid])){if(a&&d.depth<=b)break;$(c).css("display","");if(d.has_children&&!d.expanded)d.expanded=!0,this.update_expando(d.uid,!0),this.triggerEvent("expandcollapse",{uid:d.uid,expanded:d.expanded})}c=c.nextSibling}return!1}, -update_expando:function(a,b){var c=document.getElementById("rcmexpando"+a);if(c)c.className=b?"expanded":"collapsed"},get_next_row:function(){if(!this.rows)return!1;for(var a=this.rows[this.last_selected],a=a?a.obj.nextSibling:null;a&&(a.nodeType!=1||a.style.display=="none");)a=a.nextSibling;return a},get_prev_row:function(){if(!this.rows)return!1;for(var a=this.rows[this.last_selected],a=a?a.obj.previousSibling:null;a&&(a.nodeType!=1||a.style.display=="none");)a=a.previousSibling;return a},get_first_row:function(){if(this.rowcount){var a, -b,c=this.list.tBodies[0].rows;for(a=0,b=c.length-1;a=0;a--)if(b[a].id&&String(b[a].id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i)&&this.rows[RegExp.$1]!=null)return RegExp.$1}return null},select_row:function(a,b,c){var d=this.selection.join(",");this.multiselect||(b=0);if(!this.shift_start)this.shift_start= -a;if(b){switch(b){case SHIFT_KEY:this.shift_select(a,!1);break;case CONTROL_KEY:c||this.highlight_row(a,!0);break;case CONTROL_SHIFT_KEY:this.shift_select(a,!0);break;default:this.highlight_row(a,!1)}this.multi_selecting=!0}else this.shift_start=a,this.highlight_row(a,!1),this.multi_selecting=!1;this.selection.join(",")!=d&&this.triggerEvent("select");this.last_selected!=0&&this.rows[this.last_selected]&&$(this.rows[this.last_selected].obj).removeClass("focused");this.toggleselect&&this.last_selected== -a?(this.clear_selection(),a=null):$(this.rows[a].obj).addClass("focused");if(!this.selection.length)this.shift_start=null;this.last_selected=a},select:function(a){this.select_row(a,!1);this.scrollto(a)},select_next:function(){var a=this.get_next_row(),b=this.get_prev_row();(a=a?a:b)&&this.select_row(a.uid,!1,!1)},select_first:function(a){var b=this.get_first_row();b&&(a?(this.shift_select(b,a),this.triggerEvent("select"),this.scrollto(b)):this.select(b))},select_last:function(a){var b=this.get_last_row(); -b&&(a?(this.shift_select(b,a),this.triggerEvent("select"),this.scrollto(b)):this.select(b))},select_childs:function(a){if(this.rows[a]&&this.rows[a].has_children)for(var b=this.rows[a].depth,a=this.rows[a].obj.nextSibling;a;){if(a.nodeType==1&&(r=this.rows[a.uid])){if(!r.depth||r.depth<=b)break;this.in_selection(r.uid)||this.select_row(r.uid,CONTROL_KEY)}a=a.nextSibling}},shift_select:function(a,b){if(!this.rows[this.shift_start]||!this.selection.length)this.shift_start=a;var c,d=this.rows[this.shift_start].obj.rowIndex, -e=this.rows[a].obj.rowIndex,f=de?d:e;for(c in this.rows)this.rows[c].obj.rowIndex>=f&&this.rows[c].obj.rowIndex<=d?this.in_selection(c)||this.highlight_row(c,!0):this.in_selection(c)&&!b&&this.highlight_row(c,!0)},in_selection:function(a){for(var b in this.selection)if(this.selection[b]==a)return!0;return!1},select_all:function(a){if(!this.rows||!this.rows.length)return!1;var b,c=this.selection.join(",");this.selection=[];for(b in this.rows)!a||this.rows[b][a]==!0?(this.last_selected=b, -this.highlight_row(b,!0)):$(this.rows[b].obj).removeClass("selected").removeClass("unfocused");this.selection.join(",")!=c&&this.triggerEvent("select");this.focus();return!0},invert_selection:function(){if(!this.rows||!this.rows.length)return!1;var a,b=this.selection.join(",");for(a in this.rows)this.highlight_row(a,!0);this.selection.join(",")!=b&&this.triggerEvent("select");this.focus();return!0},clear_selection:function(a){var b,c=this.selection.length;if(a)for(b in this.selection){if(this.selection[b]== -a){this.selection.splice(b,1);break}}else{for(b in this.selection)this.rows[this.selection[b]]&&$(this.rows[this.selection[b]].obj).removeClass("selected").removeClass("unfocused");this.selection=[]}c&&!this.selection.length&&this.triggerEvent("select")},get_selection:function(){return this.selection},get_single_selection:function(){return this.selection.length==1?this.selection[0]:null},highlight_row:function(a,b){if(this.rows[a]&&!b){if(this.selection.length>1||!this.in_selection(a))this.clear_selection(), -this.selection[0]=a,$(this.rows[a].obj).addClass("selected")}else if(this.rows[a])if(this.in_selection(a)){var c=$.inArray(a,this.selection),d=this.selection.slice(0,c),c=this.selection.slice(c+1,this.selection.length);this.selection=d.concat(c);$(this.rows[a].obj).removeClass("selected").removeClass("unfocused")}else this.selection[this.selection.length]=a,$(this.rows[a].obj).addClass("selected")},key_press:function(a){if(this.focused!=!0)return!0;var b=rcube_event.get_keycode(a),c=rcube_event.get_modifier(a); -switch(b){case 40:case 38:case 63233:case 63232:return rcube_event.cancel(a),this.use_arrow_key(b,c);case 61:case 107:case 109:case 32:return rcube_event.cancel(a),a=this.use_plusminus_key(b,c),this.key_pressed=b,this.triggerEvent("keypress"),a;case 36:return this.select_first(c),rcube_event.cancel(a);case 35:return this.select_last(c),rcube_event.cancel(a);default:if(this.shiftkey=a.shiftKey,this.key_pressed=b,this.triggerEvent("keypress"),this.shiftkey=!1,this.key_pressed==this.BACKSPACE_KEY)return rcube_event.cancel(a)}return!0}, -key_down:function(a){switch(rcube_event.get_keycode(a)){case 27:if(this.drag_active)return this.drag_mouse_up(a);if(this.col_drag_active)return this.selected_column=null,this.column_drag_mouse_up(a);case 40:case 38:case 63233:case 63232:case 61:case 107:case 109:case 32:if(!rcube_event.get_modifier(a)&&this.focused)return rcube_event.cancel(a)}return!0},use_arrow_key:function(a,b){var c;if(a==40||a==63233)c=this.get_next_row();else if(a==38||a==63232)c=this.get_prev_row();c&&(this.select_row(c.uid, -b,!0),this.scrollto(c.uid));return!1},use_plusminus_key:function(a,b){var c=this.rows[this.last_selected];if(c)return a==32&&(a=c.expanded?109:61),a==61||a==107?b==CONTROL_KEY||this.multiexpand?this.expand_all(c):this.expand(c):b==CONTROL_KEY||this.multiexpand?this.collapse_all(c):this.collapse(c),this.update_expando(c.uid,c.expanded),!1},scrollto:function(a){var b=this.rows[a].obj;if(b&&this.frame){var c=Number(b.offsetTop);!c&&this.rows[a].parent_uid&&(this.expand_all(this.rows[this.find_root(this.rows[a].uid)]), -c=Number(b.offsetTop));if(cNumber(this.frame.scrollTop)+Number(this.frame.offsetHeight))this.frame.scrollTop=c+Number(b.offsetHeight)-Number(this.frame.offsetHeight)}},drag_mouse_move:function(a){if(a.type=="touchmove")if(a.changedTouches.length==1)a=rcube_event.touchevent(a.changedTouches[0]);else return rcube_event.cancel(a);if(this.drag_start){var b=rcube_event.get_mouse_pos(a);if(!this.drag_mouse_start||Math.abs(b.x- -this.drag_mouse_start.x)<3&&Math.abs(b.y-this.drag_mouse_start.y)<3)return!1;if(!this.draglayer)this.draglayer=$("
    ").attr("id","rcmdraglayer").css({position:"absolute",display:"none","z-index":2E3}).appendTo(document.body);var c,d,e=$.merge([],this.selection);for(c in e)d=e[c],this.rows[d].has_children&&!this.rows[d].expanded&&this.select_childs(d);this.draglayer.html("");for(c=0;c12){this.draglayer.append("...");break}if(e=this.rows[this.selection[c]].obj)for(b= -0,d=0;d=0&&this.subject_col==b){for(var f,g,h=e.childNodes[d].childNodes,b=0;b50?d.substring(0,50)+"...":d;this.draglayer.append($("
    ").text(d));break}b++}}this.draglayer.show();this.drag_active=!0;this.triggerEvent("dragstart")}this.drag_active&& -this.draglayer&&(c=rcube_event.get_mouse_pos(a),this.draglayer.css({left:c.x+20+"px",top:c.y-5+(bw.ie?document.documentElement.scrollTop:0)+"px"}),this.triggerEvent("dragmove",a?a:window.event));return this.drag_start=!1},drag_mouse_up:function(a){document.onmousemove=null;if(a.type=="touchend"&&a.changedTouches.length!=1)return rcube_event.cancel(a);this.draglayer&&this.draglayer.is(":visible")&&(this.drag_start_pos?this.draglayer.animate(this.drag_start_pos,300,"swing").hide(20):this.draglayer.hide()); -this.drag_active&&this.focus();this.drag_active=!1;rcube_event.remove_listener({event:"mousemove",object:this,method:"drag_mouse_move"});rcube_event.remove_listener({event:"mouseup",object:this,method:"drag_mouse_up"});if(bw.iphone||bw.ipad)rcube_event.remove_listener({event:"touchmove",object:this,method:"drag_mouse_move"}),rcube_event.remove_listener({event:"touchend",object:this,method:"drag_mouse_up"});this.del_dragfix();this.triggerEvent("dragend");return rcube_event.cancel(a)},column_drag_mouse_move:function(a){if(this.drag_start){var b; -b=rcube_event.get_mouse_pos(a);if(!this.drag_mouse_start||Math.abs(b.x-this.drag_mouse_start.x)<3&&Math.abs(b.y-this.drag_mouse_start.y)<3)return!1;if(!this.col_draglayer){b=$(this.list).offset();var c=this.list.tHead.rows[0].cells;this.col_draglayer=$("
    ").attr("id","rcmcoldraglayer").css(b).css({position:"absolute","z-index":2001,"background-color":"white",opacity:0.75,height:this.frame.offsetHeight-2+"px",width:this.frame.offsetWidth-2+"px"}).appendTo(document.body).append($("
    ").attr("id", -"rcmcolumnindicator").css({position:"absolute","border-right":"2px dotted #555","z-index":2002,height:this.frame.offsetHeight-2+"px"}));this.cols=[];this.list_pos=this.list_min_pos=b.left;for(b=0;b=this.cols[b]/2+this.list_pos+c)c+=this.cols[b];else break;b==0&&this.list_min_pos>d.x?c=this.list_min_pos-this.list_pos:!this.list.rowcount&&b==this.cols.length&&(c-=2);$("#rcmcolumnindicator").css({width:c+"px"});this.triggerEvent("column_dragmove",a?a:window.event)}return this.drag_start=!1},column_drag_mouse_up:function(a){document.onmousemove=null;if(this.col_draglayer)this.col_draglayer.remove(),this.col_draglayer=null;this.col_drag_active&&this.focus();this.col_drag_active= -!1;rcube_event.remove_listener({event:"mousemove",object:this,method:"column_drag_mouse_move"});rcube_event.remove_listener({event:"mouseup",object:this,method:"column_drag_mouse_up"});this.del_dragfix();if(this.selected_column!==null&&this.cols&&this.cols.length){var b,c=0,d=rcube_event.get_mouse_pos(a);for(b=0;b=this.cols[b]/2+this.list_pos+c)c+=this.cols[b];else break;b!=this.selected_column&&b!=this.selected_column+1&&this.column_replace(this.selected_column,b)}this.triggerEvent("column_dragend"); -return rcube_event.cancel(a)},add_dragfix:function(){$("iframe").each(function(){$('
    ').css({background:"#fff",width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css($(this).offset()).appendTo(document.body)})},del_dragfix:function(){$("div.iframe-dragdrop-fix").each(function(){this.parentNode.removeChild(this)})},column_replace:function(a,b){var c;c=this.list.tHead.rows[0].cells;var d=c[a],e=c[b],f=document.createElement("td"); -e?c[0].parentNode.insertBefore(f,e):c[0].parentNode.appendChild(f);c[0].parentNode.replaceChild(d,f);for(r=0,c=this.list.tBodies[0].rows.length;ra?b-1:b:this.subject_cola&&b>=this.subject_col&&this.subject_col--;this.triggerEvent("column_replace")}}; -rcube_list_widget.prototype.addEventListener=rcube_event_engine.prototype.addEventListener;rcube_list_widget.prototype.removeEventListener=rcube_event_engine.prototype.removeEventListener;rcube_list_widget.prototype.triggerEvent=rcube_event_engine.prototype.triggerEvent; +this.rows[c]&&this.rows[c].obj&&$(this.rows[c].obj).addClass("selected").removeClass("unfocused");$("*:focus",window).blur();$("iframe").each(function(){this.blur()});(a||(a=window.event))&&rcube_event.cancel(a)},blur:function(){var a,b;this.focused=!1;for(a in this.selection)b=this.selection[a],this.rows[b]&&this.rows[b].obj&&$(this.rows[b].obj).removeClass("selected").addClass("unfocused")},drag_column:function(a,b){if(1=c.depth-1)f=c.depth,$(e).css("display",""),b.expanded=!0,this.triggerEvent("expandcollapse",{uid:b.uid,expanded:b.expanded})}else if(a&&(!c||c.depth<=d))break}e=e.nextSibling}return!1},collapse_all:function(a){var b,c,d;if(a){if(a.expanded= +!1,b=a.depth,c=a.obj.nextSibling,this.update_expando(a.uid),this.triggerEvent("expandcollapse",{uid:a.uid,expanded:a.expanded}),b&&this.multiexpand)return!1}else c=this.list.tBodies[0].firstChild,b=0;for(;c;){if(1==c.nodeType&&(d=this.rows[c.uid])){if(a&&(!d.depth||d.depth<=b))break;(a||d.depth)&&$(c).css("display","none");if(d.has_children&&d.expanded)d.expanded=!1,this.update_expando(d.uid,!1),this.triggerEvent("expandcollapse",{uid:d.uid,expanded:d.expanded})}c=c.nextSibling}return!1},expand_all:function(a){var b, +c,d;a?(a.expanded=!0,b=a.depth,c=a.obj.nextSibling,this.update_expando(a.uid,!0),this.triggerEvent("expandcollapse",{uid:a.uid,expanded:a.expanded})):(c=this.list.tBodies[0].firstChild,b=0);for(;c;){if(1==c.nodeType&&(d=this.rows[c.uid])){if(a&&d.depth<=b)break;$(c).css("display","");if(d.has_children&&!d.expanded)d.expanded=!0,this.update_expando(d.uid,!0),this.triggerEvent("expandcollapse",{uid:d.uid,expanded:d.expanded})}c=c.nextSibling}return!1},update_expando:function(a,b){var c=document.getElementById("rcmexpando"+ +a);if(c)c.className=b?"expanded":"collapsed"},get_next_row:function(){if(!this.rows)return!1;for(var a=this.rows[this.last_selected],a=a?a.obj.nextSibling:null;a&&(1!=a.nodeType||"none"==a.style.display);)a=a.nextSibling;return a},get_prev_row:function(){if(!this.rows)return!1;for(var a=this.rows[this.last_selected],a=a?a.obj.previousSibling:null;a&&(1!=a.nodeType||"none"==a.style.display);)a=a.previousSibling;return a},get_first_row:function(){if(this.rowcount){var a,b,c=this.list.tBodies[0].rows; +for(a=0,b=c.length-1;ae?d:e;for(c in this.rows)this.rows[c].obj.rowIndex>= +f&&this.rows[c].obj.rowIndex<=d?this.in_selection(c)||this.highlight_row(c,!0):this.in_selection(c)&&!b&&this.highlight_row(c,!0)},in_selection:function(a){for(var b in this.selection)if(this.selection[b]==a)return!0;return!1},select_all:function(a){if(!this.rows||!this.rows.length)return!1;var b,c=this.selection.join(",");this.selection=[];for(b in this.rows)!a||!0==this.rows[b][a]?(this.last_selected=b,this.highlight_row(b,!0)):$(this.rows[b].obj).removeClass("selected").removeClass("unfocused"); +this.selection.join(",")!=c&&this.triggerEvent("select");this.focus();return!0},invert_selection:function(){if(!this.rows||!this.rows.length)return!1;var a,b=this.selection.join(",");for(a in this.rows)this.highlight_row(a,!0);this.selection.join(",")!=b&&this.triggerEvent("select");this.focus();return!0},clear_selection:function(a){var b,c=this.selection.length;if(a)for(b in this.selection){if(this.selection[b]==a){this.selection.splice(b,1);break}}else{for(b in this.selection)this.rows[this.selection[b]]&& +$(this.rows[this.selection[b]].obj).removeClass("selected").removeClass("unfocused");this.selection=[]}c&&!this.selection.length&&this.triggerEvent("select")},get_selection:function(){return this.selection},get_single_selection:function(){return 1==this.selection.length?this.selection[0]:null},highlight_row:function(a,b){if(this.rows[a]&&!b){if(1Number(this.frame.scrollTop)+Number(this.frame.offsetHeight))this.frame.scrollTop=c+Number(b.offsetHeight)-Number(this.frame.offsetHeight)}},drag_mouse_move:function(a){if("touchmove"==a.type)if(1==a.changedTouches.length)a=rcube_event.touchevent(a.changedTouches[0]);else return rcube_event.cancel(a); +if(this.drag_start){var b=rcube_event.get_mouse_pos(a);if(!this.drag_mouse_start||3>Math.abs(b.x-this.drag_mouse_start.x)&&3>Math.abs(b.y-this.drag_mouse_start.y))return!1;if(!this.draglayer)this.draglayer=$("
    ").attr("id","rcmdraglayer").css({position:"absolute",display:"none","z-index":2E3}).appendTo(document.body);var c,d,e=$.merge([],this.selection);for(c in e)d=e[c],this.rows[d].has_children&&!this.rows[d].expanded&&this.select_childs(d);this.draglayer.html("");for(c=0;cthis.subject_col||0<=this.subject_col&&this.subject_col==b){for(var f,g,h=e.childNodes[d].childNodes,b=0;b").text(d)); +break}b++}}this.draglayer.show();this.drag_active=!0;this.triggerEvent("dragstart")}this.drag_active&&this.draglayer&&(c=rcube_event.get_mouse_pos(a),this.draglayer.css({left:c.x+20+"px",top:c.y-5+(bw.ie?document.documentElement.scrollTop:0)+"px"}),this.triggerEvent("dragmove",a?a:window.event));return this.drag_start=!1},drag_mouse_up:function(a){document.onmousemove=null;if("touchend"==a.type&&1!=a.changedTouches.length)return rcube_event.cancel(a);this.draglayer&&this.draglayer.is(":visible")&& +(this.drag_start_pos?this.draglayer.animate(this.drag_start_pos,300,"swing").hide(20):this.draglayer.hide());this.drag_active&&this.focus();this.drag_active=!1;rcube_event.remove_listener({event:"mousemove",object:this,method:"drag_mouse_move"});rcube_event.remove_listener({event:"mouseup",object:this,method:"drag_mouse_up"});if(bw.iphone||bw.ipad)rcube_event.remove_listener({event:"touchmove",object:this,method:"drag_mouse_move"}),rcube_event.remove_listener({event:"touchend",object:this,method:"drag_mouse_up"}); +this.del_dragfix();this.triggerEvent("dragend");return rcube_event.cancel(a)},column_drag_mouse_move:function(a){if(this.drag_start){var b;b=rcube_event.get_mouse_pos(a);if(!this.drag_mouse_start||3>Math.abs(b.x-this.drag_mouse_start.x)&&3>Math.abs(b.y-this.drag_mouse_start.y))return!1;if(!this.col_draglayer){b=$(this.list).offset();var c=this.list.tHead.rows[0].cells;this.col_draglayer=$("
    ").attr("id","rcmcoldraglayer").css(b).css({position:"absolute","z-index":2001,"background-color":"white", +opacity:0.75,height:this.frame.offsetHeight-2+"px",width:this.frame.offsetWidth-2+"px"}).appendTo(document.body).append($("
    ").attr("id","rcmcolumnindicator").css({position:"absolute","border-right":"2px dotted #555","z-index":2002,height:this.frame.offsetHeight-2+"px"}));this.cols=[];this.list_pos=this.list_min_pos=b.left;for(b=0;b=this.cols[b]/2+this.list_pos+c)c+=this.cols[b];else break;0==b&&this.list_min_pos>d.x?c=this.list_min_pos-this.list_pos:!this.list.rowcount&&b==this.cols.length&&(c-=2);$("#rcmcolumnindicator").css({width:c+"px"});this.triggerEvent("column_dragmove",a?a:window.event)}return this.drag_start=!1},column_drag_mouse_up:function(a){document.onmousemove= +null;if(this.col_draglayer)this.col_draglayer.remove(),this.col_draglayer=null;this.col_drag_active&&this.focus();this.col_drag_active=!1;rcube_event.remove_listener({event:"mousemove",object:this,method:"column_drag_mouse_move"});rcube_event.remove_listener({event:"mouseup",object:this,method:"column_drag_mouse_up"});this.del_dragfix();if(null!==this.selected_column&&this.cols&&this.cols.length){var b,c=0,d=rcube_event.get_mouse_pos(a);for(b=0;b=this.cols[b]/2+this.list_pos+ +c)c+=this.cols[b];else break;b!=this.selected_column&&b!=this.selected_column+1&&this.column_replace(this.selected_column,b)}this.triggerEvent("column_dragend");return rcube_event.cancel(a)},add_dragfix:function(){$("iframe").each(function(){$('
    ').css({background:"#fff",width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css($(this).offset()).appendTo(document.body)})},del_dragfix:function(){$("div.iframe-dragdrop-fix").each(function(){this.parentNode.removeChild(this)})}, +column_replace:function(a,b){var c;c=this.list.tHead.rows[0].cells;var d=c[a],e=c[b],f=document.createElement("td");e?c[0].parentNode.insertBefore(f,e):c[0].parentNode.appendChild(f);c[0].parentNode.replaceChild(d,f);for(r=0,c=this.list.tBodies[0].rows.length;ra?b-1:b:this.subject_cola&&b>=this.subject_col&&this.subject_col--;this.triggerEvent("column_replace")}};rcube_list_widget.prototype.addEventListener=rcube_event_engine.prototype.addEventListener;rcube_list_widget.prototype.removeEventListener=rcube_event_engine.prototype.removeEventListener;rcube_list_widget.prototype.triggerEvent=rcube_event_engine.prototype.triggerEvent; diff -Nru roundcube-0.6+dfsg/program/js/list.js.src roundcube-0.7.1/program/js/list.js.src --- roundcube-0.6+dfsg/program/js/list.js.src 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/program/js/list.js.src 2012-01-17 07:50:40.000000000 +0000 @@ -13,7 +13,7 @@ | Requires: common.js | +-----------------------------------------------------------------------+ - $Id: list.js 4750 2011-05-12 09:27:17Z alec $ + $Id: list.js 5271 2011-09-22 20:51:42Z thomasb $ */ @@ -36,7 +36,7 @@ this.colcount = 0; this.subject_col = -1; - this.shiftkey = false; + this.modkey = 0; this.multiselect = false; this.multiexpand = false; this.multi_selecting = false; @@ -648,7 +648,7 @@ case CONTROL_KEY: if (!with_mouse) this.highlight_row(id, true); - break; + break; case CONTROL_SHIFT_KEY: this.shift_select(id, true); @@ -954,7 +954,8 @@ */ key_press: function(e) { - if (this.focused != true) + var target = e.target || {}; + if (this.focused != true || target.nodeName == 'INPUT' || target.nodeName == 'TEXTAREA' || target.nodeName == 'SELECT') return true; var keyCode = rcube_event.get_keycode(e), @@ -962,7 +963,7 @@ switch (keyCode) { case 40: - case 38: + case 38: case 63233: // "down", in safari keypress case 63232: // "up", in safari keypress // Stop propagation so that the browser doesn't scroll @@ -976,7 +977,9 @@ rcube_event.cancel(e); var ret = this.use_plusminus_key(keyCode, mod_key); this.key_pressed = keyCode; + this.modkey = mod_key; this.triggerEvent('keypress'); + this.modkey = 0; return ret; case 36: // Home this.select_first(mod_key); @@ -985,11 +988,10 @@ this.select_last(mod_key); return rcube_event.cancel(e); default: - this.shiftkey = e.shiftKey; this.key_pressed = keyCode; + this.modkey = mod_key; this.triggerEvent('keypress'); - // reset shiftkey flag, we need it only for registered events - this.shiftkey = false; + this.modkey = 0; if (this.key_pressed == this.BACKSPACE_KEY) return rcube_event.cancel(e); @@ -1003,13 +1005,17 @@ */ key_down: function(e) { + var target = e.target || {}; + if (this.focused != true || target.nodeName == 'INPUT' || target.nodeName == 'TEXTAREA' || target.nodeName == 'SELECT') + return true; + switch (rcube_event.get_keycode(e)) { case 27: if (this.drag_active) - return this.drag_mouse_up(e); + return this.drag_mouse_up(e); if (this.col_drag_active) { this.selected_column = null; - return this.column_drag_mouse_up(e); + return this.column_drag_mouse_up(e); } case 40: @@ -1044,7 +1050,7 @@ new_row = this.get_prev_row(); if (new_row) { - this.select_row(new_row.uid, mod_key, true); + this.select_row(new_row.uid, mod_key, false); this.scrollto(new_row.uid); } diff -Nru roundcube-0.6+dfsg/program/lib/html2text.php roundcube-0.7.1/program/lib/html2text.php --- roundcube-0.6+dfsg/program/lib/html2text.php 2011-10-02 13:18:48.000000000 +0000 +++ roundcube-0.7.1/program/lib/html2text.php 2012-01-17 07:50:40.000000000 +0000 @@ -145,7 +145,6 @@ var $search = array( "/\r/", // Non-legal carriage return "/[\n\t]+/", // Newlines and tabs - '/[ ]{2,}/', // Runs of spaces, pre-handling '/]*>.*?<\/script>/i', //