Page MenuHomePhorge

No OneTemporary

Size
681 KB
Referenced Files
None
Subscribers
None
This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/CHANGELOG b/CHANGELOG
index ee5e17402..b3c33b3b5 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,1449 +1,1452 @@
CHANGELOG Roundcube Webmail
===========================
+- Fix handling of URLs with asterisk characters (#1488759)
+- Remove automatic to-lowercase conversion of usernames (#1488715)
+- Fix scrolling quirk in email preview frame using Opera 12 (#1488763)
- Fix displaying of multipart/alternative messages with empty parts (#1488750)
- Fix threaded list sorting on PHP < 5.2.9 (#1488748)
- Plugin API: Add 'email_list' argument for identities data in user_create hook
- Integrated zipdownload plugin to download all attachments (#1445509)
- Fix HTML special characters handling in message list/header display (#1488523)
- List related text/html part as attachment in plain text mode (#1488677)
- Use IMAP BINARY (RFC3516) extension to fetch message/part bodies
- Fix folder creation under public namespace root (#1488665)
- Fix so "Edit as new" on draft creates a new message (#1488687)
- Fix invalid error message on deleting mail from read only folder (#1488694)
- Replace data URIs of images (pasted in HTML editor) with inline attachments (#1488502)
- Remove (too big) min-width on mail screen
- Added template object 'frame'
- Add option to enable HTML editor on forwarding (#1488517)
- Add option to not include original message on reply, rename option top_posting to reply_mode (#1485149)
- Added session_path config option and unified cookies settings in javascript
- Added "Undeleted" option to messages list filter
- Rewritten test scripts for PHPUnit
- Add new DB abstraction layer based on PHP PDO, supporting SQLite3 (#1488332)
- Removed PEAR::MDB2 package
- Removed users.alias column, added option ('user_aliases')
to use email address from identities as username (#1488581)
- Removed redundant cache.cache_id column (#1488528)
- Fix order of attachments in sent mail (#1488423)
- Fix Shift + delete button does not permanently delete messages (#1488243)
- Add Content-Length for attachments where possible (#1485478)
- Fix attachment sizes in message print page and attachment preview page (#1488515)
- Add mail attachments using drag & drop on HTML5 enabled browsers
- Add workaround for invalid BODYSTRUCTURE response - parse message with Mail_mimeDecode package (#1485585)
- Display Tiff as Jpeg in browsers without Tiff support (#1488452)
- Don't display Pdf/Tiff/Flash attachments inline without browser support (#1488452, #1487929)
- Add is_escaped attribute for html_select and html_textarea (#1488485)
- Fix issue where draft auto-save wasn't executed after some inactivity time
- Add vCard import from multiple files at once (#1488015)
- Roundcube Framework:
Add possibility to replace IMAP driver with custom class
Add IMAP auto-connection feature, improving performance with caching enabled
Replace imap_init hook with storage_init (with additional 'driver' argument)
Improved performance by caching IMAP server's capabilities in session
Unified global functions naming (rcube_ prefix)
Move global functions from main.inc and rcube_shared.inc into classes
Better classes separation
RELEASE 0.8.2
-------------
- Fix XSS vulnerability from HTTP User-Agent header (#1488737)
- Force fonts in compose fields to be all the same (#1488690)
- Fix handling vCard entries with TEL;TYPE=CELL (#1488728)
- Fix error where session wasn't updated after folder rename/delete (#1488692)
- Fix PLAIN authentication for some IMAP servers (#1488674)
- Fix encoding vCard file when contains PHOTO;ENCODING=b (#1488683)
- Fix focus issue in IE when selecting message row (#1488620)
- Add full headers view in message preview window (#1488538)
- Fix message display page issues - unified with message preview (#1488590, #1488642)
- Fix displaying all headers when they contain malformed characters (#1488666)
- Fix decoding of HTML messages with UTF-16 charset specified (#1488654)
- Fix quota capability detection so it can be overwritten by a plugin (#1488655)
- Fix identity selection on reply (#1488101)
- Fix Larry's messages list filter in IE (#1488632)
- Fix more IE issues by disabling Compat. mode with X-UA-Compatible meta tag (#1488626)
- Fix setting locales under Solaris - use additional .UTF-8 suffix (#1488628)
- Fix email address validation for addresses with IP address in domain part
- Fix Larry skin issues in IE7 compat. mode (#1488618)
- Fix so subscribed non-existing/non-accessible shared folder can be unsubscribed
RELEASE 0.8.1
-------------
- Fix bug where domain name was converted to lower-case even with login_lc=false (#1488593)
- Fix lower-casing email address on replies (#1488598)
- Fix line separator in exported messages (#1488603)
- Fix XSS issue where plain signatures wasn't secured in HTML mode (#1488613)
- Fix XSS issue where href="javascript:" wasn't secured (#1488613)
- Fix impossible to create message with empty plain text part (#1488610)
- Fix stripped apostrophes when replying in plain text to HTML message (#1488606)
- Fix inactive Save search option after advanced search (#1488607)
- Fix Remove from group option is active for contact search result (#1488608)
- Disable autocapitalization in login form on iPad/iPhone (#1488609)
- Fix focus on the list when list row is clicked (#1488600)
- Added separate From and To columns apart from smart From/To column (#1486891)
- Fix fallback to Larry skin when configured skin isn't available (#1488591)
- Fix (workaround) delete operations with some versions of memcache (#1488592)
- Fix (disable) request validation for spell and spell_html actions
RELEASE 0.8.0
-------------
- Don't show product version on login screen (can be enabled by config)
- Renamed old default skin to 'classic'. Larry is the new default skin.
- Support connections to memcached socket file (#1488577)
- Enable TinyMCE inlinepopups plugin
- Update to TinyMCE 3.5.6
- Correctly escape localized labels in javascript variable (#1488567)
- Update Net_SMTP/Auth_SASL packages to fix Digest-MD5/Cram-MD5 authentication (#1488571)
- Don't add attachments content into reply/forward/draft message body (#1488557)
- Fix 'no connection' errors on page unloads (#1488547)
- Plugin API: Add 'unauthenticated' hook (#1488138)
- Show explicit error message when provided hostname is invalid (#1488550)
- Fix wrong compose screen elements focus in IE9 (#1488541)
- Fix fatal error when date.timezone isn't set (#1488546)
- Update to TinyMCE 3.5.4.1
- Better icons with distinct shapes for priority columns (#1488377)
- Show dedicated icon for multipart/report messages (#1488524)
- Properly hide text of icon links/buttons (#1488534)
- Fix handling of unitless CSS size values in HTML message (#1488535)
- Fix removing contact photo using LDAP addressbook (#1488420)
- Fix storing X-ANNIVERSARY date in vCard format (#1488527)
- Update to Mail_Mime-1.8.5 (#1488521)
- Fix XSS vulnerability in message subject handling using Larry skin (#1488519)
- Fix handling of links with various URI schemes e.g. "skype:" (#1488106)
- Fix handling of links inside PRE elements on html to text conversion
- Fix indexing of links on html to text conversion
- Decode header value in rcube_mime::get() by default (#1488511)
- Fix errors with enabled PHP magic_quotes_sybase option (#1488506)
- Fix SQL query for contacts listing on MS SQL Server (#1488505)
- Fix window.resize handler on IE8 and Opera (#1488453)
- Don't let error message popups cover the login form (#1488500)
- Update to TinyMCE 3.5.2
- Don't show errors when moving contacts into groups they are already in (#1488493)
- Make folders with unread messages in subfolders bold again (#1486793)
- Abbreviate long attachment file names with ellipsis (#1488499)
- Fix html2text conversion of strong|b|a|th|h tags when used in upper case
- Add listcontrols template container in Larry skin (#1488498)
- Fix host autoselection when default_host is an array (#1488495)
- Move messages forwarding mode setting into Preferences
- Fix HTML entities handling in HTML editor (#1488483)
- Fix listing shared folders on Courier IMAP (#1488466)
RELEASE 0.8-rc
--------------
- Added new translations in Belarusian, Interlingua and Malayalam
- Flipped compose options arrow (#1488474)
- Fix handling of large uuencode attachments (#1488473)
- Fix handling of "usemap" attribute (#1488472)
- Fix handling of some HTML tags e.g. IMG (#1488471)
- Use similar language as a fallback for plugin localization (#1488401)
- Fix issue where signature wasn't re-added on draft compose (#1488322)
- Update to TinyMCE 3.5 (#1488459)
- Fixed multi-threaded autocompletion when number of threads > number of sources
- Allow to configure the number of values allowed for each LDAP attribute
- Support for serialized LDAP address values (usually delimited with a $)
- Less restrictive session auth checks, repeat keep-alive requests on failure (#1488449)
- Fix redirect to mail/compose on re-login (#1488226)
- Add IE8 hack for messages list issue (#1487821)
- Fix handling errors on draft auto-save
- Fix importing vCard photo with ENCODING param specified (#1488432)
- Support mutliple name/email pairs for Bcc and Reply-To identity settings (#1488445)
- Set flexible width to login form fields (#1488418)
- Fix re-draw bug on list columns change in IE8 (#1487822)
- Allow mass-removal of addresses from a group (#1487748)
- Fix removing all contacts on import to LDAP addressbook
- Fix so "Back" from compose/show doesn't reset search request (#1488238)
- Add option to delete messages instead of moving to Trash when in Junk folder (#1486686)
- Fix invisible cursor when replying to a html message (#1487073)
- Reset IP stored in session when destroying session data (#1488056)
- Fix bug where memory_limit = -1 wasn't handled properly
- Support LDAP RFC2256's country object class read/write (#1488123)
- Upgraded to jQuery 1.7.2
- Image resize with GD extension (#1488383)
- Fix lack of warning when switching task in compose window (#1488399)
- Fix bug where it wasn't possible to enter ( or & characters in autocomplete fields
- Request all needed fields from address book backends (#1488394)
- Unified (single) spellchecker button
- Scroll long lists on drag&drop (#1485946)
- Copy all skins in installto script (#1488376)
RELEASE 0.8-beta
----------------
- Upgraded to jQuery 1.7.1 (#1488337) and jQuery UI 1.8.18
- Add Russian to the spellchecker languages list (#1488135)
- Remember custom skin selection after logout (#1488355)
- Make sure About tab is always the last tab (#1488257)
- Fix issue with folder creation under INBOX. namespace (#1488349)
- Added mailto: protocol handler registration link in User Preferences (#1486580)
- Handle identity details box with an iframe (#1487020)
- Fix issue where some text from original message was missing on reply (#1488340)
- Fix autoselect_host() for login (#1488297)
- Changed license to GNU GPLv3+ with exceptions for skins & plugins
- Added address book widget on compose screen
- Use proper timezones from PHP's internal timezonedb (#1485592)
- Add separate pagesize setting for mail messages and contacts (#1488269)
- Deprecate $DB, $USER, $IMAP global variables, Use $RCMAIL instead
- Add option to set default font for HTML message (#1484137)
- Fix issues with big memory allocation of IMAP results
- Prevent from memory_limit exceeding when trying to parse big messages bodies (#1487424)
- Add possibility to add SASL mechanisms for SMTP in smtp_connect hook (#1487937)
- Mark (with different color) folders with recent messages (#1486234)
- Added About tab in Settings
- TinyMCE updated to 3.4.6
RELEASE 0.7.2
-------------
- Fix encoding of attachment with comma in name (#1488389)
- Fix handling of % character in IMAP protocol (#1488382)
- Fix duplicate names handling in addressbook searches (#1488375)
- Fix displaying of HTML messages from Disqus (#1488372)
- Disable E_STRICT warnings on PHP 5.4
- Prevent from folder selection on virtual folder collapsing (#1488346)
- Fix automatic unsubscribe of non-existent folders
- Fix double-quotes handling in recipient names
- User configurable setting how to display contact names in list
- Make contacts list sorting configurable for the admin/user
- Fix parse errors in DDL files for MS SQL Server
- Revert SORT=DISPLAY support, removed by mistake (#1488327)
- Add lost translation label in de_DE (#1488315)
- Fix drafts update issues when edited from preview pane (#1488314)
- Fix wrong variable name in rcube_ldap.php (#1488302)
- Make mime type detection based on filename extension to be case-insensitive
- Fix failure on MySQL database upgrade from 0.7 - text column can't have default value (#1488300)
RELEASE 0.7.1
-------------
- 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 crashes with eAccelerator (#1488256)
- Fix searching on IMAP servers without CHARSET specifier support (#1488271)
- 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.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 <U> 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 similar 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.7-beta
----------------
- 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)
RELEASE 0.6
-----------
- Fix bug where the last identity is used on reply (#1488101)
- Fix locked folder rename option on servers supporting RFC2086 only (#1488089)
- Fix session race conditions when composing new messages
- Fix encoding of LDAP contacts identifiers (#1488079)
- 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 compacting folder resets message list filter (#1488076)
RELEASE 0.6-rc
----------------
- Send X-Frame-Options headers to protect from clickjacking (#1487037)
- 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)
- jQuery 1.6.3
- 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
- Added unique connection identifier to IMAP debug messages
- Fix image type check for contact photo uploads
RELEASE 0.6-beta
----------------
- Fixed selecting identity on reply/forward (#1487981)
- 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 <roundcube:label />
- 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
RELEASE 0.5.4
-------------
- Fix XSS vulnerability in UI messages (#1488030)
RELEASE 0.5.3
-------------
- Fix identities "reply-to" and "bcc" fields have a bogus value when left empty (#1487943)
- Fix issue which cases IMAP disconnection when encrypt() method was used (#1487900)
- Fix some CSS issues in Settings for Internet Explorer
- Fixed handling of folder with name "0" in folder selector
- Fix bug where messages were deleted instead moved to trash folder after Shift key was used (#1487902)
- Fix relative URLs handling according to a <base> in HTML (#1487889)
- Fix handling of top-level domains with more than 5 chars or unicode chars (#1487883)
- Fix usage of non-standard HTTP error codes (#1487797)
- Fix PHP warning on mistaken in_array() usage (#1487901)
RELEASE 0.5.2
-------------
- TinyMCE 3.4.2 now compatible with IE9
- PEAR::Net_SMTP 1.5.2, fixed timeout issue (#1487843)
- Fix bug where template name without plugin prefix was used in render_page hook
- Support 'abort' and 'result' response in 'preferences_save' hook, add error handling
- Fix bug where some content would cause hang on html2text conversion (#1487863)
- Improve space-stuffing handling in format=flowed messages (#1487861)
- Fix bug where some dates would produce SQL error in MySQL (#1487856)
- Added workaround for some IMAP server with broken STATUS response (#1487859)
- Fix bug where default_charset was not used for text messages (#1487836)
- Stateless request tokens. No keep-alive necessary on login page (#1487829)
- Force names of unique constraints in PostgreSQL DDL
- Add code for prevention from IMAP connection hangs when server closes socket unexpectedly
- Remove redundant DELETE query (for old session deletion) on login
- Get around unreliable rand() and mt_rand() in session ID generation (#1486281)
- Fix some emails are not shown using Cyrus IMAP (#1487820)
- Fix handling of mime-encoded words with non-integral number of octets in a word (#1487801)
- Fix parsing links with non-printable characters inside (#1487805)
- Fixed de_CH Localization bugs (#1487773)
- Add variable for 'Today' label in date_today option (#1486120)
- Fix dont_override setting does not override existing user preferences (#1487664)
- Use only one from IMAP authentication methods to prevent login delays (1487784)
- Support strftime format in date_today option
- Fix SQL query in rcube_user::query() so it uses index on MySQL again
- Removed redundant </form> tags from contact add/edit pages
- Fix CSS error in contact details screen on IE7 (#1487775)
RELEASE 0.5.1
-------------
- Fix handling of attachments with invalid content type (#1487767)
- Add workaround for DBMail's bug http://www.dbmail.org/mantis/view.php?id=881 (#1487766)
- Use IMAP's ID extension (RFC2971) to print more info into debug log
- Security: add optional referer check to prevent CSRF in GET requests
- Fix email_dns_check setting not used for identities/contacts (#1487740)
- Fix ICANN example addresses doesn't validate (#1487742)
- Security: protect login form submission from CSRF
- Security: prevent from relaying malicious requests through modcss.inc
- Fix handling of non-image attachments in multipart/related messages (#1487750)
- Fix IDNA support when IDN/INTL modules are in use (#1487742)
- Fix handling of invalid HTML comments in messages (#1487759)
- Fix parsing FETCH response for very long headers (#1487753)
- Fix add/remove columns in message list when message_sort_order isn't set (#1487751)
- Check mime headers before attempt to parse them (#1487745)
- Quote header values in show_additional_headers plugin (#1487744)
- Fix settings UI on IE 6 (#1487724)
- Remove double borders in folder listing (#1487713)
- Separate full message headers UI element from headers table (#1487715)
- Add part MIME ID to message_part_* hooks (#1487718)
- Improve parsing of MS Outlook vCards (#1487716)
- Updated PEAR::Net_Socket to 1.0.10
- Updated PEAR::Net_IDNA2 to 0.1.1
- Fix handling of comments inside an email address spec. (#1487673)
- Show full mail subject as title when hovering a cut subject link (#1487128)
- Fix randomly disappearing folders list in IE (#1487704)
- Fix list column add/removal in IE (#1487703)
- Fix login redirect issues (#1487686)
- Require PHP 5.2.1 or greater
- Fix %h/%z variables in username_domain option (#1487701)
- Workaround for setting charset in case of malformed bodystructure response (#1487700)
- Fix impossible to subscribe to protected folders (#1487656)
- Fix setting timezone in Preferences (#1487705)
RELEASE 0.5
-----------
- Fix double-login/session issue (#1487104)
- Wrap HTML parts with <html><body> and add Doctype declaration (#1487098)
- Make rcube_autoload silently skip unknown classes (#1487109)
- Fix charset detection in vcards with encoded values (#1485542)
- Better CSS cursors for splitters (#1486874)
- Show the same message only once (#1487641)
- Fix namespaces handling (#1487649)
- Add handling of multifolder METADATA/ANNOTATION responses
- Fix handling of INBOX when personal namespace prefix is non-empty (#1487657)
- Fix handling square brackets in links (#1487672)
- Add description of 'use_https' option in main.inc.php.dist file
RELEASE 0.5-RC
--------------
- Plugin API: Add 'pass' argument in 'authenticate' hook (#1487134)
- Fix attachments of type message/rfc822 are not listed on attachments list
- Add 'login_lc' config option for case-insensitive authentication (#1487113)
- Fix window is blur'ed in IE when selecting a message (#1487316)
- Fix cursor position on compose form in Webkit browsers (#1486674)
- Fix setting charset of attachment filenames (#1487122)
- Allow setting autocomplete attribute for all inputs separately (#1487313)
- New Folder Manager UI
- Fix invalid Request when creating a folder (#1487443)
- Add folder size and quota indicator in folder manager (#1485780)
- Add possibility to move a subfolder into root folder (#1486791)
- Fix copying all messages in a folder copies only messages from current page
- Improve performance of moving or copying of all messages in a folder
- Fix plaintext versions of HTML messages don't contain placeholders for emotions (#1485206)
- Improve performance of folder rename and delete actions
- Better support for READ-ONLY and NOPERM responses handling (#1487083)
- Add confirmation message on purge/expunge command response
- Fix handling of untagged responses for AUTHENTICATE command (#1487450)
- Add username and IP address to log message on unsuccessful login (#1487626)
- Improved Mail-Followup-To and Mail-Reply-To headers handling
- Fix charset conversion for text attachments without charset specification (#1487634)
RELEASE 0.5-BETA
----------------
- Make session data storage more robust against garbage session data (#1487136)
- Config option for autocomplete on login screen
- Allow plugin templates to include local files (#1487133)
- List groups in address detail view and allow to subscribe/unsubscribe from there (#1486753)
- Messages caching: performance improvements, fixed syncing, fixes related with #1486748
- Add link to identities in compose window (#1486729)
- Add Internationalized Domain Name (IDNA) support (#1483894)
- Add option to automatically send read notifications for known senders (#1485883)
- Add option to "Return receipt" will be always checked (#1486352)
- Fix HTML to plain text conversion doesn't handle citation blocks (#1486921)
- Use custom sorting when SORT is disabled by IMAP admin (#1486959)
- Allow setting some washtml options from plugin (#1486578)
- Add option do bind for an individual LDAP address book (#1486997)
- Change reply prefix to display email address only if sender name doesn't exist (#1486550)
- Plugin API: improved 'abort' flag handling, added 'result' item in some hooks (#1486914)
- Fix mailto optional params in plain text messages aren't handled (#1487026)
- Add Reply-to-List feature (#1484252)
- Add Mail-Followup-To/Mail-Reply-To support (#1485547)
- Fix confirmation message isn't displayed after sending mail on Chrome (#1486177)
- Fix keyboard doesn't work with autocomplete list with Chrome (#1487029)
- Improve tabs to fixed width and add tabs in identities info (#1486974)
- Add unique index on users.username+users.mail_host
- Make htmleditor option more consistent and add option to use HTML on reply to HTML message (#1485840)
- Use empty envelope sender address for message disposition notifications (RFC 2298.3)
- Support SMTP Delivery Status Notifications - RFC 3461 (#1486142)
- Use css sprite image for messages list
- Add (different) attachment icon for messages of type multipart/report (#1486165)
- Prevent from inserting empty link when composing HTML message (#1486944)
- Add caching support in id2uid and uid2id functions (#1487019)
- Add SASL proxy authentication for SMTP (#1486693)
- Improve displaying of UI messages (#1486977)
- Fix double e-mail filed in identity form (#1487054)
- Display IMAP errors for LIST/THREAD/SEARCH commands (#1486905)
- Add LITERAL+ (IMAP4 non-synchronizing literals) support (RFC 2088)
- Add separate column for message status icon (#1486665)
- Add ACL extension support into IMAP classes (RFC 4314)
- Add ANNOTATEMORE extension support into IMAP classes (draft-daboo-imap-annotatemore)
- Add METADATA extension support into IMAP classes (RFC 5464)
- Fix decoding of e-mail address strings in message headers (#1487068)
- Fix handling of attachments when Content-Disposition is not inline nor attachment (#1487051)
- Improve performance of unseen messages counting (#1487058)
- Improve performance of messages counting using ESEARCH extension (RFC4731)
- Add LIST-STATUS support in rcube_imap_generic class (RFC 5819)
- Add SASL-IR support in IMAP (RFC 4959)
- Add LOGINDISABLED support (RFC 2595)
- Add support for AUTH=PLAIN in IMAP authentication
- Re-implemented SMTP proxy authentication support
- Add support for IMAP proxy authentication (#1486690)
- Add support for AUTH=DIGEST-MD5 in IMAP (RFC 2831)
- Fix parent folder with unread subfolder not bold when message is open (#1487078)
- Add basic IMAP LIST's \Noselect option support
- Add support for selection options from LIST-EXTENDED extension (RFC 5258)
- Don't list subscribed but non-existent folders (#1486225)
- Fix handling of URLs with tilde (~) or semicolon (;) character (#1487087, #1487088)
- Plugin API: added 'contact_form' hook
- Add SORT=DISPLAY support (RFC 5957)
- Plugin API: add possibility to disable plugin in AJAX mode, 'noajax' property
- Plugin API: add possibility to disable plugin in framed mode, 'noframe' property
- Improve performance of setting IMAP flags using .SILENT suffix
- Improve performance of message cache status checking with skip_disabled=true
- Support contact's email addresses up to 255 characters long (#1487095)
- Add option to place replies in the folder of the message being replied to (#1485945)
- Add missing confirmation/error messages on contact/group/message actions (#1486845)
- Add 'loading' message on message move/copy/delete/mark actions
- Improve responsiveness of messages displaying (#1486986)
- Add option for minimum length of autocomplete's string (#1486428)
- Fix operations on messages in unsubscribed folder (#1487107)
- Add support for shared folders (#1403507)
- Fix handling of folders with name "0" (#1487119)
- Fix handling of folders with "<>" characters in name
- jQuery 1.4.4
- Fix handling of HTML entity strings in plain text messages
- Fix focused elements aren't unfocused when clicking on the list (#1487123)
- Fix error in MSSQL DDL scripts (#1487112)
- Lock submit button in onsubmit event on login page (#1487036)
- Don't set attachment's charset in Content-type header (#1487122)
- Fix handling of message bodies (quoted-printable encoded) with NULL characters (#1486189)
- Add workaround for MSOE's multipart/related messages with non-related attachments
RELEASE 0.4.2
-------------
- Fix handling of backslash as IMAP delimiter
- Fix charset replacement in HTML message bodies (#1487021)
- Fix: contact group input is empty when using rename action more than once on the same group record
- Fix "Server Error! (Not Found)" when using utils/save-pref action (#1487023)
- Fix handling of Thunderbird's vCards (#1487024)
RELEASE 0.4.1
-------------
- Fix space-stuffing in format=flowed messages (#1487018)
- Fix msgexport.sh now using the new imap wrapper
- Avoid displaying password on shell (#1486947)
- Only lower-case user name if first login attempt failed (#1486393)
- Make alias setting in squirrelmail_usercopy plugin configurable (patch by pommi, #1487007)
- Prevent from saving a non-existing skin path in user prefs (#1486936)
- Improve handling of single-part messages with bogus BODYSTRUCTURE (#1486898)
- Fix path to SQL files when using pgsql/mysqli/sqlsrv drivers (#1486902)
- Fix upgrade script for SQLite (#1486903)
- Fixes in SQL init script + added update script for MSSQL database
- Remove redundant date in syslog messages (#1486945)
- Fix contacts list page controls when a group is selected (#1486946)
- Fix SMTP test in Installer (#1486952)
- Fix "Select all" causes message to be opened in folder with exactly one message (#1486913)
- Fix Tab key doesn't work in HTML editor in Google Chrome (#1486925)
- Fix TinyMCE uses zh_CN when zh_TW locale is set (#1486929)
- Fix TinyMCE buttons are hidden in Opera (#1486922)
- Fix JS error on IE when trying to send HTML message with enabled spellchecker (#1486940)
- Display inline images with known extensions and non-image content-type (#1486934)
- Fix "Threaded" checkbox after subfolder creation (#1486928)
- Fix timezone string in sent mail (#1486961)
- Show disabled checkboxes for protected folders instead of dots (#1485498)
- Added fieldsets in Identity form, added 'identity_form' hook
- Re-added 'Close' button in upload form (#1486930, #1486823)
- Fix handling of charsets with LATIN-* label
- Fix messages background image handling in some cases (#1486990)
- Fix format=flowed handling (#1486989)
- Fix when IMAP connection fails in 'get' action session shouldn't be destroyed (#1486995)
- Fix list_cols is not updated after column dragging (#1486999)
- Support %z variable in host configuration options (#1487003)
RELEASE 0.4
-----------
- Fix disapearing upload form disapears when user selects a file on Safari (#1486823)
- Don't replace error messages with loading info (#1486300)
- Fix JS errors on compose mode switch (#1486870)
- Fix message structure parsing when it lacks optional fields (#1486881)
- Include all recipients in sendmail log
- Support HTTP_X_FORWARDED_PROTO header for HTTPS detecting (#1486866)
- Fix default IMAP port configuration (#1486864)
- Create Sent folder when starting to compose a new message (#1486802)
- Fix handling of messages with Content-Type: application/* and no filename (#1484050)
- Improved compose screen: resizable body and attachments list, vertical splitter, options menu
- Fix RC forgets search results (#1483883)
- TinyMCE 3.3.7
- Improve parsing of styled empty tags in HTML messages (#1486812)
- Add %dc variable support in base_dn/bind_dn config (#1486779)
- Add button to hide/unhide the preview pane (#1484215)
- Fix no-cache headers on https to prevent content caching by proxies (#1486798)
- Fix attachment filenames broken with TNEF decoder using long filenames (#1486795)
- Use user's timezone in Date header, not server's timezone (#1486119)
- Add option to set separate footer for HTML messages (#1486660)
- Add real SMTP error description to displayed error messages (#1485927)
- Fix some IMAP errors handling when opening the message (#1485443)
- Fix related parts aren't displayed when got mimetype other than image/* (#1486432)
- Multiple identity and database support for squirrelmail_usercopy plugin (#1486517)
- Support dynamic hostname (%d/%n) variables in configuration options (#1485438)
- Add 'messages_list' hook (#1486266)
- Add request* event triggers in http_post/http_request (#1486054)
- Fix use RFC-compliant line-delimiter when saving messages on IMAP (#1486712)
- Add 'imap_timeout' option (#1486760)
- Fix forwarding of messages with winmail attachments
- Fix handling of uuencoded attachments in message body (#1485839)
- Added list_mailboxes hook in rcube_imap::list_unsubscribed() (#1486668)
- Fix wrong message on file upload error (#1486725)
- Add support for data URI scheme [RFC2397] (#1486740)
- Added 'actionbefore', 'actionafter', 'responsebefore', 'responseafter' events
- Fix double-addition of e-mail domain to content ID in HTML images
- Read and send messages with format=flowed (#1484370), fixes word wrapping issues (#1486543)
- Fix duplicated attachments when forwarding a message (#1486487)
- Fix message/rfc822 attachments containing only attachments are not parsed properly (#1486743)
- Fix %00 character in winmail.dat attachments names (#1486738)
- Fix handling errors of folder deletion (#1486705)
- Parse untagged CAPABILITY response for LOGIN command (#1486742)
- Renamed all php-cli scripts to use .sh extension
- Some files from /bin + spellchecking actions moved to the new 'utils' task
- Added thread tree icons
- Extend contact groups support (#1486682)
- Fix check-recent action issues and performance (#1486526)
- Fix messages order after checking for recent (#1484664)
- Fix autocomplete shows entries without email (#1486452)
- Fix listupdate event doesn't trigger on search response (#1486708)
- Fix select_all_mode value after selecting a message (#1486720)
- Set focus to editor on reply in HTML mode (#1486632)
- Fix composing in HTML jumps cursor to body instead of recipients (#1486674)
- Allow columns order change per user - drag&drop (#1485795)
- Add References header in read receipt (#1486681)
- Fix database constraint violation when opening a message (#1486696)
- Add 'loading' message while login is in progress (#1486667)
- Fix quota_zero_as_unlimited (#1486662)
- Fix folder subscription checking (#1486684)
- Fix INBOX appears (sometimes) twice in mailbox list (#1486672)
- Fix listing of attachments of some types e.g. "x-epoc/x-sisx-app" (#1486653)
- Fix DB Schema checking when some db_table_* options are not set (#1486654)
RELEASE 0.4-beta
----------------
- Add sizelimit and timelimit variables in LDAP config (#1486544)
- Hide IMAP host dropdown when single host is defined (#1486326)
- Add images pre-loading on login page (#1451160)
- Add HTTP_X_REAL_IP and HTTP_X_FORWARDED_FOR to successful logins log (#1486441)
- Fix setting spellcheck languages with extended codes (#1486605)
- Fix messages list scrolling in FF3.6 (#1486472)
- Fix quicksearch input focus (#1486637)
- Always set changed date when flagging a DB record as deleted + provide a cleanup script
- Fix address book/group selection (#1486619)
- Assign newly created contacts to the active group (#1486626)
- Added option not to mark messages as read when viewed in preview pane (#1485012)
- Allow plugins modify the Sent folder when composing (#1486548)
- Added optional (max_recipients) support to restrict total number of recipients per message (#1484542)
- Re-organize editor buttons, add blockquote and search buttons
- Make possible to write inside or after a quoted html message (#1485476)
- Fix bugs on unexpected IMAP connection close (#1486190, #1486270)
- Iloha's imap.inc rewritten into rcube_imap_generic class
- Added contact groups in address book (not finished yet)
- Added PageUp/PageDown/Home/End keys support on lists (#1486430)
- Added possibility to select all messages in a folder (#1484756)
- Added 'imap_force_caps' option for after-login CAPABILITY checking (#1485750)
- Password: Support dovecotpw encryption
- TinyMCE 3.3.1
- Implemented messages copying using drag&drop + SHIFT (#1484086)
- Improved performance of folders operations (#1486525)
- Fix blocked.gif attachment is not attached to the message (#1486516)
- Managesieve: import from Horde-INGO
- Managesieve: support for more than one match (#1486078)
- Managesieve: support for selectively disabling rules within a single sieve script (#1485882)
- Threaded message listing now available
- Added sorting by ARRIVAL and CC
- Message list columns configurable by the user
- Removed 'index_sort' option, now we're using empty 'message_sort_col' for this
- virtuser_query: support other identity data (#1486148)
- Options virtuser_* replaced with virtuser_* plugins
- Plugin API: Implemented 'email2user' and 'user2email' hooks
- Fix forwarding message omits CC header (#1486305)
- Add 'default_charset' option to user preferences (#1485451)
- Add 'delete_always' option to user preferences
- Support/Require tls:// prefix in 'smtp_server' option for TLS connections
- Fix inconsistent behaviour of 'delete_always' option (#1486299)
- Fix deleting all messages from last list page (#1486293)
- Flag original messages when sending a draft (#1486203)
- Changed signature separator when top-posting (#1486330)
- Let the admin define defaults for search modifiers (#1485897)
- Fix long e-mail addresses validation (#1486453)
- Remember search modifiers in user prefs (#1486146)
- Added force_7bit option to force MIME encoding of plain/text messages (#1486510)
- Use case sensitive check when checking for default folders (#1486346)
- Fix checking for new mail: now checks unseen count of inbox (#1485794)
- Improve performance by avoiding unnecessary updates to the session table (#1486325)
- Fix invalid <font> tags which cause HTML message rendering problems (#1486521)
- Fix CVE-2010-0464: Disable DNS prefetching (#1486449)
- Fix Received headers to behave better with SpamAssassin (#1486513)
- Password: Make passwords encoding consistent with core, add 'password_charset' global option (#1486473)
- Fix adding contacts SQL error on mysql (#1486459)
- Squirrelmail_usercopy: support reply-to field (#1486506)
- Fix IE spellcheck suggestion popup issue (#1486471)
- Fix email address auto-completion shows regexp pattern (#1486258)
- Fix merging of configuration parameters: user prefs always survive (#1486368)
- Fix quota indicator value after folder purge/expunge (#1486488)
- Fix external mailto links support for use as protocol handler (#1486037)
- Fix attachment excessive memory use, support messages of any size (#1484660)
- Fix setting task name according to auth state
- Password: fix vpopmaild driver (#1486478)
- Add workaround for MySQL bug [http://bugs.mysql.com/bug.php?id=46293] (#1486474)
- Fix quoted text wrapping when replying to an HTML email in plain text (#1484141)
- Fix handling of extended mailto links (with params) (#1486354)
- Fix sorting by date of messages without date header on servers without SORT (#1486286)
- Fix inconsistency when not using default table names (#1486467)
- Fix folder rename/delete buttons do not appear on creation of first folder (#1486468)
- Fix character set conversion fails on systems where iconv doesn't accept //IGNORE (#1486375)
- Log in performance: Create default folders on first login only
- Import contacts into the selected address book (by Phil Weir)
- Add support for MDB2's 'sqlsrv' driver (#1486395)
- Use jQuery-1.4
- Removed problematic browser-caching of messages
- Fix incompatybility with suhosin.executor.disable_emodifier (#1486321)
- Use PLAIN auth when CRAM fails and imap_auth_type='check' (#1486371)
- Fix removal of <title> tag from HTML messages (#1486432)
- Fix 'force_https' to specified port when URL contains a port number (#1486411)
- Fix to-text converting of HTML entities inside b/strong/th/hX tags (#1486422)
- Bug in spellchecker suggestions when server charset != UTF8 (#1486406)
- Managesieve: Fix requires generation for multiple actions (#1486397)
- Fix LDAP problem with special characters in RDN (#1486320)
- Improved handling of message parts of type message/rfc822
- Plugin API: added 'quota' hook
- Fix parsing conditional comments in HTML messages (#1486350)
- Use built-in json_encode() for proper JSON format in AJAX replies
- Allow setting only selected params in 'message_compose' hook (#1486312)
- Plugin API: added 'message_compose_body' hook (#1486285)
- Fix counters of all folders are checked in 'getunread' action with check_all_folders disabled (#1486128)
- Fix displaying alternative parts in messages of type message/rfc822 (#1486246)
- Fix possible messages exposure when using Roundcube behind a proxy (#1486281)
- Fix unicode para and line separators in javascript response (#1486310)
- Additional_message_headers: allow unsetting headers, support plugin's config file (#1486268)
- Fix displaying of hidden directories in skins list (#1486301)
- Fix open_basedir restriction error when reading skins list (#1486304)
- Fix pasting from Office apps into html editor (#1486271)
- Fix empty <a> tags parsing (#1486272)
- Don't cut off attachment names when using non-RFC2231 encoding (#1485515)
- Allow inserting signatures above replied message body (#1484272)
- Managesieve 2.0: multi-script support
- Fix imap_auth_type regression (#1486263)
RELEASE 0.3.1
------------------
- Specify toolbar container in compose template (#1486247)
- Fix $_SERVER['HTTPS'] check for SSL forcing on IIS (#1486243)
- Avoid unnecessary page loads for selected tab (#1486032)
- Fix quota indicator issues by content generation on client-size (#1486197, #1486220)
- Don't display disabled sections in Settings (#1486099)
- Added server-side e-mail address validation with 'email_dns_check' option (#1485857)
- Fix login page loading into an iframe when session expires (#1485952)
- Allow setting port number in 'force_https' option (#1486091)
- Option 'force_https' replaced by 'force_https' plugin
- Fix IE issue with non-UTF-8 characters in AJAX response (#1486159)
- Partially fixed "empty body" issue by showing raw body of malformed message (#1486166)
- Fix importing/sending to email address with whitespace (#1486214)
- Added XIMSS (CommuniGate) driver for Password plugin
- Fix newly attached files are not saved in drafts w/o editing any text (#1486202)
- Added attachment upload indicator with parallel upload (#1486058)
- Use default_charset for bodies of messages without charset definition (#1486187)
- Password: added cPanel driver
- Fix return to first page from e-mail screen (#1486105)
- Fix handling HTML comments in HTML messages (#1486189)
- Fix folder/messagelist controls alignment - icons used (#1486072)
- Fix LDAP addressbook shows 'Contact not found' error sometimes (#1486178)
- Fix cache status checking + improve cache operations performance (#1486104)
- Prevent from setting INBOX as any of special folders (#1486114)
- Fix regular expression for e-mail address (#1486152)
- Fix Received header format
- Implemented sorting by message index - added 'index_sort' option (#1485936)
- Fix dl() use in installer (#1486150)
- Added 'ldap_debug' option
- Fix "Empty startup greeting" bug (#1486085)
- Fix setting user name in 'new_user_identity' plugin (#1486137)
- Fix incorrect count of new messages in folder list when using multiple IMAP clients (#1485995)
- Fix all folders checking for new messages with disabled caching (#1486128)
- Support skins in 'archive' and 'markasjunk' plugins
- Added 'html_editor' hook (#1486068)
- Fix DB constraint violation when populating messages cache (#1486052)
- Password: added password strength options (#1486062)
- Fix LDAP partial result warning (#1485536)
- Fix delete in message view deletes permanently with flag_for_deletion=true (#1486101)
- Use faster/secure mt_rand() (#1486094)
- Fix roundcube hangs on empty inbox with bincimapd (#1486093)
- Fix wrong headers for IE on servers without $_SERVER['HTTPS'] (#1485926)
- Force IE style headers for attachments in non-HTTPS session, 'use_https' option (#1485655)
- Check 'post_max_size' for upload max filesize (#1486089)
- Password Plugin: Fix %d inserts username instead of domain (#1486088)
- Fix rcube_mdb2::affected_rows() (#1486082)
RELEASE 0.3-stable
------------------
- Fix gn and givenName should be synonymous in LDAP addressbook (#1485892)
- Add mail_domain to LDAP email entries without @ sign (#1485201)
- Fix saving empty values in LDAP contact data (#1485781)
- Fix LDAP contact update when RDN field is changed (#1485788)
- Fix LDAP attributes case senitivity problems (#1485830)
- Fix LDAP addressbook browsing when only one directory is used (#1486022)
- Fix endless loop on error response for APPEND command (#1486060)
- Don't require date.timezone setting in installer (#1485989)
- Fix date sorting problem with Courier IMAP server (#1486065)
- Unselect pressed buttons on mouse up (#1485987)
- Don't set php_value error_log in .htaccess but mention in INSTALL (#1485924)
- Fix too small status/flag/attachment columns in Safari 4 (#1486063)
- Fix selection disabling while dragging splitter in webkit browsers (#1486056)
- Added 'new_messages' plugin hook (#1486005)
- Added 'logout_after' plugin hook (#1486042)
- Added 'message_compose' hook
- Added 'imap_connect' hook (#1485956)
- Fix vcard_attachments plugin (#1486035)
- Updated PEAR::Auth_SASL to 1.0.3 version
- Use sequence names only with PostgreSQL (#1486018)
- Re-designed User Preferences interface
- Fix MS SQL DDL (#1486020)
- Fix rcube_mdb2.php: call to setCharset not implemented in mssql driver (#1486019)
- Added 'display_next' option
- Fix rcube_mdb2::unixtimestamp for MS SQL (#1486015)
- Fix HTML washing to respect character encoding
- Fix endless loop in iil_C_Login() with Courier IMAP (#1486010)
- Fix #messagemenu display on IE (#1486006)
- Speedup UI by using sprites for (toolbar) buttons
- Fix charset names with X- prefix handling
- Fix displaying of HTML messages with unknown/malformed tags (#1486003)
RELEASE 0.3-RC1
---------------
- Fix import of vCard entries with params (#1485453)
- Fix HTML messages output with empty block elements (#1485974)
- Use request tokens to protect POST requests from CSRF
- Added hook when killing a session
- Added hook to write_log function (#1485971)
- Performance improvements by use UID commands (#1485690)
- Fix HTML editor tabIndex setting (#1485972)
- Added 'imap_debug' and 'smtp_debug' options
- Support strftime's format modifiers in date_* options (#1484806)
- Support %h variable in 'smtp_server' option (#1485766)
- Show SMTP errors in browser (#1485927)
- Allow WBR tag in HTML message (#1485960)
- Use spl_autoload_register() instead of __autoload (#1485947)
- Add hook for identities listing (#1485958)
- Trigger hook 'smtp_connect' when opening an SMTP connection (#1485954)
- Added config option to enforce HTTPS connections
- Fix non-unicode characters caching in unicode database (#1484608)
- Performance improvements of messages caching
- Fix empty Date header issue (#1485923)
- Open collapsed folders during drag & drop (#1485914)
- Fixed link text replacements (#1485789)
- Also trigger 'insertrow' events on page load (#1485826)
- No link on subject in IE browsers (#1484913)
- Fixed filename encoding according to RFC2231 (#1485875)
- Added message Edit feature (#1483891, #1484440)
- Fix message Etag generation for counter issues (#1485623)
- Fix messages searching on MailEnable IMAP (#1485762)
- Fixed many 'skip_deleted' issues (#1485634)
- Fixed messages list sorting on servers without SORT capability
- Colorized signatures in plain text messages
- Reviewed/fixed skip_deleted/read_when_deleted/flag_for_deletion options handling in UI
- Fix displaying of big maximum upload filesize (#1485889)
- Added possibility to invert messages selection
- After move/delete from 'show' action display next message instead of messages list (#1485887)
- Fixed problem with double quote at the end of folder name (#1485884)
- Speedup UI by using CSS sprites and etags/expires/deflate in Apache config (#1484858,#1485800)
- Support UID EXPUNGE: remove only moved/deleted messages
- Add drag cancelling with ESC key (#1484344)
- Support initial identity name from virtuser_query (#1484003)
- Added message menu, removed Print and Source buttons
- Added possibility to save message as .eml file (#1485861)
- Added 1 minute interval in autosave options (#1485854)
- Support UTF-7 encoding in messages (#1485832)
- Better support for malformed character names (#1485758)
RELEASE 0.3-BETA
----------------
- Plugin API + jQuery engine
- Added possibility to encrypt received header, option 'http_received_header_encrypt',
added some more logic in encrypt/decrypt functions for security
- Fix Answered/Forwarded flag setting for messages in subfolders
- Fix autocomplete problem with capital letters (#1485792)
- Support UUencode content encoding (#1485839)
- Minimize chance of race condition in session handling (#1485659, #1484678)
- Fix session handling on non-session SQL query error (#1485734)
- Fix html editor mode setting when reopening draft message (#1485834)
- Added quick search box menu (#1484304)
- Fix wrong column sort order icons (#1485823)
- Updated TinyMCE to 3.2.3 version
- Fix attachment names encoding when charset isn't specified in attachment part (#1484969)
- Fix message normal priority problem (#1485820)
- Fix autocomplete spinning wheel does not disappear (#1485804)
- Added log_date_format option (#1485709)
- Fix text wrapping in HTML editor after switching from plain text to HTML (#1485521)
- Fix auto-complete function hangs with plus sign (#1485815)
- Fix AJAX requests errors handler (#1485000)
- Speed up message list displaying on IE
- Fix read/write database recognition (#1485811)
RELEASE 0.2.2
-------------
- Fix quicksearchbox look in Chrome and Konqueror (#1484841)
- Fix UTF-8 byte-order mark removing (#1485514)
- Fix folders subscribtions on Konqueror (#1484841)
- Fix debug console on Konqueror and Safari
- Fix messagelist focus issue when modifying status of selected messages (#1485807)
- Support STARTTLS in IMAP connection (#1485284)
- Fix DEL key problem in search boxes (#1485528)
- Support several e-mail addresses per user from virtuser_file (#1485678)
- Fix drag&drop with scrolling on IE (#1485786)
- Fix adding signature separator in html mode (#1485350)
- Fix opening attachment marks message as read (#1485803)
- Fix 'temp_dir' does not support relative path under Windows (#1484529)
- Fix "Initialize Database" button missing from installer (#1485802)
- Fix compose window doesn't fit 1024x768 window (#1485396)
- Fix service not available error when pressing back from compose dialog (#1485552)
- Fix using mail() on Windows (#1485779)
- Fix word wrapping in message-part's <PRE>s for printing (#1485787)
- Fix incorrect word wrapping in outgoing plaintext multibyte messages (#1485714)
- Fix double footer in HTML message with embedded images
- Fix TNEF implementation bug (#1485773)
- Fix incorrect row id parsing for LDAP contacts list (#1485784)
- Fix 'mode' parameter in sqlite DSN (#1485772)
RELEASE 0.2.1
------------------
- Use US-ASCII as failover when Unicode searching fails (#1485762)
- Fix errors handling in IMAP command continuations (#1485762)
- Fix FETCH result parsing for servers returning flags at the end of result (#1485763)
- Fix datetime columns defaults in mysql's DDL (#1485641)
- Fix attaching more than nine inline images (#1485759)
- Support 'UNICODE-1-1-UTF-7' alias for UTF-7 encoding (#1485758)
- Fix mime-type detection using a hard-coded map (#1485311)
- Don't return empty string if charset conversion failed (#1485757)
- Disable concurrent autocomplete query results display (#1485743)
- Fix new lines stripped from message footer (#1485751)
- Fix IE problem with mouse click autocomplete (#1485739)
- Fix html body washing on reply/forward + fix attachments handling (#1485676)
- Fix multiple recipients input parsing (#1485733)
- Fix replying to message with html attachment (#1485676)
- Use default_charset for messages without specified charset (#1485661, #1484961)
- Support non-standard "GMT-XXXX" literal in date header (#1485729)
- Added TNEF support to decode MS Outlook attachments (winmail.dat)
- Fix "value continuation" MIME headers by adding required semicolon (#1485727)
- Fix pressing select all/unread multiple times (#1485723)
- Fix selecting all unread does not honor new messages (#1485724)
- Fix some base64 encoded attachments handling (#1485725)
- Support NGINX as IMAP backend: better BAD response handling (#1485720)
- Performance fix: don't fetch attachment parts headers twice to parse filename
- Fix checking for recent messages on various IMAP servers (#1485702)
- Performance fix: Don't fetch quota and recent messages in "message view" mode
- Fix displaying of alternative-inside-alternative messages (#1485713)
- Fix MDNSent flag checking, use arbitrary keywords (asterisk) flag (#1485706)
- Fix creation of folders with '&' sign in name
- Fix parsing of email addresses without angle brackets (#1485693)
- Save spellcheck corrections when switching from plain to html editor (and spellchecking is on)
- Fix large search results on server without SORT capability (#1485668)
- Get rid of preg_replace() with eval modifier and create_function usage (#1485686)
- Bring back <base> and <link> tags in HTML messages
- Fix XSS vulnerability through background attributes as reported by Julien Cayssol
- Fix problems with backslash as IMAP hierarchy delimiter (#1484467)
- Secure vcard export by getting rid of preg's 'e' modifier use (#1485689)
- Fix authentication when submitting form with existing session (#1485679)
- Allow absolute URLs to images in HTML messages/sigs (#1485666)
- Fix message body which contains both inline attachments and emotions
- Fix SQL query execution errors handling in rcube_mdb2 class (#1485509)
- Fix address names with '@' sign handling (#1485654)
- Improve messages display performance
- Fix messages searching with 'to:' modifier
RELEASE 0.2-STABLE
------------------
- Fix mark popup in IE 7 (#1485369)
- Fix line-break issue when copy & paste in Firefox (#1485425)
- Fix autocomplete "unknown server error" (#1485637)
- Fix STARTTLS before AUTH in SMTP connection (#1484883)
- Support multiple quota values in QUOTAROOT resonse (#1485626)
- Only abbreviate file name for IE < 7 browsers (#1485063)
- Performance: allow setting imap rootdir and delimiter before connect (#1485172)
- Fix sorting of folders with more than 2 levels (#1485569)
- Fix search results page jumps in LDAP addressbook (#1485253)
- Fix empty line before the signature in IE (#1485351)
- Fix horizontal scrollbar in preview pane on IE (#1484633)
- Add Robots meta tag in login page and installer (#1484846)
- Added 'show_images' option, removed 'addrbook_show_images' (#1485597)
- Option to check for new mails in all folders (#1484374)
- Don't set client busy when checking for new messages (#1485276)
- Allow UTF-8 folder names in config (#1485579)
- Add junk_mbox option configuration in installer (#1485579)
- Do serverside addressbook queries for autocompletion (#1485531)
- Allow setting attachment col position in 'list_cols' option
- Allow override 'list_cols' via skin (#1485577)
- Fix 'cache' table cleanup on session destroy (#1485516)
- Increase speed of session destroy and garbage clean up
- Fix session timeout when DB server got clock skew (#1485490)
- Fix handling of some malformed messages (#1484438)
- Speed up raw message body handling
- Better HTML entities conversion in html2text (#1485519)
- Fix big memory consumption and speed up searching on servers without SORT capability
- Fix setting locale to tr_TR, ku and az_AZ (#1485470)
- Use SORT for searching on servers with SORT capability
- Added message status filter
- Fix empty file sending (#1485389)
- Improved searching with many criterias (calling one SEARCH command)
- Fix HTML editor initialization on IE (#1485304)
- Add warning when switching editor mode from html to plain (#1485488)
- Make identities list scrollable (#1485538)
- Fix problem with numeric folder names (#1485527)
- Added BYE response simple support to prevent from endless loops in imap.inc (#1483956)
- Fix unread message unintentionally marked as read if read_when_deleted=true (#1485409)
- Remove port number from SERVER_NAME in smtp_helo_host (#1485518)
- Don't send disposition notification receipts for messages marked as 'read' (#1485523)
- Added 'keep_alive' and 'min_keep_alive' options (#1485360)
- Added option 'identities_level', removed 'multiple_identities'
- Allow deleting identities when multiple_identities=false (#1485435)
- Added option focus_on_new_message (#1485374)
- Fix html2text class autoloading on Windows (#1485505)
- Fix html signature formatting when identity save error occured (#1485426)
- Add feedback and set busy when moving folder (#1485497)
- Fix 'Empty' link visibility for some languages e.g. Slovak (#1485489)
- Fix messages count bar overlapping (#1485270)
- Fix adding signature in drafts compose mode (#1485484)
- Fix iil_C_Sort() to support very long and/or divided responses (#1485283)
- Fix matching case sensitivity when setting identity on reply (#1485480)
- Prefer default identity on reply
- Fix imap searching on ISMail server (#1485466)
- Add css class for flagged messages (#1485464)
- Write username instead of id in sendmail log (#1485477)
- Fix htmlspecialchars() use for PHP version < 5.2.3 (#1485475)
- Fix js keywords escaping in json_serialize() for IE/Opera (#1485472)
- Added bin/killcache.php script (#1485434)
- Add support for SJIS, GB2312, BIG5 in rc_detect_encoding()
- Fix vCard file encoding detection for non-UTF-8 strings (#1485410)
- Add 'skip_deleted' option in User Preferences (#1485445)
- Minimize "inline" javascript scripts use (#1485433)
- Fix css class setting for folders with names matching defined classes names (#1485355)
- Fix race conditions when changing mailbox
- Fix spellchecking when switching to html editor (#1485362)
- Fix compose window width/height (#1485396)
- Allow calling msgimport.sh/msgexport.sh from any directory (#1485431)
- Localized filesize units (#1485340)
- Better handling of "no identity" and "no email in identity" situations (#1485117)
- Added 'mime_param_folding' option with possibility to choose long/non-ascii attachment names encoding eg. to be readable in MS Outlook/OE (#1485320)
- Added "advanced options" feature in User Preferences
- Fix unread counter when displaying cached massage in preview panel (#1485290)
- Fix htmleditor spellchecking on MS Windows (#1485397)
- Fix problem with non-ascii attachment names in Mail_mime (#1485267, #1485096)
- Fix language autodetection (#1485401)
- Fix button label in folders management (#1485405)
- Fix collapsed folder not indicating unread msgs count of all subfolders (#1485403)
- Fix handling of apostrophes in filenames decoded according to rfc2231
RELEASE 0.2-BETA
----------------
- Made config files location configurable (#1485215)
- Reduced memory footprint when forwarding attachments (#1485345)
- Allow and use spellcheck attribute for input/textarea fields (#1485060)
- Added icons for forwarded/forwarded+replied messages (#1485257)
- Added Reply-To to forwarded emails (#1485315)
- Display progress message for folders create/delete/rename (#1485357)
- Smart Tags and NOBR tag support in html messages (#1485363, #1485327)
- Redesign of the identities settings (#1484042)
- Add config option to disable creation/deletion of identities (#1484498)
- Added 'sendmail_delay' option to restrict messages sending interval (#1484491)
- Added vertical splitter for folders list resizing
- Added possibility to view all headers in message view
- Fixed splitter drag/resize on Opera (#1485170)
- Fixed quota img height/width setting from template (#1484857)
- Refactor drag & drop functionality. Don't rely on browser events anymore (#1484453)
- Insert "virtual" folders in subscription list (#1484779)
- Added link to open message in new window
- Enable export of address book contacts as vCard
- Add feature to import contacts from vcard files (#1326103)
- Respect Content-Location headers in multipart/related messages according to RFC2110 (#1484946)
- Allowed max. attachment size now indicated in compose screen (#1485030)
- Also capture backspace key in list mode (#1484566)
- Allow application/pgp parts to be displayed (#1484753)
- Correctly handle options in mailto-links (#1485228)
- Immediately save sort_col/sort_order in user prefs (#1485265)
- Truncate very long (above 50 characters) attachment filenames when displaying
- Allow to auto-detect client language if none set (#1484434)
- Auto-detect the client timezone (user configurable)
- Add RFC2231 header value continuations support for attachment filenames + hack for servers that not support that feature
- Fix Reply-To header displaying (#1485314)
- Mark form buttons that provide the most obvious operation (mainaction)
- Added option 'quota_zero_as_unlimited' (#1484604)
- Added PRE handling in html2text class (#1484740)
- Added folder hierarchy collapsing
- Added options to use syslog instead of log file (#1484850)
- Added Logging & Debugging section in Installer
- Fix In-Reply-To and References headers when composing saved draft message (#1485288)
- Fix html message charset conversion for charsets with underline (#1485287)
- Fix buttons status after contacts deletion (#1485233)
- Fix escaping of To: and From: fields when building message body for reply or forward in the HTML editor (#1484904)
- Use current mailbox name in template (#1485256)
- Better fix for skipping untagged responses (#1485261)
- Added pspell support patch by Kris Steinhoff (#1483960)
- Enable spellchecker for HTML editor (#1485114)
- Respect spellcheck_uri in tinyMCE spellchecker (#1484196)
- Case insensitive contacts searching using PostgreSQL (#1485259)
- Make default imap folders configurable for each user (#1485075)
- Save outgoing mail to selectable folder (#1324581)
- Fix hiding of mark menu when clicking th button again (#1484944)
- Use long date format in print mode (#1485191)
- Updated TinyMCE to version 3.1.0.1
- Re-enable autocomplete attribute for login form (#1485211)
- Check PERMANENTFLAGS before saving $MDNSent flag (#1484963, #1485163)
- Added flag column on messages list (#1484623)
- Patched Mail/MimePart.php (http://pear.php.net/bugs/bug.php?id=14232)
- Allow trash/junk subfolders to be purged (#1485085)
- Store compose parameters in session and redirect to a unique URL
- Fixed CRAM-MD5 authentication (#1484819)
- Fixed forwarding messages with one HTML attachment (#1484442)
- Fixed encoding of message/rfc822 attachments and image/pjpeg handling (#1484914)
- Added option to select skin in user preferences
- Added option to configure displaying of attached images below the message body
- Added option to display images in messages from known senders (#1484601)
- User preferences grouped in more fieldsets
- Fix corrupted MIME headers of messages in Sent folder (#1485111)
- Fixed bug in MDB2 package: http://pear.php.net/bugs/bug.php?id=14124
- Use keypress instead of keydown to select list's row (#1484816)
- Don't call expunge and don't remove message row after message move if flag_for_deletion is set to true (#1485002)
RELEASE 0.2-ALPHA
-----------------
- Added option to disable autocompletion from selected LDAP address books (#1484922)
- TLS support in LDAP connections: 'use_tls' property (#1485104)
- Fixed removing messages from search set after deleting them (#1485106)
- imap.inc: Fixed iil_C_FetchStructureString() to handle many
literal strings in response (#1484969)
- Support for subfolders in default/protected folders (#1484665)
- Disallowed delimiter in folder name (#1484803)
- Support " and \ in folder names
- Escape \ in login (#1484614)
- Better HTML sanitization with the DOM-based washtml script (#1484701)
- Fixed sorting of folders with non-ascii characters
- Fixed Mysql DDL for default identities creation (#1485070)
- In Preferences added possibility to configure 'read_when_deleted',
'mdn_requests', 'flag_for_deletion' options
- Made IMAP auth type configurable (#1483825)
- Fixed empty values with FROM_UNIXTIME() in rcube_mdb2 (#1485055)
- Fixed attachment list on IE 6/7 (#1484807)
- Fixed JavaScript in compose.html that shows cc/bcc fields if populated
- Make password input fields of type password in installer (#1484886)
- Don't attempt to delete cache entries if enable_caching is FALSE (#1485051)
- Optimized messages sorting on servers without sort capability (#1485049)
- Corrected message headers decoding when charset isn't specified and improved
support for native languages (#1485050, #1485048)
- Expanded LDAP configuration options to support LDAP server writes.
- Installer: encode special characters in DB username/password (#1485042)
- Fixed management of folders with national characters in names (#1485036, #1485001)
- Fixed identities saving when using MDB2 pgsql driver (#1485032)
- Fixed BCC header reset (#1484997)
- Improved messages list performance - patch from Justin Heesemann
- Append skin_path to images location only when it starts with '/' sign (#1484859)
- Fix IMAP response in message body when message has no body (#1484964)
- Fixed non-RFC dates formatting (#1484901)
- Fixed typo in set_charset() (#1484991)
- Decode entities when inserting HTML signature to plain text message (#1484990)
- HTML editing is now working with PHP5 updates and TinyMCE v3.0.6
- Fixed signature loading on Windows (#1484545)
- Added language support to HTML editing (#1484862)
- Fixed remove signature when replying (#1333167)
- Fixed problem with line with a space at the end (#1484916)
- Fixed <!DOCTYPE> tag filtering (#1484391)
- Fixed <?xml> tag filtering (#1484403)
- Added sections (fieldset+label) in Settings interface
- Mark as read in one action with message preview (#1484972)
- Deleted redundant quota reads (#1484972)
- Added options for empty trash and expunge inbox on logout (#1483863)
- Removed lines wrapping when displaying message
- Fixed month localization
- Changed codebase to PHP5 with autoloader
RELEASE 0.1.1
-------------
- Clear selection when selecting single item (#1484942)
- Remove hard-coded image size in skin templates (#1484893)
- Database schema improvements (dropped unnecessary indexes)
- Fixed creating a new folder with a comma in its name (#1484681)
- Fixed sorting of messages when default mailbox is empty (#1484317)
- Improve message previewpane - less loading (#1484316)
- Fixed login form autoompletion (#1484839)
- Fixed virtuser_query option for mdb2 backend (#1484874)
- Fixed attachment resoting from Drafts when message body was empty (#1484506)
- Fixed usage of ob_gzhandler (#1484851)
- Fixed message part window in IE6 (#1484610)
- Fixed decoding of mime-encoded strings (#1484191)
- Fixed some iconv/mb_string problems (#1484598)
- Correctly quote mailbox name when using in URL (#1484313)
- Fixed "headers already sent" errors (#1484860)
RELEASE 0.1-STABLE
------------------
- Added interactive installer script
- Fix folder adding/renaming inspired by #1484800
- Localize folder name in page title (#1484785)
- Fix code using wrong variable name (#1484018)
- Allow to send mail with BCC recipients only
- condense TinyMCE toolbar down to one line, removing table buttons (#1484747)
- Add function to mark the selected messages as read/unread (#1457360)
- Also do charset decoding as suggested in RFC 2231 (fix #1484321)
- Show message count in folder list and hint when creating a subfolder
- Distinguish ssl and tls for imap connections (#1484667)
- Added some charset aliases to fix typical mis-labelling (#1484565)
- Remember decision to display images for a certain message during session (#1484754)
- Truncate attachment filenames to 55 characters due to an IE bug (#1484757)
- Make sending of read receipts configurable
- Respect config when localize folder names (#1484707)
- Also respect receipt and priority settings when re-opening a draft message
- Remember search results (closes #1483883), patch by the_glu
- Add Received header on outgoing mail
- Upgrade to TinyMCE 2.1.3
- Allow inserting image attachments into HTML messages while composing (#1484557)
- Implement Message-Disposition-Notification (Receipts)
- Fix overriding of session vars when register_globals is on (#1484670)
- Fix bug with case-sensitive folder names (#1484245)
- Don't create default folders by default
- Fixed some potential security risks (audited by Andris)
- Only show new messages if they match the current search (#1484176)
- Switch to/from when searcing in Sent folder (#1484555)
- Correctly read the References header (#1484646)
- Unset old cookie before sending a new value (#1484639)
- Correctly decode attachments when downloading them (#1484645 and #1484642)
- Suppress IE errors when clearing attachments form (#1484356)
- Log error when login fails due to auto_create_user turned off
- Filter linked/imported CSS files (closes #1484056)
- Improve message compose screen (closes #1484383)
- Select next row after removing one from list (#1484387)
RELEASE 0.1-RC2
---------------
- Enable drag-&-dropping of folders to a new parent and allow to create subfolders (#1457344)
- Suppress IE errors when clearing attachments form (#1484356)
- Set preferences field in user table to NULL (#1484386)
- Log error when login fails due to auto_create_user turned off
- Filter linked/imported CSS files (closes #1484056)
- Improve message compose screen (closes #1484383)
- Select next row after removing one from list (#1484387)
- Make smtp HELO/EHLO hostname configurable (#1484067)
- IPv6 Compatability (#1484322), Patch #1484373
- Unlock interface when message sending fails (#1484570)
- Eval PHP code in template includes (if configured)
- Show message when folder is empty. Mo more static text in table (#1484395)
- Only display unread count in page title when new messages arrived
- Fixed wrong delete button tooltip (#1483965)
- Fixed charset encoding bug (#1484429)
- Applied patch for LDAP version (#1484552)
- Improved XHTML validation
- Fix message list selection (#1484550)
- Better fix lowercased usernames (#1484473)
- Update pngbehavior Script as suggested in #1484490
- Fixed moving/deleting messages when more than 1 is selected
- Applied patch for LDAP contacts listing by Glen Ogilvie
- Applied patch for more address fields in LDAP contacts (#1484402)
- Add alternative for getallheaders() (fix #1484508)
- Identify mailboxes case-sensitive
- Sort mailbox list case-insensitive (closes #1484338)
- Fix display of multipart messages from Apple Mail (closes #1484027)
- Protect AJAX request from being fetched by a foreign site (XSS)
- Make autocomplete for loginform configurable by the skin template
- Fix compose function from address book (closes #1484426)
- Added //IGNORE to iconv call (patch #1484420, closes #1484023)
- Check if mbstring supports charset (#1484290 and #1484292)
- Prefer iconv over mbstring (as suggested in #1484292)
- Check filesize of template includes (#1484409)
- Fixed bug with buttons not dimming/enabling properly after switching folders
- Fixed compose window becoming unresponsive after saving a draft (#1484487)
- Re-enabled "Back" button in compose window now that bug #1484487 is fixed
- Fixed unresponsive interface issue when downloading attachments (#1484496)
- Lowered status message time from 5 to 3 seconds to improve responsiveness
- Raised .htaccess upload_max_filesize from 2M to 5M to differ from default php.ini
- Increased "mailboxcontrols" mail.css width from 160 to 170px to fix non-english languages (#1484499)
- Fix status message bug #1484464 with regard to #1484353
- Fix address adding bug reported by David Koblas
- Applied socket error patch by Thomas Mangin
- Pass-by-reference workarround for PHP5 in sendmail.inc
- Fixed buggy imap_root settings (closes #1484379)
- Prevent default events on subject links (#1484399)
- Use HTTP-POST requests for actions that change state
RELEASE 0.1-RC1
---------------
- Use global filters and bind username/ for Ldap searches (#1484159)
- Hide quota display if imap server does not support it
- Hide address groups if no LDAP servers configured
- Add link to message subjects (closes #1484257)
- Better SQL query for contact listing/search (closes #1484369)
- Fixed marking as read in preview pane (closes #1484364)
- CSS hack to display attachments correctly in IE6
- Wrap message body text (closes #1484148)
- LDAP access is back in address book (closes #1484087)
- Added search function for contacts
- New Template parsing and output encoding
- Fixed bugs #1484119 and #1483978
- Fixed message moving procedure (closes #1484308)
- Fixed display of multiple attachments (closes #1466563)
- Fixed check for new messages (closes #1484310)
- List attachments without filename
- New session authentication: Change sessid cookie when login, authentication with sessauth cookie is now configurable.
Should close bugs #1483951 and #1484299
- Correctly translate mailbox names (closes #1484276)
- Quote e-mail address links (closes #1484300)
- Updated PEAR::Mail_mime package
- Accept single quotes for HTML attributes when modifying message body (thanks Jason)
- Sanitize input for new users/identities (thanks Colin Alston)
- Don't download HTML message parts
- Convert HTML parts to plaintext if 'prefer_html' is off
- Correctly parse message/rfc822 parts (closes #1484045)
- Also use user_id for unique key in messages table (closes #1484074)
- Hide contacts drop down on blur (closes #1484203)
- Make entries in contacts drop down clickable
- Turn off browser autocompletion on login page
- Quote <? in text/html message parts
- Hide border around radio buttons
- Applied patch for attachment download by crichardson (closes #1484198)
- Fixed bug in Postgres DB handling (closes #1484068)
- Fixed bug of invalid calls to fetchRow() in rcube_db.inc (closes #1484280)
- Fixed array_merge bug (closes #1484281)
- Fixed flag for deletion in list view (closes #1484264)
- Finally support semicolons as recipient separator (closes ##1484251)
- Fixed message headers (subject) encoding
- check if safe mode is on or not (closes #1484269)
- Show "no subject" in message list if subject is missing (closes #1484243)
- Solved page caching of message preview (closes #1484153)
- Only use gzip compression if configured (closes #1484236)
- Fixed priority selector issue (#1484150)
- Fixed some CSS issues in default skin (closes #1484210 and #1484161)
- Prevent from double quoting of numeric HTML character references (closes #1484253)
- Fixed display of HTML message attachments (closes #1484178)
- Applied patch for preview caching (closes #1484186)
- Added error handling for attachment uploads
- Use multibyte safe string functions where necessary (closes #1483988)
- Applied security patch to validate the submitted host value (by Kees Cook)
- Applied security patch to validate input values when deleting contacts (by Kees Cook)
- Applied security patch that sanitizes emoticon paths when attaching them (by Kees Cook)
- Applied a patch to more aggressively sanitize a HTML message
- Visualize blocked images in HTML messages
- Fixed wrong message listing when showing search results (closes #1484131)
- Show remote images when opening HTML message part as attachment
- Improve memory usage when sending mail (closes #1484098)
- Mark messages as read once the preview is loaded (closes #1484132)
- Include smtp final response in log (closes #1484081)
- Corrected date string in sent message header (closes #1484125)
- Correclty choose "To" column in sent and draft mailboxes (closes #1483943)
- Changed srong tooltips for message browse buttons (closes #1483930)
- Fixed signature delimeter character to be standard (Bug #1484035)
- Fixed XSS vulnerability (Bug #1484109)
- Remove newlines from mail headers (Bug #1484031)
- Selection issues when moving/deleting (Bug #1484044)
- Applied patch of Clement Moulin for imap host auto-selection
- ISO-encode IMAP password for plaintext login (Bugs #1483977 & #1483886)
- Fixed folder name encoding in subscription list (Bug #1484113)
- Fixed JS errors in identity list (Bug #1484120)
- Translate foldernames in folder form (closes #1484113)
- Added first and last buttons to message list, address book
and message detail
- Pressing Shift-Del bypasses Trash folder
- Enable purge command for Junk folder
- Fetch all aliases if virtuser_query is used instead
- Re-enabled multi select of contacts (Bug #1484017)
- Enable contact editing right after creation (Bug #1459641)
- Correct UTF-7 to UTF-8 conversion if mbstring is not available
- Fixed IMAP fetch of message body (Bug #1484019)
- Fixed safe_mode problems (Bug #1418381)
- Fixed wrong header encoding (Bug #1483976)
- Made automatic draft saving configurable
- Fixed JS bug when renaming folders (Bug #1483989)
- Added quota display as image (by Brett Patterson)
- Corrected creation of a message-id
- New indentation for quoted message text
- Improved HTML validity
- Fixed URL character set (Ticket #1445501)
- Fixed saving of contact into MySQL from LDAP query results (Ticket #1483820)
- Fixed folder renaming: unsubscribe before rename (Bug #1483920)
- Finalized new message parsing (+ chaching)
- Fixed wrong usage of mbstring (Bug #1462439)
- Set default spelling language (Ticket #1483938)
- Added support for Nox Spell Server
- Re-built message parsing (Bug #1327068)
Now based on the message structure delivered by the IMAP server.
- Fixed some XSS and SQL injection issues
- Fixed charset problems with folder renaming
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index a6661c323..371ccaf8c 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -1,860 +1,860 @@
<?php
/*
+-----------------------------------------------------------------------+
| Main configuration file |
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2005-2011, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
+-----------------------------------------------------------------------+
*/
$rcmail_config = array();
// ----------------------------------
// LOGGING/DEBUGGING
// ----------------------------------
// system error reporting, sum of: 1 = log; 4 = show, 8 = trace
$rcmail_config['debug_level'] = 1;
// log driver: 'syslog' or 'file'.
$rcmail_config['log_driver'] = 'file';
// date format for log entries
// (read http://php.net/manual/en/function.date.php for all format characters)
$rcmail_config['log_date_format'] = 'd-M-Y H:i:s O';
// Syslog ident string to use, if using the 'syslog' log driver.
$rcmail_config['syslog_id'] = 'roundcube';
// Syslog facility to use, if using the 'syslog' log driver.
// For possible values see installer or http://php.net/manual/en/function.openlog.php
$rcmail_config['syslog_facility'] = LOG_USER;
// Log sent messages to <log_dir>/sendmail or to syslog
$rcmail_config['smtp_log'] = true;
// Log successful logins to <log_dir>/userlogins or to syslog
$rcmail_config['log_logins'] = false;
// Log session authentication errors to <log_dir>/session or to syslog
$rcmail_config['log_session'] = false;
// Log SQL queries to <log_dir>/sql or to syslog
$rcmail_config['sql_debug'] = false;
// Log IMAP conversation to <log_dir>/imap or to syslog
$rcmail_config['imap_debug'] = false;
// Log LDAP conversation to <log_dir>/ldap or to syslog
$rcmail_config['ldap_debug'] = false;
// Log SMTP conversation to <log_dir>/smtp or to syslog
$rcmail_config['smtp_debug'] = false;
// ----------------------------------
// IMAP
// ----------------------------------
// the mail host chosen to perform the log-in
// leave blank to show a textbox at login, give a list of hosts
// to display a pulldown menu or set one host as string.
// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls://
// Supported replacement variables:
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %s - domain name after the '@' from e-mail address provided at login screen
// For example %n = mail.domain.tld, %t = domain.tld
$rcmail_config['default_host'] = '';
// TCP port used for IMAP connections
$rcmail_config['default_port'] = 143;
// IMAP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or null to use
// best server supported one)
$rcmail_config['imap_auth_type'] = null;
// If you know your imap's folder delimiter, you can specify it here.
// Otherwise it will be determined automatically
$rcmail_config['imap_delimiter'] = null;
// If IMAP server doesn't support NAMESPACE extension, but you're
// using shared folders or personal root folder is non-empty, you'll need to
// set these options. All can be strings or arrays of strings.
// Folders need to be ended with directory separator, e.g. "INBOX."
// (special directory "~" is an exception to this rule)
// These can be used also to overwrite server's namespaces
$rcmail_config['imap_ns_personal'] = null;
$rcmail_config['imap_ns_other'] = null;
$rcmail_config['imap_ns_shared'] = null;
// By default IMAP capabilities are readed after connection to IMAP server
// In some cases, e.g. when using IMAP proxy, there's a need to refresh the list
// after login. Set to True if you've got this case.
$rcmail_config['imap_force_caps'] = false;
// By default list of subscribed folders is determined using LIST-EXTENDED
// extension if available. Some servers (dovecot 1.x) returns wrong results
// for shared namespaces in this case. http://trac.roundcube.net/ticket/1486225
// Enable this option to force LSUB command usage instead.
$rcmail_config['imap_force_lsub'] = false;
// Some server configurations (e.g. Courier) doesn't list folders in all namespaces
// Enable this option to force listing of folders in all namespaces
$rcmail_config['imap_force_ns'] = false;
// IMAP connection timeout, in seconds. Default: 0 (no limit)
$rcmail_config['imap_timeout'] = 0;
// Optional IMAP authentication identifier to be used as authorization proxy
$rcmail_config['imap_auth_cid'] = null;
// Optional IMAP authentication password to be used for imap_auth_cid
$rcmail_config['imap_auth_pw'] = null;
// Type of IMAP indexes cache. Supported values: 'db', 'apc' and 'memcache'.
$rcmail_config['imap_cache'] = null;
// Enables messages cache. Only 'db' cache is supported.
$rcmail_config['messages_cache'] = false;
// ----------------------------------
// SMTP
// ----------------------------------
// SMTP server host (for sending mails).
// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls://
// If left blank, the PHP mail() function is used
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
$rcmail_config['smtp_server'] = '';
// SMTP port (default is 25; use 587 for STARTTLS or 465 for the
// deprecated SSL over SMTP (aka SMTPS))
$rcmail_config['smtp_port'] = 25;
// SMTP username (if required) if you use %u as the username Roundcube
// will use the current username for login
$rcmail_config['smtp_user'] = '';
// SMTP password (if required) if you use %p as the password Roundcube
// will use the current user's password for login
$rcmail_config['smtp_pass'] = '';
// SMTP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use
// best server supported one)
$rcmail_config['smtp_auth_type'] = '';
// Optional SMTP authentication identifier to be used as authorization proxy
$rcmail_config['smtp_auth_cid'] = null;
// Optional SMTP authentication password to be used for smtp_auth_cid
$rcmail_config['smtp_auth_pw'] = null;
// SMTP HELO host
// Hostname to give to the remote server for SMTP 'HELO' or 'EHLO' messages
// Leave this blank and you will get the server variable 'server_name' or
// localhost if that isn't defined.
$rcmail_config['smtp_helo_host'] = '';
// SMTP connection timeout, in seconds. Default: 0 (no limit)
$rcmail_config['smtp_timeout'] = 0;
// ----------------------------------
// SYSTEM
// ----------------------------------
// THIS OPTION WILL ALLOW THE INSTALLER TO RUN AND CAN EXPOSE SENSITIVE CONFIG DATA.
// ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING!
$rcmail_config['enable_installer'] = false;
// provide an URL where a user can get support for this Roundcube installation
// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!
$rcmail_config['support_url'] = '';
// replace Roundcube logo with this image
// specify an URL relative to the document root of this Roundcube installation
$rcmail_config['skin_logo'] = null;
// automatically create a new Roundcube user when log-in the first time.
// a new user will be created once the IMAP login succeeds.
// set to false if only registered users can use this service
$rcmail_config['auto_create_user'] = true;
// Enables possibility to log in using email address from user identities
$rcmail_config['user_aliases'] = false;
// use this folder to store log files (must be writeable for apache user)
// This is used by the 'file' log driver.
$rcmail_config['log_dir'] = 'logs/';
// use this folder to store temp files (must be writeable for apache user)
$rcmail_config['temp_dir'] = 'temp/';
// lifetime of message cache
// possible units: s, m, h, d, w
$rcmail_config['message_cache_lifetime'] = '10d';
// enforce connections over https
// with this option enabled, all non-secure connections will be redirected.
// set the port for the ssl connection as value of this option if it differs from the default 443
$rcmail_config['force_https'] = false;
// tell PHP that it should work as under secure connection
// even if it doesn't recognize it as secure ($_SERVER['HTTPS'] is not set)
// e.g. when you're running Roundcube behind a https proxy
// this option is mutually exclusive to 'force_https' and only either one of them should be set to true.
$rcmail_config['use_https'] = false;
// Allow browser-autocompletion on login form.
// 0 - disabled, 1 - username and host only, 2 - username, host, password
$rcmail_config['login_autocomplete'] = 0;
// Forces conversion of logins to lower case.
// 0 - disabled, 1 - only domain part, 2 - domain and local part.
-// If users authentication is not case-sensitive this must be enabled.
-// After enabling it all user records need to be updated, e.g. with query:
-// UPDATE users SET username = LOWER(username);
-$rcmail_config['login_lc'] = 0;
+// If users authentication is case-insensitive this must be enabled.
+// Note: After enabling it all user records need to be updated, e.g. with query:
+// UPDATE users SET username = LOWER(username);
+$rcmail_config['login_lc'] = 2;
// Includes should be interpreted as PHP files
$rcmail_config['skin_include_php'] = false;
// display software version on login screen
$rcmail_config['display_version'] = false;
// Session lifetime in minutes
// must be greater than 'keep_alive'/60
$rcmail_config['session_lifetime'] = 10;
// Session domain: .example.org
$rcmail_config['session_domain'] = '';
// Session name. Default: 'roundcube_sessid'
$rcmail_config['session_name'] = null;
// Session path. Defaults to PHP session.cookie_path setting.
$rcmail_config['session_path'] = 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
$rcmail_config['session_storage'] = 'db';
// Use these hosts for accessing memcached
// Define any number of hosts in the form of hostname:port or unix:///path/to/socket.file
$rcmail_config['memcache_hosts'] = null; // e.g. array( 'localhost:11211', '192.168.1.12:11211', 'unix:///var/tmp/memcached.sock' );
// check client IP in session athorization
$rcmail_config['ip_check'] = false;
// check referer of incoming requests
$rcmail_config['referer_check'] = false;
// X-Frame-Options HTTP header value sent to prevent from Clickjacking.
// Possible values: sameorigin|deny. Set to false in order to disable sending them
$rcmail_config['x_frame_options'] = 'sameorigin';
// this key is used to encrypt the users imap password which is stored
// in the session record (and the client cookie if remember password is enabled).
// please provide a string of exactly 24 chars.
$rcmail_config['des_key'] = 'rcmail-!24ByteDESkey*Str';
// Automatically add this domain to user names for login
// Only for IMAP servers that require full e-mail addresses for login
// Specify an array with 'host' => 'domain' values to support multiple hosts
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
$rcmail_config['username_domain'] = '';
// This domain will be used to form e-mail addresses of new users
// Specify an array with 'host' => 'domain' values to support multiple hosts
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - http hostname ($_SERVER['SERVER_NAME'])
// %d - domain (http hostname without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
$rcmail_config['mail_domain'] = '';
// Password charset.
// Use it if your authentication backend doesn't support UTF-8.
// Defaults to ISO-8859-1 for backward compatibility
$rcmail_config['password_charset'] = 'ISO-8859-1';
// How many seconds must pass between emails sent by a user
$rcmail_config['sendmail_delay'] = 0;
// Maximum number of recipients per message. Default: 0 (no limit)
$rcmail_config['max_recipients'] = 0;
// Maximum allowednumber of members of an address group. Default: 0 (no limit)
// If 'max_recipients' is set this value should be less or equal
$rcmail_config['max_group_members'] = 0;
// add this user-agent to message headers when sending
$rcmail_config['useragent'] = 'Roundcube Webmail/'.RCMAIL_VERSION;
// use this name to compose page titles
$rcmail_config['product_name'] = 'Roundcube Webmail';
// try to load host-specific configuration
// see http://trac.roundcube.net/wiki/Howto_Config for more details
$rcmail_config['include_host_config'] = false;
// path to a text file which will be added to each sent message
// paths are relative to the Roundcube root folder
$rcmail_config['generic_message_footer'] = '';
// path to a text file which will be added to each sent HTML message
// paths are relative to the Roundcube root folder
$rcmail_config['generic_message_footer_html'] = '';
// add a received header to outgoing mails containing the creators IP and hostname
$rcmail_config['http_received_header'] = false;
// Whether or not to encrypt the IP address and the host name
// these could, in some circles, be considered as sensitive information;
// however, for the administrator, these could be invaluable help
// when tracking down issues.
$rcmail_config['http_received_header_encrypt'] = false;
// This string is used as a delimiter for message headers when sending
// a message via mail() function. Leave empty for auto-detection
$rcmail_config['mail_header_delimiter'] = NULL;
// number of chars allowed for line when wrapping text.
// text wrapping is done when composing/sending messages
$rcmail_config['line_length'] = 72;
// send plaintext messages as format=flowed
$rcmail_config['send_format_flowed'] = true;
// don't allow these settings to be overriden by the user
$rcmail_config['dont_override'] = array();
// Set identities access level:
// 0 - many identities with possibility to edit all params
// 1 - many identities with possibility to edit all params but not email address
// 2 - one identity with possibility to edit all params
// 3 - one identity with possibility to edit all params but not email address
$rcmail_config['identities_level'] = 0;
// Mimetypes supported by the browser.
// attachments of these types will open in a preview window
// either a comma-separated list or an array: 'text/plain,text/html,text/xml,image/jpeg,image/gif,image/png,application/pdf'
$rcmail_config['client_mimetypes'] = null; # null == default
// mime magic database
$rcmail_config['mime_magic'] = '/usr/share/misc/magic';
// path to imagemagick identify binary
$rcmail_config['im_identify_path'] = null;
// path to imagemagick convert binary
$rcmail_config['im_convert_path'] = null;
// maximum size of uploaded contact photos in pixel
$rcmail_config['contact_photo_size'] = 160;
// Enable DNS checking for e-mail address validation
$rcmail_config['email_dns_check'] = false;
// ----------------------------------
// PLUGINS
// ----------------------------------
// List of active plugins (in plugins/ directory)
$rcmail_config['plugins'] = array();
// ----------------------------------
// USER INTERFACE
// ----------------------------------
// default messages sort column. Use empty value for default server's sorting,
// or 'arrival', 'date', 'subject', 'from', 'to', 'fromto', 'size', 'cc'
$rcmail_config['message_sort_col'] = '';
// default messages sort order
$rcmail_config['message_sort_order'] = 'DESC';
// These cols are shown in the message list. Available cols are:
// subject, from, to, fromto, cc, replyto, date, size, status, flag, attachment, 'priority'
$rcmail_config['list_cols'] = array('subject', 'status', 'fromto', '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 date display (date or strftime format)
$rcmail_config['date_format'] = 'Y-m-d';
// 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 time display (date or strftime format)
$rcmail_config['time_format'] = 'H:i';
// 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
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$rcmail_config['drafts_mbox'] = 'Drafts';
// store spam messages in this mailbox
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$rcmail_config['junk_mbox'] = 'Junk';
// store sent message is this mailbox
// leave blank if sent messages should not be stored
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$rcmail_config['sent_mbox'] = 'Sent';
// move messages to this folder when deleting them
// leave blank if they should be deleted directly
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$rcmail_config['trash_mbox'] = 'Trash';
// display these folders separately in the mailbox list.
// these folders will also be displayed with localized names
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$rcmail_config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash');
// 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
$rcmail_config['protect_default_folders'] = true;
// if in your system 0 quota means no limit set this option to true
$rcmail_config['quota_zero_as_unlimited'] = false;
// Make use of the built-in spell checker. It is based on GoogieSpell.
// Since Google only accepts connections over https your PHP installatation
// requires to be compiled with Open SSL support
$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';
// For a locally installed Nox Spell Server, please specify the URI to call it.
// Get Nox Spell Server from http://orangoo.com/labs/?page_id=72
// Leave empty to use the Google spell checking service, what means
// that the message content will be sent to Google in order to check spelling
$rcmail_config['spellcheck_uri'] = '';
// These languages can be selected for spell checking.
// Configure as a PHP style hash array: array('en'=>'English', 'de'=>'Deutsch');
// 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;
// Minimal value of user's 'keep_alive' setting (in seconds)
// Must be less than 'session_lifetime'
$rcmail_config['min_keep_alive'] = 60;
// Enables files upload indicator. Requires APC installed and enabled apc.rfc1867 option.
// By default refresh time is set to 1 second. You can set this value to true
// or any integer value indicating number of seconds.
$rcmail_config['upload_progress'] = false;
// Specifies for how many seconds the Undo button will be available
// after object delete action. Currently used with supporting address book sources.
// Setting it to 0, disables the feature.
$rcmail_config['undo_timeout'] = 0;
// ----------------------------------
// ADDRESSBOOK SETTINGS
// ----------------------------------
// This indicates which type of address book to use. Possible choises:
// 'sql' (default) and 'ldap'.
// If set to 'ldap' then it will look at using the first writable LDAP
// address book as the primary address book and it will not display the
// SQL address book in the 'Address Book' view.
$rcmail_config['address_book_type'] = 'sql';
// In order to enable public ldap search, configure an array like the Verisign
// example further below. if you would like to test, simply uncomment the example.
// Array key must contain only safe characters, ie. a-zA-Z0-9_
$rcmail_config['ldap_public'] = array();
// If you are going to use LDAP for individual address books, you will need to
// set 'user_specific' to true and use the variables to generate the appropriate DNs to access it.
//
// The recommended directory structure for LDAP is to store all the address book entries
// under the users main entry, e.g.:
//
// o=root
// ou=people
// uid=user@domain
// mail=contact@contactdomain
//
// So the base_dn would be uid=%fu,ou=people,o=root
// The bind_dn would be the same as based_dn or some super user login.
/*
* example config for Verisign directory
*
$rcmail_config['ldap_public']['Verisign'] = array(
'name' => 'Verisign.com',
// Replacement variables supported in host names:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
'hosts' => array('directory.verisign.com'),
'port' => 389,
'use_tls' => false,
'ldap_version' => 3, // using LDAPv3
'user_specific' => false, // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login.
// %fu - The full username provided, assumes the username is an email
// address, uses the username_domain value if not an email address.
// %u - The username prior to the '@'.
// %d - The domain name after the '@'.
// %dc - The domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
// %dn - DN found by ldap search when search_filter/search_base_dn are used
'base_dn' => '',
'bind_dn' => '',
'bind_pass' => '',
// It's possible to bind for an individual address book
// 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 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
'writable' => false,
// To create a new contact these are the object classes to specify
// (or any other classes you wish to use).
'LDAP_Object_Classes' => array('top', 'inetOrgPerson'),
// The RDN field that is used for new entries, this field needs
// to be one of the search_fields, the base of base_dn is appended
// to the RDN to insert into the LDAP directory.
'LDAP_rdn' => 'cn',
// The required fields needed to build a new contact as required by
// the object classes (can include additional fields not required by the object classes).
'required_fields' => array('cn', 'sn', 'mail'),
'search_fields' => array('mail', 'cn'), // fields to search in
// mapping of contact fields to directory attributes
// for every attribute one can specify the number of values (limit) allowed.
// default is 1, a wildcard * means unlimited
'fieldmap' => array(
// Roundcube => LDAP:limit
'name' => 'cn',
'surname' => 'sn',
'firstname' => 'givenName',
'jobtitle' => 'title',
'email' => 'mail:*',
'phone:home' => 'homePhone',
'phone:work' => 'telephoneNumber',
'phone:mobile' => 'mobile',
'phone:pager' => 'pager',
'street' => 'street',
'zipcode' => 'postalCode',
'region' => 'st',
'locality' => 'l',
// if you country is a complex object, you need to configure 'sub_fields' below
'country' => 'c',
'organization' => 'o',
'department' => 'ou',
'jobtitle' => 'title',
'notes' => 'description',
// these currently don't work:
// 'phone:workfax' => 'facsimileTelephoneNumber',
// 'photo' => 'jpegPhoto',
// 'manager' => 'manager',
// 'assistant' => 'secretary',
),
// Map of contact sub-objects (attribute name => objectClass(es)), e.g. 'c' => 'country'
'sub_fields' => array(),
'sort' => 'cn', // The field to sort the listing by.
'scope' => 'sub', // search mode: sub|base|list
'filter' => '(objectClass=inetOrgPerson)', // used for basic listing (if not empty) and will be &'d with search queries. example: status=act
'fuzzy_search' => true, // server allows wildcard search
'vlv' => false, // Enable Virtual List View to more efficiently fetch paginated data (if server supports it)
'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)
// if the groups base_dn is empty, the contact base_dn is used for the groups as well
// -> in this case, assure that groups and contacts are separated due to the concernig filters!
'groups' => array(
'base_dn' => '',
'scope' => 'sub', // search mode: sub|base|list
'filter' => '(objectClass=groupOfNames)',
'object_classes' => array("top", "groupOfNames"),
'member_attr' => 'member', // name of the member attribute, e.g. uniqueMember
'name_attr' => 'cn', // attribute to be used as group name
),
);
*/
// An ordered array of the ids of the addressbooks that should be searched
// when populating address autocomplete fields server-side. ex: array('sql','Verisign');
$rcmail_config['autocomplete_addressbooks'] = array('sql');
// The minimum number of characters required to be typed in an autocomplete field
// before address books will be searched. Most useful for LDAP directories that
// may need to do lengthy results building given overly-broad searches
$rcmail_config['autocomplete_min_length'] = 1;
// Number of parallel autocomplete requests.
// If there's more than one address book, n parallel (async) requests will be created,
// where each request will search in one address book. By default (0), all address
// books are searched in one request.
$rcmail_config['autocomplete_threads'] = 0;
// Max. numer of entries in autocomplete popup. Default: 15.
$rcmail_config['autocomplete_max'] = 15;
// show address fields in this order
// available placeholders: {street}, {locality}, {zipcode}, {country}, {region}
$rcmail_config['address_template'] = '{street}<br/>{locality} {zipcode}<br/>{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
// ----------------------------------
// Use this charset as fallback for message decoding
$rcmail_config['default_charset'] = 'ISO-8859-1';
// skin name: folder from skins/
$rcmail_config['skin'] = 'larry';
// show up to X items in messages list view
$rcmail_config['mail_pagesize'] = 50;
// show up to X items in contacts list view
$rcmail_config['addressbook_pagesize'] = 50;
// sort contacts by this col (preferably either one of name, firstname, surname)
$rcmail_config['addressbook_sort_col'] = 'surname';
// the way how contact names are displayed in the list
// 0: display name
// 1: (prefix) firstname middlename surname (suffix)
// 2: (prefix) surname firstname middlename (suffix)
// 3: (prefix) surname, firstname middlename (suffix)
$rcmail_config['addressbook_name_listing'] = 0;
// use this timezone to display date/time
// valid timezone identifers are listed here: php.net/manual/en/timezones.php
// 'auto' will use the browser's timezone settings
$rcmail_config['timezone'] = 'auto';
// prefer displaying HTML messages
$rcmail_config['prefer_html'] = true;
// display remote inline images
// 0 - Never, always ask
// 1 - Ask if sender is not in address book
// 2 - Always show inline images
$rcmail_config['show_images'] = 0;
// compose html formatted messages by default
// 0 - never, 1 - always, 2 - on reply to HTML message, 3 - on forward or reply to HTML message
$rcmail_config['htmleditor'] = 0;
// show pretty dates as standard
$rcmail_config['prettydate'] = true;
// save compose message every 300 seconds (5min)
$rcmail_config['draft_autosave'] = 300;
// default setting if preview pane is enabled
$rcmail_config['preview_pane'] = false;
// Mark as read when viewed in preview pane (delay in seconds)
// Set to -1 if messages in preview pane should not be marked as read
$rcmail_config['preview_pane_mark_read'] = 0;
// Clear Trash on logout
$rcmail_config['logout_purge'] = false;
// Compact INBOX on logout
$rcmail_config['logout_expunge'] = false;
// Display attached images below the message body
$rcmail_config['inline_images'] = true;
// Encoding of long/non-ascii attachment names:
// 0 - Full RFC 2231 compatible
// 1 - RFC 2047 for 'name' and RFC 2231 for 'filename' parameter (Thunderbird's default)
// 2 - Full 2047 compatible
$rcmail_config['mime_param_folding'] = 1;
// Set true if deleted messages should not be displayed
// This will make the application run slower
$rcmail_config['skip_deleted'] = false;
// Set true to Mark deleted messages as read as well as deleted
// False means that a message's read status is not affected by marking it as deleted
$rcmail_config['read_when_deleted'] = true;
// Set to true to never delete messages immediately
// Use 'Purge' to remove messages marked as deleted
$rcmail_config['flag_for_deletion'] = false;
// Default interval for keep-alive/check-recent requests (in seconds)
// Must be greater than or equal to 'min_keep_alive' and less than 'session_lifetime'
$rcmail_config['keep_alive'] = 60;
// If true all folders will be checked for recent messages
$rcmail_config['check_all_folders'] = false;
// If true, after message delete/move, the next message will be displayed
$rcmail_config['display_next'] = true;
// 0 - Do not expand threads
// 1 - Expand all threads automatically
// 2 - Expand only threads with unread messages
$rcmail_config['autoexpand_threads'] = 0;
// When replying:
// -1 - don't cite the original message
// 0 - place cursor below the original message
// 1 - place cursor above original message (top posting)
$rcmail_config['reply_mode'] = 0;
// When replying strip original signature from message
$rcmail_config['strip_existing_sig'] = true;
// Show signature:
// 0 - Never
// 1 - Always
// 2 - New messages only
// 3 - Forwards and Replies only
$rcmail_config['show_sig'] = 1;
// When replying or forwarding place sender's signature above existing message
$rcmail_config['sig_above'] = false;
// Use MIME encoding (quoted-printable) for 8bit characters in message body
$rcmail_config['force_7bit'] = false;
// Defaults of the search field configuration.
// The array can contain a per-folder list of header fields which should be considered when searching
// The entry with key '*' stands for all folders which do not have a specific list set.
// Please note that folder names should to be in sync with $rcmail_config['default_folders']
$rcmail_config['search_mods'] = null; // Example: array('*' => array('subject'=>1, 'from'=>1), 'Sent' => array('subject'=>1, 'to'=>1));
// Defaults of the addressbook search field configuration.
$rcmail_config['addressbook_search_mods'] = null; // Example: array('name'=>1, 'firstname'=>1, 'surname'=>1, 'email'=>1, '*'=>1);
// 'Delete always'
// This setting reflects if mail should be always deleted
// when moving to Trash fails. This is necessary in some setups
// when user is over quota and Trash is included in the quota.
$rcmail_config['delete_always'] = false;
// Directly delete messages in Junk instead of moving to Trash
$rcmail_config['delete_junk'] = false;
// Behavior if a received message requests a message delivery notification (read receipt)
// 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask)
// 3 = send automatically if sender is in addressbook, otherwise ask the user
// 4 = send automatically if sender is in addressbook, otherwise ignore
$rcmail_config['mdn_requests'] = 0;
// Return receipt checkbox default state
$rcmail_config['mdn_default'] = 0;
// Delivery Status Notification checkbox default state
$rcmail_config['dsn_default'] = 0;
// Place replies in the folder of the message being replied to
$rcmail_config['reply_same_folder'] = false;
// Sets default mode of Forward feature to "forward as attachment"
$rcmail_config['forward_attachment'] = false;
// Defines address book (internal index) to which new contacts will be added
// By default it is the first writeable addressbook.
// Note: Use '0' for built-in address book.
$rcmail_config['default_addressbook'] = null;
// 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;
// Default font for composed HTML message.
// Supported values: Andale Mono, Arial, Arial Black, Book Antiqua, Courier New,
// Georgia, Helvetica, Impact, Tahoma, Terminal, Times New Roman, Trebuchet MS, Verdana
$rcmail_config['default_font'] = '';
// end of config file
diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog
index ce9386154..dceac7602 100644
--- a/plugins/managesieve/Changelog
+++ b/plugins/managesieve/Changelog
@@ -1,255 +1,257 @@
+- Fixed filter activation/deactivation confirmation message (#1488765)
+
* version 6.0 [2012-10-03]
-----------------------------------------------------------
- Fixed issue with DBMail bug [http://pear.php.net/bugs/bug.php?id=19077] (#1488594)
- Added support for enotify/notify (RFC5435, RFC5436, draft-ietf-sieve-notify-00)
- Change default port to 4190 (IANA-allocated), add port auto-detection (#1488713)
- Added request size limits detection and script corruption prevention (#1488648)
- Fix so scripts listed in managesieve_filename_exceptions aren't displayed on the list (#1488724)
* version 5.2 [2012-07-24]
-----------------------------------------------------------
- Added GUI for variables setting - RFC5229 (patch from Paweł Słowik)
- Fixed scrollbars in Larry's iframes
- Fix performance issue in message_headers_output hook handling
* version 5.1 [2012-06-21]
-----------------------------------------------------------
- Fixed filter popup width (for non-english localizations)
- Fixed tokenizer infinite loop on invalid script content
- Larry skin support
- Fixed custom header name validity check, made RFC2822-compliant
* 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]
-----------------------------------------------------------
- Fixed handling of error in Net_Sieve::listScripts()
- Fixed handling of REFERRAL responses (http://pear.php.net/bugs/bug.php?id=17107)
- Fixed bug where wrong folders hierarchy was displayed on folders listing
* version 4.2 [2011-05-24]
-----------------------------------------------------------
- Moved elsif replacement code to handle only imports from other formats
- Fixed mod_mailbox() usage for newer Roundcube versions
- Fixed regex extension (error: regex require missing)
* version 4.1 [2011-03-07]
-----------------------------------------------------------
- Fix fileinto target is always INBOX (#1487776)
- Fix escaping of backslash character in quoted strings (#1487780)
- Fix handling of non-safe characters (double-quote, backslash)
or UTF-8 characters (dovecot's implementation bug workaround)
in script names
- Fix saving of a script using flags extension on servers with imap4flags support (#1487825)
* version 4.0 [2011-02-10]
-----------------------------------------------------------
- Fix STARTTLS for timsieved < 2.3.10
- Added :regex and :matches support (#1487746)
- Added setflag/addflag/removeflag support (#1487449)
- Added support for vacation :subject field (#1487120)
- rcube_sieve_script class moved to separate file
- Moved javascript code from skin templates into managesieve.js file
* version 3.0 [2011-02-01]
-----------------------------------------------------------
- Added support for SASL proxy authentication (#1486691)
- Fixed parsing of scripts with \r\n line separator
- Apply forgotten changes for form errors handling
- Fix multi-line strings parsing (#1487685)
- Added tests for script parser
- Rewritten script parser
- Fix double request when clicking on Filters tab using Firefox
* version 2.10 [2010-10-10]
-----------------------------------------------------------
- Fixed import from Avelsieve
- Use localized size units (#1486976)
- Added support for relational operators and i;ascii-numeric comparator
- Added popups with form errors
* version 2.9 [2010-08-02]
-----------------------------------------------------------
- Fixed vacation parameters parsing (#1486883)
* version 2.8 [2010-07-08]
-----------------------------------------------------------
- Added managesieve_auth_type option (#1486731)
* version 2.7 [2010-07-06]
-----------------------------------------------------------
- Update Net_Sieve to version 1.3.0 (fixes LOGIN athentication)
- Added support for copying and copy sending of messages (COPY extension)
* version 2.6 [2010-06-03]
-----------------------------------------------------------
- Support %n and %d variables in managesieve_host option
* version 2.5 [2010-05-04]
-----------------------------------------------------------
- Fix filters set label after activation
- Fix filters set activation, add possibility to deactivate sets (#1486699)
- Fix download button state when sets list is empty
- Fix errors when sets list is empty
* version 2.4 [2010-04-01]
-----------------------------------------------------------
- Fixed bug in DIGEST-MD5 authentication (http://pear.php.net/bugs/bug.php?id=17285)
- Fixed disabling rules with many tests
- Small css unification with core
- Scripts import/export
* version 2.3 [2010-03-18]
-----------------------------------------------------------
- Added import from Horde-INGO
- Support for more than one match using if+stop instead of if+elsif structures (#1486078)
- Support for selectively disabling rules within a single sieve script (#1485882)
- Added vertical splitter
* version 2.2 [2010-02-06]
-----------------------------------------------------------
- Fix handling of "<>" characters in filter names (#1486477)
* version 2.1 [2010-01-12]
-----------------------------------------------------------
- Fix "require" structure generation when many modules are used
- Fix problem with '<' and '>' characters in header tests
* version 2.0 [2009-11-02]
-----------------------------------------------------------
- Added 'managesieve_debug' option
- Added multi-script support
- Small css improvements + sprite image buttons
- PEAR::NetSieve 1.2.0b1
* version 1.7 [2009-09-20]
-----------------------------------------------------------
- Support multiple managesieve hosts using %h variable
in managesieve_host option
- Fix first rule deleting (#1486140)
* version 1.6 [2009-09-08]
-----------------------------------------------------------
- Fix warning when importing squirrelmail rules
- Fix handling of "true" as "anyof (true)" test
* version 1.5 [2009-09-04]
-----------------------------------------------------------
- Added es_ES, ua_UA localizations
- Added 'managesieve_mbox_encoding' option
* version 1.4 [2009-07-29]
-----------------------------------------------------------
- Updated PEAR::Net_Sieve to 1.1.7
* version 1.3 [2009-07-24]
-----------------------------------------------------------
- support more languages
- support config.inc.php file
* version 1.2 [2009-06-28]
-----------------------------------------------------------
- Support IMAP namespaces in fileinto (#1485943)
- Added it_IT localization
* version 1.1 [2009-05-27]
-----------------------------------------------------------
- Added new icons
- Added support for headers lists (coma-separated) in rules
- Added de_CH localization
* version 1.0 [2009-05-21]
-----------------------------------------------------------
- Rewritten using plugin API
- Added hu_HU localization (Tamas Tevesz)
* version beta7 (svn-r2300) [2009-03-01]
-----------------------------------------------------------
- Added SquirrelMail script auto-import (Jonathan Ernst)
- Added 'vacation' support (Jonathan Ernst & alec)
- Added 'stop' support (Jonathan Ernst)
- Added option for extensions disabling (Jonathan Ernst & alec)
- Added fi_FI, nl_NL, bg_BG localization
- Small style fixes
* version 0.2-stable1 (svn-r2205) [2009-01-03]
-----------------------------------------------------------
- Fix moving down filter row
- Fixes for compressed js files in stable release package
- Created patch for svn version r2205
* version 0.2-stable [2008-12-31]
-----------------------------------------------------------
- Added ru_RU, fr_FR, zh_CN translation
- Fixes for Roundcube 0.2-stable
* version rc0.2beta [2008-09-21]
-----------------------------------------------------------
- Small css fixes for IE
- Fixes for Roundcube 0.2-beta
* version beta6 [2008-08-08]
-----------------------------------------------------------
- Added de_DE translation
- Fix for Roundcube r1634
* version beta5 [2008-06-10]
-----------------------------------------------------------
- Fixed 'exists' operators
- Fixed 'not*' operators for custom headers
- Fixed filters deleting
* version beta4 [2008-06-09]
-----------------------------------------------------------
- Fix for Roundcube r1490
* version beta3 [2008-05-22]
-----------------------------------------------------------
- Fixed textarea error class setting
- Added pagetitle setting
- Added option 'managesieve_replace_delimiter'
- Fixed errors on IE (still need some css fixes)
* version beta2 [2008-05-20]
-----------------------------------------------------------
- Use 'if' only for first filter and 'elsif' for the rest
* version beta1 [2008-05-15]
-----------------------------------------------------------
- Initial version for Roundcube r1388.
diff --git a/plugins/managesieve/localization/bs_BA.inc b/plugins/managesieve/localization/bs_BA.inc
index 438d99e9c..106fe6d75 100644
--- a/plugins/managesieve/localization/bs_BA.inc
+++ b/plugins/managesieve/localization/bs_BA.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/bs_BA/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Kenan Dervišević <kenan3008@gmail.com> |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'Filteri';
$labels['managefilters'] = 'Upravljanje dolaznim email filterima';
$labels['filtername'] = 'Naziv filtera';
$labels['newfilter'] = 'Novi filter';
$labels['filteradd'] = 'Dodaj filter';
$labels['filterdel'] = 'Obriši filter';
$labels['moveup'] = 'Pomjeri gore';
$labels['movedown'] = 'Pomjeri dole';
$labels['filterallof'] = 'poklapa se sa svim sljedećim pravilima';
$labels['filteranyof'] = 'poklapa se sa bilo kojim od sljedećih pravila';
$labels['filterany'] = 'sve poruke';
$labels['filtercontains'] = 'sadrži';
$labels['filternotcontains'] = 'ne sadrži';
$labels['filteris'] = 'jednako';
$labels['filterisnot'] = 'nije jednako';
$labels['filterexists'] = 'postoji';
$labels['filternotexists'] = 'ne postoji';
$labels['filtermatches'] = 'poklapa se sa izrazom';
$labels['filternotmatches'] = 'ne poklapa se sa izrazom';
$labels['filterregex'] = 'poklapa se sa regularnim izrazom';
$labels['filternotregex'] = 'ne poklapa se sa regularnim izrazom';
$labels['filterunder'] = 'ispod';
$labels['filterover'] = 'iznad';
$labels['addrule'] = 'Dodaj pravilo';
$labels['delrule'] = 'Obriši pravilo';
$labels['messagemoveto'] = 'Premjesti poruku u';
$labels['messageredirect'] = 'Preusmjeri poruku ka';
$labels['messagecopyto'] = 'Kopiraj poruku u';
$labels['messagesendcopy'] = 'Pošalji kopiju poruke';
$labels['messagereply'] = 'Odgovori';
$labels['messagedelete'] = 'Obriši poruku';
$labels['messagediscard'] = 'Odbaci sa porukom';
$labels['messagesrules'] = 'Za dolazne emailove:';
$labels['messagesactions'] = '...izvrši sljedeće akcije:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Obriši';
$labels['sender'] = 'Pošiljaoc';
$labels['recipient'] = 'Primaoc';
$labels['vacationaddresses'] = 'Moje dodatne email adrese (odvojite zarezima):';
$labels['vacationdays'] = 'Frekvencija slanja poruka (u danima):';
$labels['vacationreason'] = 'Tijelo poruke (razlog za odmor):';
$labels['vacationsubject'] = 'Naslov poruke:';
$labels['rulestop'] = 'Prestani procjenjivati pravila';
$labels['enable'] = 'Omogući/Onemogući';
$labels['filterset'] = 'Set filtera';
$labels['filtersets'] = 'Setovi filtera';
$labels['filtersetadd'] = 'Dodaj set filtera';
$labels['filtersetdel'] = 'Obriši trenutni set filtera';
$labels['filtersetact'] = 'Aktiviraj trenutni set filtera';
$labels['filtersetdeact'] = 'Deaktiviraj trenutni set filtera';
$labels['filterdef'] = 'Definicija filtera';
$labels['filtersetname'] = 'Naziv seta filtera';
$labels['newfilterset'] = 'Novi set filtera';
$labels['active'] = 'aktivno';
$labels['none'] = 'ništa';
$labels['fromset'] = 'iz seta';
$labels['fromfile'] = 'iz datoteke';
$labels['filterdisabled'] = 'Filter je onemogućen';
$labels['countisgreaterthan'] = 'brojač je veći od';
$labels['countisgreaterthanequal'] = 'brojač je veći ili jednak';
$labels['countislessthan'] = 'brojač je manji od';
$labels['countislessthanequal'] = 'brojač je manji ili jednak';
$labels['countequals'] = 'brojač je jednak';
$labels['countnotequals'] = 'brojač nije jednak';
$labels['valueisgreaterthan'] = 'vrijednost je veća od';
$labels['valueisgreaterthanequal'] = 'vrijednost je veća ili jednaka';
$labels['valueislessthan'] = 'vrijednost je manja od';
$labels['valueislessthanequal'] = 'vrijednost je manja ili jednaka';
$labels['valueequals'] = 'vrijednost je jednaka';
$labels['valuenotequals'] = 'vrijednost nije jednaka';
$labels['setflags'] = 'Postavi oznake za poruku';
$labels['addflags'] = 'Dodaj oznake u poruku';
$labels['removeflags'] = 'Ukloni oznake iz poruke';
$labels['flagread'] = 'Pročitano';
$labels['flagdeleted'] = 'Obrisano';
$labels['flaganswered'] = 'Odgovoreno';
$labels['flagflagged'] = 'Važno';
$labels['flagdraft'] = 'Skica';
$labels['filtercreate'] = 'Kreiraj filter';
$labels['usedata'] = 'Koristite sljedeće podatke u filteru:';
$labels['nextstep'] = 'Sljedeći korak';
$labels['...'] = '...';
$labels['advancedopts'] = 'Napredne opcije';
$labels['body'] = 'Tijelo';
$labels['address'] = 'adresa';
$labels['envelope'] = 'koverta';
$labels['modifier'] = 'prilagođavanje:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'nekodiran (obični)';
$labels['contenttype'] = 'vrsta sadržaja';
$labels['modtype'] = 'vrsta:';
$labels['allparts'] = 'sve';
$labels['domain'] = 'domena';
$labels['localpart'] = 'lokalni dio';
$labels['user'] = 'korisnik';
$labels['detail'] = 'detalji';
$labels['comparator'] = 'upoređivač:';
$labels['default'] = 'početno';
$labels['octet'] = 'striktno (oktet)';
$labels['asciicasemap'] = 'osjetljivo na velika/mala slova (ascii-casemap)';
$labels['asciinumeric'] = 'numerički (ascii-numeric)';
$labels['filterunknownerror'] = 'Nepoznata serverska greška.';
$labels['filterconnerror'] = 'Nije se moguće povezati na server.';
$labels['filterdeleteerror'] = 'Nije moguće obrisati filter. Desila se serverska greška.';
$labels['filterdeleted'] = 'Filter je uspješno obrisan.';
$labels['filtersaved'] = 'Filter je uspješno sačuvan.';
$labels['filtersaveerror'] = 'Nije moguće sačuvati filter. Desila se serverska greška.';
$labels['filterdeleteconfirm'] = 'Da li zaista želite obrisati označeni filter?';
$labels['ruledeleteconfirm'] = 'Jeste li sigurni da želite obrisati označeno pravilo?';
$labels['actiondeleteconfirm'] = 'Jeste li sigurni da želite obrisati označenu akciju?';
$labels['forbiddenchars'] = 'U polje su uneseni nedozvoljeni znakovi.';
$labels['cannotbeempty'] = 'Polje ne može biti prazno.';
$labels['ruleexist'] = 'Filter s tim imenom već postoji.';
$labels['setactivateerror'] = 'Nije moguće aktivirati označeni set filtera. Desila se serverska greška.';
$labels['setdeactivateerror'] = 'Nije moguće deaktivirati označeni set filtera. Desila se serverska greška.';
$labels['setdeleteerror'] = 'Nije moguće obrisati označeni set filtera. Desila se serverska greška.';
$labels['setactivated'] = 'Set filtera je uspješno aktiviran.';
$labels['setdeactivated'] = 'Set filtera je uspješno deaktiviran.';
$labels['setdeleted'] = 'Set filtera je uspješno obrisan.';
$labels['setdeleteconfirm'] = 'Jeste li sigurni da želite obrisati označeni set filtera?';
$labels['setcreateerror'] = 'Nije moguće kreirati se filtera. Desila se serverska greška.';
$labels['setcreated'] = 'Set filtera je uspješno kreiran.';
$labels['activateerror'] = 'Nije moguće omogućiti označene filtere. Desila se serverska greška.';
$labels['deactivateerror'] = 'Nije moguće onemogućiti označene filtere. Desila se serverska greška.';
-$labels['activated'] = 'Filteri su uspješno onemogućeni.';
-$labels['deactivated'] = 'Filteri su uspješno omogućeni.';
+$labels['deactivated'] = 'Filteri su uspješno onemogućeni.';
+$labels['activated'] = 'Filteri su uspješno omogućeni.';
$labels['moved'] = 'Filteri su uspješno premješteni.';
$labels['moveerror'] = 'Nije moguće premjestiti označeni filter. Desila se serverska greška.';
$labels['nametoolong'] = 'Ime je predugo.';
$labels['namereserved'] = 'Ime je rezervisano.';
$labels['setexist'] = 'Set već postoji.';
$labels['nodata'] = 'Morate označiti barem jednu poziciju!';
diff --git a/plugins/managesieve/localization/ca_ES.inc b/plugins/managesieve/localization/ca_ES.inc
index d7e8b67be..ad03bdf0c 100644
--- a/plugins/managesieve/localization/ca_ES.inc
+++ b/plugins/managesieve/localization/ca_ES.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/ca_ES/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Jordi Sanfeliu <jordi@fibranet.cat> |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'Filtres';
$labels['managefilters'] = 'Gestiona els filtres dels missatges d\'entrada';
$labels['filtername'] = 'Nom del filtre';
$labels['newfilter'] = 'Filtre Nou';
$labels['filteradd'] = 'Afegeix un filtre';
$labels['filterdel'] = 'Suprimeix el filtre';
$labels['moveup'] = 'Mou amunt';
$labels['movedown'] = 'Mou avall';
$labels['filterallof'] = 'que coincideixi amb totes les regles següents';
$labels['filteranyof'] = 'que no coincideixi amb cap de les regles següents';
$labels['filterany'] = 'tots els missatges';
$labels['filtercontains'] = 'conté';
$labels['filternotcontains'] = 'no conté';
$labels['filteris'] = 'és igual a';
$labels['filterisnot'] = 'és diferent de';
$labels['filterexists'] = 'existeix';
$labels['filternotexists'] = 'no existeix';
$labels['filtermatches'] = 'coincideix amb l\'expressió';
$labels['filternotmatches'] = 'no coincideix amb l\'expressió';
$labels['filterregex'] = 'coincideix amb l\'expressió regular';
$labels['filternotregex'] = 'no coincideix amb l\'expressió regular';
$labels['filterunder'] = 'sota';
$labels['filterover'] = 'sobre';
$labels['addrule'] = 'Afegeix una regla';
$labels['delrule'] = 'Suprimeix regla';
$labels['messagemoveto'] = 'Mou el missatge a';
$labels['messageredirect'] = 'Redirigeix el missatge cap a';
$labels['messagecopyto'] = 'Copia el missatge a';
$labels['messagesendcopy'] = 'Envia una còpia del missatge a';
$labels['messagereply'] = 'Respon amb un missatge';
$labels['messagedelete'] = 'Suprimeix missatge';
$labels['messagediscard'] = 'Descarta amb un missatge';
$labels['messagesrules'] = 'Pels missatges entrants:';
$labels['messagesactions'] = '..executa les següents accions:';
$labels['add'] = 'Afegeix';
$labels['del'] = 'Suprimeix';
$labels['sender'] = 'Remitent';
$labels['recipient'] = 'Destinatari/a';
$labels['vacationaddresses'] = 'Altres adreces electròniques meves (separades per coma)';
$labels['vacationdays'] = 'Cada quan enviar un missatge (en dies):';
$labels['vacationreason'] = 'Cos del missatge (raó de les vacances):';
$labels['vacationsubject'] = 'Assumpte del missatge:';
$labels['rulestop'] = 'Deixa d\'avaluar regles';
$labels['enable'] = 'Habilita/deshabilita';
$labels['filterset'] = 'Conjunt de filtres';
$labels['filtersets'] = 'Conjunts de filtres';
$labels['filtersetadd'] = 'Afegeix conjunts de filtres';
$labels['filtersetdel'] = 'Suprimeix el conjunt de filtres actual';
$labels['filtersetact'] = 'Activa el conjunt de filtres actual';
$labels['filtersetdeact'] = 'Desactiva el conjunt de filtres actual';
$labels['filterdef'] = 'Definició del filtre';
$labels['filtersetname'] = 'Nom del conjunt de filtres';
$labels['newfilterset'] = 'Nou conjunt de filtres';
$labels['active'] = 'actiu';
$labels['none'] = 'cap';
$labels['fromset'] = 'des del conjunt';
$labels['fromfile'] = 'des del fitxer';
$labels['filterdisabled'] = 'Filtre deshabilitat';
$labels['countisgreaterthan'] = 'el recompte és major que';
$labels['countisgreaterthanequal'] = 'el recompte és major o igual que';
$labels['countislessthan'] = 'el recompte és menor que';
$labels['countislessthanequal'] = 'el recompte és menor o igual que';
$labels['countequals'] = 'el recompte és igual que';
$labels['countnotequals'] = 'el recompte és diferent de';
$labels['valueisgreaterthan'] = 'el valor és major que';
$labels['valueisgreaterthanequal'] = 'el valor és major o igual que';
$labels['valueislessthan'] = 'el valor és menor que';
$labels['valueislessthanequal'] = 'el valor és menor o igual que';
$labels['valueequals'] = 'el valor és igual que';
$labels['valuenotequals'] = 'el valor és diferent de';
$labels['setflags'] = 'Posa indicadors al missatge';
$labels['addflags'] = 'Afegeix indicadors al missatge';
$labels['removeflags'] = 'Suprimeix indicadors del missatge';
$labels['flagread'] = 'Llegit';
$labels['flagdeleted'] = 'Suprimit';
$labels['flaganswered'] = 'Respost';
$labels['flagflagged'] = 'Marcat';
$labels['flagdraft'] = 'Esborrany';
$labels['filtercreate'] = 'Crea filtre';
$labels['usedata'] = 'Fes servir les següents dades al filtre:';
$labels['nextstep'] = 'Següent pas';
$labels['...'] = '...';
$labels['advancedopts'] = 'Opcions avançades';
$labels['body'] = 'Cos';
$labels['address'] = 'adreça';
$labels['envelope'] = 'sobre';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'text';
$labels['undecoded'] = 'descodificat (en brut)';
$labels['contenttype'] = 'tipus de contigut';
$labels['modtype'] = 'tipus:';
$labels['allparts'] = 'tots';
$labels['domain'] = 'domini';
$labels['localpart'] = 'part local';
$labels['user'] = 'usuari/a';
$labels['detail'] = 'detall';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'per omissió';
$labels['octet'] = 'estricte (octet)';
$labels['asciicasemap'] = 'No distingeix entre majúscules i minúscules (ascii-casemap)';
$labels['asciinumeric'] = 'numèric (ascii-numeric)';
$labels['filterunknownerror'] = 'Error desconegut al servidor.';
$labels['filterconnerror'] = 'No s\'ha pogut connectar al servidor.';
$labels['filterdeleteerror'] = 'No s\'ha pogut suprimir el filtre. Hi ha hagut un error al servidor.';
$labels['filterdeleted'] = 'El filtre s\'ha suprimit correctament.';
$labels['filtersaved'] = 'Filtre desat correctament.';
$labels['filtersaveerror'] = 'No s\'ha pogut desar el filtre. Hi ha hagut un error al servidor.';
$labels['filterdeleteconfirm'] = 'Realment voleu suprimit el filtre seleccionat?';
$labels['ruledeleteconfirm'] = 'Esteu segur que voleu suprimir la norma seleccionada?';
$labels['actiondeleteconfirm'] = 'Esteu segur que voleu suprimir l\'acció seleccionada?';
$labels['forbiddenchars'] = 'El camp conté caràcters prohibits.';
$labels['cannotbeempty'] = 'El camp no pot estar buit.';
$labels['ruleexist'] = 'Ja existeix un filtre amb aquest nom';
$labels['setactivateerror'] = 'No s\'ha pogut activar el fitlre seleccionat. Hi ha hagut un error al servidor.';
$labels['setdeactivateerror'] = 'No s\'ha pogut desactivar el fitlre seleccionat. Hi ha hagut un error al servidor.';
$labels['setdeleteerror'] = 'No s\'ha pogut suprimir el conjunt de filtres seleccionats. Hi ha hagut un error al servidor.';
$labels['setactivated'] = 'El conjunt de filtres s\'ha activat correctament.';
$labels['setdeactivated'] = 'El conjunt de filtres s\'ha desactivat correctament.';
$labels['setdeleted'] = 'El conjunt de filtres s\'ha suprimit correctament.';
$labels['setdeleteconfirm'] = 'Esteu segurs que voleu suprimir el conjunt de filtres seleccionats?';
$labels['setcreateerror'] = 'No s\'ha pogut crear el conjunt de filtres. Hi ha hagut un error al servidor.';
$labels['setcreated'] = 'S\'ha creat correctament el conjunt de filtres.';
$labels['activateerror'] = 'No s\'ha pogut habilitar el(s) filtre(s) seleccionat(s). Hi ha hagut un error al servidor.';
$labels['deactivateerror'] = 'No s\'ha pogut deshabilitar el(s) filtre(s) seleccionat(s). Hi ha hagut un error al servidor.';
-$labels['activated'] = 'Filtre(s) deshabilitat(s) correctament.';
-$labels['deactivated'] = 'Filtre(s) habilitat(s) correctament.';
+$labels['deactivated'] = 'Filtre(s) deshabilitat(s) correctament.';
+$labels['activated'] = 'Filtre(s) habilitat(s) correctament.';
$labels['moved'] = 'S\'ha mogut correctament el filtre.';
$labels['moveerror'] = 'No s\'ha pogut moure el filtre seleccionat. Hi ha hagut un error al servidor.';
$labels['nametoolong'] = 'El nom és massa llarg.';
$labels['namereserved'] = 'Nom reservat.';
$labels['setexist'] = 'El conjunt ja existeix.';
$labels['nodata'] = 'S\'ha de seleccionar com a mínim una posició!';
diff --git a/plugins/managesieve/localization/cs_CZ.inc b/plugins/managesieve/localization/cs_CZ.inc
index 0790eae9c..c3448ab47 100644
--- a/plugins/managesieve/localization/cs_CZ.inc
+++ b/plugins/managesieve/localization/cs_CZ.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| 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: Tomáš Kyzlink <Unknown> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filtry';
$labels['managefilters'] = 'Nastavení filtrů';
$labels['filtername'] = 'Název filtru';
$labels['newfilter'] = 'Nový filtr';
$labels['filteradd'] = 'Přidej filtr';
$labels['filterdel'] = 'Smaž filtr';
$labels['moveup'] = 'Posunout nahoru';
$labels['movedown'] = 'Posunout dolů';
$labels['filterallof'] = 'Odpovídají všechny pravidla';
$labels['filteranyof'] = 'Odpovídá kterékoliv pravidlo';
$labels['filterany'] = 'Všechny zprávy';
$labels['filtercontains'] = 'obsahuje';
$labels['filternotcontains'] = 'neobsahuje';
$labels['filteris'] = 'odpovídá';
$labels['filterisnot'] = 'neodpovídá';
$labels['filterexists'] = 'existuje';
$labels['filternotexists'] = 'neexistuje';
$labels['filtermatches'] = 'odpovídá výrazu';
$labels['filternotmatches'] = 'neodpovídá výrazu';
$labels['filterregex'] = 'odpovídá regulárnímu výrazu';
$labels['filternotregex'] = 'neodpovídá regulárnímu výrazu';
$labels['filterunder'] = 'pod';
$labels['filterover'] = 'nad';
$labels['addrule'] = 'Přidej pravidlo';
$labels['delrule'] = 'Smaž pravidlo';
$labels['messagemoveto'] = 'Přesuň zprávu do';
$labels['messageredirect'] = 'Přeposlat zprávu na';
$labels['messagecopyto'] = 'Zkopírovat zprávu do';
$labels['messagesendcopy'] = 'Odeslat kopii zprávy na';
$labels['messagereply'] = 'Odpovědět se zprávou';
$labels['messagedelete'] = 'Smazat zprávu';
$labels['messagediscard'] = 'Smazat se zprávou';
$labels['messagesrules'] = 'Pravidla pro příchozí zprávu:';
$labels['messagesactions'] = '...vykonej následující akce:';
$labels['add'] = 'Přidej';
$labels['del'] = 'Smaž';
$labels['sender'] = 'Odesílatel';
$labels['recipient'] = 'Příjemce';
$labels['vacationaddresses'] = 'Seznam příjemců, kterým nebude zpráva odeslána (oddělené čárkou):';
$labels['vacationdays'] = 'Počet dnů mezi automatickými odpověďmi:';
$labels['vacationreason'] = 'Zpráva (Důvod nepřítomnosti):';
$labels['vacationsubject'] = 'Předmět zprávy:';
$labels['rulestop'] = 'Zastavit pravidla';
$labels['enable'] = 'Zapnout/Vypnout';
$labels['filterset'] = 'Sada filtrů';
$labels['filtersets'] = 'Sady filtrů';
$labels['filtersetadd'] = 'Přidat sadu filtrů';
$labels['filtersetdel'] = 'Odebrat tuto sadu filtrů';
$labels['filtersetact'] = 'Zapnout tuto sadu filtrů';
$labels['filtersetdeact'] = 'Vypnout tuto sadu filtrů';
$labels['filterdef'] = 'Definice filtru';
$labels['filtersetname'] = 'Nastavit název sady filtrů';
$labels['newfilterset'] = 'Nová sada filtrů';
$labels['active'] = 'aktivní';
$labels['none'] = 'nic';
$labels['fromset'] = 'ze sady';
$labels['fromfile'] = 'ze souboru';
$labels['filterdisabled'] = 'Filtr neaktivní';
$labels['countisgreaterthan'] = 'počet je větší než';
$labels['countisgreaterthanequal'] = 'počet je větší nebo roven';
$labels['countislessthan'] = 'počet je nižší než';
$labels['countislessthanequal'] = 'počet je nižší nebo roven';
$labels['countequals'] = 'počet je roven';
$labels['countnotequals'] = 'počet není roven';
$labels['valueisgreaterthan'] = 'hodnota je větší než';
$labels['valueisgreaterthanequal'] = 'hodnota je větší nebo stejná jako';
$labels['valueislessthan'] = 'hodnota je nižší než';
$labels['valueislessthanequal'] = 'hodnota je nižší nebo stejná jako';
$labels['valueequals'] = 'hodnota odpovídá';
$labels['valuenotequals'] = 'hodnota neodpovídá';
$labels['setflags'] = 'Nastavit vlajky u zprávy';
$labels['addflags'] = 'Přidat vlajky ke zprávě';
$labels['removeflags'] = 'Odstranit vlajky ze zprávy';
$labels['flagread'] = 'Přečteno';
$labels['flagdeleted'] = 'Smazáno';
$labels['flaganswered'] = 'Odpovězené';
$labels['flagflagged'] = 'Označeno';
$labels['flagdraft'] = 'Koncept';
$labels['filtercreate'] = 'Vytvořit filtr';
$labels['usedata'] = 'Použít následující údaje ve filtru:';
$labels['nextstep'] = 'Další krok';
$labels['...'] = '...';
$labels['advancedopts'] = 'Pokročilá nastavení';
$labels['body'] = 'Tělo';
$labels['address'] = 'adresa';
$labels['envelope'] = 'obálka';
$labels['modifier'] = 'měnič:';
$labels['text'] = 'text';
$labels['undecoded'] = 'nedekódované (surové)';
$labels['contenttype'] = 'typ obsahu';
$labels['modtype'] = 'typ:';
$labels['allparts'] = 'vše';
$labels['domain'] = 'doména';
$labels['localpart'] = 'místní část';
$labels['user'] = 'uživatel';
$labels['detail'] = 'detail';
$labels['comparator'] = 'porovnávač:';
$labels['default'] = 'výchozí';
$labels['octet'] = 'striktní (oktet)';
$labels['asciicasemap'] = 'necitlivé na velikost písmen (ascii-casemap)';
$labels['asciinumeric'] = 'číslené (ascii-numeric)';
$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é';
$labels['ruleexist'] = 'Filtr s uvedeným názvem již existuje.';
$labels['setactivateerror'] = 'Nelze zapnout vybranou sadu filtrů. Došlo k chybě serveru.';
$labels['setdeactivateerror'] = 'Nelze vypnout vybranou sadu filtrů. Došlo k chybě serveru.';
$labels['setdeleteerror'] = 'Nelze odstranit vybranou sadu filtrů. Došlo k chybě serveru.';
$labels['setactivated'] = 'Sada filtrů úspěšně zapnuta.';
$labels['setdeactivated'] = 'Sada filtrů úspěšně vypnuta.';
$labels['setdeleted'] = 'Sada filtrů úspěšně odstraněna.';
$labels['setdeleteconfirm'] = 'Opravdu si přejete odebrat vybranou sadu filtrů.';
$labels['setcreateerror'] = 'Nelze vytvořit sadu filtrů. Došlo k chybě serveru.';
$labels['setcreated'] = 'Sada filtrů úspěšně vytvořena.';
$labels['activateerror'] = 'Nelze zapnout vybrané filtr/y. Došlo k chybě serveru.';
$labels['deactivateerror'] = 'Nelze vypnout vybrané filtr/y. Došlo k chybě serveru.';
-$labels['activated'] = 'Filtr/y úspěšne vypnuty.';
-$labels['deactivated'] = 'Filtr/y úspěšně zapnuty.';
+$labels['deactivated'] = 'Filtr/y úspěšne vypnuty.';
+$labels['activated'] = 'Filtr/y úspěšně zapnuty.';
$labels['moved'] = 'Filtr byl úspěšně přesunut.';
$labels['moveerror'] = 'Nelze přesunout vybraný filtr. Došlo k chybě na serveru.';
$labels['nametoolong'] = 'Příliš dlouhý název.';
$labels['namereserved'] = 'Vyhrazený název.';
$labels['setexist'] = 'Sada již existuje.';
$labels['nodata'] = 'Musí být vybrána minimálně jedna pozice!';
diff --git a/plugins/managesieve/localization/cy_GB.inc b/plugins/managesieve/localization/cy_GB.inc
index bace9be6e..4ca1efdd6 100644
--- a/plugins/managesieve/localization/cy_GB.inc
+++ b/plugins/managesieve/localization/cy_GB.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/cy_GB/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Dafydd Tomos |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'Hidlyddion';
$labels['managefilters'] = 'Rheoli hidlyddion ebost i fewn';
$labels['filtername'] = 'Enw hidlydd';
$labels['newfilter'] = 'Hidlydd newydd';
$labels['filteradd'] = 'Ychwanegu hidlydd';
$labels['filterdel'] = 'Dileu hidlydd';
$labels['moveup'] = 'Symud i fyny';
$labels['movedown'] = 'Symud i lawr';
$labels['filterallof'] = 'sy\'n cyfateb i\'r holl reolau canlynol';
$labels['filteranyof'] = 'sy\'n cyfateb i unrhyw un i\'r rheolau canlynol';
$labels['filterany'] = 'pob neges';
$labels['filtercontains'] = 'yn cynnwys';
$labels['filternotcontains'] = 'ddim yn cynnwys';
$labels['filteris'] = 'yn hafal i';
$labels['filterisnot'] = 'ddim yn hafal i';
$labels['filterexists'] = 'yn bodoli';
$labels['filternotexists'] = 'ddim yn bodoli';
$labels['filtermatches'] = 'yn cyfateb i\'r mynegiant';
$labels['filternotmatches'] = 'ddim yn cyfateb i\'r mynegiant';
$labels['filterregex'] = 'yn cyfateb i\'r mynegiant rheolaidd';
$labels['filternotregex'] = 'ddim yn cyfateb i\'r mynegiant rheolaidd';
$labels['filterunder'] = 'o dan';
$labels['filterover'] = 'dros';
$labels['addrule'] = 'Ychwanegu rheol';
$labels['delrule'] = 'Dileu rheol';
$labels['messagemoveto'] = 'Symud neges i';
$labels['messageredirect'] = 'Ail-gyfeirio neges i';
$labels['messagecopyto'] = 'Copio neges i';
$labels['messagesendcopy'] = 'Danfon copi o\'r neges i';
$labels['messagereply'] = 'Ymateb gyda\'r neges';
$labels['messagedelete'] = 'Dileu neges';
$labels['messagediscard'] = 'Gwaredu gyda neges';
$labels['messagesrules'] = 'Ar gyfer ebost i fewn:';
$labels['messagesactions'] = '...rhedeg y gweithredoedd canlynol:';
$labels['add'] = 'Ychwanegu';
$labels['del'] = 'Dileu';
$labels['sender'] = 'Anfonwr';
$labels['recipient'] = 'Derbynnwr';
$labels['vacationaddresses'] = 'Fy chyfeiriadau ebost ychwanegol (gwahanir gyda coma):';
$labels['vacationdays'] = 'Pa mor aml i ddanfon negeseuon (mewn dyddiau):';
$labels['vacationreason'] = 'Corff neges (rheswm ar wyliau):';
$labels['vacationsubject'] = 'Pwnc neges:';
$labels['rulestop'] = 'Stopio gwerthuso rheolau';
$labels['enable'] = 'Galluogi/Analluogi';
$labels['filterset'] = 'Set hidlyddion';
$labels['filtersets'] = 'Setiau hidlyddion';
$labels['filtersetadd'] = 'Ychwanegu set hidlyddion';
$labels['filtersetdel'] = 'Dileu set hidlyddion cyfredol';
$labels['filtersetact'] = 'Dileu set hidlyddion gweithredol';
$labels['filtersetdeact'] = 'Analluogi set hidlyddion cyfredol';
$labels['filterdef'] = 'Diffiniad hidlydd';
$labels['filtersetname'] = 'Enw set hidlyddion';
$labels['newfilterset'] = 'Set hidlyddion newydd';
$labels['active'] = 'gweithredol';
$labels['none'] = 'dim';
$labels['fromset'] = 'o set';
$labels['fromfile'] = 'o ffeil';
$labels['filterdisabled'] = 'Analluogwyd hidlydd';
$labels['countisgreaterthan'] = 'rhif yn fwy na';
$labels['countisgreaterthanequal'] = 'rhif yn fwy na neu hafal i';
$labels['countislessthan'] = 'rhif yn llai na';
$labels['countislessthanequal'] = 'rhif yn llai na neu hafal i';
$labels['countequals'] = 'rhif yn hafal i';
$labels['countnotequals'] = 'rhif ddim yn hafal i';
$labels['valueisgreaterthan'] = 'gwerth yn fwy na';
$labels['valueisgreaterthanequal'] = 'gwerth yn fwy na neu hafal i';
$labels['valueislessthan'] = 'gwerth yn llai na';
$labels['valueislessthanequal'] = 'gwerth yn llai neu hafal i';
$labels['valueequals'] = 'gwerth yn hafal i';
$labels['valuenotequals'] = 'gwerth ddim yn hafal i';
$labels['setflags'] = 'Rhoi fflag ar y neges';
$labels['addflags'] = 'Ychwanegu fflag i\'r neges';
$labels['removeflags'] = 'Dileu fflag o\'r neges';
$labels['flagread'] = 'Darllen';
$labels['flagdeleted'] = 'Dilewyd';
$labels['flaganswered'] = 'Atebwyd';
$labels['flagflagged'] = 'Nodwyd';
$labels['flagdraft'] = 'Drafft';
$labels['filtercreate'] = 'Creu hidlydd';
$labels['usedata'] = 'Defnyddio\'r wybodaeth ganlynol yn yr hidlydd:';
$labels['nextstep'] = 'Cam nesaf';
$labels['...'] = '...';
$labels['advancedopts'] = 'Dewisiadau uwch';
$labels['body'] = 'Corff';
$labels['address'] = 'cyfeiriad';
$labels['envelope'] = 'amlen';
$labels['modifier'] = 'newidydd:';
$labels['text'] = 'testun';
$labels['undecoded'] = 'heb ei ddatgodi (amrwd)';
$labels['contenttype'] = 'math cynnwys';
$labels['modtype'] = 'math:';
$labels['allparts'] = 'popeth';
$labels['domain'] = 'parth';
$labels['localpart'] = 'darn lleol';
$labels['user'] = 'defnyddiwr';
$labels['detail'] = 'manylion';
$labels['comparator'] = 'cymharydd';
$labels['default'] = 'rhagosodiad';
$labels['octet'] = 'llym (octet)';
$labels['asciicasemap'] = 'maint llythrennau (ascii-casemap)';
$labels['asciinumeric'] = 'rhifau (ascii-numeric)';
$labels['filterunknownerror'] = 'Gwall gweinydd anhysbys.';
$labels['filterconnerror'] = 'Methwyd cysylltu a\'r gweinydd.';
$labels['filterdeleteerror'] = 'Methwyd dileu hidlydd. Cafwydd gwall gweinydd.';
$labels['filterdeleted'] = 'Dilëuwyd hidlydd yn llwyddiannus.';
$labels['filtersaved'] = 'Cadwyd hidlydd yn llwyddiannus.';
$labels['filtersaveerror'] = 'Methwyd cadw hidlydd. Cafwyd gwall gweinydd.';
$labels['filterdeleteconfirm'] = 'Ydych chi wir am ddileu yr hidlydd ddewiswyd?';
$labels['ruledeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r rheol ddewiswyd?';
$labels['actiondeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r weithred ddewiswyd?';
$labels['forbiddenchars'] = 'Llythrennau gwaharddedig yn y maes.';
$labels['cannotbeempty'] = 'Ni all y maes fod yn wag.';
$labels['ruleexist'] = 'Mae hidlydd gyda\'r enw yma yn bodoli\'n barod.';
$labels['setactivateerror'] = 'Methwyd bywiogi y set hidlydd dewiswyd. Cafwyd gwall gweinydd.';
$labels['setdeactivateerror'] = 'Methwyd dadfywiogi y set hidlydd dewiswyd. Cafwyd gwall gweinydd.';
$labels['setdeleteerror'] = 'Methwyd dileu y set hidlydd dewiswyd. Cafwyd gwall gweinydd.';
$labels['setactivated'] = 'Bywiogwyd y set hidlydd yn llwyddiannus.';
$labels['setdeactivated'] = 'Dadfywiogwyd y set hidlydd yn llwyddiannus.';
$labels['setdeleted'] = 'Dilëuwyd y set hidlydd yn llwyddiannus.';
$labels['setdeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r set hidlydd ddewiswyd?';
$labels['setcreateerror'] = 'Methwyd creu set hidlydd. Cafwyd gwall gweinydd.';
$labels['setcreated'] = 'Crëuwyd y set hidlydd yn llwyddiannus.';
$labels['activateerror'] = 'Methwyd galluogi y hidlydd(ion) dewiswyd. Cafwyd gwall gweinydd.';
$labels['deactivateerror'] = 'Methwyd analluogi y hidlydd(ion) dewiswyd. Cafwyd gwall gweinydd.';
-$labels['activated'] = 'Analluogwyd y hidlydd(ion) yn llwyddiannus.';
-$labels['deactivated'] = 'Galluogwyd y hidlydd(ion) yn llwyddiannus.';
+$labels['deactivated'] = 'Analluogwyd y hidlydd(ion) yn llwyddiannus.';
+$labels['activated'] = 'Galluogwyd y hidlydd(ion) yn llwyddiannus.';
$labels['moved'] = 'Symudwyd y hidlydd yn llwyddiannus.';
$labels['moveerror'] = 'Methwyd symud y hidlydd dewiswyd. Cafwyd gwall gweinydd.';
$labels['nametoolong'] = 'Enw yn rhy hir.';
$labels['namereserved'] = 'Enw neilltuedig.';
$labels['setexist'] = 'Mae\'r set yn bodoli\'n barod.';
$labels['nodata'] = 'Rhaid dewis o leia un safle!';
diff --git a/plugins/managesieve/localization/da_DK.inc b/plugins/managesieve/localization/da_DK.inc
index 91bc18dd7..8c96a1420 100644
--- a/plugins/managesieve/localization/da_DK.inc
+++ b/plugins/managesieve/localization/da_DK.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/da_DK/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Johannes Hessellund <osos@openeyes.dk> |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'Filtre';
$labels['managefilters'] = 'Ændre indgående mail filtreing';
$labels['filtername'] = 'Filter navn';
$labels['newfilter'] = 'Nyt filter';
$labels['filteradd'] = 'Tilføj filter';
$labels['filterdel'] = 'Slet filter';
$labels['moveup'] = 'Flyt op';
$labels['movedown'] = 'Flyt ned';
$labels['filterallof'] = 'matcher alle af de følgende regler';
$labels['filteranyof'] = 'matcher en af følgende regler';
$labels['filterany'] = 'alle meddelelser';
$labels['filtercontains'] = 'indeholder';
$labels['filternotcontains'] = 'indeholder ikke';
$labels['filteris'] = 'er ens med';
$labels['filterisnot'] = 'er ikke ens med';
$labels['filterexists'] = 'findes';
$labels['filternotexists'] = 'ikke eksisterer';
$labels['filtermatches'] = 'matcher udtryk';
$labels['filternotmatches'] = 'matcher ikke udtryk';
$labels['filterregex'] = 'matcher regulært udtryk';
$labels['filternotregex'] = 'matcher ikke regulært udtryk';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['addrule'] = 'Tilføj regel';
$labels['delrule'] = 'Slet regel';
$labels['messagemoveto'] = 'Flyt besked til';
$labels['messageredirect'] = 'Redirriger besked til';
$labels['messagecopyto'] = 'Kopier besked til';
$labels['messagesendcopy'] = 'Send kopi af besked til';
$labels['messagereply'] = 'Svar med besked';
$labels['messagedelete'] = 'Slet besked';
$labels['messagediscard'] = 'Slet med besked';
$labels['messagesrules'] = 'For indkomne besked:';
$labels['messagesactions'] = '...udfør følgende aktioner:';
$labels['add'] = 'Tilføje';
$labels['del'] = 'Fjern';
$labels['sender'] = 'Afsender';
$labels['recipient'] = 'Modtager';
$labels['vacationaddresses'] = 'Mine alternative e-mailadresser (kommasepareret):';
$labels['vacationdays'] = 'Hvor tit skal besked sendes (i dage):';
$labels['vacationreason'] = 'Besked (ved ferie):';
$labels['vacationsubject'] = 'Besked emne:';
$labels['rulestop'] = 'Stop behandling af regler';
$labels['enable'] = 'Aktivér/Deaktivér';
$labels['filterset'] = 'Filter sæt';
$labels['filtersets'] = 'Filtre sæt';
$labels['filtersetadd'] = 'Tilføj filter sæt';
$labels['filtersetdel'] = 'Slet aktuel filter sæt';
$labels['filtersetact'] = 'Aktiver nuværende filter sæt';
$labels['filtersetdeact'] = 'Deaktiver nuværende filter sæt';
$labels['filterdef'] = 'Filter definition';
$labels['filtersetname'] = 'Filter sæt navn';
$labels['newfilterset'] = 'Nyt filter sæt';
$labels['active'] = 'aktiv';
$labels['none'] = 'ingen';
$labels['fromset'] = 'fra sæt';
$labels['fromfile'] = 'fra fil';
$labels['filterdisabled'] = 'Filter deaktiveret';
$labels['countisgreaterthan'] = 'antal er større end';
$labels['countisgreaterthanequal'] = 'antal er større end eller lig med';
$labels['countislessthan'] = 'antal er mindre end';
$labels['countislessthanequal'] = 'antal er mindre end eller lig med';
$labels['countequals'] = 'antal er lig med';
$labels['countnotequals'] = 'antal er ikke lig med';
$labels['valueisgreaterthan'] = 'værdi er større end';
$labels['valueisgreaterthanequal'] = 'værdi er større end eller lig med';
$labels['valueislessthan'] = 'værdi er mindre end';
$labels['valueislessthanequal'] = 'værdi er mindre end eller lig med';
$labels['valueequals'] = 'værdi er lig med';
$labels['valuenotequals'] = 'værdi er ikke lig med';
$labels['setflags'] = 'Sæt flag i beskeden';
$labels['addflags'] = 'Tilføj flag til beskeden';
$labels['removeflags'] = 'Fjern flag fra beskeden';
$labels['flagread'] = 'Læs';
$labels['flagdeleted'] = 'Slettede';
$labels['flaganswered'] = 'Besvaret';
$labels['flagflagged'] = 'Markeret';
$labels['flagdraft'] = 'Kladde';
$labels['filtercreate'] = 'Opret filter';
$labels['usedata'] = 'Brug følgende data i filteret:';
$labels['nextstep'] = 'Næste trin';
$labels['...'] = '...';
$labels['advancedopts'] = 'Advancerede muligheder';
$labels['body'] = 'Brødtekst';
$labels['address'] = 'adresse';
$labels['envelope'] = 'kuvert';
$labels['modifier'] = 'modificerer:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'udekodet (råt):';
$labels['contenttype'] = 'indholdstype';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'alle';
$labels['domain'] = 'domæne';
$labels['localpart'] = 'lokal del';
$labels['user'] = 'bruger';
$labels['detail'] = 'detalje';
$labels['comparator'] = 'sammenligner:';
$labels['default'] = 'standard';
$labels['octet'] = 'præcis (oktet)';
$labels['asciicasemap'] = 'store og små bogstaver (ascii-bogstaver)';
$labels['asciinumeric'] = 'numerisk (ascii-numerisk)';
$labels['filterunknownerror'] = 'Ukendt server fejl.';
$labels['filterconnerror'] = 'Kan ikke forbinde til server.';
$labels['filterdeleteerror'] = 'Kan ikke slette filter. Server fejl.';
$labels['filterdeleted'] = 'Filter slettet.';
$labels['filtersaved'] = 'Filter gemt.';
$labels['filtersaveerror'] = 'Kan ikke gemme filter. Server fejl.';
$labels['filterdeleteconfirm'] = 'Vil du slette det valgte filter?';
$labels['ruledeleteconfirm'] = 'Er du sikker på at du vil slette den valgte regel?';
$labels['actiondeleteconfirm'] = 'Er du sikker på du vil slette den valgte handling?';
$labels['forbiddenchars'] = 'Ulovlige tegn i feltet';
$labels['cannotbeempty'] = 'Feltet kan ikke være tomt.';
$labels['ruleexist'] = 'Filter med dette navn eksisterer allerede.';
$labels['setactivateerror'] = 'Kan ikke aktiverer valgt filter sæt. Server fejl.';
$labels['setdeactivateerror'] = 'Kan ikke deaktivere valgt filter sæt. Server fejl.';
$labels['setdeleteerror'] = 'Kan ikke slette valgt filter sæt. Server fejl.';
$labels['setactivated'] = 'Filter sæt aktiveret.';
$labels['setdeactivated'] = 'Filter sæt deaktiveret.';
$labels['setdeleted'] = 'Filter sæt slettet.';
$labels['setdeleteconfirm'] = 'Er du sikker på du vil slette valgt filter sæt?';
$labels['setcreateerror'] = 'Kan ikke oprette filter sæt. Server fejl.';
$labels['setcreated'] = 'Filter sæt oprettet.';
$labels['activateerror'] = 'Kan ikek aktivere valgt filter sæt. Server fejl.';
$labels['deactivateerror'] = 'Kan ikke deaktivere valgt filter sæt. Server fejl.';
-$labels['activated'] = 'Filter(filtre) deaktiveret.';
-$labels['deactivated'] = 'Filter(filtre) aktiveret.';
+$labels['deactivated'] = 'Filter(filtre) deaktiveret.';
+$labels['activated'] = 'Filter(filtre) aktiveret.';
$labels['moved'] = 'Filter flyttet.';
$labels['moveerror'] = 'Kan ikke flytte valgt filter. Server fejl.';
$labels['nametoolong'] = 'Navn er for langt.';
$labels['namereserved'] = 'Reserveret navn.';
$labels['setexist'] = 'Filterv sæt eksisterer allerede';
$labels['nodata'] = 'Mindst en position skal vælges!';
diff --git a/plugins/managesieve/localization/de_CH.inc b/plugins/managesieve/localization/de_CH.inc
index 963d1a6a2..ceb7475ad 100644
--- a/plugins/managesieve/localization/de_CH.inc
+++ b/plugins/managesieve/localization/de_CH.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/de_CH/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Christoph Wickert <Unknown> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Verwalte eingehende Nachrichtenfilter';
$labels['filtername'] = 'Filtername';
$labels['newfilter'] = 'Neuer Filter';
$labels['filteradd'] = 'Filter hinzufügen';
$labels['filterdel'] = 'Filter löschen';
$labels['moveup'] = 'Nach oben';
$labels['movedown'] = 'Nach unten';
$labels['filterallof'] = 'UND (alle Regeln müssen zutreffen)';
$labels['filteranyof'] = 'ODER (eine der Regeln muss zutreffen';
$labels['filterany'] = 'Für alle Nachrichten';
$labels['filtercontains'] = 'enthält';
$labels['filternotcontains'] = 'enthält nicht';
$labels['filteris'] = 'ist gleich';
$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';
$labels['messagesrules'] = 'Für eingehende Nachrichten:';
$labels['messagesactions'] = 'Führe folgende Aktionen aus:';
$labels['add'] = 'Hinzufügen';
$labels['del'] = 'Löschen';
$labels['sender'] = 'Absender';
$labels['recipient'] = 'Empfänger';
$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['deactivated'] = 'Filter erfolgreich deaktiviert.';
+$labels['activated'] = '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!';
diff --git a/plugins/managesieve/localization/en_US.inc b/plugins/managesieve/localization/en_US.inc
index cb223c18f..9336390d1 100644
--- a/plugins/managesieve/localization/en_US.inc
+++ b/plugins/managesieve/localization/en_US.inc
@@ -1,157 +1,157 @@
<?php
$labels['filters'] = 'Filters';
$labels['managefilters'] = 'Manage incoming mail filters';
$labels['filtername'] = 'Filter name';
$labels['newfilter'] = 'New filter';
$labels['filteradd'] = 'Add filter';
$labels['filterdel'] = 'Delete filter';
$labels['moveup'] = 'Move up';
$labels['movedown'] = 'Move down';
$labels['filterallof'] = 'matching all of the following rules';
$labels['filteranyof'] = 'matching any of the following rules';
$labels['filterany'] = 'all messages';
$labels['filtercontains'] = 'contains';
$labels['filternotcontains'] = 'not contains';
$labels['filteris'] = 'is equal to';
$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';
$labels['messagesrules'] = 'For incoming mail:';
$labels['messagesactions'] = '...execute the following actions:';
$labels['add'] = 'Add';
$labels['del'] = 'Delete';
$labels['sender'] = 'Sender';
$labels['recipient'] = 'Recipient';
$labels['vacationaddresses'] = 'My additional e-mail addresse(s) (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['setvariable'] = 'Set variable';
$labels['setvarname'] = 'Variable name:';
$labels['setvarvalue'] = 'Variable value:';
$labels['setvarmodifiers'] = 'Modifiers:';
$labels['varlower'] = 'lower-case';
$labels['varupper'] = 'upper-case';
$labels['varlowerfirst'] = 'first character lower-case';
$labels['varupperfirst'] = 'first character upper-case';
$labels['varquotewildcard'] = 'quote special characters';
$labels['varlength'] = 'length';
$labels['notify'] = 'Send notification';
$labels['notifyaddress'] = 'To e-mail address:';
$labels['notifybody'] = 'Notification body:';
$labels['notifysubject'] = 'Notification subject:';
$labels['notifyfrom'] = 'Notification sender:';
$labels['notifyimportance'] = 'Importance:';
$labels['notifyimportancelow'] = 'low';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'high';
$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 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['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['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['deactivated'] = 'Filter(s) disabled successfully.';
+$messages['activated'] = '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 --git a/plugins/managesieve/localization/es_ES.inc b/plugins/managesieve/localization/es_ES.inc
index 75965ae56..a171ec4b0 100644
--- a/plugins/managesieve/localization/es_ES.inc
+++ b/plugins/managesieve/localization/es_ES.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/es_ES/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Marcelo Magaña Silva <magasil7@gmail.com> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Administrar filtros de correo entrante';
$labels['filtername'] = 'Nombre del filtro';
$labels['newfilter'] = 'Nuevo filtro';
$labels['filteradd'] = 'Agregar filtro';
$labels['filterdel'] = 'Eliminar filtro';
$labels['moveup'] = 'Mover arriba';
$labels['movedown'] = 'Mover abajo';
$labels['filterallof'] = 'coincidir con todas las reglas siguientes';
$labels['filteranyof'] = 'coincidir con alguna de las reglas siguientes';
$labels['filterany'] = 'todos los mensajes';
$labels['filtercontains'] = 'contiene';
$labels['filternotcontains'] = 'no contiene';
$labels['filteris'] = 'es igual a';
$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';
$labels['delrule'] = 'Eliminar regla';
$labels['messagemoveto'] = 'Mover mensaje a';
$labels['messageredirect'] = 'Redirigir mensaje a';
$labels['messagecopyto'] = 'Copiar mensaje a';
$labels['messagesendcopy'] = 'Enviar copia del mensaje a';
$labels['messagereply'] = 'Responder con un mensaje';
$labels['messagedelete'] = 'Eliminar mensaje';
$labels['messagediscard'] = 'Descartar con un mensaje';
$labels['messagesrules'] = 'Para el correo entrante:';
$labels['messagesactions'] = '... ejecutar las siguientes acciones:';
$labels['add'] = 'Agregar';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remitente';
$labels['recipient'] = 'Destinatario';
$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['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['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['envelope'] = 'envoltura';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'decodificar (en bruto)';
$labels['contenttype'] = 'tipo de contenido';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todo';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'usuario';
$labels['detail'] = 'detalle';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'predeterminado';
$labels['octet'] = 'estricto (octeto)';
$labels['asciicasemap'] = 'no sensible a mayúsculas (ascii-casemap)';
$labels['asciinumeric'] = 'numerico (ascii-numeric)';
$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['ruleexist'] = 'Ya existe un filtro con el nombre especificado.';
$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['activateerror'] = 'No se ha podido habilitar el filtro(s) seleccionado. Se ha producido un error de servidor.';
$labels['deactivateerror'] = 'No se ha podido deshabilitar el filtro(s) seleccionado. Se ha producido un error de servidor.';
-$labels['activated'] = 'Filtro(s) deshabilitado(s) correctamente.';
-$labels['deactivated'] = 'Filtro(s) habilitado(s) correctamente.';
+$labels['deactivated'] = 'Filtro(s) deshabilitado(s) correctamente.';
+$labels['activated'] = 'Filtro(s) habilitado(s) correctamente.';
$labels['moved'] = 'Filtro movido correctamente';
$labels['moveerror'] = 'No se ha podido mover el filtro seleccionado. Ha ocurrido un error de servidor.';
$labels['nametoolong'] = 'Imposible crear el conjunto de filtros. Nombre demasiado largo';
$labels['namereserved'] = 'Nombre reservado.';
$labels['setexist'] = 'El conjunto ya existe.';
$labels['nodata'] = '¡Al menos una posicion debe ser seleccionada!';
diff --git a/plugins/managesieve/localization/et_EE.inc b/plugins/managesieve/localization/et_EE.inc
index fab96639c..67501f8d3 100644
--- a/plugins/managesieve/localization/et_EE.inc
+++ b/plugins/managesieve/localization/et_EE.inc
@@ -1,140 +1,140 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/et_EE/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: yllar <Unknown> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filtrid';
$labels['managefilters'] = 'Halda sisenevate kirjade filtreid';
$labels['filtername'] = 'Filtri nimi';
$labels['newfilter'] = 'Uus filter';
$labels['filteradd'] = 'Lisa filter';
$labels['filterdel'] = 'Kustuta filter';
$labels['moveup'] = 'Liiguta üles';
$labels['movedown'] = 'Liiguta alla';
$labels['filterallof'] = 'vastab kõikidele järgnevatele reeglitele';
$labels['filteranyof'] = 'vastab mõnele järgnevatest reeglitest';
$labels['filterany'] = 'kõik kirjad';
$labels['filtercontains'] = 'sisaldab';
$labels['filternotcontains'] = 'ei sisalda';
$labels['filteris'] = 'on võrdne kui';
$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';
$labels['messagesrules'] = 'Siseneva kirja puhul, mis:';
$labels['messagesactions'] = '...käivita järgnevad tegevused:';
$labels['add'] = 'Lisa';
$labels['del'] = 'Kustuta';
$labels['sender'] = 'Saatja';
$labels['recipient'] = 'Saaja';
$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['deactivated'] = 'Filter edukalt keelatud.';
+$labels['activated'] = '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!';
diff --git a/plugins/managesieve/localization/fa_IR.inc b/plugins/managesieve/localization/fa_IR.inc
index e4abb3f2a..9f20dab54 100644
--- a/plugins/managesieve/localization/fa_IR.inc
+++ b/plugins/managesieve/localization/fa_IR.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/fa_IR/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Hamid <abbaszadeh.h@gmail.com> |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'صافی‌ها';
$labels['managefilters'] = 'مدیریت صافی‌های نامه ورودی';
$labels['filtername'] = 'نام صافی';
$labels['newfilter'] = 'صافی جدید';
$labels['filteradd'] = 'افزودن صافی';
$labels['filterdel'] = 'حذف صافی';
$labels['moveup'] = 'انتقال به بالا';
$labels['movedown'] = 'انتقال به پایین';
$labels['filterallof'] = 'مطابقت همه قوانین ذیل';
$labels['filteranyof'] = 'مطابقت هر کدام از قوانین ذیل';
$labels['filterany'] = 'همه پیغام ها';
$labels['filtercontains'] = 'شامل‌';
$labels['filternotcontains'] = 'بدون';
$labels['filteris'] = 'برابر است با';
$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'] = 'دور ریختن با پیغام';
$labels['messagesrules'] = 'برای صندوق ورودی:';
$labels['messagesactions'] = '...انجام اعمال ذیل:';
$labels['add'] = 'افزودن';
$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'] = 'کد نشده (خام)';
$labels['contenttype'] = 'نوع محتوا';
$labels['modtype'] = 'نوع';
$labels['allparts'] = 'همه';
$labels['domain'] = 'دامنه';
$labels['localpart'] = 'قسمت محلی';
$labels['user'] = 'کاربر';
$labels['detail'] = 'جزئیات';
$labels['comparator'] = 'مقایسه:';
$labels['default'] = 'پیش‌فرض';
$labels['octet'] = 'سخت (octet)';
$labels['asciicasemap'] = 'حساس به حروه کوچک و بزرگ (ascii-casemap)';
$labels['asciinumeric'] = 'عددی (ascii-numeric)';
$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['activateerror'] = 'ناتوانی در فعال کردن صافی(های) انتخاب شده. خطای سرور رخ داد.';
$labels['deactivateerror'] = 'ناتوانی در غیرفعال کردن صافی(های) انتخاب شده. خطای سرور رخ داد.';
-$labels['activated'] = 'صافی(ها) با موفقیت غیرفعال شدند.';
-$labels['deactivated'] = 'صافی(ها) با موفقیت فعال شدند.';
+$labels['deactivated'] = 'صافی(ها) با موفقیت غیرفعال شدند.';
+$labels['activated'] = 'صافی(ها) با موفقیت فعال شدند.';
$labels['moved'] = 'صافی با موفقیت منتقل شد.';
$labels['moveerror'] = 'ناتوانی در انتقال صافی انتخاب شده. خطای سرور رخ داد.';
$labels['nametoolong'] = 'نام خیلی بلند.';
$labels['namereserved'] = 'نام رزرو شده.';
$labels['setexist'] = 'مجموعه در حال حاضر موجود است.';
$labels['nodata'] = 'حداقل باید یک موقعیت باید انتخاب شود.';
diff --git a/plugins/managesieve/localization/fi_FI.inc b/plugins/managesieve/localization/fi_FI.inc
index cee71428f..5a0c30954 100644
--- a/plugins/managesieve/localization/fi_FI.inc
+++ b/plugins/managesieve/localization/fi_FI.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/fi_FI/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Esa Immonen <esa.raato@gmail.com> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Suodattimet';
$labels['managefilters'] = 'Muokkaa saapuvan sähköpostin suodattimia';
$labels['filtername'] = 'Suodattimen nimi';
$labels['newfilter'] = 'Uusi suodatin';
$labels['filteradd'] = 'Lisää suodatin';
$labels['filterdel'] = 'Poista suodatin';
$labels['moveup'] = 'Siirrä ylös';
$labels['movedown'] = 'Siirrä alas';
$labels['filterallof'] = 'Täsmää kaikkien sääntöjen mukaan';
$labels['filteranyof'] = 'Täsmää minkä tahansa sääntöjen mukaan';
$labels['filterany'] = 'Kaikki viestit';
$labels['filtercontains'] = 'Sisältää';
$labels['filternotcontains'] = 'Ei sisällä';
$labels['filteris'] = 'on samanlainen kuin';
$labels['filterisnot'] = 'ei ole samanlainen kuin';
$labels['filterexists'] = 'on olemassa';
$labels['filternotexists'] = 'ei ole olemassa';
$labels['filtermatches'] = 'vastaa määritelmää';
$labels['filternotmatches'] = 'ei vastaa määritelmää';
$labels['filterregex'] = 'täsmää säännölliseen lausekkeeseen';
$labels['filternotregex'] = 'ei täsmää säännölliseen lausekkeeseen';
$labels['filterunder'] = 'alla';
$labels['filterover'] = 'yli';
$labels['addrule'] = 'Lisää sääntö';
$labels['delrule'] = 'Poista sääntö';
$labels['messagemoveto'] = 'Siirrä viesti';
$labels['messageredirect'] = 'Uudelleen ohjaa viesti';
$labels['messagecopyto'] = 'Kopioi viesti';
$labels['messagesendcopy'] = 'Lähetä viestin kopio';
$labels['messagereply'] = 'Vastaa viestin kanssa';
$labels['messagedelete'] = 'Poista viesti';
$labels['messagediscard'] = 'Hylkää viesti';
$labels['messagesrules'] = 'Saapuva sähköposti';
$labels['messagesactions'] = 'Suorita seuraavat tapahtumat';
$labels['add'] = 'Lisää';
$labels['del'] = 'Poista';
$labels['sender'] = 'Lähettäjä';
$labels['recipient'] = 'Vastaanottaja';
$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 (poissaolon syy):';
$labels['vacationsubject'] = 'Viestin aihe:';
$labels['rulestop'] = 'Viimeinen sääntö';
$labels['enable'] = 'Kytke päälle / kytke pois päältä';
$labels['filterset'] = 'Suodatinlista';
$labels['filtersets'] = 'Suodatinlista';
$labels['filtersetadd'] = 'Lisää suodatinlista';
$labels['filtersetdel'] = 'Poista valittu suodatinlista';
$labels['filtersetact'] = 'Aktivoi valittu suodatinlista';
$labels['filtersetdeact'] = 'Kytke suodatinlista pois päältä';
$labels['filterdef'] = 'Suodatinmääritykset';
$labels['filtersetname'] = 'Suodatinlistan nimi';
$labels['newfilterset'] = 'Uusi suodatinlista';
$labels['active'] = 'aktiivinen';
$labels['none'] = 'ei mitään';
$labels['fromset'] = 'listasta';
$labels['fromfile'] = 'tiedostosta';
$labels['filterdisabled'] = 'Suodatin on poistettu käytöstä';
$labels['countisgreaterthan'] = 'lukumäärä on suurempi kuin';
$labels['countisgreaterthanequal'] = 'lukumäärä on suurempi kuin tai yhtä suuri kuin';
$labels['countislessthan'] = 'lukumäärä on vähemmän kuin';
$labels['countislessthanequal'] = 'lukumäärä on vähemmän kuin tai yhtä suuri kuin';
$labels['countequals'] = 'lukumäärä on yhtä suuri kuin';
$labels['countnotequals'] = 'luku ei ole yhtä suuri';
$labels['valueisgreaterthan'] = 'arvo on suurempi kuin';
$labels['valueisgreaterthanequal'] = 'arvo on suurempi kuin tai yhtä suuri kuin';
$labels['valueislessthan'] = 'arvo on vähemmän kuin';
$labels['valueislessthanequal'] = 'arvo on vähemmän kuin tai yhtä suuri kuin';
$labels['valueequals'] = 'arvo on yhtä suuri kuin';
$labels['valuenotequals'] = 'arvo ei ole yhtä suuri';
$labels['setflags'] = 'Aseta seurantalippu viestiin';
$labels['addflags'] = 'Lisää seurantalippu viestiin';
$labels['removeflags'] = 'Poista seurantalippu viestistä';
$labels['flagread'] = 'Luettu';
$labels['flagdeleted'] = 'Poistettu';
$labels['flaganswered'] = 'Vastattu';
$labels['flagflagged'] = 'Merkitty lipulla';
$labels['flagdraft'] = 'Luonnos';
$labels['filtercreate'] = 'Luo suodatin';
$labels['usedata'] = 'Käytä seuravaa sisältöä suodattimessa:';
$labels['nextstep'] = 'Seuraava';
$labels['...'] = '...';
$labels['advancedopts'] = 'Lisäasetukset';
$labels['body'] = 'Sisältö';
$labels['address'] = 'osoite';
$labels['envelope'] = 'kirjekuori';
$labels['modifier'] = 'määrittäjä:';
$labels['text'] = 'teksti';
$labels['undecoded'] = 'purkamaton (käsittelemätön)';
$labels['contenttype'] = 'sisällön tyyppi';
$labels['modtype'] = 'tyyppi:';
$labels['allparts'] = 'kaikki';
$labels['domain'] = 'toimialue';
$labels['localpart'] = 'paikallinen osa';
$labels['user'] = 'käyttäjä';
$labels['detail'] = 'yksityiskohta';
$labels['comparator'] = 'vertaaja:';
$labels['default'] = 'oletus';
$labels['octet'] = 'tiukka (oktetti)';
$labels['asciicasemap'] = 'kirjainasusta riippumaton (ascii-kirjainkartta)';
$labels['asciinumeric'] = 'numeerinen (ascii-numerot)';
$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ä';
$labels['ruleexist'] = 'Annetun niminen suodatin on jo olemassa';
$labels['setactivateerror'] = 'Valittua suodatin listaa ei voitu kytkeä päälle. Palvelin virhe.';
$labels['setdeactivateerror'] = 'Valittua suodatin listaa ei voitu kytkeä pois päältä. Palvelin virhe.';
$labels['setdeleteerror'] = 'Valittua suodatin listaa ei voitu poistaa. Palvelin virhe.';
$labels['setactivated'] = 'Suodatinlista on kytketty päälle.';
$labels['setdeactivated'] = 'Suodatinlista on kytketty pois päältä';
$labels['setdeleted'] = 'Suodatinlista on poistettu poistettu.';
$labels['setdeleteconfirm'] = 'Oletko varman, että haluat poistaa valitun suodatin listan?';
$labels['setcreateerror'] = 'Suodatinlistan luonti epäonnistui. Palvelin virhe.';
$labels['setcreated'] = 'Suodatinlistan luonti onnistui.';
$labels['activateerror'] = 'Suodatinlistan päälle kytkeminen epäonnistui. Palvelin virhe.';
$labels['deactivateerror'] = 'Suodatinlistan pois päältä kytkeminen epäonnistui. Palvelin virhe.';
-$labels['activated'] = 'Suodatinlista(t) kytketty pois päältä onnistuneesti.';
-$labels['deactivated'] = 'Suodatinlista(t) kytketty päälle onnistuneesti.';
+$labels['deactivated'] = 'Suodatinlista(t) kytketty pois päältä onnistuneesti.';
+$labels['activated'] = 'Suodatinlista(t) kytketty päälle onnistuneesti.';
$labels['moved'] = 'Suodatin siirretty onnistuneesti.';
$labels['moveerror'] = 'Valitun suodattimen siirto epäonnistui palvelinvirheen vuoksi.';
$labels['nametoolong'] = 'Nimi on liian pitkä.';
$labels['namereserved'] = 'Varattu nimi.';
$labels['setexist'] = 'Lista on jo olemassa.';
$labels['nodata'] = 'Vähintään yksi pitää valinta pitää tehdä!';
diff --git a/plugins/managesieve/localization/fr_FR.inc b/plugins/managesieve/localization/fr_FR.inc
index 4151f6340..b0a4089d1 100644
--- a/plugins/managesieve/localization/fr_FR.inc
+++ b/plugins/managesieve/localization/fr_FR.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/fr_FR/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: François Charlier <Unknown> |
+-----------------------------------------------------------------------+
@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 le filtre';
$labels['moveup'] = 'Monter';
$labels['movedown'] = 'Descendre';
$labels['filterallof'] = 'valident toutes les conditions suivantes';
$labels['filteranyof'] = 'valident au moins une des conditions suivantes';
$labels['filterany'] = 'tous les messages';
$labels['filtercontains'] = 'contient';
$labels['filternotcontains'] = 'ne contient 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['messagesrules'] = 'Pour les mails entrants:';
$labels['messagesactions'] = '...exécuter les actions suivantes:';
$labels['add'] = 'Ajouter';
$labels['del'] = 'Supprimer';
$labels['sender'] = 'Expéditeur';
$labels['recipient'] = 'Destinataire';
$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['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'] = '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['ruleexist'] = 'Un filtre existe déjà avec ce nom.';
$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éé.';
$labels['activateerror'] = 'Impossible d\'activer le(s) filtre(s) sélectionné(s). Une erreur serveur s\'est produite.';
$labels['deactivateerror'] = 'Impossible de désactiver le(s) filtre(s) sélectionné(s). Une erreur serveur s\'est produite.';
-$labels['activated'] = 'Filtre(s) désactivé(s) avec succès';
-$labels['deactivated'] = 'Filtre(s) activé(s) avec succès';
+$labels['deactivated'] = 'Filtre(s) désactivé(s) avec succès';
+$labels['activated'] = 'Filtre(s) activé(s) avec succès';
$labels['moved'] = 'Filtre déplacé avec succès.';
$labels['moveerror'] = 'Déplacement du filtre sélectionné impossible. Le serveur a renvoyé une erreur.';
$labels['nametoolong'] = 'Nom trop long.';
$labels['namereserved'] = 'Nom réservé.';
$labels['setexist'] = 'Ce groupe existe déjà.';
$labels['nodata'] = 'Au moins un élément doit être selectionné !';
diff --git a/plugins/managesieve/localization/he_IL.inc b/plugins/managesieve/localization/he_IL.inc
index b44088bcb..2262841c1 100644
--- a/plugins/managesieve/localization/he_IL.inc
+++ b/plugins/managesieve/localization/he_IL.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/he_IL/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Moshe Leibovitch <moish@mln.co.il> |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'מסננים';
$labels['managefilters'] = 'ניהול מסננים לדואר נכנס';
$labels['filtername'] = 'שם המסנן';
$labels['newfilter'] = 'מסנן חדש';
$labels['filteradd'] = 'הוספת מסנן';
$labels['filterdel'] = 'מחיקת מסנן';
$labels['moveup'] = 'הזזה מעלה';
$labels['movedown'] = 'הזזה מטה';
$labels['filterallof'] = 'תאימות לכל הכללים שלהלן';
$labels['filteranyof'] = 'תאימות לחלק מהכללים שלהלן';
$labels['filterany'] = 'כל ההודעות';
$labels['filtercontains'] = 'מכיל';
$labels['filternotcontains'] = 'לא מכיל';
$labels['filteris'] = 'שווה ערך ל-';
$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'] = 'ביטול ההודעה';
$labels['messagesrules'] = 'עבור דואר נכנס:';
$labels['messagesactions'] = '...מבצע הפעולות הבאות:';
$labels['add'] = 'הוספה';
$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'] = 'לא מקודד ( גולמי )';
$labels['contenttype'] = 'סוג התוכן';
$labels['modtype'] = 'סוג:';
$labels['allparts'] = 'הכל';
$labels['domain'] = 'מתחם';
$labels['localpart'] = 'חלק מקומי';
$labels['user'] = 'משתמש';
$labels['detail'] = 'פרטים';
$labels['comparator'] = 'משווה:';
$labels['default'] = 'ברירת מחדל';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$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['activateerror'] = 'לא ניתן להפעיל את המסננים הנבחרים. אירעה שגיאה בצד השרת.';
$labels['deactivateerror'] = 'לא ניתן לנטרל את המסננים הנבחרים. אירעה שגיאה בצד השרת.';
-$labels['activated'] = 'המסננים נוטרלו בהצלחה.';
-$labels['deactivated'] = 'המסננים הופעלו בהצלחה.';
+$labels['deactivated'] = 'המסננים נוטרלו בהצלחה.';
+$labels['activated'] = 'המסננים הופעלו בהצלחה.';
$labels['moved'] = 'המסנן הועבר בהצלחה.';
$labels['moveerror'] = 'לא ניתן להעביר את המסנן הנבחר. אירעה שגיאה בצד השרת.';
$labels['nametoolong'] = 'השם ארוך מדי.';
$labels['namereserved'] = 'השם הזה שמור.';
$labels['setexist'] = 'הערכה כבר קיימת.';
$labels['nodata'] = 'חובה לבחור במיקום אחד לפחות!';
diff --git a/plugins/managesieve/localization/hr_HR.inc b/plugins/managesieve/localization/hr_HR.inc
index c4eaec0c3..4e0211868 100644
--- a/plugins/managesieve/localization/hr_HR.inc
+++ b/plugins/managesieve/localization/hr_HR.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/hr_HR/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Svebor Prstačić <svebor.prstacic@gmail.com> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filteri';
$labels['managefilters'] = 'Uredi filtere za pristiglu poštu';
$labels['filtername'] = 'Naziv filtera';
$labels['newfilter'] = 'Novi filter';
$labels['filteradd'] = 'Dodaj filter';
$labels['filterdel'] = 'Obriši filter';
$labels['moveup'] = 'Pomakni gore';
$labels['movedown'] = 'Pomakni dolje';
$labels['filterallof'] = 'koje odgovaraju svim sljedećim pravilima';
$labels['filteranyof'] = 'koje odgovaraju bilo kojem od sljedećih pravila';
$labels['filterany'] = 'sve poruke';
$labels['filtercontains'] = 'sadrži';
$labels['filternotcontains'] = 'ne sadrži';
$labels['filteris'] = 'jednako je';
$labels['filterisnot'] = 'nije jednako';
$labels['filterexists'] = 'postoji';
$labels['filternotexists'] = 'ne postoji';
$labels['filtermatches'] = 'odgovara izrazu';
$labels['filternotmatches'] = 'ne odgovara izrazu';
$labels['filterregex'] = 'odgovara regularnom izrazu';
$labels['filternotregex'] = 'ne odgovara regularnom izrazu';
$labels['filterunder'] = 'ispod';
$labels['filterover'] = 'iznad';
$labels['addrule'] = 'Dodaj pravilo';
$labels['delrule'] = 'Obriši pravilo';
$labels['messagemoveto'] = 'Premjesti poruku u';
$labels['messageredirect'] = 'Preusmjeri poruku na';
$labels['messagecopyto'] = 'Kopiraju poruku u';
$labels['messagesendcopy'] = 'Pošalji kopiju poruke na';
$labels['messagereply'] = 'Odgovori sa porukom';
$labels['messagedelete'] = 'Obriši poruku';
$labels['messagediscard'] = 'Otkaži sa porukom';
$labels['messagesrules'] = 'Za pristigle poruke:';
$labels['messagesactions'] = '...primijeni sljedeće akcije:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Obriši';
$labels['sender'] = 'Pošiljatelj';
$labels['recipient'] = 'Primatelj';
$labels['vacationaddresses'] = 'Dodatna lista primatelja (odvojenih zarezom):';
$labels['vacationdays'] = 'Koliko često slati poruku (u danima):';
$labels['vacationreason'] = 'Tijelo poruke (razlog odmora):';
$labels['vacationsubject'] = 'Naslov poruke:';
$labels['rulestop'] = 'Prekini izvođenje filtera';
$labels['enable'] = 'Omogući/Onemogući';
$labels['filterset'] = 'Grupa filtera';
$labels['filtersets'] = 'Filteri';
$labels['filtersetadd'] = 'Dodaj grupu filtera';
$labels['filtersetdel'] = 'Obriši odabranu grupu filtera';
$labels['filtersetact'] = 'Aktiviraj odabranu grupu filtera';
$labels['filtersetdeact'] = 'Deaktiviraj odabranu grupu filtera';
$labels['filterdef'] = 'Definicije filtera';
$labels['filtersetname'] = 'Naziv grupe filtera';
$labels['newfilterset'] = 'Nova grupa filtera';
$labels['active'] = 'aktivan';
$labels['none'] = 'nijedan';
$labels['fromset'] = 'iz grupe';
$labels['fromfile'] = 'iz datoteke';
$labels['filterdisabled'] = 'Deaktiviraj filter';
$labels['countisgreaterthan'] = 'brojač je veći od';
$labels['countisgreaterthanequal'] = 'brojač je veći ili jednak od';
$labels['countislessthan'] = 'brojač je manji od';
$labels['countislessthanequal'] = 'brojač je manji ili jednak od';
$labels['countequals'] = 'brojač je jednak';
$labels['countnotequals'] = 'brojač nije jednak';
$labels['valueisgreaterthan'] = 'vrijednost je veća od';
$labels['valueisgreaterthanequal'] = 'vrijednost je veća ili jednaka od';
$labels['valueislessthan'] = 'vrijednost je manja od';
$labels['valueislessthanequal'] = 'vrijednost je manja ili jednaka od';
$labels['valueequals'] = 'vrijednost je jednaka';
$labels['valuenotequals'] = 'vrijednost nije jednaka';
$labels['setflags'] = 'Postavi oznake na poruku';
$labels['addflags'] = 'Dodaj oznake na poruku';
$labels['removeflags'] = 'Ukloni oznake sa poruke';
$labels['flagread'] = 'Pročitana';
$labels['flagdeleted'] = 'Obrisana';
$labels['flaganswered'] = 'Odgovorena';
$labels['flagflagged'] = 'Označena';
$labels['flagdraft'] = 'Predložak';
$labels['filtercreate'] = 'Stvori filter';
$labels['usedata'] = 'Koristi podatke za filter:';
$labels['nextstep'] = 'Idući korak';
$labels['...'] = '…';
$labels['advancedopts'] = 'Napredne postavke';
$labels['body'] = 'Tijelo poruke';
$labels['address'] = 'adresa';
$labels['envelope'] = 'omotnica';
$labels['modifier'] = 'modificirao:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'nedekodirano (raw)';
$labels['contenttype'] = 'tip sadržaja';
$labels['modtype'] = 'tip:';
$labels['allparts'] = 'sve';
$labels['domain'] = 'domena';
$labels['localpart'] = 'lokalni dio';
$labels['user'] = 'korisnik';
$labels['detail'] = 'detalj';
$labels['comparator'] = 'usporedio:';
$labels['default'] = 'preddefinirano';
$labels['octet'] = 'strogo (oktet)';
$labels['asciicasemap'] = 'neosjetljivo na veličinu slova (ascii-casemap)';
$labels['asciinumeric'] = 'numerički (ascii-numeric)';
$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['ruleexist'] = 'Filter sa zadanim imenom već postoji.';
$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['activateerror'] = 'Nije moguće omogućiti odabrani filter(e). Greška poslužitelja.';
$labels['deactivateerror'] = 'Nije moguće onemogučiti odabrane filter(e). Greška poslužitelja.';
-$labels['activated'] = 'Filter(i) onemogućen(i) uspješno.';
-$labels['deactivated'] = 'Filter(i) omogućen(i) uspješno.';
+$labels['deactivated'] = 'Filter(i) onemogućen(i) uspješno.';
+$labels['activated'] = 'Filter(i) omogućen(i) uspješno.';
$labels['moved'] = 'Filter uspješno premješten.';
$labels['moveerror'] = 'Nije moguće premjestiti odabrani filter. Greška poslužitelja.';
$labels['nametoolong'] = 'Nemoguće napraviti grupu filtera. Naziv je predugačak';
$labels['namereserved'] = 'Rezervirano ime.';
$labels['setexist'] = 'Skup već postoji.';
$labels['nodata'] = 'Barem jedan pozicija mora biti odabrana!';
diff --git a/plugins/managesieve/localization/hu_HU.inc b/plugins/managesieve/localization/hu_HU.inc
index 117315812..179510087 100644
--- a/plugins/managesieve/localization/hu_HU.inc
+++ b/plugins/managesieve/localization/hu_HU.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/hu_HU/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: bela <Unknown> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Üzenetszűrők';
$labels['managefilters'] = 'Bejövő üzenetek szűrői';
$labels['filtername'] = 'Szűrő neve';
$labels['newfilter'] = 'Új szűrő';
$labels['filteradd'] = 'Szűrő hozzáadása';
$labels['filterdel'] = 'Szűrő törlése';
$labels['moveup'] = 'Mozgatás felfelé';
$labels['movedown'] = 'Mozgatás lefelé';
$labels['filterallof'] = 'A következők szabályok mind illeszkedjenek';
$labels['filteranyof'] = 'A következő szabályok bármelyike illeszkedjen';
$labels['filterany'] = 'Minden üzenet illeszkedjen';
$labels['filtercontains'] = 'tartalmazza';
$labels['filternotcontains'] = 'nem tartalmazza';
$labels['filteris'] = 'megegyezik';
$labels['filterisnot'] = 'nem egyezik meg';
$labels['filterexists'] = 'létezik';
$labels['filternotexists'] = 'nem létezik';
$labels['filtermatches'] = 'kifejezéssel egyezők';
$labels['filternotmatches'] = 'kifejezéssel nem egyezők';
$labels['filterregex'] = 'reguláris kifejezéssel egyezők';
$labels['filternotregex'] = 'reguláris kifejezéssel nem egyezők';
$labels['filterunder'] = 'alatta';
$labels['filterover'] = 'felette';
$labels['addrule'] = 'Szabály hozzáadása';
$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['messagesendcopy'] = 'Másolat kűldése az üzenetből';
$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';
$labels['messagesrules'] = 'Az adott tulajdonságú beérkezett üzenetekre:';
$labels['messagesactions'] = '... a következő műveletek végrehajtása:';
$labels['add'] = 'Hozzáadás';
$labels['del'] = 'Törlés';
$labels['sender'] = 'Feladó';
$labels['recipient'] = 'Címzett';
$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['filterset'] = 'Szűrök készlet';
$labels['filtersets'] = 'Szűrő készletek';
$labels['filtersetadd'] = 'Szűrő hozzáadása a készlethez';
$labels['filtersetdel'] = 'Az aktuális szűrő készlet törlése';
$labels['filtersetact'] = 'Az aktuális szűrő készlet engedélyezése';
$labels['filtersetdeact'] = 'Az aktuális szűrő készlet tiltása';
$labels['filterdef'] = 'Szűrő definíció';
$labels['filtersetname'] = 'Szűrő készlet neve';
$labels['newfilterset'] = 'Új szűrő készlet';
$labels['active'] = 'aktív';
$labels['none'] = 'nincs';
$labels['fromset'] = 'készletből';
$labels['fromfile'] = 'fájlból';
$labels['filterdisabled'] = 'Szűrő kikapcsolása';
$labels['countisgreaterthan'] = 'a számláló nagyobb mint';
$labels['countisgreaterthanequal'] = 'a számláló nagyobb vagy egyenlő';
$labels['countislessthan'] = 'a számláló kissebb mint';
$labels['countislessthanequal'] = 'a számláló kissebb vagy egyenlő';
$labels['countequals'] = 'a számláló egyenlő';
$labels['countnotequals'] = 'a számláló nem egyenlő';
$labels['valueisgreaterthan'] = 'az érték nagyobb mint';
$labels['valueisgreaterthanequal'] = 'az érték nagyobb vagy egyenlő';
$labels['valueislessthan'] = 'az érték kisebb mint';
$labels['valueislessthanequal'] = 'az érték kisebb vagy egyenlő';
$labels['valueequals'] = 'az érték megegyzik';
$labels['valuenotequals'] = 'az érték nem egyzik meg';
$labels['setflags'] = 'Jelzők beállítása az üzeneten';
$labels['addflags'] = 'Jelző hozzáadása az üzenethez';
$labels['removeflags'] = 'Jelzők eltávolítása az üzenetből';
$labels['flagread'] = 'Olvasás';
$labels['flagdeleted'] = 'Törölt';
$labels['flaganswered'] = 'Megválaszolt';
$labels['flagflagged'] = 'Megjelölt';
$labels['flagdraft'] = 'Vázlat';
$labels['filtercreate'] = 'Szűrő létrehozása';
$labels['usedata'] = 'A következő adatok használata a szűrőben';
$labels['nextstep'] = 'Következő lépés';
$labels['...'] = '…';
$labels['advancedopts'] = 'Haladó beállítások';
$labels['body'] = 'Levéltörzs';
$labels['address'] = 'cím';
$labels['envelope'] = 'boriték';
$labels['modifier'] = 'módosító:';
$labels['text'] = 'szöveg';
$labels['undecoded'] = 'kódolatlan(nyers)';
$labels['contenttype'] = 'tartalom tipusa';
$labels['modtype'] = 'típus:';
$labels['allparts'] = 'összes';
$labels['domain'] = 'domain';
$labels['localpart'] = 'név rész';
$labels['user'] = 'felhasználó';
$labels['detail'] = 'részlet';
$labels['comparator'] = 'összehasonlító';
$labels['default'] = 'alapértelmezett';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'kis-nagybetüre nem érzékeny (ascii-casemap)';
$labels['asciinumeric'] = 'számszerü (ascii-numeric)';
$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';
$labels['ruleexist'] = 'Már van ilyen névvel elmentett szűrő.';
$labels['setactivateerror'] = 'A kiválasztott szűrő készletet nem sikerült engedélyezni. Szerver hiba történt.';
$labels['setdeactivateerror'] = 'A kiválasztott szűrő készletet nem sikerült tiltani. Szerver hiba történt.';
$labels['setdeleteerror'] = 'Nem sikerült a kiválasztott szűrő készletet törölni. Szerver hiba történt.';
$labels['setactivated'] = 'A filter készlet engedélyezése sikeresen végrehajtódott.';
$labels['setdeactivated'] = 'A filter készlet tiltása sikeresen végrehajtódott.';
$labels['setdeleted'] = 'A filter készlet törlése sikeresen végrehajtódott.';
$labels['setdeleteconfirm'] = 'Biztosan törölni szeretnéd a kiválasztott szűrő készleteket?';
$labels['setcreateerror'] = 'Nem sikerült létrehozni a szűrő készletet. Szerver hiba történt.';
$labels['setcreated'] = 'A szűrő készlet sikeresen létrejött.';
$labels['activateerror'] = 'Nem sikerült engedélyezni a kiválasztott szűrö(k)et. Szerver hiba történt.';
$labels['deactivateerror'] = 'Nem sikerült kikapcsolni a kiválasztott szűrő(ke)t. Szerver hiba történt.';
-$labels['activated'] = 'Szűrő(k) sikeresen kikapcsolva.';
-$labels['deactivated'] = 'Szűrő(k) sikeresen bekapcsolva.';
+$labels['deactivated'] = 'Szűrő(k) sikeresen kikapcsolva.';
+$labels['activated'] = 'Szűrő(k) sikeresen bekapcsolva.';
$labels['moved'] = 'A szűrő sikeresen áthelyezve.';
$labels['moveerror'] = 'Az áthelyezés nem sikerült. Szerver hiba történt.';
$labels['nametoolong'] = 'Túll hosszu név';
$labels['namereserved'] = 'Nem használható (foglalt) név-';
$labels['setexist'] = 'A készlet már létezik.';
$labels['nodata'] = 'Legalább egyet ki kell választani.';
diff --git a/plugins/managesieve/localization/hy_AM.inc b/plugins/managesieve/localization/hy_AM.inc
index ea4e982ea..be7d0fbd8 100644
--- a/plugins/managesieve/localization/hy_AM.inc
+++ b/plugins/managesieve/localization/hy_AM.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/hy_AM/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Vahan Yerkanian <vahan@yerkanian.com> |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'Զտիչներ';
$labels['managefilters'] = 'Կառավարել ստացվող նամակների զտիչները';
$labels['filtername'] = 'Զտիչի անուն';
$labels['newfilter'] = 'Նոր զտիչ';
$labels['filteradd'] = 'Ավելացնել զտիչ';
$labels['filterdel'] = 'Ջնջել զտիչը';
$labels['moveup'] = 'Բարձրացնել';
$labels['movedown'] = 'Իջեցնել';
$labels['filterallof'] = 'հետևյալ բոլոր պահանջներին համապատասխանող';
$labels['filteranyof'] = 'հետևյալ պահանջներից ցանկացածին համապատասխանող';
$labels['filterany'] = 'բոլոր հաղորդագրությունները';
$labels['filtercontains'] = 'պարունակում է';
$labels['filternotcontains'] = 'չի պարունակում';
$labels['filteris'] = 'հավասար է';
$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'] = 'Հեռացնել, հաղորդագրությամբ';
$labels['messagesrules'] = 'Ստացվող հաղորդագրությունների համար';
$labels['messagesactions'] = '…կատարել հետևյալ գործողությունները.';
$labels['add'] = 'Ավելացնել';
$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'] = 'մաքուր';
$labels['contenttype'] = 'բովանդակության տիպ';
$labels['modtype'] = 'տիպ`';
$labels['allparts'] = 'բոլորը';
$labels['domain'] = 'տիրույթ';
$labels['localpart'] = 'լոկալ մաս';
$labels['user'] = 'օգտվող';
$labels['detail'] = 'մաս';
$labels['comparator'] = 'համեմատիչ`';
$labels['default'] = 'լռակյաց';
$labels['octet'] = 'անփոփոխ (օկտետ)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$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['activateerror'] = 'Սերվերի սխալ։ Նշված զտիչի միացման ձախողում։';
$labels['deactivateerror'] = 'Սերվերի սխալ։ Նշված զտիչի անջատման ձախողում։';
-$labels['activated'] = 'Զտիչի անջատված է։';
-$labels['deactivated'] = 'Զտիչի միացված է։';
+$labels['deactivated'] = 'Զտիչի անջատված է։';
+$labels['activated'] = 'Զտիչի միացված է։';
$labels['moved'] = 'Զտիչի տեղափոխված է։';
$labels['moveerror'] = 'Սերվերի սխալ։ Նշված զտիչի տեղափոխման ձախողում։';
$labels['nametoolong'] = 'Անունը չափազանց երկար է։';
$labels['namereserved'] = 'Անթույլատրելի անուն։';
$labels['setexist'] = 'Համալիրը արդեն գոյություն ունի։';
$labels['nodata'] = 'Պահանջվում է նշել գոնե մեկ դիրք։';
diff --git a/plugins/managesieve/localization/id_ID.inc b/plugins/managesieve/localization/id_ID.inc
index 1fe121a32..b9fe47659 100644
--- a/plugins/managesieve/localization/id_ID.inc
+++ b/plugins/managesieve/localization/id_ID.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/id_ID/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Putu Arya Sabda Wijaya <Unknown> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Atur filter email masuk';
$labels['filtername'] = 'Nama filter';
$labels['newfilter'] = 'Filter baru';
$labels['filteradd'] = 'Tambah filter';
$labels['filterdel'] = 'Hapus filter';
$labels['moveup'] = 'Pindah ke atas';
$labels['movedown'] = 'Pindah ke bawah';
$labels['filterallof'] = 'cocok dengan semua aturan berikut ini';
$labels['filteranyof'] = 'cocok dengan aturan manapun';
$labels['filterany'] = 'semua pesan';
$labels['filtercontains'] = 'berisi';
$labels['filternotcontains'] = 'tidak berisi';
$labels['filteris'] = 'sama dengan';
$labels['filterisnot'] = 'tidak sama dengan';
$labels['filterexists'] = 'ada';
$labels['filternotexists'] = 'tidak ada';
$labels['filtermatches'] = 'ekspresi yg cocok';
$labels['filternotmatches'] = 'ekspresi yg tidak cocok';
$labels['filterregex'] = 'cocok dengan ekspresi reguler';
$labels['filternotregex'] = 'tidak cocok dengan ekspresi reguler';
$labels['filterunder'] = 'di bawah';
$labels['filterover'] = 'di atas';
$labels['addrule'] = 'Tambah aturan';
$labels['delrule'] = 'Hapus aturan';
$labels['messagemoveto'] = 'Pindah pesan ke';
$labels['messageredirect'] = 'Alihkan pesan ke';
$labels['messagecopyto'] = 'Salin pesan ke';
$labels['messagesendcopy'] = 'Kirim salinan pesan ke';
$labels['messagereply'] = 'balas dengan pesan';
$labels['messagedelete'] = 'Hapus pesan';
$labels['messagediscard'] = 'Buang dengan pesan';
$labels['messagesrules'] = 'Unutk email masuk:';
$labels['messagesactions'] = '...mengeksekusi tindakan berikut';
$labels['add'] = 'Tambah';
$labels['del'] = 'Hapus';
$labels['sender'] = 'Pengirim';
$labels['recipient'] = 'Penerima';
$labels['vacationaddresses'] = 'Daftar tambahan penerima email (terpisah koma):';
$labels['vacationdays'] = 'Seberapa sering mengirim pesan (dalam hari):';
$labels['vacationreason'] = 'Badan pesan (alasan liburan):';
$labels['vacationsubject'] = 'Judul pesan:';
$labels['rulestop'] = 'Berhenti mengevaluasi aturan';
$labels['enable'] = 'Aktifkan/Non-Aktifkan';
$labels['filterset'] = 'Himpunan filter';
$labels['filtersets'] = 'Himpunan banyak filter';
$labels['filtersetadd'] = 'Tambahkan himpunan filter';
$labels['filtersetdel'] = 'Hapus himpunan filter yang sekarang';
$labels['filtersetact'] = 'Aktifkan himpunan filter ayng sekarang';
$labels['filtersetdeact'] = 'Matikan himpunan filter ayng sekarang';
$labels['filterdef'] = 'Definisi filter';
$labels['filtersetname'] = 'Nama himpunan filter';
$labels['newfilterset'] = 'Himpunan filter baru';
$labels['active'] = 'aktif';
$labels['none'] = 'nihil';
$labels['fromset'] = 'dari himpunan';
$labels['fromfile'] = 'dari berkas';
$labels['filterdisabled'] = 'Filter dimatikan';
$labels['countisgreaterthan'] = 'penghitungan lebih besar dari';
$labels['countisgreaterthanequal'] = 'penghitungan lebih besa dari atau sama dengan';
$labels['countislessthan'] = 'penghitungan lebih kecil dari';
$labels['countislessthanequal'] = 'penghitungan lebih kecil dari atau sama dengan';
$labels['countequals'] = 'penghitungan sama dengan';
$labels['countnotequals'] = 'penghitungan tidak sama';
$labels['valueisgreaterthan'] = 'nilai lebih besar dari';
$labels['valueisgreaterthanequal'] = 'nilai lebih besar dari atau sama dengan';
$labels['valueislessthan'] = 'nilai lebih kecil dari';
$labels['valueislessthanequal'] = 'nilai lebih kecil dari atau sama dengan';
$labels['valueequals'] = 'nilai sama dengan';
$labels['valuenotequals'] = 'nilai tidak sama dengan';
$labels['setflags'] = 'Tandai pesan';
$labels['addflags'] = 'Tambah tandai pada pesan';
$labels['removeflags'] = 'Cabut tanda dari pesan';
$labels['flagread'] = 'Baca';
$labels['flagdeleted'] = 'Terhapus';
$labels['flaganswered'] = 'Terjawab';
$labels['flagflagged'] = 'Ditandai';
$labels['flagdraft'] = 'Konsep';
$labels['filtercreate'] = 'Buat filter';
$labels['usedata'] = 'Gunakan data berikut dalam filter:';
$labels['nextstep'] = 'Langkah Selanjutnya';
$labels['...'] = '...';
$labels['advancedopts'] = 'Pilihan lanjutan';
$labels['body'] = 'Isi';
$labels['address'] = 'alamat';
$labels['envelope'] = 'amplop';
$labels['modifier'] = 'peubah:';
$labels['text'] = 'teks';
$labels['undecoded'] = 'praterjemahan (mentah)';
$labels['contenttype'] = 'tipe isi';
$labels['modtype'] = 'tipe:';
$labels['allparts'] = 'semua';
$labels['domain'] = 'domain';
$labels['localpart'] = 'bagian lokal';
$labels['user'] = 'pengguna';
$labels['detail'] = 'rinci';
$labels['comparator'] = 'pembanding:';
$labels['default'] = 'standar';
$labels['octet'] = 'ketat (oktet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['filterunknownerror'] = 'Galat pada server tak dikenali.';
$labels['filterconnerror'] = 'Tidak dapat menyambung ke server.';
$labels['filterdeleteerror'] = 'Tidak bisa menghapus penyaringan. Terjadi galat pada server.';
$labels['filterdeleted'] = 'Penyaringan berhasil dihapus.';
$labels['filtersaved'] = 'Penyaringan berhasil disimpan.';
$labels['filtersaveerror'] = 'Tidak bisa menyimpan penyaringan. Terjadi galat pada server.';
$labels['filterdeleteconfirm'] = 'Yakin untuk menghapus penyaringan terpilih?';
$labels['ruledeleteconfirm'] = 'Yakin untuk menghapus aturan terpilih?';
$labels['actiondeleteconfirm'] = 'Yakin untuk menghapus tindakan terpilih?';
$labels['forbiddenchars'] = 'Karakter terlarang pada isian.';
$labels['cannotbeempty'] = 'Isian tidak bisa kosong.';
$labels['ruleexist'] = 'Penyaringan dengan nama tersebut sudah ada.';
$labels['setactivateerror'] = 'Tidak bisa menghidupkan kumpulan penyaringan terpilih. Terjadi galat pada server.';
$labels['setdeactivateerror'] = 'Tidak bisa mematikan kumpulan penyaringan terpilih. Terjadi galat pada server.';
$labels['setdeleteerror'] = 'Tidak bisa menghapus kumpulan penyaringan terpilih. Terjadi galat pada server.';
$labels['setactivated'] = 'Kumpulan penyaringan berhasil dihidupkan.';
$labels['setdeactivated'] = 'Kumpulan penyaringan berhasil dimatikan.';
$labels['setdeleted'] = 'Kumpulan penyaringan berhasil dihapus.';
$labels['setdeleteconfirm'] = 'Yakin ingin menghapus kumpulan penyaringan terpilih?';
$labels['setcreateerror'] = 'Tidak bisa membuat kumpulan penyaringan. Terjadi galat pada server.';
$labels['setcreated'] = 'Kumpulan penyaringan berhasul dibuat.';
$labels['activateerror'] = 'Tidak bisa menghidupkan penyaringan terpilih. terjadi galat pada server.';
$labels['deactivateerror'] = 'Tidak bisa mematikan penyaringan terpilih. Terjadi galat pada server.';
-$labels['activated'] = 'Berhasil mematikan penyaringan.';
-$labels['deactivated'] = 'Berhasil menghidupkan penyaringan.';
+$labels['deactivated'] = 'Berhasil mematikan penyaringan.';
+$labels['activated'] = 'Berhasil menghidupkan penyaringan.';
$labels['moved'] = 'Berhasil memindahkan penyaringan.';
$labels['moveerror'] = 'Tidak bisa memindahkan penyaringan terpilih. Terjadi galat pada server.';
$labels['nametoolong'] = 'Kepanjangan nama.';
$labels['namereserved'] = 'Nama sudah ada.';
$labels['setexist'] = 'Kumpulan sudah ada.';
$labels['nodata'] = 'Setidaknya satu posisi harus dipilih!';
diff --git a/plugins/managesieve/localization/it_IT.inc b/plugins/managesieve/localization/it_IT.inc
index 53e7d0998..553377ab9 100644
--- a/plugins/managesieve/localization/it_IT.inc
+++ b/plugins/managesieve/localization/it_IT.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/it_IT/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: emilio brambilla <Unknown> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filtri';
$labels['managefilters'] = 'Gestione dei filtri per la posta in arrivo';
$labels['filtername'] = 'Nome del filtro';
$labels['newfilter'] = 'Nuovo filtro';
$labels['filteradd'] = 'Aggiungi filtro';
$labels['filterdel'] = 'Elimina filtro';
$labels['moveup'] = 'Sposta sopra';
$labels['movedown'] = 'Sposta sotto';
$labels['filterallof'] = 'che soddisfa tutte le regole seguenti';
$labels['filteranyof'] = 'che soddisfa una qualsiasi delle regole seguenti';
$labels['filterany'] = 'tutti i messaggi';
$labels['filtercontains'] = 'contiene';
$labels['filternotcontains'] = 'non contiene';
$labels['filteris'] = 'è uguale a';
$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';
$labels['messagesrules'] = 'Per la posta in arrivo';
$labels['messagesactions'] = '...esegui le seguenti azioni:';
$labels['add'] = 'Aggiungi';
$labels['del'] = 'Elimina';
$labels['sender'] = 'Mittente';
$labels['recipient'] = 'Destinatario';
$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['filterdef'] = 'Definizione del filtro';
$labels['filtersetname'] = 'Nome del Gruppo di filtri';
$labels['newfilterset'] = 'Nuovo gruppo di filri';
$labels['active'] = 'attivo';
$labels['none'] = 'nessuno';
$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['deactivated'] = 'filtro disabilitato';
+$labels['activated'] = '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';
diff --git a/plugins/managesieve/localization/ja_JP.inc b/plugins/managesieve/localization/ja_JP.inc
index f7b96b7d1..5bb75f882 100644
--- a/plugins/managesieve/localization/ja_JP.inc
+++ b/plugins/managesieve/localization/ja_JP.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/ja_JP/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Takahiro Kambe |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'フィルター';
$labels['managefilters'] = '受信メールのフィルターを管理';
$labels['filtername'] = 'フィルター名';
$labels['newfilter'] = '新しいフィルター';
$labels['filteradd'] = 'フィルターを追加';
$labels['filterdel'] = 'フィルターを削除';
$labels['moveup'] = '上に移動';
$labels['movedown'] = '下に移動';
$labels['filterallof'] = '次のルールのすべてに一致';
$labels['filteranyof'] = '次のルールのいずれかに一致';
$labels['filterany'] = 'すべてのメッセージ';
$labels['filtercontains'] = '含む';
$labels['filternotcontains'] = '含まない';
$labels['filteris'] = '次に等しい';
$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'] = 'メッセージを破棄';
$labels['messagesrules'] = '受信したメールの処理:';
$labels['messagesactions'] = '以下の操作を実行:';
$labels['add'] = '追加';
$labels['del'] = '削除';
$labels['sender'] = '送信者';
$labels['recipient'] = '宛先';
$labels['vacationaddresses'] = '電子メールの宛先の(コンマ区切った)追加のリスト:';
$labels['vacationdays'] = 'メッセージを(1日に)送信する頻度:';
$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'] = '未デコード(そのまま)';
$labels['contenttype'] = 'Content Type';
$labels['modtype'] = '種類:';
$labels['allparts'] = 'すべて';
$labels['domain'] = 'ドメイン';
$labels['localpart'] = 'ローカルパート';
$labels['user'] = 'ユーザー';
$labels['detail'] = '詳細';
$labels['comparator'] = '比較器:';
$labels['default'] = '初期値';
$labels['octet'] = '厳密(オクテット)';
$labels['asciicasemap'] = '大文字小文字を区別しない(ascii-casemap)';
$labels['asciinumeric'] = '数値(ascii-numeric)';
$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['activateerror'] = '選択したフィルターを有効にできませんでした。サーバーでエラーが発生しました。';
$labels['deactivateerror'] = '選択したフィルターを無効にできませんでした。サーバーでエラーが発生しました。';
-$labels['activated'] = 'フィルターを無効にしました。';
-$labels['deactivated'] = 'フィルターを有効にしました。';
+$labels['deactivated'] = 'フィルターを無効にしました。';
+$labels['activated'] = 'フィルターを有効にしました。';
$labels['moved'] = 'フィルターを移動しました。';
$labels['moveerror'] = '選択したフィルターを移動できませんでした。サーバーでエラーが発生しました。';
$labels['nametoolong'] = '名前が長すぎます。';
$labels['namereserved'] = '予約されている名前です。';
$labels['setexist'] = 'フィルターセットが既に存在します。';
$labels['nodata'] = '少なくとも1つの場所を選択しなければなりません!';
diff --git a/plugins/managesieve/localization/ko_KR.inc b/plugins/managesieve/localization/ko_KR.inc
index c3fff4115..8a20a17e4 100644
--- a/plugins/managesieve/localization/ko_KR.inc
+++ b/plugins/managesieve/localization/ko_KR.inc
@@ -1,131 +1,131 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/ko_KR/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Kim, Woohyun <woohyun.kim@gmail.com> |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = '필터';
$labels['managefilters'] = '수신 메일 필터 관리';
$labels['filtername'] = '필터 이름';
$labels['newfilter'] = '새 필터';
$labels['filteradd'] = '필터 추가';
$labels['filterdel'] = '필터 삭제';
$labels['moveup'] = '위로 이동';
$labels['movedown'] = '아래로 이동';
$labels['filterallof'] = '다음에 오는 규칙들 전부와 일치';
$labels['filteranyof'] = '다음에 오는 규칙들 중 어떠한 것 이라도 일치';
$labels['filterany'] = '모든 메시지';
$labels['filtercontains'] = '포함합니다';
$labels['filternotcontains'] = '포함하지 않습니다';
$labels['filteris'] = '와 같습니다';
$labels['filterisnot'] = '와 같지 않습니다';
$labels['filterexists'] = '존재합니다';
$labels['filternotexists'] = '존재하지 않습니다';
$labels['filtermatches'] = '표현식과 일치합니다';
$labels['filternotmatches'] = '표현식과 일치하지 않습니다';
$labels['filterregex'] = '정규표현식과 일치합니다';
$labels['filternotregex'] = '정규 표현식과 일치하지 않습니다';
$labels['addrule'] = '규칙 더하기';
$labels['delrule'] = '규칙 삭제';
$labels['messagemoveto'] = '메시지 이동';
$labels['messageredirect'] = '메시지를 Redirect';
$labels['messagecopyto'] = '메시지를 복사';
$labels['messagesendcopy'] = '메시지의 복사본 보내기';
$labels['messagereply'] = '메시지에 회신하기';
$labels['messagedelete'] = '메시지 삭제';
$labels['add'] = '추가';
$labels['del'] = '삭제';
$labels['sender'] = '보낸 사람';
$labels['recipient'] = '수신자';
$labels['vacationaddresses'] = '나의 추가 e-mail 주소(들) (콤마로 구분 됨):';
$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['text'] = '텍스트';
$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['ruleexist'] = '지정한 이름의 필터가 이미 존재 함.';
$labels['setactivateerror'] = '선택한 필터 묶음을 활성화 할 수 없음. 서버 에러 발생 함.';
$labels['setdeactivateerror'] = '선택한 필터 묶음을 비활성화 할 수 없음. 서버 에러 발생 함.';
$labels['setdeleteerror'] = '선택한 필터 묶음을 삭제할 수 없음. 서버 에러 발생 함.';
$labels['setactivated'] = '필터 묶음을 성공적으로 활성화 하였음.';
$labels['setdeactivated'] = '필터 묶음을 성공적으로 비활성화 하였음.';
$labels['setdeleted'] = '필터 묶음을 성공적으로 삭제 함.';
$labels['setdeleteconfirm'] = '선택한 필터 묶음을 지우고자 하는 것이 확실합니까?';
$labels['setcreateerror'] = '필터 묶음을 생성할 수 없음. 서버 에러 발생 함.';
$labels['setcreated'] = '필터 묶음을 성공적으로 생성 함.';
$labels['activateerror'] = '선택한 필터(들)을 동작하게 할 수 없음. 서버 에러 발생 함.';
$labels['deactivateerror'] = '선택한 필터(들)을 동작하지 않게 할 수 없음. 서버 에러 발생 함.';
-$labels['activated'] = '필터(들)을 동작하지 않게 하는데 성공하였음.';
-$labels['deactivated'] = '필터(들)을 동작하게 하는데 성공하였음.';
+$labels['deactivated'] = '필터(들)을 동작하지 않게 하는데 성공하였음.';
+$labels['activated'] = '필터(들)을 동작하게 하는데 성공하였음.';
$labels['moved'] = '필터를 이동하는 데 성공하였음.';
$labels['moveerror'] = '선택한 필터를 이동할 수 없음. 서버 에러 발생 함.';
$labels['nametoolong'] = '이름이 너무 김.';
$labels['namereserved'] = '예약된 이름.';
$labels['setexist'] = '묶음이 이미 존재 함.';
$labels['nodata'] = '적어도 하나의 위치가 선택되어야 함!';
diff --git a/plugins/managesieve/localization/ml_IN.inc b/plugins/managesieve/localization/ml_IN.inc
index ed3d7675c..012278ec8 100644
--- a/plugins/managesieve/localization/ml_IN.inc
+++ b/plugins/managesieve/localization/ml_IN.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/ml_IN/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 |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'അരിപ്പകള്‍';
$labels['managefilters'] = 'അകത്തോട്ടുള്ള ഇമെയില്‍ അരിപ്പകള്‍ ക്രമീകരിക്കുക';
$labels['filtername'] = 'അരിപ്പയുടെ പേര്';
$labels['newfilter'] = 'പുതിയ അരിപ്പ';
$labels['filteradd'] = 'അരിപ്പ ചേര്‍ക്കുക';
$labels['filterdel'] = 'അരിപ്പ നീക്കംചെയ്യുക';
$labels['moveup'] = 'മുകളിലേക്ക് നീക്കുക';
$labels['movedown'] = 'താഴേക്ക് നീക്കുക';
$labels['filterallof'] = 'കീഴ്പറഞ്ഞ എല്ലാ നിയമങ്ങളും പാലിക്കുന്നവ';
$labels['filteranyof'] = 'കീഴ്പറഞ്ഞ ഏതെങ്കിലും നിയമം പാലിക്കുന്നവ';
$labels['filterany'] = 'എല്ലാ സന്ദേശങ്ങളും';
$labels['filtercontains'] = 'അടങ്ങുന്നത്';
$labels['filternotcontains'] = 'ല്‍ അടങ്ങുന്നില്ല';
$labels['filteris'] = 'ന് തുല്യം';
$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'] = 'സന്ദേശത്തോടെ നിരാകരിക്കുക';
$labels['messagesrules'] = 'ആഗമന സന്ദേശങ്ങള്‍ക്ക്:';
$labels['messagesactions'] = '...ഈ പ്രവര്‍ത്തനങ്ങള്‍ ചെയ്യുക:';
$labels['add'] = 'ചേര്‍ക്കു';
$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'] = 'ഡീക്കോഡ് ചെയ്യാത്തത് (റോ)';
$labels['contenttype'] = 'ഉള്ളടക്കത്തിന്റെ തരം';
$labels['modtype'] = 'തരം:';
$labels['allparts'] = 'എല്ലാം';
$labels['domain'] = 'ഡൊമൈന്‍';
$labels['localpart'] = 'പ്രാദേശിക ഭാഗം';
$labels['user'] = 'ഉപയോക്താവു്';
$labels['detail'] = 'വിശദാംശം';
$labels['comparator'] = 'താരതമ്യകന്‍:';
$labels['default'] = 'സഹജമായ';
$labels['octet'] = 'കര്‍ശനം (octet)';
$labels['asciicasemap'] = 'വലിയ-ചെറിയക്ഷരങ്ങള്‍ തമ്മില്‍ വ്യത്യാസമില്ലാത്ത (ascii-casemap)';
$labels['asciinumeric'] = 'സംഖ്യകള്‍ (ascii-numeric)';
$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['activateerror'] = 'അരിപ്പ (കള്‍) പ്രവര്‍ത്തനസജ്ജം ആക്കാന്‍ സാധിച്ചില്ല. സേവകനില്‍ കുഴപ്പം!';
$labels['deactivateerror'] = 'അരിപ്പ (കള്‍) നിര്‍വീര്യം ആക്കാന്‍ സാധിച്ചില്ല. സേവകനില്‍ കുഴപ്പം!';
-$labels['activated'] = 'അരിപ്പകള്‍ നിര്‍വീര്യം ആക്കപ്പെട്ടിരിക്കുന്നു';
-$labels['deactivated'] = 'അരിപ്പ വിജകരമായി പ്രവര്‍ത്തനസജ്ജമാക്കി.';
+$labels['deactivated'] = 'അരിപ്പകള്‍ നിര്‍വീര്യം ആക്കപ്പെട്ടിരിക്കുന്നു';
+$labels['activated'] = 'അരിപ്പ വിജകരമായി പ്രവര്‍ത്തനസജ്ജമാക്കി.';
$labels['moved'] = 'അരിപ്പ വിജകരമായി മാറ്റി.';
$labels['moveerror'] = 'തെരഞ്ഞെടുത്ത അരിപ്പ മാറ്റാന്‍ സാധിച്ചില്ല. സേവകനില്‍ കുഴപ്പം.';
$labels['nametoolong'] = 'പേരിന് നീളം കൂടുതല്‍.';
$labels['namereserved'] = 'നീക്കിവെച്ച വാക്ക്.';
$labels['setexist'] = 'കൂട്ടം നേരത്തെ തന്നെ ഉണ്ട്.';
$labels['nodata'] = 'ഒരു സ്ഥാനമെങ്കിലും തെരഞ്ഞെടുക്കണം!';
diff --git a/plugins/managesieve/localization/nb_NO.inc b/plugins/managesieve/localization/nb_NO.inc
index b172685a2..ee6d578b7 100644
--- a/plugins/managesieve/localization/nb_NO.inc
+++ b/plugins/managesieve/localization/nb_NO.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/nb_NO/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Tobias V. Langhoff <spug@thespug.net> |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'Filtre';
$labels['managefilters'] = 'Rediger filter for innkommende e-post';
$labels['filtername'] = 'Filternavn';
$labels['newfilter'] = 'Nytt filter';
$labels['filteradd'] = 'Legg til filter';
$labels['filterdel'] = 'Slett filter';
$labels['moveup'] = 'Flytt opp';
$labels['movedown'] = 'Flytt ned';
$labels['filterallof'] = 'som treffer alle følgende regler';
$labels['filteranyof'] = 'som treffer en av følgende regler';
$labels['filterany'] = 'alle meldinger';
$labels['filtercontains'] = 'inneholder';
$labels['filternotcontains'] = 'ikke inneholder';
$labels['filteris'] = 'er lik';
$labels['filterisnot'] = 'er ulik';
$labels['filterexists'] = 'eksisterer';
$labels['filternotexists'] = 'ikke eksisterer';
$labels['filtermatches'] = 'treffer uttrykk';
$labels['filternotmatches'] = 'ikke treffer uttrykk';
$labels['filterregex'] = 'treffer regulært uttrykk';
$labels['filternotregex'] = 'ikke treffer regulært uttrykk';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['addrule'] = 'Legg til regel';
$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';
$labels['messagesrules'] = 'For innkommende e-post';
$labels['messagesactions'] = '... gjør følgende:';
$labels['add'] = 'Legg til';
$labels['del'] = 'Slett';
$labels['sender'] = 'Avsender';
$labels['recipient'] = 'Mottaker';
$labels['vacationaddresses'] = 'Liste med mottakeradresser (adskilt med komma):';
$labels['vacationdays'] = 'Periode mellom meldinger (i dager):';
$labels['vacationreason'] = 'Innhold (begrunnelse for fravær)';
$labels['vacationsubject'] = 'Meldingsemne:';
$labels['rulestop'] = 'Stopp evaluering av regler';
$labels['enable'] = 'Aktiver / deaktiver';
$labels['filterset'] = 'Filtersett';
$labels['filtersets'] = 'Filtersett';
$labels['filtersetadd'] = 'Nytt filtersett';
$labels['filtersetdel'] = 'Slett gjeldende filtersett';
$labels['filtersetact'] = 'Aktiver gjeldende filtersett';
$labels['filtersetdeact'] = 'Deaktiver gjeldende filtersett';
$labels['filterdef'] = 'Filterdefinisjon';
$labels['filtersetname'] = 'Navn på filtersett';
$labels['newfilterset'] = 'Nytt filtersett';
$labels['active'] = 'aktiv';
$labels['none'] = 'ingen';
$labels['fromset'] = 'fra sett';
$labels['fromfile'] = 'fra fil';
$labels['filterdisabled'] = 'Filter deaktivert';
$labels['countisgreaterthan'] = 'antall er flere enn';
$labels['countisgreaterthanequal'] = 'antall er flere enn eller lik';
$labels['countislessthan'] = 'antall er færre enn';
$labels['countislessthanequal'] = 'antall er færre enn eller lik';
$labels['countequals'] = 'antall er lik';
$labels['countnotequals'] = 'antall er ulik';
$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['setflags'] = 'Sett meldingsflagg';
$labels['addflags'] = 'Legg til flagg på meldingen';
$labels['removeflags'] = 'Fjern flagg fra meldingen';
$labels['flagread'] = 'Lese';
$labels['flagdeleted'] = 'Slettet';
$labels['flaganswered'] = 'Besvart';
$labels['flagflagged'] = 'Flagget';
$labels['flagdraft'] = 'Utkast';
$labels['filtercreate'] = 'Opprett filter';
$labels['usedata'] = 'Bruk følgende data i filteret:';
$labels['nextstep'] = 'Neste steg';
$labels['...'] = '…';
$labels['advancedopts'] = 'Avanserte alternativer';
$labels['body'] = 'Meldingstekst';
$labels['address'] = 'adresse';
$labels['envelope'] = 'konvolutt';
$labels['modifier'] = 'modifikator';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'ikke dekodet (rå)';
$labels['contenttype'] = 'innholdstype';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'alle';
$labels['domain'] = 'domene';
$labels['localpart'] = 'lokal del (localpart)';
$labels['user'] = 'bruker';
$labels['detail'] = 'detalj';
$labels['comparator'] = 'sammenligning:';
$labels['default'] = 'standard';
$labels['octet'] = 'streng (octet)';
$labels['asciicasemap'] = 'ikke skill store og små bokstaver (ascii-casemap)';
$labels['asciinumeric'] = 'numerisk (ascii-numeric)';
$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['filterdeleteconfirm'] = 'Vil du virkelig slette det valgte filteret?';
$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';
$labels['ruleexist'] = 'Det finnes allerede et filter med dette navnet.';
$labels['setactivateerror'] = 'Kunne ikke aktivere det valgte filtersettet. Det oppsto en tjenerfeil.';
$labels['setdeactivateerror'] = 'Kunne ikke deaktivere det valgte filtersettet. Det oppsto en tjenerfeil.';
$labels['setdeleteerror'] = 'Kunne ikke slette det valgte filtersettet. Det oppsto en tjenerfeil.';
$labels['setactivated'] = 'Filtersett aktivert.';
$labels['setdeactivated'] = 'Filtersett deaktivert.';
$labels['setdeleted'] = 'Filtersett slettet.';
$labels['setdeleteconfirm'] = 'Er du sikker på at du vil slette det valgte filtersettet?';
$labels['setcreateerror'] = 'Kunne ikke opprette filtersettet. Det oppsto en tjenerfeil.';
$labels['setcreated'] = 'Filtersett opprettet.';
$labels['activateerror'] = 'Kunne ikke skru på valgte filter. Det oppsto en tjenerfeil.';
$labels['deactivateerror'] = 'Kunne ikke skru av valgte filter. Det oppsto en tjenerfeil.';
-$labels['activated'] = 'Filter skrudd av.';
-$labels['deactivated'] = 'Filter ble skrudd på.';
+$labels['deactivated'] = 'Filter skrudd av.';
+$labels['activated'] = 'Filter ble skrudd på.';
$labels['moved'] = 'Filter ble flyttet.';
$labels['moveerror'] = 'Kunne ikke flytte valgte filter. Det oppsto en tjenerfeil.';
$labels['nametoolong'] = 'Navnet er for langt.';
$labels['namereserved'] = 'Navnet er reservert.';
$labels['setexist'] = 'Settet eksisterer allerede.';
$labels['nodata'] = 'Du må velge minst én posisjon!';
diff --git a/plugins/managesieve/localization/nl_NL.inc b/plugins/managesieve/localization/nl_NL.inc
index 8ee5e2bbf..56b1c95ee 100644
--- a/plugins/managesieve/localization/nl_NL.inc
+++ b/plugins/managesieve/localization/nl_NL.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/nl_NL/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Geert Wirken <Unknown> |
+-----------------------------------------------------------------------+
@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'] = 'Verwijder filter';
$labels['moveup'] = 'Verplaats omhoog';
$labels['movedown'] = 'Verplaats omlaag';
$labels['filterallof'] = 'die voldoet aan alle volgende regels';
$labels['filteranyof'] = 'die voldoet aan één van de volgende regels';
$labels['filterany'] = 'alle berichten';
$labels['filtercontains'] = 'bevat';
$labels['filternotcontains'] = 'bevat niet';
$labels['filteris'] = 'is gelijk aan';
$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'] = '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'] = 'toets op:';
$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'] = 'vergelijkingswijze:';
$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['deactivated'] = 'Filter(s) succesvol uitgeschakeld.';
+$labels['activated'] = '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!';
diff --git a/plugins/managesieve/localization/pl_PL.inc b/plugins/managesieve/localization/pl_PL.inc
index 734a4ebcf..e078f4944 100644
--- a/plugins/managesieve/localization/pl_PL.inc
+++ b/plugins/managesieve/localization/pl_PL.inc
@@ -1,169 +1,169 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/pl_PL/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Aleksander Machniak <alec@alec.pl> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filtry';
$labels['managefilters'] = 'Zarządzaj filtrami wiadomości przychodzących';
$labels['filtername'] = 'Nazwa filtru';
$labels['newfilter'] = 'Nowy filtr';
$labels['filteradd'] = 'Dodaj filtr';
$labels['filterdel'] = 'Usuń filtr';
$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';
$labels['filtercontains'] = 'zawiera';
$labels['filternotcontains'] = 'nie zawiera';
$labels['filteris'] = 'jest równe';
$labels['filterisnot'] = 'nie jest równe';
$labels['filterexists'] = 'istnieje';
$labels['filternotexists'] = 'nie istnieje';
$labels['filtermatches'] = 'pasuje do wyrażenia';
$labels['filternotmatches'] = 'nie pasuje do wyrażenia';
$labels['filterregex'] = 'pasuje do wyrażenia regularnego';
$labels['filternotregex'] = 'nie pasuje do wyrażenia regularnego';
$labels['filterunder'] = 'poniżej';
$labels['filterover'] = 'ponad';
$labels['addrule'] = 'Dodaj regułę';
$labels['delrule'] = 'Usuń regułę';
$labels['messagemoveto'] = 'Przenieś wiadomość do';
$labels['messageredirect'] = 'Przekaż wiadomość na konto';
$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:';
$labels['messagesactions'] = '...wykonaj następujące czynności:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Usuń';
$labels['sender'] = 'Nadawca';
$labels['recipient'] = 'Odbiorca';
$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['filterdef'] = 'Definicja filtra';
$labels['filtersetname'] = 'Nazwa zbioru';
$labels['newfilterset'] = 'Nowy zbiór filtrów';
$labels['active'] = 'aktywny';
$labels['none'] = 'brak';
$labels['fromset'] = 'ze zbioru';
$labels['fromfile'] = 'z pliku';
$labels['filterdisabled'] = 'Filtr wyłączony';
$labels['countisgreaterthan'] = 'ilość jest większa od';
$labels['countisgreaterthanequal'] = 'ilość jest równa lub większa od';
$labels['countislessthan'] = 'ilość jest mniejsza od';
$labels['countislessthanequal'] = 'ilość jest równa lub mniejsza od';
$labels['countequals'] = 'ilość jest równa';
$labels['countnotequals'] = 'ilość jest różna od';
$labels['valueisgreaterthan'] = 'wartość jest większa od';
$labels['valueisgreaterthanequal'] = 'wartość jest równa lub większa od';
$labels['valueislessthan'] = 'wartość jest mniejsza od';
$labels['valueislessthanequal'] = 'wartość jest równa lub mniejsza od';
$labels['valueequals'] = 'wartość jest równa';
$labels['valuenotequals'] = 'wartość jest różna od';
$labels['setflags'] = 'Ustaw flagi wiadomości';
$labels['addflags'] = 'Dodaj flagi do wiadomości';
$labels['removeflags'] = 'Usuń flagi wiadomości';
$labels['flagread'] = 'Przeczytana';
$labels['flagdeleted'] = 'Usunięta';
$labels['flaganswered'] = 'Z odpowiedzią';
$labels['flagflagged'] = 'Oflagowana';
$labels['flagdraft'] = 'Szkic';
$labels['setvariable'] = 'Ustaw zmienną';
$labels['setvarname'] = 'Nazwa zmiennej:';
$labels['setvarvalue'] = 'Wartość zmiennej:';
$labels['setvarmodifiers'] = 'Modyfikatory:';
$labels['varlower'] = 'małe litery (:lower)';
$labels['varupper'] = 'duże litery (:upper)';
$labels['varlowerfirst'] = 'pierwsza litera mała (:lowerfirst)';
$labels['varupperfirst'] = 'pierwsza litera duża (:upperfirst)';
$labels['varquotewildcard'] = 'anulowane znaki specjalne (:quotewildcard)';
$labels['varlength'] = 'długość (:length)';
$labels['notify'] = 'Wyślij powiadomienie';
$labels['notifyaddress'] = 'Na adres e-mail:';
$labels['notifybody'] = 'Treść powiadomienia:';
$labels['notifysubject'] = 'Temat powiadomienia:';
$labels['notifyfrom'] = 'Nadawca powiadomienia:';
$labels['notifyimportance'] = 'Priorytet:';
$labels['notifyimportancelow'] = 'niski';
$labels['notifyimportancenormal'] = 'normalny';
$labels['notifyimportancehigh'] = 'wysoki';
$labels['filtercreate'] = 'Utwórz 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['deactivated'] = 'Filtr(y) wyłączono pomyślnie.';
+$labels['activated'] = '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ę!';
diff --git a/plugins/managesieve/localization/pt_BR.inc b/plugins/managesieve/localization/pt_BR.inc
index f0e890d86..f4b64584a 100644
--- a/plugins/managesieve/localization/pt_BR.inc
+++ b/plugins/managesieve/localization/pt_BR.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/pt_BR/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 <Unknown> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Gerenciar filtros de entrada de e-mail';
$labels['filtername'] = 'Nome do filtro';
$labels['newfilter'] = 'Novo filtro';
$labels['filteradd'] = 'Adicionar filtro';
$labels['filterdel'] = 'Excluir filtro';
$labels['moveup'] = 'Mover para cima';
$labels['movedown'] = 'Mover para baixo';
$labels['filterallof'] = 'casando todas as seguintes regras';
$labels['filteranyof'] = 'casando qualquer das seguintes regras';
$labels['filterany'] = 'todas as mensagens';
$labels['filtercontains'] = 'contem';
$labels['filternotcontains'] = 'não contem';
$labels['filteris'] = 'é igual a';
$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';
$labels['messagesrules'] = 'Para e-mails recebidos:';
$labels['messagesactions'] = '...execute as seguintes ações:';
$labels['add'] = 'Adicionar';
$labels['del'] = 'Excluir';
$labels['sender'] = 'Remetente';
$labels['recipient'] = 'Destinatário';
$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['deactivated'] = 'Filtro(s) desabilitado(s) com sucesso.';
+$labels['activated'] = '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!';
diff --git a/plugins/managesieve/localization/pt_PT.inc b/plugins/managesieve/localization/pt_PT.inc
index bb0c781a1..8a0a1da3e 100644
--- a/plugins/managesieve/localization/pt_PT.inc
+++ b/plugins/managesieve/localization/pt_PT.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/pt_PT/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: David <Unknown> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Gerir filtros';
$labels['filtername'] = 'Nome do filtro';
$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';
$labels['filteranyof'] = 'corresponde a uma das seguintes regras';
$labels['filterany'] = 'todas as mensagens';
$labels['filtercontains'] = 'contém';
$labels['filternotcontains'] = 'não contém';
$labels['filteris'] = 'é igual a';
$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['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';
$labels['countislessthanequal'] = 'contagem é menor ou igual a';
$labels['countequals'] = 'contagem é igual a';
$labels['countnotequals'] = 'contagem é diferente de';
$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 diferente de';
$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['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'] = '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['deactivated'] = 'Filtro(s) desativado(s) com sucesso.';
+$labels['activated'] = '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.';
diff --git a/plugins/managesieve/localization/ro_RO.inc b/plugins/managesieve/localization/ro_RO.inc
index 755ee03f0..888985233 100644
--- a/plugins/managesieve/localization/ro_RO.inc
+++ b/plugins/managesieve/localization/ro_RO.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/ro_RO/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: tudor <tudor@starnet-alba.ro> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filtre';
$labels['managefilters'] = 'Administrează filtrele pentru mesaje primite.';
$labels['filtername'] = 'Nume filtru';
$labels['newfilter'] = 'Filtru nou.';
$labels['filteradd'] = 'Adaugă un filtru';
$labels['filterdel'] = 'Şterge filtru.';
$labels['moveup'] = 'Mută mai sus';
$labels['movedown'] = 'Mută mai jos';
$labels['filterallof'] = 'se potriveşte cu toate din regulile următoare';
$labels['filteranyof'] = 'se potriveşte cu oricare din regulile următoare';
$labels['filterany'] = 'toate mesajele';
$labels['filtercontains'] = 'conține';
$labels['filternotcontains'] = 'nu conţine';
$labels['filteris'] = 'este egal cu';
$labels['filterisnot'] = 'este diferit de';
$labels['filterexists'] = 'există';
$labels['filternotexists'] = 'nu există';
$labels['filtermatches'] = 'se potriveşte cu expresia';
$labels['filternotmatches'] = 'nu se potriveşte cu expresia';
$labels['filterregex'] = 'se potriveşte cu expresia regulată';
$labels['filternotregex'] = 'nu se potriveşte cu expresia regulată';
$labels['filterunder'] = 'sub';
$labels['filterover'] = 'peste';
$labels['addrule'] = 'Adaugă regula';
$labels['delrule'] = 'Şterge regula';
$labels['messagemoveto'] = 'Mută mesajul în';
$labels['messageredirect'] = 'Redirecţionează mesajul către';
$labels['messagecopyto'] = 'Copiază mesajul în';
$labels['messagesendcopy'] = 'Trimite o copie a mesajului către';
$labels['messagereply'] = 'Răspunde cu mesajul';
$labels['messagedelete'] = 'Şterge mesajul';
$labels['messagediscard'] = 'Respinge cu mesajul';
$labels['messagesrules'] = 'Pentru e-mail primit:';
$labels['messagesactions'] = '...execută următoarele acţiuni:';
$labels['add'] = 'Adaugă';
$labels['del'] = 'Șterge';
$labels['sender'] = 'Expeditor';
$labels['recipient'] = 'Destinatar';
$labels['vacationaddresses'] = 'Listă adiţională cu email-urile destinatarilor (separate prin virgulă):';
$labels['vacationdays'] = 'Cât de des să trimit mesajele (în zile):';
$labels['vacationreason'] = 'Corpul mesajului (motivul vacanţei):';
$labels['vacationsubject'] = 'Subiectul mesajului:';
$labels['rulestop'] = 'Nu mai evalua reguli';
$labels['enable'] = 'Activează/Dezactivează';
$labels['filterset'] = 'Filtre setate';
$labels['filtersets'] = 'Filtrul setează';
$labels['filtersetadd'] = 'Adaugă set de filtre';
$labels['filtersetdel'] = 'Şterge setul curent de filtre';
$labels['filtersetact'] = 'Activează setul curent de filtre';
$labels['filtersetdeact'] = 'Dezactivează setul curent de filtre';
$labels['filterdef'] = 'Definiţie filtru';
$labels['filtersetname'] = 'Nume set filtre';
$labels['newfilterset'] = 'Set filtre nou';
$labels['active'] = 'activ';
$labels['none'] = 'niciunul';
$labels['fromset'] = 'din setul';
$labels['fromfile'] = 'din fişier';
$labels['filterdisabled'] = 'Filtru dezactivat';
$labels['countisgreaterthan'] = 'numărul este mai mare ca';
$labels['countisgreaterthanequal'] = 'numărul este mai mare sau egal cu';
$labels['countislessthan'] = 'numărul este mai mic decât';
$labels['countislessthanequal'] = 'numărul este mai mic sau egal cu';
$labels['countequals'] = 'numărul este egal cu';
$labels['countnotequals'] = 'numărul nu este egal cu';
$labels['valueisgreaterthan'] = 'valoarea este egală cu';
$labels['valueisgreaterthanequal'] = 'valoarea este mai mare sau egală cu';
$labels['valueislessthan'] = 'valoarea este mai mică decât';
$labels['valueislessthanequal'] = 'valoarea este mai mică sau egală cu';
$labels['valueequals'] = 'valoarea este egală cu';
$labels['valuenotequals'] = 'valoarea nu este egală cu';
$labels['setflags'] = 'Pune marcaje mesajului';
$labels['addflags'] = 'Adaugă marcaje mesajului';
$labels['removeflags'] = 'Şterge marcajele mesajului';
$labels['flagread'] = 'Citit';
$labels['flagdeleted'] = 'Șters';
$labels['flaganswered'] = 'Răspuns';
$labels['flagflagged'] = 'Marcat';
$labels['flagdraft'] = 'Schiță';
$labels['filtercreate'] = 'Crează filtru';
$labels['usedata'] = 'Foloseşte următoarele date în filtru:';
$labels['nextstep'] = 'Următorul Pas';
$labels['...'] = '...';
$labels['advancedopts'] = 'Opţiuni avansate';
$labels['body'] = 'Corp';
$labels['address'] = 'adresă';
$labels['envelope'] = 'plic';
$labels['modifier'] = 'modificator:';
$labels['text'] = 'text';
$labels['undecoded'] = 'nedecodat (brut)';
$labels['contenttype'] = 'tip conţinut';
$labels['modtype'] = 'tip:';
$labels['allparts'] = 'toate';
$labels['domain'] = 'domeniu';
$labels['localpart'] = 'partea locală';
$labels['user'] = 'utilizator';
$labels['detail'] = 'detaliu';
$labels['comparator'] = 'comparator:';
$labels['default'] = 'implicit';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'ignoră majusculele (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['filterunknownerror'] = 'Eroare necunoscută la server:';
$labels['filterconnerror'] = 'Nu mă pot conecta la server.';
$labels['filterdeleteerror'] = 'Nu pot şterge filtrul. S-a produs o eroare la server.';
$labels['filterdeleted'] = 'Filtrul a fost şters cu succes.';
$labels['filtersaved'] = 'Filtrul a fost salvat cu succes.';
$labels['filtersaveerror'] = 'Nu am putut salva filtrul. S-a produs o eroare la server.';
$labels['filterdeleteconfirm'] = 'Chiar vrei să ştergi filtrul selectat?';
$labels['ruledeleteconfirm'] = 'Eşti sigur că vrei să ştergi regula selectată?';
$labels['actiondeleteconfirm'] = 'Eşti sigur că vrei să ştergi acţiunea selectată?';
$labels['forbiddenchars'] = 'Caractere nepermise în câmp.';
$labels['cannotbeempty'] = 'Câmpul nu poate fi gol.';
$labels['ruleexist'] = 'Filtrul cu numele specificat există deja.';
$labels['setactivateerror'] = 'Nu pot activa setul de filtre selectat. S-a produs o eroare la server.';
$labels['setdeactivateerror'] = 'Nu pot dezactiva setul de filtre selectat. S-a produs o eroare la server.';
$labels['setdeleteerror'] = 'Nu pot şterge setul de filtre selectat. S-a produs o eroare la server.';
$labels['setactivated'] = 'Setul de filtre activat cu succes.';
$labels['setdeactivated'] = 'Setul de filtre dezactivat cu succes.';
$labels['setdeleted'] = 'Setul de filtre şters cu succes.';
$labels['setdeleteconfirm'] = 'Eşti sigur(ă) că vrei să ştergi setul de filtre selectat?';
$labels['setcreateerror'] = 'Nu am putut crea setul de filtre. S-a produs o eroare la server.';
$labels['setcreated'] = 'Setul de filtre creat cu succes.';
$labels['activateerror'] = 'Nu am putut activa filtrele selectate. S-a produs o eroare la server.';
$labels['deactivateerror'] = 'Nu am putut dezactiva filtrele selectate. S-a produs o eroare la server.';
-$labels['activated'] = 'Filtrele au fost dezactivate cu succes.';
-$labels['deactivated'] = 'Filtrele au fost activate cu succes.';
+$labels['deactivated'] = 'Filtrele au fost dezactivate cu succes.';
+$labels['activated'] = 'Filtrele au fost activate cu succes.';
$labels['moved'] = 'Filtrele au fost mutate cu succes.';
$labels['moveerror'] = 'Nu am putut muta filtreele selectate. S-a produs o eroare la server.';
$labels['nametoolong'] = 'Numele este prea lung.';
$labels['namereserved'] = 'Nume rezervat.';
$labels['setexist'] = 'Setul există deja.';
$labels['nodata'] = 'Trebuie selectată cel putin o poziţie!';
diff --git a/plugins/managesieve/localization/ru_RU.inc b/plugins/managesieve/localization/ru_RU.inc
index cfc2ac1e4..0689bd884 100644
--- a/plugins/managesieve/localization/ru_RU.inc
+++ b/plugins/managesieve/localization/ru_RU.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| 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: Vyacheslav Sharmanov |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'Фильтры';
$labels['managefilters'] = 'Управление фильтрами для входящей почты';
$labels['filtername'] = 'Название фильтра';
$labels['newfilter'] = 'Новый фильтр';
$labels['filteradd'] = 'Добавить фильтр';
$labels['filterdel'] = 'Удалить фильтр';
$labels['moveup'] = 'Сдвинуть вверх';
$labels['movedown'] = 'Сдвинуть вниз';
$labels['filterallof'] = 'соответствует всем указанным правилам';
$labels['filteranyof'] = 'соответствует любому из указанных правил';
$labels['filterany'] = 'все сообщения';
$labels['filtercontains'] = 'содержит';
$labels['filternotcontains'] = 'не содержит';
$labels['filteris'] = 'соответствует';
$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'] = 'Отбросить с сообщением';
$labels['messagesrules'] = 'Для входящей почты:';
$labels['messagesactions'] = '...выполнить следующие действия:';
$labels['add'] = 'Добавить';
$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'] = 'необработанный (сырой)';
$labels['contenttype'] = 'тип содержимого';
$labels['modtype'] = 'поиск в адресах:';
$labels['allparts'] = 'везде';
$labels['domain'] = 'в имени домена';
$labels['localpart'] = 'только в имени пользователя, без домена';
$labels['user'] = 'в полном имени пользователя';
$labels['detail'] = 'в дополнительных сведениях';
$labels['comparator'] = 'способ сравнения:';
$labels['default'] = 'по умолчанию';
$labels['octet'] = 'Строгий (octet)';
$labels['asciicasemap'] = 'Регистронезависимый (ascii-casemap)';
$labels['asciinumeric'] = 'Числовой (ascii-numeric)';
$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['activateerror'] = 'Невозможно включить выбранный(е) фильтр(ы). Ошибка сервера.';
$labels['deactivateerror'] = 'Невозможно выключить выбранный(е) фильтр(ы). Ошибка сервера.';
-$labels['activated'] = 'Фильтр(ы) успешно отключен(ы).';
-$labels['deactivated'] = 'Фильтр(ы) успешно включен(ы).';
+$labels['deactivated'] = 'Фильтр(ы) успешно отключен(ы).';
+$labels['activated'] = 'Фильтр(ы) успешно включен(ы).';
$labels['moved'] = 'Фильтр успешно перемещён.';
$labels['moveerror'] = 'Невозможно переместить фильтр. Ошибка сервера.';
$labels['nametoolong'] = 'Невозможно создать набор фильтров. Название слишком длинное.';
$labels['namereserved'] = 'Зарезервированное имя.';
$labels['setexist'] = 'Набор уже существует.';
$labels['nodata'] = 'Нужно выбрать хотя бы одну позицию!';
diff --git a/plugins/managesieve/localization/sk_SK.inc b/plugins/managesieve/localization/sk_SK.inc
index 7d78c7fd2..337dfa690 100644
--- a/plugins/managesieve/localization/sk_SK.inc
+++ b/plugins/managesieve/localization/sk_SK.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| 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 <Unknown> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filtre';
$labels['managefilters'] = 'Správa filtrov príchádzajúcej pošty';
$labels['filtername'] = 'Názov filtra';
$labels['newfilter'] = 'Nový filter';
$labels['filteradd'] = 'Pridaj filter';
$labels['filterdel'] = 'Zmaž filter';
$labels['moveup'] = 'Presuň vyššie';
$labels['movedown'] = 'Presuň nižšie';
$labels['filterallof'] = 'vyhovujúca všetkým z nasledujúcich pravidiel';
$labels['filteranyof'] = 'vyhovujúca ľubovoľnému z nasledujúcich pravidiel';
$labels['filterany'] = 'všetky správy';
$labels['filtercontains'] = 'obsahuje';
$labels['filternotcontains'] = 'neobsahuje';
$labels['filteris'] = 'rovná sa';
$labels['filterisnot'] = 'nerovná sa';
$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';
$labels['messagesrules'] = 'Pre prichádzajúcu poštu';
$labels['messagesactions'] = 'vykonaj nasledovné akcie';
$labels['add'] = 'Pridaj';
$labels['del'] = 'Zmaž';
$labels['sender'] = 'Odosielateľ';
$labels['recipient'] = 'Adresát';
$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['filterdef'] = 'Definícia filtra';
$labels['filtersetname'] = 'Názov sady filtrov';
$labels['newfilterset'] = 'Nová sada filtrov';
$labels['active'] = 'aktívna';
$labels['none'] = 'žiadne';
$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['modifier'] = 'modifikátor:';
$labels['text'] = 'text';
$labels['undecoded'] = 'nedekódované (raw)';
$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['comparator'] = 'porovnávač:';
$labels['default'] = 'predvolené';
$labels['octet'] = 'striktný (osmičkovo)';
$labels['asciicasemap'] = 'nerozlišuje veľké a malé písmená (ascii tabuľka znakov)';
$labels['asciinumeric'] = 'numerické (ascii čísla)';
$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['ruleexist'] = 'Filter so zadaným menom už existuje.';
$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['activateerror'] = 'Nepodarilo sa povoliť vybraný filter(e). Chyba servera.';
$labels['deactivateerror'] = 'Nepodarilo sa vypnúť vybraný filter(e). Chyba servera.';
-$labels['activated'] = 'Filter(e) úspešne vypnutý.';
-$labels['deactivated'] = 'Filter(e) povolený.';
+$labels['deactivated'] = 'Filter(e) úspešne vypnutý.';
+$labels['activated'] = 'Filter(e) povolený.';
$labels['moved'] = 'Filter presunutý.';
$labels['moveerror'] = 'Nemôžem presunúť zvolený filter. Chyba servera.';
$labels['nametoolong'] = 'Názov sady filtrov je príliš dlhý';
$labels['namereserved'] = 'Rezervovaný názov.';
$labels['setexist'] = 'Množina už existuje.';
$labels['nodata'] = 'Aspoň jedna pozícia musí byť zvolená.';
diff --git a/plugins/managesieve/localization/sl_SI.inc b/plugins/managesieve/localization/sl_SI.inc
index a0b61e70e..f29522568 100644
--- a/plugins/managesieve/localization/sl_SI.inc
+++ b/plugins/managesieve/localization/sl_SI.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/sl_SI/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Teja Cetinski <teja.cetinski@gmail.com> |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'Filtri';
$labels['managefilters'] = 'Uredi filtre za dohodno pošto';
$labels['filtername'] = 'Ime filtra';
$labels['newfilter'] = 'Nov filter';
$labels['filteradd'] = 'Dodaj filter';
$labels['filterdel'] = 'Izbriši filter';
$labels['moveup'] = 'Pomakni se navzgor';
$labels['movedown'] = 'Pomakni se navzdol';
$labels['filterallof'] = 'izpolnjeni morajo biti vsi pogoji';
$labels['filteranyof'] = 'izpolnjen mora biti vsaj eden od navedenih pogojev';
$labels['filterany'] = 'pogoj velja za vsa sporočila';
$labels['filtercontains'] = 'vsebuje';
$labels['filternotcontains'] = 'ne vsebuje';
$labels['filteris'] = 'je enak/a';
$labels['filterisnot'] = 'ni enak/a';
$labels['filterexists'] = 'obstaja';
$labels['filternotexists'] = 'ne obstaja';
$labels['filtermatches'] = 'ustreza izrazu';
$labels['filternotmatches'] = 'ne ustreza izrazu';
$labels['filterregex'] = 'ustreza regularnemu izrazu';
$labels['filternotregex'] = 'ne ustreza regularnemu izrazu';
$labels['filterunder'] = 'pod';
$labels['filterover'] = 'nad';
$labels['addrule'] = 'Dodaj pravilo';
$labels['delrule'] = 'Izbriši pravilo';
$labels['messagemoveto'] = 'Premakni sporočilo v';
$labels['messageredirect'] = 'Preusmeri sporočilo v';
$labels['messagecopyto'] = 'Kopiraj sporočila na';
$labels['messagesendcopy'] = 'Pošlji kopijo sporočila na';
$labels['messagereply'] = 'Odgovori s sporočilom';
$labels['messagedelete'] = 'Izbriši sporočilo';
$labels['messagediscard'] = 'Zavrži s sporočilom';
$labels['messagesrules'] = 'Določi pravila za dohodno pošto:';
$labels['messagesactions'] = '...izvrši naslednja dejanja:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Izbriši';
$labels['sender'] = 'Pošiljatelj';
$labels['recipient'] = 'Prejemnik';
$labels['vacationaddresses'] = 'Dodaten seznam naslovov prejemnikov (ločenih z vejico):';
$labels['vacationdays'] = 'Kako pogosto naj bodo sporočila poslana (v dnevih):';
$labels['vacationreason'] = 'Vsebina sporočila (vzrok za odsotnost):';
$labels['vacationsubject'] = 'Zadeva sporočila';
$labels['rulestop'] = 'Prekini z izvajanjem pravil';
$labels['enable'] = 'Omogoči/Onemogoči';
$labels['filterset'] = 'Nastavitev filtrov';
$labels['filtersets'] = 'Nastavitve filtrov';
$labels['filtersetadd'] = 'Dodaj nastavitev filtrov';
$labels['filtersetdel'] = 'Izbriši trenutne nastavitve filtriranja';
$labels['filtersetact'] = 'Vključi trenutno nastavitev filtriranja';
$labels['filtersetdeact'] = 'Onemogoči trenutno nastavitev filtriranja';
$labels['filterdef'] = 'Opis filtra';
$labels['filtersetname'] = 'Ime filtra';
$labels['newfilterset'] = 'Nov filter';
$labels['active'] = 'aktiven';
$labels['none'] = 'brez';
$labels['fromset'] = 'iz nastavitve';
$labels['fromfile'] = 'iz dokumenta';
$labels['filterdisabled'] = 'Filter onemogočen';
$labels['countisgreaterthan'] = 'seštevek je večji od';
$labels['countisgreaterthanequal'] = 'seštevek je večji ali enak';
$labels['countislessthan'] = 'seštevek je manjši od';
$labels['countislessthanequal'] = 'seštevel je manjši ali enak';
$labels['countequals'] = 'seštevek je enak';
$labels['countnotequals'] = 'seštevek ni enak';
$labels['valueisgreaterthan'] = 'vrednost je večja od';
$labels['valueisgreaterthanequal'] = 'vrednost je večja ali enaka';
$labels['valueislessthan'] = 'vrednost je manjša od';
$labels['valueislessthanequal'] = 'vrednost je manjša ali enaka';
$labels['valueequals'] = 'vrednost je enaka';
$labels['valuenotequals'] = 'vrednost je neenaka';
$labels['setflags'] = 'Označi sporočilo';
$labels['addflags'] = 'Označi sporočilo';
$labels['removeflags'] = 'Odstrani zaznamke s sporočil';
$labels['flagread'] = 'Prebrano';
$labels['flagdeleted'] = 'Izbrisano';
$labels['flaganswered'] = 'Odgovorjeno';
$labels['flagflagged'] = 'Označeno';
$labels['flagdraft'] = 'Osnutek';
$labels['filtercreate'] = 'Ustvari filter';
$labels['usedata'] = 'Pri stvarjanju filtra uporabi naslednje podatke';
$labels['nextstep'] = 'Naslednji korak';
$labels['...'] = '...';
$labels['advancedopts'] = 'Dodatne možnosti';
$labels['body'] = 'Vsebina';
$labels['address'] = 'naslov';
$labels['envelope'] = 'ovojnica';
$labels['modifier'] = 'modifikator';
$labels['text'] = 'besedilo';
$labels['undecoded'] = 'neobdelano';
$labels['contenttype'] = 'tip vsebine';
$labels['modtype'] = 'tip';
$labels['allparts'] = 'vse';
$labels['domain'] = 'domena';
$labels['localpart'] = 'lokalni del';
$labels['user'] = 'uporabnik';
$labels['detail'] = 'podrobnosti';
$labels['comparator'] = 'primerjalnik';
$labels['default'] = 'privzeto';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'ni občutljiv na velike/male črke (ascii-casemap)';
$labels['asciinumeric'] = 'numerično (ascii-numeric)';
$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';
$labels['ruleexist'] = 'Filer s tem imenom že obstaja';
$labels['setactivateerror'] = 'Izbranega filtra ni bilo mogoče vključiti. Prišlo je do napake na strežniku.';
$labels['setdeactivateerror'] = 'Izbranega filtra ni bilo mogoče izključiti. Prišlo je do napake na strežniku.';
$labels['setdeleteerror'] = 'Izbranega filtra ni bilo mogoče izbrisati. Prišlo je do napake na strežniku.';
$labels['setactivated'] = 'Filter je bil uspešno vključen.';
$labels['setdeactivated'] = 'Filter je bil uspešno onemogočen.';
$labels['setdeleted'] = 'Filter je bil uspešno izbrisan.';
$labels['setdeleteconfirm'] = 'Ste prepričani, da želite izbrisati ta filter?';
$labels['setcreateerror'] = 'Filtra ni bilo mogoče ustvariti. Prišlo je do napake na strežniku.';
$labels['setcreated'] = 'Filter je bil uspešno ustvarjen.';
$labels['activateerror'] = 'Izbranega/ih filtra/ov ni bilo mogoče vključiti. Prišlo je do napake na strežniku.';
$labels['deactivateerror'] = 'Izbranega/ih fitra/ov ni bilo mogoče izključiti. Prišlo je do napake na strežniku.';
-$labels['activated'] = 'Filtri so bili uspešno onemogočeni.';
-$labels['deactivated'] = 'Filtri so bili uspešno omogočeni.';
+$labels['deactivated'] = 'Filtri so bili uspešno onemogočeni.';
+$labels['activated'] = 'Filtri so bili uspešno omogočeni.';
$labels['moved'] = 'Filter je bil uspešno premaknjen.';
$labels['moveerror'] = 'Izbranega filtra ni bilo mogoče premakniti. Prišlo je do napake na strežniku.';
$labels['nametoolong'] = 'Ime je predolgo.';
$labels['namereserved'] = 'Rezervirano ime.';
$labels['setexist'] = 'Nastavitev filtra že obstaja.';
$labels['nodata'] = 'Izbrana mora biti vsaj ena nastavitev!';
diff --git a/plugins/managesieve/localization/sv_SE.inc b/plugins/managesieve/localization/sv_SE.inc
index 0dc8ce8fe..d7c1c76a1 100644
--- a/plugins/managesieve/localization/sv_SE.inc
+++ b/plugins/managesieve/localization/sv_SE.inc
@@ -1,150 +1,150 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/sv_SE/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Jonas Nasholm <Unknown> |
+-----------------------------------------------------------------------+
@version $Id$
*/
$labels = array();
$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Administrera filter';
$labels['filtername'] = 'Filternamn';
$labels['newfilter'] = 'Nytt filter';
$labels['filteradd'] = 'Lägg till filter';
$labels['filterdel'] = 'Ta bort filter';
$labels['moveup'] = 'Flytta upp filter';
$labels['movedown'] = 'Flytta ner filter';
$labels['filterallof'] = 'Filtrera på alla följande regler';
$labels['filteranyof'] = 'Filtrera på någon av följande regler';
$labels['filterany'] = 'Filtrera alla meddelanden';
$labels['filtercontains'] = 'innehåller';
$labels['filternotcontains'] = 'inte innehåller';
$labels['filteris'] = 'är lika med';
$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';
$labels['delrule'] = 'Ta bort regel';
$labels['messagemoveto'] = 'Flytta meddelande till';
$labels['messageredirect'] = 'Ändra mottagare till';
$labels['messagecopyto'] = 'Kopiera meddelande till';
$labels['messagesendcopy'] = 'Skicka kopia av meddelande till';
$labels['messagereply'] = 'Besvara meddelande';
$labels['messagedelete'] = 'Ta bort meddelande';
$labels['messagediscard'] = 'Avböj med felmeddelande';
$labels['messagesrules'] = 'För inkommande meddelande';
$labels['messagesactions'] = 'Utför följande åtgärd';
$labels['add'] = 'Lägg till';
$labels['del'] = 'Ta bort';
$labels['sender'] = 'Avsändare';
$labels['recipient'] = 'Mottagare';
$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/deaktivera';
$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['filterdef'] = 'Filterdefinition';
$labels['filtersetname'] = 'Filtergruppsnamn';
$labels['newfilterset'] = 'Ny filtergrupp';
$labels['active'] = 'aktiv';
$labels['none'] = 'ingen';
$labels['fromset'] = 'från grupp';
$labels['fromfile'] = 'från fil';
$labels['filterdisabled'] = 'Filter deaktiverat';
$labels['countisgreaterthan'] = 'antal är större än';
$labels['countisgreaterthanequal'] = 'antal är större än eller lika med';
$labels['countislessthan'] = 'antal är mindre än';
$labels['countislessthanequal'] = 'antal är mindre än eller lika med';
$labels['countequals'] = 'antal är lika med';
$labels['countnotequals'] = 'antal är inte lika med';
$labels['valueisgreaterthan'] = 'värde är större än';
$labels['valueisgreaterthanequal'] = 'värde är större än eller lika med';
$labels['valueislessthan'] = 'värde är mindre än';
$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['ruleexist'] = 'Ett filter med angivet namn finns redan.';
$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['activateerror'] = 'Kunde inte aktivera filter på grund av serverfel.';
$labels['deactivateerror'] = 'Kunde inte deaktivera filter på grund av serverfel.';
-$labels['activated'] = 'Filter deaktiverat.';
-$labels['deactivated'] = 'Filter aktiverat.';
+$labels['deactivated'] = 'Filter deaktiverat.';
+$labels['activated'] = 'Filter aktiverat.';
$labels['moved'] = 'Filter flyttat.';
$labels['moveerror'] = 'Kunde inte flytta filter på grund av serverfel.';
$labels['nametoolong'] = 'Filtergruppen kan inte läggas till med för långt namn';
$labels['namereserved'] = 'Reserverat namn.';
$labels['setexist'] = 'Filtergrupp finns redan.';
$labels['nodata'] = 'Minst en position måste väljas!';
diff --git a/plugins/managesieve/localization/tr_TR.inc b/plugins/managesieve/localization/tr_TR.inc
index 14dd44b19..9c3eb7e60 100644
--- a/plugins/managesieve/localization/tr_TR.inc
+++ b/plugins/managesieve/localization/tr_TR.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/tr_TR/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: ismail yenigul |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'Filtreler';
$labels['managefilters'] = 'Gelen e-posta filtrelerini yönet';
$labels['filtername'] = 'Filtre adı';
$labels['newfilter'] = 'Yeni filtre';
$labels['filteradd'] = 'Filtre ekle';
$labels['filterdel'] = 'Filtre Sil';
$labels['moveup'] = 'Yukarı taşı';
$labels['movedown'] = 'Aşağı taşı';
$labels['filterallof'] = 'Aşağıdaki kuralların hepsine uyan';
$labels['filteranyof'] = 'Aşağıdaki kuralların herhangi birine uyan';
$labels['filterany'] = 'Tüm mesajlar';
$labels['filtercontains'] = 'içeren';
$labels['filternotcontains'] = 'içermeyen';
$labels['filteris'] = 'eşittir';
$labels['filterisnot'] = 'eşit değildir';
$labels['filterexists'] = 'mevcut';
$labels['filternotexists'] = 'mevcut değil';
$labels['filtermatches'] = 'ifadeye uyan';
$labels['filternotmatches'] = 'ifadeye uymayan';
$labels['filterregex'] = 'düzenli ifadeye uyan';
$labels['filternotregex'] = 'düzenli ifadeye uymayan';
$labels['filterunder'] = 'altında';
$labels['filterover'] = 'üzerinde';
$labels['addrule'] = 'Kural ekle';
$labels['delrule'] = 'Kuralı sil';
$labels['messagemoveto'] = 'mesajı taşı';
$labels['messageredirect'] = 'mesajı yönlendir';
$labels['messagecopyto'] = 'Mesajı kopyala';
$labels['messagesendcopy'] = 'mesajın kopyasını gönder';
$labels['messagereply'] = 'mesajla birlikte cevap ver';
$labels['messagedelete'] = 'Mesajı sil';
$labels['messagediscard'] = 'mesajı yok say';
$labels['messagesrules'] = 'Gelen e-postalar için:';
$labels['messagesactions'] = '... aşağıdaki aksiyonları çalıştır:';
$labels['add'] = 'Ekle';
$labels['del'] = 'Sil';
$labels['sender'] = 'Gönderici';
$labels['recipient'] = 'Alıcı';
$labels['vacationaddresses'] = 'İlave e-posta adreslerim(virgül ile ayrılmış)';
$labels['vacationdays'] = 'Ne sıklıkla mesajlar gönderilir(gün)';
$labels['vacationreason'] = 'Mesaj gövdesi(tatil sebebi):';
$labels['vacationsubject'] = 'Mesaj konusu:';
$labels['rulestop'] = 'Kuralları değerlendirmeyi bitir';
$labels['enable'] = 'Etkinleştir/Etkisiz Kıl';
$labels['filterset'] = 'Filtre seti';
$labels['filtersets'] = 'Filtre setleri';
$labels['filtersetadd'] = 'Filtre seti ekle';
$labels['filtersetdel'] = 'Mevcut filtre setini sil';
$labels['filtersetact'] = 'Mevcut filtre setini etkinleştir';
$labels['filtersetdeact'] = 'Mevcut filtre setini etkinsizleştir';
$labels['filterdef'] = 'Filtre tanımı';
$labels['filtersetname'] = 'Filtre seti adı';
$labels['newfilterset'] = 'Yeni filtre seti';
$labels['active'] = 'etkin';
$labels['none'] = 'hiçbiri';
$labels['fromset'] = 'gönderici seti';
$labels['fromfile'] = 'gönderici dosya';
$labels['filterdisabled'] = 'Filtre iptal edildi';
$labels['countisgreaterthan'] = 'toplamı büyük';
$labels['countisgreaterthanequal'] = 'toplamı büyük veya eşit';
$labels['countislessthan'] = 'toplamı az';
$labels['countislessthanequal'] = 'toplamı daha az veya eşit';
$labels['countequals'] = 'toplamı eşit';
$labels['countnotequals'] = 'toplamı eşit degil';
$labels['valueisgreaterthan'] = 'değeri büyük';
$labels['valueisgreaterthanequal'] = 'değeri büyük veya eşit';
$labels['valueislessthan'] = 'değer az';
$labels['valueislessthanequal'] = 'değer daha az veya eşit';
$labels['valueequals'] = 'değer eşit';
$labels['valuenotequals'] = 'değer eşit değil';
$labels['setflags'] = 'bayrakları mesaja set et';
$labels['addflags'] = 'Bayrakları mesaja ekle';
$labels['removeflags'] = 'Bayrakları mesajdan sil';
$labels['flagread'] = 'Oku';
$labels['flagdeleted'] = 'Silindi';
$labels['flaganswered'] = 'Cevaplanmış';
$labels['flagflagged'] = 'İşaretli';
$labels['flagdraft'] = 'Taslak';
$labels['filtercreate'] = 'Süzgeç oluştur';
$labels['usedata'] = 'Aşağıdaki verileri süzgeçte kullan';
$labels['nextstep'] = 'Sonraki adım';
$labels['...'] = '...';
$labels['advancedopts'] = 'Gelişmiş seçenekler';
$labels['body'] = 'Gövde';
$labels['address'] = 'adres';
$labels['envelope'] = 'zarf';
$labels['modifier'] = 'değiştirici';
$labels['text'] = 'metin';
$labels['undecoded'] = 'çözülmemiş(ham)';
$labels['contenttype'] = 'içerik türü';
$labels['modtype'] = 'tip:';
$labels['allparts'] = 'hepsi';
$labels['domain'] = 'alan adı';
$labels['localpart'] = 'yerel parça';
$labels['user'] = 'kullanıcı';
$labels['detail'] = 'detay';
$labels['comparator'] = 'karşılaştırıcı';
$labels['default'] = 'öntanımlı';
$labels['octet'] = 'sıkı(oktet)';
$labels['asciicasemap'] = 'büyük küçük harf duyarsız(ascii-casemap)';
$labels['asciinumeric'] = 'sayı (ascii-numeric)';
$labels['filterunknownerror'] = 'Bilinmeyen sunucu hatası.';
$labels['filterconnerror'] = 'Sunucuya bağlanamıyor.';
$labels['filterdeleteerror'] = 'Filtre silinemedi. Sunucuda hata oluştu.';
$labels['filterdeleted'] = 'Filtre başarıyla silindi.';
$labels['filtersaved'] = 'Filter başarıyla kaydedildi.';
$labels['filtersaveerror'] = 'Filtre kaydedilemedi. Sunucuda hata oluştu.';
$labels['filterdeleteconfirm'] = 'Seçilen filtreleri gerçekten silmek istiyor musun?';
$labels['ruledeleteconfirm'] = 'Seçili kuralları silmek istediğinizden emin misiniz?';
$labels['actiondeleteconfirm'] = 'Seçili aksiyonları silmek istediğinizden emin misiniz?';
$labels['forbiddenchars'] = 'Alanda izin verilmeyen karakterler var.';
$labels['cannotbeempty'] = 'Alan boş olmaz';
$labels['ruleexist'] = 'Belirtilen isimde bir filtre zaten var.';
$labels['setactivateerror'] = 'Seçilen filtreler etkinleştirilemedi. Sunucuda hata oluştu.';
$labels['setdeactivateerror'] = 'Seçilen filtreler pasifleştirilemedi. Sunucuda hata oluştu.';
$labels['setdeleteerror'] = 'Seçilen filtreler silinemedi. Sunucuda hata oluştu.';
$labels['setactivated'] = 'Filtreler başarıyla etkinleştirilemedi.';
$labels['setdeactivated'] = 'Filtreler başarıyla pasifleştirildi.';
$labels['setdeleted'] = 'Filtre seti başarıyla silindi.';
$labels['setdeleteconfirm'] = 'Seçilen filtre setlerini silmek istediğinizden emin misiniz?';
$labels['setcreateerror'] = 'Filtre setleri oluşturulamadı. Sunucuda hata oluştu.';
$labels['setcreated'] = 'Filtre setleri başarıyla oluşturuldu.';
$labels['activateerror'] = 'Seçilen filtre(ler) etkinleştirilemedi. Sunucuda hata oluştu.';
$labels['deactivateerror'] = 'Seçilen filtre(ler) pasifleştirilemedi. Sunucuda hata oluştu.';
-$labels['activated'] = 'Filtre(ler) başarıyla iptal edildi.';
-$labels['deactivated'] = 'Filtre(ler) başarıyla etkinleştirildi.';
+$labels['deactivated'] = 'Filtre(ler) başarıyla iptal edildi.';
+$labels['activated'] = 'Filtre(ler) başarıyla etkinleştirildi.';
$labels['moved'] = 'Filtre başarıyla taşındı.';
$labels['moveerror'] = 'Seçilen filtre(ler) taşınamadı. Sunucuda hata oluştu.';
$labels['nametoolong'] = 'İsim çok uzun.';
$labels['namereserved'] = 'rezerve edilmiş isim.';
$labels['setexist'] = 'Set zaten var.';
$labels['nodata'] = 'En az bir pozisyon seçilmelidir.';
diff --git a/plugins/managesieve/localization/vi_VN.inc b/plugins/managesieve/localization/vi_VN.inc
index d358960ad..14e098dce 100644
--- a/plugins/managesieve/localization/vi_VN.inc
+++ b/plugins/managesieve/localization/vi_VN.inc
@@ -1,149 +1,149 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/vi_VN/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Kenny Tran <kennethanh@gmail.com> |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = 'Bộ lọc';
$labels['managefilters'] = 'Quản lý bộ lọc thư đến';
$labels['filtername'] = 'Lọc tên';
$labels['newfilter'] = 'Bộ lọc mới';
$labels['filteradd'] = 'Thêm bộ lọc';
$labels['filterdel'] = 'Xóa bộ lọc';
$labels['moveup'] = 'Chuyển lên';
$labels['movedown'] = 'Chuyển xuống';
$labels['filterallof'] = 'Phù hợp với tất cả các qui luật sau đây';
$labels['filteranyof'] = 'Phù hợp với bất kỳ qui luật nào sau đây';
$labels['filterany'] = 'Tất cả tin nhắn';
$labels['filtercontains'] = 'Bao gồm';
$labels['filternotcontains'] = 'Không bao gồm';
$labels['filteris'] = 'Bằng với';
$labels['filterisnot'] = 'Không bằng với';
$labels['filterexists'] = 'Tồn tại';
$labels['filternotexists'] = 'Không tồn tại';
$labels['filtermatches'] = 'Tương ứng với cách diễn đạt';
$labels['filternotmatches'] = 'Không tương ứng với cách diễn đạt';
$labels['filterregex'] = 'Tương ứng với cách diễn đạt thông thường';
$labels['filternotregex'] = 'Không phù hợp với cách diễn đạt thông thường';
$labels['filterunder'] = 'Dưới';
$labels['filterover'] = 'Hơn';
$labels['addrule'] = 'Thêm qui luật';
$labels['delrule'] = 'Xóa qui luật';
$labels['messagemoveto'] = 'Chuyển tin nhắn tới';
$labels['messageredirect'] = 'Gửi lại tin nhắn tới';
$labels['messagecopyto'] = 'Sao chép tin nhắn tới';
$labels['messagesendcopy'] = 'Gửi bản sao chép tin nhắn tới';
$labels['messagereply'] = 'Trả lời tin nhắn';
$labels['messagedelete'] = 'Xóa thư';
$labels['messagediscard'] = 'Loại bỏ với tin nhắn';
$labels['messagesrules'] = 'Với thư đến';
$labels['messagesactions'] = 'Thực hiện các hành động sau:';
$labels['add'] = 'Thêm';
$labels['del'] = 'Xoá';
$labels['sender'] = 'Người gửi';
$labels['recipient'] = 'Người nhận';
$labels['vacationaddresses'] = 'Địa chỉ email bổ sung của tôi ( phân cách bằng dấu phẩy)';
$labels['vacationdays'] = 'Số lần gửi thư (trong ngày)';
$labels['vacationreason'] = 'Nội dung chính';
$labels['vacationsubject'] = 'Tiêu đề thư';
$labels['rulestop'] = 'Ngừng đánh giá qui luật';
$labels['enable'] = 'Kích hoạt/Không kích hoạt';
$labels['filterset'] = 'Đặt các bộ lọc';
$labels['filtersets'] = 'Thiết lập bộ lọc';
$labels['filtersetadd'] = 'Thêm bộ lọc';
$labels['filtersetdel'] = 'Xóa bộ lọc hiện tại';
$labels['filtersetact'] = 'Kích hoạt bộ lọc hiện tại';
$labels['filtersetdeact'] = 'Ngừng kích hoạt bộ lọc hiện tai';
$labels['filterdef'] = 'Định nghĩa bộ lọc';
$labels['filtersetname'] = 'Tên bộ lọc';
$labels['newfilterset'] = 'Thiết lập bộ lọc mới';
$labels['active'] = 'Kích hoạt';
$labels['none'] = 'Không có';
$labels['fromset'] = 'Từ thiết lập';
$labels['fromfile'] = 'Từ hồ sơ';
$labels['filterdisabled'] = 'Bộ lọc được ngừng hoạt động';
$labels['countisgreaterthan'] = 'Đếm lớn hơn';
$labels['countisgreaterthanequal'] = 'Đếm lớn hơn hoặc bằng';
$labels['countislessthan'] = 'Đếm ít hơn';
$labels['countislessthanequal'] = 'Đếm ít hơn hoặc bằng';
$labels['countequals'] = 'Đếm bằng';
$labels['countnotequals'] = 'Đếm không bằng';
$labels['valueisgreaterthan'] = 'Giá trị lớn hơn';
$labels['valueisgreaterthanequal'] = 'Giá trị lớn hơn hoặc bằng';
$labels['valueislessthan'] = 'Giá trị nhỏ hơn';
$labels['valueislessthanequal'] = 'Giá trị nhỏ hơn hoặc bằng';
$labels['valueequals'] = 'Giá trị bằng';
$labels['valuenotequals'] = 'Giá trị không bằng';
$labels['setflags'] = 'Thiết lập đánh dấu cho thư';
$labels['addflags'] = 'Thêm đánh dấu cho thư';
$labels['removeflags'] = 'Bỏ đánh dấu khỏi thư';
$labels['flagread'] = 'Đọc';
$labels['flagdeleted'] = 'Đã được xóa';
$labels['flaganswered'] = 'Đã trả lời';
$labels['flagflagged'] = 'Đã đánh dấu';
$labels['flagdraft'] = 'Nháp';
$labels['filtercreate'] = 'Tạo bộ lọc';
$labels['usedata'] = 'Dùng dữ liệu trong bộ lọc sau:';
$labels['nextstep'] = 'Bước tiếp theo';
$labels['...'] = '…';
$labels['advancedopts'] = 'Tùy chọn tính năng cao hơn';
$labels['body'] = 'Nội dung';
$labels['address'] = 'Địa chỉ';
$labels['envelope'] = 'Phong bì';
$labels['modifier'] = 'Bổ nghĩa';
$labels['text'] = 'Văn bản';
$labels['undecoded'] = 'Chưa được giải mã (nguyên bản)';
$labels['contenttype'] = 'Kiểu mẫu nội dung';
$labels['modtype'] = 'Kiểu:';
$labels['allparts'] = 'Tất cả';
$labels['domain'] = 'Phạm vi';
$labels['localpart'] = 'Phần nội bộ';
$labels['user'] = 'Người dùng';
$labels['detail'] = 'Chi tiết';
$labels['comparator'] = 'Vật so sánh';
$labels['default'] = 'Mặc định';
$labels['octet'] = 'Khắt khe';
$labels['asciicasemap'] = 'Không phân biệt chữ hoa chữ thường';
$labels['asciinumeric'] = 'Bảng mã ASCII';
$labels['filterunknownerror'] = 'Không tìm được lỗi máy chủ';
$labels['filterconnerror'] = 'Không kết nối được với máy chủ.';
$labels['filterdeleteerror'] = 'Không thể xóa bộ lọc. Xuất hiện lỗi ở máy chủ';
$labels['filterdeleted'] = 'Xóa bộ lọc thành công';
$labels['filtersaved'] = 'Lưu bộ lọc thành công';
$labels['filtersaveerror'] = 'Không thể lưu bộ lọc. Xuất hiện lỗi ở máy chủ';
$labels['filterdeleteconfirm'] = 'Bạn có thực sự muốn xóa bộ lọc được chọn?';
$labels['ruledeleteconfirm'] = 'Bạn có chắc chắn muốn xóa qui luật được chọn?';
$labels['actiondeleteconfirm'] = 'Bạn có chắc chắn muốn xóa hành động được chọn?';
$labels['forbiddenchars'] = 'Ký tự bị cấm trong ô';
$labels['cannotbeempty'] = 'Ô không thể bị bỏ trống';
$labels['ruleexist'] = 'Đã tồn tại bộ lọc với tên cụ thế';
$labels['setactivateerror'] = 'Không thể kích hoạt bộ lọc được lựa chọn. Xuất hiện lỗi ở máy chủ';
$labels['setdeactivateerror'] = 'Không thể không kích hoạt bộ lọc được lựa chọn. Xuất hiện lỗi ở máy chủ';
$labels['setdeleteerror'] = 'Không thể xóa bộ lọc được lựa chọn. Forbidden characters in field.';
$labels['setactivated'] = 'Bộ lọc được khởi động thành công';
$labels['setdeactivated'] = 'Ngừng kích hoạt bộ lọc thành công';
$labels['setdeleted'] = 'Xóa bộ lọc thành công';
$labels['setdeleteconfirm'] = 'Bạn có chắc bạn muốn xóa thiết lập bộ lọc được chọn?';
$labels['setcreateerror'] = 'Không thể tạo thiết lập bộ lọc. Có lỗi xuất hiện ở máy chủ';
$labels['setcreated'] = 'Thiết lập bộ lọc được tạo thành công';
$labels['activateerror'] = 'Không thể khởi động bộ lọc được chọn. Có lỗi xuất hiện ở máy chủ';
$labels['deactivateerror'] = 'Không thể tắt bộ lọc đã chọn. Có lỗi xuất hiện ở máy chủ';
-$labels['activated'] = 'Bộ lọc được tắt thành công';
-$labels['deactivated'] = 'Bộ lọc được khởi động thành công';
+$labels['deactivated'] = 'Bộ lọc được tắt thành công';
+$labels['activated'] = 'Bộ lọc được khởi động thành công';
$labels['moved'] = 'Bộ lọc được chuyển đi thành công';
$labels['moveerror'] = 'Không thể chuyển bộc lọc đã chọn. Có lỗi xuất hiện ở máy chủ';
$labels['nametoolong'] = 'Tên quá dài';
$labels['namereserved'] = 'Tên đã được bảo vệ';
$labels['setexist'] = 'Thiết lập đã tồn tại';
$labels['nodata'] = 'Ít nhất một vị trí phải được chọn';
diff --git a/plugins/managesieve/localization/zh_CN.inc b/plugins/managesieve/localization/zh_CN.inc
index 8cbe48778..e44fe07a8 100644
--- a/plugins/managesieve/localization/zh_CN.inc
+++ b/plugins/managesieve/localization/zh_CN.inc
@@ -1,147 +1,147 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/zh_CN/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Christopher Meng <cickumqt@gmail.com> |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = '过滤器';
$labels['managefilters'] = '管理邮件过滤规则';
$labels['filtername'] = '过滤规则名称';
$labels['newfilter'] = '新建过滤规则';
$labels['filteradd'] = '添加过滤规则';
$labels['filterdel'] = '删除过滤规则';
$labels['moveup'] = '上移';
$labels['movedown'] = '下移';
$labels['filterallof'] = '匹配所有规则';
$labels['filteranyof'] = '匹配任意一条规则';
$labels['filterany'] = '所有邮件';
$labels['filtercontains'] = '包含';
$labels['filternotcontains'] = '不包含';
$labels['filteris'] = '等于';
$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'] = '舍弃邮件并回复以下信息';
$labels['messagesrules'] = '对收取的邮件应用规则:';
$labels['messagesactions'] = '...执行以下动作:';
$labels['add'] = '添加';
$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'] = '内容不能为空';
$labels['ruleexist'] = '指定过滤器名称已存在。';
$labels['setactivateerror'] = '无法启用指定过滤器,服务器错误。';
$labels['setdeactivateerror'] = '无法停用指定过滤器,服务器错误。';
$labels['setdeleteerror'] = '无法删除指定过滤器,服务器错误。';
$labels['setactivated'] = '过滤器成功启用。';
$labels['setdeactivated'] = '过滤器成功停用。';
$labels['setdeleted'] = '过滤器成功删除。';
$labels['setdeleteconfirm'] = '你确定要删除指定过滤器?';
$labels['setcreateerror'] = '无法创建过滤器,服务器错误。';
$labels['setcreated'] = '过滤器成功创建。';
$labels['activateerror'] = '无法启用选中的过滤器,因为服务器发生错误。';
$labels['deactivateerror'] = '无法禁用选中的过滤器,因为服务器发生错误。';
-$labels['activated'] = '禁用过滤器成功。';
-$labels['deactivated'] = '启用过滤器成功。';
+$labels['deactivated'] = '禁用过滤器成功。';
+$labels['activated'] = '启用过滤器成功。';
$labels['moved'] = '过滤器移动成功。';
$labels['moveerror'] = '无法移动选中的过滤器,因为服务器发生错误。';
$labels['nametoolong'] = '名称太长。';
$labels['setexist'] = '设置已存在。';
diff --git a/plugins/managesieve/localization/zh_TW.inc b/plugins/managesieve/localization/zh_TW.inc
index db2292b9a..4899d162b 100644
--- a/plugins/managesieve/localization/zh_TW.inc
+++ b/plugins/managesieve/localization/zh_TW.inc
@@ -1,134 +1,134 @@
<?php
/*
+-----------------------------------------------------------------------+
| localization/zh_TW/labels.inc |
| |
| Language file of the Roundcube Webmail client |
| Copyright (C) 2012, The Roundcube Dev Team |
| Licensed under the GNU General Public License |
| |
+-----------------------------------------------------------------------+
| Author: Nansen |
+-----------------------------------------------------------------------+
*/
$labels = array();
$labels['filters'] = '篩選器';
$labels['managefilters'] = '設定篩選器';
$labels['filtername'] = '篩選器名稱';
$labels['newfilter'] = '建立新篩選器';
$labels['filteradd'] = '增加篩選器';
$labels['filterdel'] = '刪除篩選器';
$labels['moveup'] = '上移';
$labels['movedown'] = '下移';
$labels['filterallof'] = '符合所有規則';
$labels['filteranyof'] = '符合任一條規則';
$labels['filterany'] = '所有信件';
$labels['filtercontains'] = '包含';
$labels['filternotcontains'] = '不包含';
$labels['filteris'] = '等於';
$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'] = '刪除信件並以下列內容回覆';
$labels['messagesrules'] = '對新收到的信件:';
$labels['messagesactions'] = '執行下列動作:';
$labels['add'] = '新增';
$labels['del'] = '刪除';
$labels['sender'] = '寄件者';
$labels['recipient'] = '收件者';
$labels['vacationaddresses'] = '其他收件者(用半形逗號隔開):';
$labels['vacationdays'] = '多久回覆一次(單位:天):';
$labels['vacationreason'] = '信件內容(休假原因):';
$labels['vacationsubject'] = '訊息主旨:';
$labels['rulestop'] = '停止評估規則';
$labels['enable'] = '啟用/停用';
$labels['filterset'] = '篩選器集合';
$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['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['activateerror'] = '無法啟用選擇的篩選器。伺服器錯誤';
$labels['deactivateerror'] = '無法停用選擇的篩選器。伺服器錯誤';
-$labels['activated'] = '篩選器已停用';
-$labels['deactivated'] = '篩選器已啟用';
+$labels['deactivated'] = '篩選器已停用';
+$labels['activated'] = '篩選器已啟用';
$labels['moved'] = '篩選器已移動';
$labels['moveerror'] = '無法移動選擇的篩選器。伺服器錯誤';
$labels['nametoolong'] = '無法建立篩選器集合。 名稱太長';
diff --git a/program/include/html.php b/program/include/html.php
index 234985241..880873ddc 100644
--- a/program/include/html.php
+++ b/program/include/html.php
@@ -1,848 +1,848 @@
<?php
/*
+-----------------------------------------------------------------------+
| program/include/html.php |
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2005-2011, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
| PURPOSE: |
| Helper class to create valid XHTML code |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
*/
/**
* Class for HTML code creation
*
* @package HTML
*/
class html
{
protected $tagname;
protected $attrib = array();
protected $allowed = array();
protected $content;
public static $doctype = 'xhtml';
public static $lc_tags = true;
public static $common_attrib = array('id','class','style','title','align');
public static $containers = array('iframe','div','span','p','h1','h2','h3','form','textarea','table','thead','tbody','tr','th','td','style','script');
/**
* Constructor
*
* @param array $attrib Hash array with tag attributes
*/
public function __construct($attrib = array())
{
if (is_array($attrib)) {
$this->attrib = $attrib;
}
}
/**
* Return the tag code
*
* @return string The finally composed HTML tag
*/
public function show()
{
return self::tag($this->tagname, $this->attrib, $this->content, array_merge(self::$common_attrib, $this->allowed));
}
/****** STATIC METHODS *******/
/**
* Generic method to create a HTML tag
*
* @param string $tagname Tag name
* @param array $attrib Tag attributes as key/value pairs
* @param string $content Optinal Tag content (creates a container tag)
* @param array $allowed_attrib List with allowed attributes, omit to allow all
* @return string The XHTML tag
*/
public static function tag($tagname, $attrib = array(), $content = null, $allowed_attrib = null)
{
if (is_string($attrib))
$attrib = array('class' => $attrib);
$inline_tags = array('a','span','img');
$suffix = $attrib['nl'] || ($content && $attrib['nl'] !== false && !in_array($tagname, $inline_tags)) ? "\n" : '';
$tagname = self::$lc_tags ? strtolower($tagname) : $tagname;
if (isset($content) || in_array($tagname, self::$containers)) {
$suffix = $attrib['noclose'] ? $suffix : '</' . $tagname . '>' . $suffix;
unset($attrib['noclose'], $attrib['nl']);
return '<' . $tagname . self::attrib_string($attrib, $allowed_attrib) . '>' . $content . $suffix;
}
else {
return '<' . $tagname . self::attrib_string($attrib, $allowed_attrib) . '>' . $suffix;
}
}
/**
*
*/
public static function doctype($type)
{
$doctypes = array(
'html5' => '<!DOCTYPE html>',
'xhtml' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
'xhtml-trans' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
'xhtml-strict' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
);
if ($doctypes[$type]) {
self::$doctype = preg_replace('/-\w+$/', '', $type);
return $doctypes[$type];
}
return '';
}
/**
* Derrived method for <div> containers
*
* @param mixed $attr Hash array with tag attributes or string with class name
* @param string $cont Div content
* @return string HTML code
* @see html::tag()
*/
public static function div($attr = null, $cont = null)
{
if (is_string($attr)) {
$attr = array('class' => $attr);
}
return self::tag('div', $attr, $cont, array_merge(self::$common_attrib, array('onclick')));
}
/**
* Derrived method for <p> blocks
*
* @param mixed $attr Hash array with tag attributes or string with class name
* @param string $cont Paragraph content
* @return string HTML code
* @see html::tag()
*/
public static function p($attr = null, $cont = null)
{
if (is_string($attr)) {
$attr = array('class' => $attr);
}
return self::tag('p', $attr, $cont, self::$common_attrib);
}
/**
* Derrived method to create <img />
*
* @param mixed $attr Hash array with tag attributes or string with image source (src)
* @return string HTML code
* @see html::tag()
*/
public static function img($attr = null)
{
if (is_string($attr)) {
$attr = array('src' => $attr);
}
return self::tag('img', $attr + array('alt' => ''), null, array_merge(self::$common_attrib,
array('src','alt','width','height','border','usemap','onclick')));
}
/**
* Derrived method for link tags
*
* @param mixed $attr Hash array with tag attributes or string with link location (href)
* @param string $cont Link content
* @return string HTML code
* @see html::tag()
*/
public static function a($attr, $cont)
{
if (is_string($attr)) {
$attr = array('href' => $attr);
}
return self::tag('a', $attr, $cont, array_merge(self::$common_attrib,
array('href','target','name','rel','onclick','onmouseover','onmouseout','onmousedown','onmouseup')));
}
/**
* Derrived method for inline span tags
*
* @param mixed $attr Hash array with tag attributes or string with class name
* @param string $cont Tag content
* @return string HTML code
* @see html::tag()
*/
public static function span($attr, $cont)
{
if (is_string($attr)) {
$attr = array('class' => $attr);
}
return self::tag('span', $attr, $cont, self::$common_attrib);
}
/**
* Derrived method for form element labels
*
* @param mixed $attr Hash array with tag attributes or string with 'for' attrib
* @param string $cont Tag content
* @return string HTML code
* @see html::tag()
*/
public static function label($attr, $cont)
{
if (is_string($attr)) {
$attr = array('for' => $attr);
}
return self::tag('label', $attr, $cont, array_merge(self::$common_attrib, array('for')));
}
/**
* Derrived method to create <iframe></iframe>
*
* @param mixed $attr Hash array with tag attributes or string with frame source (src)
* @return string HTML code
* @see html::tag()
*/
public static function iframe($attr = null, $cont = null)
{
if (is_string($attr)) {
$attr = array('src' => $attr);
}
return self::tag('iframe', $attr, $cont, array_merge(self::$common_attrib,
array('src','name','width','height','border','frameborder')));
}
/**
* Derrived method to create <script> tags
*
* @param mixed $attr Hash array with tag attributes or string with script source (src)
* @param string $cont Javascript code to be placed as tag content
* @return string HTML code
* @see html::tag()
*/
public static function script($attr, $cont = null)
{
if (is_string($attr)) {
$attr = array('src' => $attr);
}
if ($cont) {
if (self::$doctype == 'xhtml')
$cont = "\n/* <![CDATA[ */\n" . $cont . "\n/* ]]> */\n";
else
$cont = "\n" . $cont . "\n";
}
return self::tag('script', $attr + array('type' => 'text/javascript', 'nl' => true),
$cont, array_merge(self::$common_attrib, array('src','type','charset')));
}
/**
* Derrived method for line breaks
*
* @return string HTML code
* @see html::tag()
*/
public static function br()
{
return self::tag('br');
}
/**
* Create string with attributes
*
* @param array $attrib Associative arry with tag attributes
* @param array $allowed List of allowed attributes
* @return string Valid attribute string
*/
public static function attrib_string($attrib = array(), $allowed = null)
{
if (empty($attrib)) {
return '';
}
$allowed_f = array_flip((array)$allowed);
$attrib_arr = array();
foreach ($attrib as $key => $value) {
// skip size if not numeric
if ($key == 'size' && !is_numeric($value)) {
continue;
}
// ignore "internal" or not allowed attributes
if ($key == 'nl' || ($allowed && !isset($allowed_f[$key])) || $value === null) {
continue;
}
// skip empty eventhandlers
if (preg_match('/^on[a-z]+/', $key) && !$value) {
continue;
}
// attributes with no value
if (in_array($key, array('checked', 'multiple', 'disabled', 'selected'))) {
if ($value) {
$attrib_arr[] = $key . '="' . $key . '"';
}
}
else {
$attrib_arr[] = $key . '="' . self::quote($value) . '"';
}
}
return count($attrib_arr) ? ' '.implode(' ', $attrib_arr) : '';
}
/**
* Convert a HTML attribute string attributes to an associative array (name => value)
*
* @param string Input string
* @return array Key-value pairs of parsed attributes
*/
public static function parse_attrib_string($str)
{
$attrib = array();
$regexp = '/\s*([-_a-z]+)=(["\'])??(?(2)([^\2]*)\2|(\S+?))/Ui';
preg_match_all($regexp, stripslashes($str), $regs, PREG_SET_ORDER);
// convert attributes to an associative array (name => value)
if ($regs) {
foreach ($regs as $attr) {
$attrib[strtolower($attr[1])] = html_entity_decode($attr[3] . $attr[4]);
}
}
return $attrib;
}
/**
* Replacing specials characters in html attribute value
*
* @param string $str Input string
*
* @return string The quoted string
*/
public static function quote($str)
{
- return htmlspecialchars($str, ENT_COMPAT, RCMAIL_CHARSET);
+ return @htmlspecialchars($str, ENT_COMPAT, RCMAIL_CHARSET);
}
}
/**
* Class to create an HTML input field
*
* @package HTML
*/
class html_inputfield extends html
{
protected $tagname = 'input';
protected $type = 'text';
protected $allowed = array(
'type','name','value','size','tabindex','autocapitalize',
'autocomplete','checked','onchange','onclick','disabled','readonly',
'spellcheck','results','maxlength','src','multiple','placeholder',
);
/**
* Object constructor
*
* @param array $attrib Associative array with tag attributes
*/
public function __construct($attrib = array())
{
if (is_array($attrib)) {
$this->attrib = $attrib;
}
if ($attrib['type']) {
$this->type = $attrib['type'];
}
}
/**
* Compose input tag
*
* @param string $value Field value
* @param array $attrib Additional attributes to override
* @return string HTML output
*/
public function show($value = null, $attrib = null)
{
// overwrite object attributes
if (is_array($attrib)) {
$this->attrib = array_merge($this->attrib, $attrib);
}
// set value attribute
if ($value !== null) {
$this->attrib['value'] = $value;
}
// set type
$this->attrib['type'] = $this->type;
return parent::show();
}
}
/**
* Class to create an HTML password field
*
* @package HTML
*/
class html_passwordfield extends html_inputfield
{
protected $type = 'password';
}
/**
* Class to create an hidden HTML input field
*
* @package HTML
*/
class html_hiddenfield extends html
{
protected $tagname = 'input';
protected $type = 'hidden';
protected $fields_arr = array();
protected $allowed = array('type','name','value','onchange','disabled','readonly');
/**
* Constructor
*
* @param array $attrib Named tag attributes
*/
public function __construct($attrib = null)
{
if (is_array($attrib)) {
$this->add($attrib);
}
}
/**
* Add a hidden field to this instance
*
* @param array $attrib Named tag attributes
*/
public function add($attrib)
{
$this->fields_arr[] = $attrib;
}
/**
* Create HTML code for the hidden fields
*
* @return string Final HTML code
*/
public function show()
{
$out = '';
foreach ($this->fields_arr as $attrib) {
$out .= self::tag($this->tagname, array('type' => $this->type) + $attrib);
}
return $out;
}
}
/**
* Class to create HTML radio buttons
*
* @package HTML
*/
class html_radiobutton extends html_inputfield
{
protected $type = 'radio';
/**
* Get HTML code for this object
*
* @param string $value Value of the checked field
* @param array $attrib Additional attributes to override
* @return string HTML output
*/
public function show($value = '', $attrib = null)
{
// overwrite object attributes
if (is_array($attrib)) {
$this->attrib = array_merge($this->attrib, $attrib);
}
// set value attribute
$this->attrib['checked'] = ((string)$value == (string)$this->attrib['value']);
return parent::show();
}
}
/**
* Class to create HTML checkboxes
*
* @package HTML
*/
class html_checkbox extends html_inputfield
{
protected $type = 'checkbox';
/**
* Get HTML code for this object
*
* @param string $value Value of the checked field
* @param array $attrib Additional attributes to override
* @return string HTML output
*/
public function show($value = '', $attrib = null)
{
// overwrite object attributes
if (is_array($attrib)) {
$this->attrib = array_merge($this->attrib, $attrib);
}
// set value attribute
$this->attrib['checked'] = ((string)$value == (string)$this->attrib['value']);
return parent::show();
}
}
/**
* Class to create an HTML textarea
*
* @package HTML
*/
class html_textarea extends html
{
protected $tagname = 'textarea';
protected $allowed = array('name','rows','cols','wrap','tabindex',
'onchange','disabled','readonly','spellcheck');
/**
* Get HTML code for this object
*
* @param string $value Textbox value
* @param array $attrib Additional attributes to override
* @return string HTML output
*/
public function show($value = '', $attrib = null)
{
// overwrite object attributes
if (is_array($attrib)) {
$this->attrib = array_merge($this->attrib, $attrib);
}
// take value attribute as content
if (empty($value) && !empty($this->attrib['value'])) {
$value = $this->attrib['value'];
}
// make shure we don't print the value attribute
if (isset($this->attrib['value'])) {
unset($this->attrib['value']);
}
if (!empty($value) && empty($this->attrib['is_escaped'])) {
$value = self::quote($value);
}
return self::tag($this->tagname, $this->attrib, $value,
array_merge(self::$common_attrib, $this->allowed));
}
}
/**
* Builder for HTML drop-down menus
* Syntax:<pre>
* // create instance. arguments are used to set attributes of select-tag
* $select = new html_select(array('name' => 'fieldname'));
*
* // add one option
* $select->add('Switzerland', 'CH');
*
* // add multiple options
* $select->add(array('Switzerland','Germany'), array('CH','DE'));
*
* // generate pulldown with selection 'Switzerland' and return html-code
* // as second argument the same attributes available to instanciate can be used
* print $select->show('CH');
* </pre>
*
* @package HTML
*/
class html_select extends html
{
protected $tagname = 'select';
protected $options = array();
protected $allowed = array('name','size','tabindex','autocomplete',
'multiple','onchange','disabled','rel');
/**
* Add a new option to this drop-down
*
* @param mixed $names Option name or array with option names
* @param mixed $values Option value or array with option values
*/
public function add($names, $values = null)
{
if (is_array($names)) {
foreach ($names as $i => $text) {
$this->options[] = array('text' => $text, 'value' => $values[$i]);
}
}
else {
$this->options[] = array('text' => $names, 'value' => $values);
}
}
/**
* Get HTML code for this object
*
* @param string $select Value of the selection option
* @param array $attrib Additional attributes to override
* @return string HTML output
*/
public function show($select = array(), $attrib = null)
{
// overwrite object attributes
if (is_array($attrib)) {
$this->attrib = array_merge($this->attrib, $attrib);
}
$this->content = "\n";
$select = (array)$select;
foreach ($this->options as $option) {
$attr = array(
'value' => $option['value'],
'selected' => (in_array($option['value'], $select, true) ||
in_array($option['text'], $select, true)) ? 1 : null);
$option_content = $option['text'];
if (empty($this->attrib['is_escaped'])) {
$option_content = self::quote($option_content);
}
$this->content .= self::tag('option', $attr, $option_content);
}
return parent::show();
}
}
/**
* Class to build an HTML table
*
* @package HTML
*/
class html_table extends html
{
protected $tagname = 'table';
protected $allowed = array('id','class','style','width','summary',
'cellpadding','cellspacing','border');
private $header = array();
private $rows = array();
private $rowindex = 0;
private $colindex = 0;
/**
* Constructor
*
* @param array $attrib Named tag attributes
*/
public function __construct($attrib = array())
{
$default_attrib = self::$doctype == 'xhtml' ? array('summary' => '', 'border' => 0) : array();
$this->attrib = array_merge($attrib, $default_attrib);
}
/**
* Add a table cell
*
* @param array $attr Cell attributes
* @param string $cont Cell content
*/
public function add($attr, $cont)
{
if (is_string($attr)) {
$attr = array('class' => $attr);
}
$cell = new stdClass;
$cell->attrib = $attr;
$cell->content = $cont;
$this->rows[$this->rowindex]->cells[$this->colindex] = $cell;
$this->colindex += max(1, intval($attr['colspan']));
if ($this->attrib['cols'] && $this->colindex >= $this->attrib['cols']) {
$this->add_row();
}
}
/**
* Add a table header cell
*
* @param array $attr Cell attributes
* @param string $cont Cell content
*/
public function add_header($attr, $cont)
{
if (is_string($attr)) {
$attr = array('class' => $attr);
}
$cell = new stdClass;
$cell->attrib = $attr;
$cell->content = $cont;
$this->header[] = $cell;
}
/**
* Remove a column from a table
* Useful for plugins making alterations
*
* @param string $class
*/
public function remove_column($class)
{
// Remove the header
foreach ($this->header as $index=>$header){
if ($header->attrib['class'] == $class){
unset($this->header[$index]);
break;
}
}
// Remove cells from rows
foreach ($this->rows as $i=>$row){
foreach ($row->cells as $j=>$cell){
if ($cell->attrib['class'] == $class){
unset($this->rows[$i]->cells[$j]);
break;
}
}
}
}
/**
* Jump to next row
*
* @param array $attr Row attributes
*/
public function add_row($attr = array())
{
$this->rowindex++;
$this->colindex = 0;
$this->rows[$this->rowindex] = new stdClass;
$this->rows[$this->rowindex]->attrib = $attr;
$this->rows[$this->rowindex]->cells = array();
}
/**
* Set row attributes
*
* @param array $attr Row attributes
* @param int $index Optional row index (default current row index)
*/
public function set_row_attribs($attr = array(), $index = null)
{
if (is_string($attr)) {
$attr = array('class' => $attr);
}
if ($index === null) {
$index = $this->rowindex;
}
$this->rows[$index]->attrib = $attr;
}
/**
* Get row attributes
*
* @param int $index Row index
*
* @return array Row attributes
*/
public function get_row_attribs($index = null)
{
if ($index === null) {
$index = $this->rowindex;
}
return $this->rows[$index] ? $this->rows[$index]->attrib : null;
}
/**
* Build HTML output of the table data
*
* @param array $attrib Table attributes
* @return string The final table HTML code
*/
public function show($attrib = null)
{
if (is_array($attrib))
$this->attrib = array_merge($this->attrib, $attrib);
$thead = $tbody = "";
// include <thead>
if (!empty($this->header)) {
$rowcontent = '';
foreach ($this->header as $c => $col) {
$rowcontent .= self::tag('td', $col->attrib, $col->content);
}
$thead = self::tag('thead', null, self::tag('tr', null, $rowcontent, parent::$common_attrib));
}
foreach ($this->rows as $r => $row) {
$rowcontent = '';
foreach ($row->cells as $c => $col) {
$rowcontent .= self::tag('td', $col->attrib, $col->content);
}
if ($r < $this->rowindex || count($row->cells)) {
$tbody .= self::tag('tr', $row->attrib, $rowcontent, parent::$common_attrib);
}
}
if ($this->attrib['rowsonly']) {
return $tbody;
}
// add <tbody>
$this->content = $thead . self::tag('tbody', null, $tbody);
unset($this->attrib['cols'], $this->attrib['rowsonly']);
return parent::show();
}
/**
* Count number of rows
*
* @return The number of rows
*/
public function size()
{
return count($this->rows);
}
/**
* Remove table body (all rows)
*/
public function remove_body()
{
$this->rows = array();
$this->rowindex = 0;
}
}
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 3b6c6cf15..7a49095f7 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -1,2126 +1,2115 @@
<?php
/*
+-----------------------------------------------------------------------+
| program/include/rcmail.php |
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2008-2012, The Roundcube Dev Team |
| Copyright (C) 2011-2012, Kolab Systems AG |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
| PURPOSE: |
| Application class providing core functions and holding |
| instances of all 'global' objects like db- and imap-connections |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
| Author: Aleksander Machniak <alec@alec.pl> |
+-----------------------------------------------------------------------+
*/
/**
* Application class of Roundcube Webmail
* implemented as singleton
*
* @package Core
*/
class rcmail extends rcube
{
/**
* Main tasks.
*
* @var array
*/
static public $main_tasks = array('mail','settings','addressbook','login','logout','utils','dummy');
/**
* Current task.
*
* @var string
*/
public $task;
/**
* Current action.
*
* @var string
*/
public $action = '';
public $comm_path = './';
private $address_books = array();
private $action_map = array();
const JS_OBJECT_NAME = 'rcmail';
const ERROR_STORAGE = -2;
const ERROR_INVALID_REQUEST = 1;
const ERROR_INVALID_HOST = 2;
const ERROR_COOKIES_DISABLED = 3;
/**
* This implements the 'singleton' design pattern
*
* @return rcmail The one and only instance
*/
static function get_instance()
{
if (!self::$instance || !is_a(self::$instance, 'rcmail')) {
self::$instance = new rcmail();
self::$instance->startup(); // init AFTER object was linked with self::$instance
}
return self::$instance;
}
/**
* Initial startup function
* to register session, create database and imap connections
*/
protected function startup()
{
$this->init(self::INIT_WITH_DB | self::INIT_WITH_PLUGINS);
// start session
$this->session_init();
// create user object
$this->set_user(new rcube_user($_SESSION['user_id']));
// configure session (after user config merge!)
$this->session_configure();
// set task and action properties
$this->set_task(rcube_utils::get_input_value('_task', rcube_utils::INPUT_GPC));
$this->action = asciiwords(rcube_utils::get_input_value('_action', rcube_utils::INPUT_GPC));
// reset some session parameters when changing task
if ($this->task != 'utils') {
if ($this->session && $_SESSION['task'] != $this->task)
$this->session->remove('page');
// set current task to session
$_SESSION['task'] = $this->task;
}
// init output class
if (!empty($_REQUEST['_remote']))
$GLOBALS['OUTPUT'] = $this->json_init();
else
$GLOBALS['OUTPUT'] = $this->load_gui(!empty($_REQUEST['_framed']));
// load plugins
$this->plugins->init($this, $this->task);
$this->plugins->load_plugins((array)$this->config->get('plugins', array()), array('filesystem_attachments', 'jqueryui'));
}
/**
* Setter for application task
*
* @param string Task to set
*/
public function set_task($task)
{
$task = asciiwords($task);
if ($this->user && $this->user->ID)
$task = !$task ? 'mail' : $task;
else
$task = 'login';
$this->task = $task;
$this->comm_path = $this->url(array('task' => $this->task));
if ($this->output)
$this->output->set_env('task', $this->task);
}
/**
* Setter for system user object
*
* @param rcube_user Current user instance
*/
public function set_user($user)
{
if (is_object($user)) {
$this->user = $user;
// overwrite config with user preferences
$this->config->set_user_prefs((array)$this->user->get_prefs());
}
$lang = $this->language_prop($this->config->get('language', $_SESSION['language']));
$_SESSION['language'] = $this->user->language = $lang;
// set localization
setlocale(LC_ALL, $lang . '.utf8', $lang . '.UTF-8', 'en_US.utf8', 'en_US.UTF-8');
// workaround for http://bugs.php.net/bug.php?id=18556
if (in_array($lang, array('tr_TR', 'ku', 'az_AZ'))) {
setlocale(LC_CTYPE, 'en_US.utf8', 'en_US.UTF-8');
}
}
/**
* Return instance of the internal address book class
*
* @param string Address book identifier (-1 for default addressbook)
* @param boolean True if the address book needs to be writeable
*
* @return rcube_contacts Address book object
*/
public function get_address_book($id, $writeable = false)
{
$contacts = null;
$ldap_config = (array)$this->config->get('ldap_public');
// 'sql' is the alias for '0' used by autocomplete
if ($id == 'sql')
$id = '0';
else if ($id == -1) {
$id = $this->config->get('default_addressbook');
$default = true;
}
// use existing instance
if (isset($this->address_books[$id]) && ($this->address_books[$id] instanceof rcube_addressbook)) {
$contacts = $this->address_books[$id];
}
else if ($id && $ldap_config[$id]) {
$contacts = new rcube_ldap($ldap_config[$id], $this->config->get('ldap_debug'), $this->config->mail_domain($_SESSION['storage_host']));
}
else if ($id === '0') {
$contacts = new rcube_contacts($this->db, $this->get_user_id());
}
else {
$plugin = $this->plugins->exec_hook('addressbook_get', array('id' => $id, 'writeable' => $writeable));
// plugin returned instance of a rcube_addressbook
if ($plugin['instance'] instanceof rcube_addressbook) {
$contacts = $plugin['instance'];
}
}
// Get first addressbook from the list if configured default doesn't exist
// This can happen when user deleted the addressbook (e.g. Kolab folder)
if (!$contacts && (!$id || $default)) {
$source = reset($this->get_address_sources($writeable));
if (!empty($source)) {
$contacts = $this->get_address_book($source['id']);
if ($contacts)
$id = $source['id'];
}
}
if (!$contacts) {
self::raise_error(array(
'code' => 700, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Addressbook source ($id) not found!"),
true, true);
}
if ($writeable && $contacts->readonly) {
return null;
}
// set configured sort order
if ($sort_col = $this->config->get('addressbook_sort_col'))
$contacts->set_sort_order($sort_col);
// add to the 'books' array for shutdown function
$this->address_books[$id] = $contacts;
return $contacts;
}
/**
* Return address books list
*
* @param boolean True if the address book needs to be writeable
*
* @return array Address books array
*/
public function get_address_sources($writeable = false)
{
$abook_type = strtolower($this->config->get('address_book_type'));
$ldap_config = $this->config->get('ldap_public');
$autocomplete = (array) $this->config->get('autocomplete_addressbooks');
$list = array();
// We are using the DB address book
if ($abook_type != 'ldap') {
if (!isset($this->address_books['0']))
$this->address_books['0'] = new rcube_contacts($this->db, $this->get_user_id());
$list['0'] = array(
'id' => '0',
'name' => $this->gettext('personaladrbook'),
'groups' => $this->address_books['0']->groups,
'readonly' => $this->address_books['0']->readonly,
'autocomplete' => in_array('sql', $autocomplete),
'undelete' => $this->address_books['0']->undelete && $this->config->get('undo_timeout'),
);
}
if ($ldap_config) {
$ldap_config = (array) $ldap_config;
foreach ($ldap_config as $id => $prop) {
// handle misconfiguration
if (empty($prop) || !is_array($prop)) {
continue;
}
$list[$id] = array(
'id' => $id,
'name' => html::quote($prop['name']),
'groups' => is_array($prop['groups']),
'readonly' => !$prop['writable'],
'hidden' => $prop['hidden'],
'autocomplete' => in_array($id, $autocomplete)
);
}
}
$plugin = $this->plugins->exec_hook('addressbooks_list', array('sources' => $list));
$list = $plugin['sources'];
foreach ($list as $idx => $item) {
// register source for shutdown function
if (!is_object($this->address_books[$item['id']]))
$this->address_books[$item['id']] = $item;
// remove from list if not writeable as requested
if ($writeable && $item['readonly'])
unset($list[$idx]);
}
return $list;
}
/**
* Init output object for GUI and add common scripts.
* This will instantiate a rcube_output_html object and set
* environment vars according to the current session and configuration
*
* @param boolean True if this request is loaded in a (i)frame
* @return rcube_output_html Reference to HTML output object
*/
public function load_gui($framed = false)
{
// init output page
if (!($this->output instanceof rcube_output_html))
$this->output = new rcube_output_html($this->task, $framed);
// set keep-alive/check-recent interval
if ($this->session && ($keep_alive = $this->session->get_keep_alive())) {
$this->output->set_env('keep_alive', $keep_alive);
}
if ($framed) {
$this->comm_path .= '&_framed=1';
$this->output->set_env('framed', true);
}
$this->output->set_env('task', $this->task);
$this->output->set_env('action', $this->action);
$this->output->set_env('comm_path', $this->comm_path);
$this->output->set_charset(RCMAIL_CHARSET);
// add some basic labels to client
$this->output->add_label('loading', 'servererror', 'requesttimedout');
return $this->output;
}
/**
* Create an output object for JSON responses
*
* @return rcube_output_json Reference to JSON output object
*/
public function json_init()
{
if (!($this->output instanceof rcube_output_json))
$this->output = new rcube_output_json($this->task);
return $this->output;
}
/**
* Create session object and start the session.
*/
public function session_init()
{
parent::session_init();
// set initial session vars
if (!$_SESSION['user_id'])
$_SESSION['temp'] = true;
// restore skin selection after logout
if ($_SESSION['temp'] && !empty($_SESSION['skin']))
$this->config->set('skin', $_SESSION['skin']);
}
/**
* Perfom login to the mail server and to the webmail service.
* This will also create a new user entry if auto_create_user is configured.
*
* @param string Mail storage (IMAP) user name
* @param string Mail storage (IMAP) password
* @param string Mail storage (IMAP) host
* @param bool Enables cookie check
*
* @return boolean True on success, False on failure
*/
function login($username, $pass, $host = null, $cookiecheck = false)
{
$this->login_error = null;
if (empty($username)) {
return false;
}
if ($cookiecheck && empty($_COOKIE)) {
$this->login_error = self::ERROR_COOKIES_DISABLED;
return false;
}
$config = $this->config->all();
if (!$host)
$host = $config['default_host'];
// Validate that selected host is in the list of configured hosts
if (is_array($config['default_host'])) {
$allowed = false;
foreach ($config['default_host'] as $key => $host_allowed) {
if (!is_numeric($key))
$host_allowed = $key;
if ($host == $host_allowed) {
$allowed = true;
break;
}
}
if (!$allowed) {
$host = null;
}
}
else if (!empty($config['default_host']) && $host != rcube_utils::parse_host($config['default_host'])) {
$host = null;
}
if (!$host) {
$this->login_error = self::ERROR_INVALID_HOST;
return false;
}
// parse $host URL
$a_host = parse_url($host);
if ($a_host['host']) {
$host = $a_host['host'];
$ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? $a_host['scheme'] : null;
if (!empty($a_host['port']))
$port = $a_host['port'];
else if ($ssl && $ssl != 'tls' && (!$config['default_port'] || $config['default_port'] == 143))
$port = 993;
}
if (!$port) {
$port = $config['default_port'];
}
/* Modify username with domain if required
Inspired by Marco <P0L0_notspam_binware.org>
*/
// Check if we need to add domain
if (!empty($config['username_domain']) && strpos($username, '@') === false) {
if (is_array($config['username_domain']) && isset($config['username_domain'][$host]))
$username .= '@'.rcube_utils::parse_host($config['username_domain'][$host], $host);
else if (is_string($config['username_domain']))
$username .= '@'.rcube_utils::parse_host($config['username_domain'], $host);
}
+ if (!isset($config['login_lc'])) {
+ $config['login_lc'] = 2; // default
+ }
+
// Convert username to lowercase. If storage backend
// is case-insensitive we need to store always the same username (#1487113)
if ($config['login_lc']) {
if ($config['login_lc'] == 2 || $config['login_lc'] === true) {
$username = mb_strtolower($username);
}
else if (strpos($username, '@')) {
// lowercase domain name
list($local, $domain) = explode('@', $username);
$username = $local . '@' . mb_strtolower($domain);
}
}
// try to resolve email address from virtuser table
if (strpos($username, '@') && ($virtuser = rcube_user::email2user($username))) {
$username = $virtuser;
}
// Here we need IDNA ASCII
// Only rcube_contacts class is using domain names in Unicode
$host = rcube_utils::idn_to_ascii($host);
$username = rcube_utils::idn_to_ascii($username);
// user already registered -> overwrite username
if ($user = rcube_user::query($username, $host)) {
$username = $user->data['username'];
}
$storage = $this->get_storage();
// try to log in
- if (!($login = $storage->connect($host, $username, $pass, $port, $ssl))) {
- // try with lowercase
- $username_lc = mb_strtolower($username);
- if ($username_lc != $username) {
- // try to find user record again -> overwrite username
- if (!$user && ($user = rcube_user::query($username_lc, $host)))
- $username_lc = $user->data['username'];
-
- if ($login = $storage->connect($host, $username_lc, $pass, $port, $ssl))
- $username = $username_lc;
- }
- }
-
- // exit if login failed
- if (!$login) {
+ if (!$storage->connect($host, $username, $pass, $port, $ssl)) {
return false;
}
// user already registered -> update user's record
if (is_object($user)) {
// update last login timestamp
$user->touch();
}
// create new system user
else if ($config['auto_create_user']) {
if ($created = rcube_user::create($username, $host)) {
$user = $created;
}
else {
self::raise_error(array(
'code' => 620, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Failed to create a user record. Maybe aborted by a plugin?"
), true, false);
}
}
else {
self::raise_error(array(
'code' => 621, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Access denied for new user $username. 'auto_create_user' is disabled"
), true, false);
}
// login succeeded
if (is_object($user) && $user->ID) {
// Configure environment
$this->set_user($user);
$this->set_storage_prop();
$this->session_configure();
// fix some old settings according to namespace prefix
$this->fix_namespace_settings($user);
// create default folders on first login
if ($config['create_default_folders'] && (!empty($created) || empty($user->data['last_login']))) {
$storage->create_default_folders();
}
// set session vars
$_SESSION['user_id'] = $user->ID;
$_SESSION['username'] = $user->data['username'];
$_SESSION['storage_host'] = $host;
$_SESSION['storage_port'] = $port;
$_SESSION['storage_ssl'] = $ssl;
$_SESSION['password'] = $this->encrypt($pass);
$_SESSION['login_time'] = time();
if (isset($_REQUEST['_timezone']) && $_REQUEST['_timezone'] != '_default_')
$_SESSION['timezone'] = floatval($_REQUEST['_timezone']);
if (isset($_REQUEST['_dstactive']) && $_REQUEST['_dstactive'] != '_default_')
$_SESSION['dst_active'] = intval($_REQUEST['_dstactive']);
// force reloading complete list of subscribed mailboxes
$storage->clear_cache('mailboxes', true);
return true;
}
return false;
}
/**
* Returns error code of last login operation
*
* @return int Error code
*/
public function login_error()
{
if ($this->login_error) {
return $this->login_error;
}
if ($this->storage && $this->storage->get_error_code() < -1) {
return self::ERROR_STORAGE;
}
}
/**
* Auto-select IMAP host based on the posted login information
*
* @return string Selected IMAP host
*/
public function autoselect_host()
{
$default_host = $this->config->get('default_host');
$host = null;
if (is_array($default_host)) {
$post_host = rcube_utils::get_input_value('_host', rcube_utils::INPUT_POST);
$post_user = rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST);
list($user, $domain) = explode('@', $post_user);
// direct match in default_host array
if ($default_host[$post_host] || in_array($post_host, array_values($default_host))) {
$host = $post_host;
}
// try to select host by mail domain
else if (!empty($domain)) {
foreach ($default_host as $storage_host => $mail_domains) {
if (is_array($mail_domains) && in_array_nocase($domain, $mail_domains)) {
$host = $storage_host;
break;
}
else if (stripos($storage_host, $domain) !== false || stripos(strval($mail_domains), $domain) !== false) {
$host = is_numeric($storage_host) ? $mail_domains : $storage_host;
break;
}
}
}
// take the first entry if $host is still not set
if (empty($host)) {
list($key, $val) = each($default_host);
$host = is_numeric($key) ? $val : $key;
}
}
else if (empty($default_host)) {
$host = rcube_utils::get_input_value('_host', rcube_utils::INPUT_POST);
}
else
$host = rcube_utils::parse_host($default_host);
return $host;
}
/**
* Destroy session data and remove cookie
*/
public function kill_session()
{
$this->plugins->exec_hook('session_destroy');
$this->session->kill();
$_SESSION = array('language' => $this->user->language, 'temp' => true, 'skin' => $this->config->get('skin'));
$this->user->reset();
}
/**
* Do server side actions on logout
*/
public function logout_actions()
{
$config = $this->config->all();
$storage = $this->get_storage();
if ($config['logout_purge'] && !empty($config['trash_mbox'])) {
$storage->clear_folder($config['trash_mbox']);
}
if ($config['logout_expunge']) {
$storage->expunge_folder('INBOX');
}
// Try to save unsaved user preferences
if (!empty($_SESSION['preferences'])) {
$this->user->save_prefs(unserialize($_SESSION['preferences']));
}
}
/**
* Generate a unique token to be used in a form request
*
* @return string The request token
*/
public function get_request_token()
{
$sess_id = $_COOKIE[ini_get('session.name')];
if (!$sess_id) $sess_id = session_id();
$plugin = $this->plugins->exec_hook('request_token', array(
'value' => md5('RT' . $this->get_user_id() . $this->config->get('des_key') . $sess_id)));
return $plugin['value'];
}
/**
* Check if the current request contains a valid token
*
* @param int Request method
* @return boolean True if request token is valid false if not
*/
public function check_request($mode = rcube_utils::INPUT_POST)
{
$token = rcube_utils::get_input_value('_token', $mode);
$sess_id = $_COOKIE[ini_get('session.name')];
return !empty($sess_id) && $token == $this->get_request_token();
}
/**
* Create unique authorization hash
*
* @param string Session ID
* @param int Timestamp
* @return string The generated auth hash
*/
private function get_auth_hash($sess_id, $ts)
{
$auth_string = sprintf('rcmail*sess%sR%s*Chk:%s;%s',
$sess_id,
$ts,
$this->config->get('ip_check') ? $_SERVER['REMOTE_ADDR'] : '***.***.***.***',
$_SERVER['HTTP_USER_AGENT']);
if (function_exists('sha1'))
return sha1($auth_string);
else
return md5($auth_string);
}
/**
* Build a valid URL to this instance of Roundcube
*
* @param mixed Either a string with the action or url parameters as key-value pairs
*
* @return string Valid application URL
*/
public function url($p)
{
if (!is_array($p)) {
if (strpos($p, 'http') === 0)
return $p;
$p = array('_action' => @func_get_arg(0));
}
$task = $p['_task'] ? $p['_task'] : ($p['task'] ? $p['task'] : $this->task);
$p['_task'] = $task;
unset($p['task']);
$url = './';
$delm = '?';
foreach (array_reverse($p) as $key => $val) {
if ($val !== '' && $val !== null) {
$par = $key[0] == '_' ? $key : '_'.$key;
$url .= $delm.urlencode($par).'='.urlencode($val);
$delm = '&';
}
}
return $url;
}
/**
* Function to be executed in script shutdown
*/
public function shutdown()
{
parent::shutdown();
foreach ($this->address_books as $book) {
if (is_object($book) && is_a($book, 'rcube_addressbook'))
$book->close();
}
// before closing the database connection, write session data
if ($_SERVER['REMOTE_ADDR'] && is_object($this->session)) {
session_write_close();
}
// write performance stats to logs/console
if ($this->config->get('devel_mode')) {
if (function_exists('memory_get_usage'))
$mem = $this->show_bytes(memory_get_usage());
if (function_exists('memory_get_peak_usage'))
$mem .= '/'.$this->show_bytes(memory_get_peak_usage());
$log = $this->task . ($this->action ? '/'.$this->action : '') . ($mem ? " [$mem]" : '');
if (defined('RCMAIL_START'))
self::print_timer(RCMAIL_START, $log);
else
self::console($log);
}
}
/**
* Registers action aliases for current task
*
* @param array $map Alias-to-filename hash array
*/
public function register_action_map($map)
{
if (is_array($map)) {
foreach ($map as $idx => $val) {
$this->action_map[$idx] = $val;
}
}
}
/**
* Returns current action filename
*
* @param array $map Alias-to-filename hash array
*/
public function get_action_file()
{
if (!empty($this->action_map[$this->action])) {
return $this->action_map[$this->action];
}
return strtr($this->action, '-', '_') . '.inc';
}
/**
* Fixes some user preferences according to namespace handling change.
* Old Roundcube versions were using folder names with removed namespace prefix.
* Now we need to add the prefix on servers where personal namespace has prefix.
*
* @param rcube_user $user User object
*/
private function fix_namespace_settings($user)
{
$prefix = $this->storage->get_namespace('prefix');
$prefix_len = strlen($prefix);
if (!$prefix_len)
return;
$prefs = $this->config->all();
if (!empty($prefs['namespace_fixed']))
return;
// Build namespace prefix regexp
$ns = $this->storage->get_namespace();
$regexp = array();
foreach ($ns as $entry) {
if (!empty($entry)) {
foreach ($entry as $item) {
if (strlen($item[0])) {
$regexp[] = preg_quote($item[0], '/');
}
}
}
}
$regexp = '/^('. implode('|', $regexp).')/';
// Fix preferences
$opts = array('drafts_mbox', 'junk_mbox', 'sent_mbox', 'trash_mbox', 'archive_mbox');
foreach ($opts as $opt) {
if ($value = $prefs[$opt]) {
if ($value != 'INBOX' && !preg_match($regexp, $value)) {
$prefs[$opt] = $prefix.$value;
}
}
}
if (!empty($prefs['default_folders'])) {
foreach ($prefs['default_folders'] as $idx => $name) {
if ($name != 'INBOX' && !preg_match($regexp, $name)) {
$prefs['default_folders'][$idx] = $prefix.$name;
}
}
}
if (!empty($prefs['search_mods'])) {
$folders = array();
foreach ($prefs['search_mods'] as $idx => $value) {
if ($idx != 'INBOX' && $idx != '*' && !preg_match($regexp, $idx)) {
$idx = $prefix.$idx;
}
$folders[$idx] = $value;
}
$prefs['search_mods'] = $folders;
}
if (!empty($prefs['message_threading'])) {
$folders = array();
foreach ($prefs['message_threading'] as $idx => $value) {
if ($idx != 'INBOX' && !preg_match($regexp, $idx)) {
$idx = $prefix.$idx;
}
$folders[$prefix.$idx] = $value;
}
$prefs['message_threading'] = $folders;
}
if (!empty($prefs['collapsed_folders'])) {
$folders = explode('&&', $prefs['collapsed_folders']);
$count = count($folders);
$folders_str = '';
if ($count) {
$folders[0] = substr($folders[0], 1);
$folders[$count-1] = substr($folders[$count-1], 0, -1);
}
foreach ($folders as $value) {
if ($value != 'INBOX' && !preg_match($regexp, $value)) {
$value = $prefix.$value;
}
$folders_str .= '&'.$value.'&';
}
$prefs['collapsed_folders'] = $folders_str;
}
$prefs['namespace_fixed'] = true;
// save updated preferences and reset imap settings (default folders)
$user->save_prefs($prefs);
$this->set_storage_prop();
}
/**
* Overwrite action variable
*
* @param string New action value
*/
public function overwrite_action($action)
{
$this->action = $action;
$this->output->set_env('action', $action);
}
/**
* Send the given message using the configured method.
*
* @param object $message Reference to Mail_MIME object
* @param string $from Sender address string
* @param array $mailto Array of recipient address strings
* @param array $smtp_error SMTP error array (reference)
* @param string $body_file Location of file with saved message body (reference),
* used when delay_file_io is enabled
* @param array $smtp_opts SMTP options (e.g. DSN request)
*
* @return boolean Send status.
*/
public function deliver_message(&$message, $from, $mailto, &$smtp_error, &$body_file = null, $smtp_opts = null)
{
$headers = $message->headers();
// send thru SMTP server using custom SMTP library
if ($this->config->get('smtp_server')) {
// generate list of recipients
$a_recipients = array($mailto);
if (strlen($headers['Cc']))
$a_recipients[] = $headers['Cc'];
if (strlen($headers['Bcc']))
$a_recipients[] = $headers['Bcc'];
// clean Bcc from header for recipients
$send_headers = $headers;
unset($send_headers['Bcc']);
// here too, it because txtHeaders() below use $message->_headers not only $send_headers
unset($message->_headers['Bcc']);
$smtp_headers = $message->txtHeaders($send_headers, true);
if ($message->getParam('delay_file_io')) {
// use common temp dir
$temp_dir = $this->config->get('temp_dir');
$body_file = tempnam($temp_dir, 'rcmMsg');
if (PEAR::isError($mime_result = $message->saveMessageBody($body_file))) {
self::raise_error(array('code' => 650, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Could not create message: ".$mime_result->getMessage()),
TRUE, FALSE);
return false;
}
$msg_body = fopen($body_file, 'r');
}
else {
$msg_body = $message->get();
}
// send message
if (!is_object($this->smtp)) {
$this->smtp_init(true);
}
$sent = $this->smtp->send_mail($from, $a_recipients, $smtp_headers, $msg_body, $smtp_opts);
$smtp_response = $this->smtp->get_response();
$smtp_error = $this->smtp->get_error();
// log error
if (!$sent) {
self::raise_error(array('code' => 800, 'type' => 'smtp',
'line' => __LINE__, 'file' => __FILE__,
'message' => "SMTP error: ".join("\n", $smtp_response)), TRUE, FALSE);
}
}
// send mail using PHP's mail() function
else {
// unset some headers because they will be added by the mail() function
$headers_enc = $message->headers($headers);
$headers_php = $message->_headers;
unset($headers_php['To'], $headers_php['Subject']);
// reset stored headers and overwrite
$message->_headers = array();
$header_str = $message->txtHeaders($headers_php);
// #1485779
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
if (preg_match_all('/<([^@]+@[^>]+)>/', $headers_enc['To'], $m)) {
$headers_enc['To'] = implode(', ', $m[1]);
}
}
$msg_body = $message->get();
if (PEAR::isError($msg_body)) {
self::raise_error(array('code' => 650, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Could not create message: ".$msg_body->getMessage()),
TRUE, FALSE);
}
else {
$delim = $this->config->header_delimiter();
$to = $headers_enc['To'];
$subject = $headers_enc['Subject'];
$header_str = rtrim($header_str);
if ($delim != "\r\n") {
$header_str = str_replace("\r\n", $delim, $header_str);
$msg_body = str_replace("\r\n", $delim, $msg_body);
$to = str_replace("\r\n", $delim, $to);
$subject = str_replace("\r\n", $delim, $subject);
}
if (ini_get('safe_mode'))
$sent = mail($to, $subject, $msg_body, $header_str);
else
$sent = mail($to, $subject, $msg_body, $header_str, "-f$from");
}
}
if ($sent) {
$this->plugins->exec_hook('message_sent', array('headers' => $headers, 'body' => $msg_body));
// remove MDN headers after sending
unset($headers['Return-Receipt-To'], $headers['Disposition-Notification-To']);
// get all recipients
if ($headers['Cc'])
$mailto .= $headers['Cc'];
if ($headers['Bcc'])
$mailto .= $headers['Bcc'];
if (preg_match_all('/<([^@]+@[^>]+)>/', $mailto, $m))
$mailto = implode(', ', array_unique($m[1]));
if ($this->config->get('smtp_log')) {
self::write_log('sendmail', sprintf("User %s [%s]; Message for %s; %s",
$this->user->get_username(),
$_SERVER['REMOTE_ADDR'],
$mailto,
!empty($smtp_response) ? join('; ', $smtp_response) : ''));
}
}
if (is_resource($msg_body)) {
fclose($msg_body);
}
$message->_headers = array();
$message->headers($headers);
return $sent;
}
/**
* Unique Message-ID generator.
*
* @return string Message-ID
*/
public function gen_message_id()
{
$local_part = md5(uniqid('rcmail'.mt_rand(),true));
$domain_part = $this->user->get_username('domain');
// Try to find FQDN, some spamfilters doesn't like 'localhost' (#1486924)
if (!preg_match('/\.[a-z]+$/i', $domain_part)) {
foreach (array($_SERVER['HTTP_HOST'], $_SERVER['SERVER_NAME']) as $host) {
$host = preg_replace('/:[0-9]+$/', '', $host);
if ($host && preg_match('/\.[a-z]+$/i', $host)) {
$domain_part = $host;
}
}
}
return sprintf('<%s@%s>', $local_part, $domain_part);
}
/**
* Returns RFC2822 formatted current date in user's timezone
*
* @return string Date
*/
public function user_date()
{
// get user's timezone
try {
$tz = new DateTimeZone($this->config->get('timezone'));
$date = new DateTime('now', $tz);
}
catch (Exception $e) {
$date = new DateTime();
}
return $date->format('r');
}
/**
* Write login data (name, ID, IP address) to the 'userlogins' log file.
*/
public function log_login()
{
if (!$this->config->get('log_logins')) {
return;
}
$user_name = $this->get_user_name();
$user_id = $this->get_user_id();
if (!$user_id) {
return;
}
self::write_log('userlogins',
sprintf('Successful login for %s (ID: %d) from %s in session %s',
$user_name, $user_id, rcube_utils::remote_ip(), session_id()));
}
/**
* Create a HTML table based on the given data
*
* @param array Named table attributes
* @param mixed Table row data. Either a two-dimensional array or a valid SQL result set
* @param array List of cols to show
* @param string Name of the identifier col
*
* @return string HTML table code
*/
public function table_output($attrib, $table_data, $a_show_cols, $id_col)
{
$table = new html_table(/*array('cols' => count($a_show_cols))*/);
// add table header
if (!$attrib['noheader']) {
foreach ($a_show_cols as $col) {
$table->add_header($col, $this->Q($this->gettext($col)));
}
}
if (!is_array($table_data)) {
$db = $this->get_dbh();
while ($table_data && ($sql_arr = $db->fetch_assoc($table_data))) {
$table->add_row(array('id' => 'rcmrow' . rcube_utils::html_identifier($sql_arr[$id_col])));
// format each col
foreach ($a_show_cols as $col) {
$table->add($col, $this->Q($sql_arr[$col]));
}
}
}
else {
foreach ($table_data as $row_data) {
$class = !empty($row_data['class']) ? $row_data['class'] : '';
$rowid = 'rcmrow' . rcube_utils::html_identifier($row_data[$id_col]);
$table->add_row(array('id' => $rowid, 'class' => $class));
// format each col
foreach ($a_show_cols as $col) {
$table->add($col, $this->Q(is_array($row_data[$col]) ? $row_data[$col][0] : $row_data[$col]));
}
}
}
return $table->show($attrib);
}
/**
* Convert the given date to a human readable form
* This uses the date formatting properties from config
*
* @param mixed Date representation (string, timestamp or DateTime object)
* @param string Date format to use
* @param bool Enables date convertion according to user timezone
*
* @return string Formatted date string
*/
public function format_date($date, $format = null, $convert = true)
{
if (is_object($date) && is_a($date, 'DateTime')) {
$timestamp = $date->format('U');
}
else {
if (!empty($date)) {
$timestamp = rcube_utils::strtotime($date);
}
if (empty($timestamp)) {
return '';
}
try {
$date = new DateTime("@".$timestamp);
}
catch (Exception $e) {
return '';
}
}
if ($convert) {
try {
// convert to the right timezone
$stz = date_default_timezone_get();
$tz = new DateTimeZone($this->config->get('timezone'));
$date->setTimezone($tz);
date_default_timezone_set($tz->getName());
$timestamp = $date->format('U');
}
catch (Exception $e) {
}
}
// define date format depending on current time
if (!$format) {
$now = time();
$now_date = getdate($now);
$today_limit = mktime(0, 0, 0, $now_date['mon'], $now_date['mday'], $now_date['year']);
$week_limit = mktime(0, 0, 0, $now_date['mon'], $now_date['mday']-6, $now_date['year']);
$pretty_date = $this->config->get('prettydate');
if ($pretty_date && $timestamp > $today_limit && $timestamp < $now) {
$format = $this->config->get('date_today', $this->config->get('time_format', 'H:i'));
$today = true;
}
else if ($pretty_date && $timestamp > $week_limit && $timestamp < $now) {
$format = $this->config->get('date_short', 'D H:i');
}
else {
$format = $this->config->get('date_long', 'Y-m-d H:i');
}
}
// strftime() format
if (preg_match('/%[a-z]+/i', $format)) {
$format = strftime($format, $timestamp);
if ($stz) {
date_default_timezone_set($stz);
}
return $today ? ($this->gettext('today') . ' ' . $format) : $format;
}
// parse format string manually in order to provide localized weekday and month names
// an alternative would be to convert the date() format string to fit with strftime()
$out = '';
for ($i=0; $i<strlen($format); $i++) {
if ($format[$i] == "\\") { // skip escape chars
continue;
}
// write char "as-is"
if ($format[$i] == ' ' || $format[$i-1] == "\\") {
$out .= $format[$i];
}
// weekday (short)
else if ($format[$i] == 'D') {
$out .= $this->gettext(strtolower(date('D', $timestamp)));
}
// weekday long
else if ($format[$i] == 'l') {
$out .= $this->gettext(strtolower(date('l', $timestamp)));
}
// month name (short)
else if ($format[$i] == 'M') {
$out .= $this->gettext(strtolower(date('M', $timestamp)));
}
// month name (long)
else if ($format[$i] == 'F') {
$out .= $this->gettext('long'.strtolower(date('M', $timestamp)));
}
else if ($format[$i] == 'x') {
$out .= strftime('%x %X', $timestamp);
}
else {
$out .= date($format[$i], $timestamp);
}
}
if ($today) {
$label = $this->gettext('today');
// replcae $ character with "Today" label (#1486120)
if (strpos($out, '$') !== false) {
$out = preg_replace('/\$/', $label, $out, 1);
}
else {
$out = $label . ' ' . $out;
}
}
if ($stz) {
date_default_timezone_set($stz);
}
return $out;
}
/**
* Return folders list in HTML
*
* @param array $attrib Named parameters
*
* @return string HTML code for the gui object
*/
public function folder_list($attrib)
{
static $a_mailboxes;
$attrib += array('maxlength' => 100, 'realnames' => false, 'unreadwrap' => ' (%s)');
$rcmail = rcmail::get_instance();
$storage = $rcmail->get_storage();
// add some labels to client
$rcmail->output->add_label('purgefolderconfirm', 'deletemessagesconfirm');
$type = $attrib['type'] ? $attrib['type'] : 'ul';
unset($attrib['type']);
if ($type == 'ul' && !$attrib['id']) {
$attrib['id'] = 'rcmboxlist';
}
if (empty($attrib['folder_name'])) {
$attrib['folder_name'] = '*';
}
// get current folder
$mbox_name = $storage->get_folder();
// build the folders tree
if (empty($a_mailboxes)) {
// get mailbox list
$a_folders = $storage->list_folders_subscribed(
'', $attrib['folder_name'], $attrib['folder_filter']);
$delimiter = $storage->get_hierarchy_delimiter();
$a_mailboxes = array();
foreach ($a_folders as $folder) {
$rcmail->build_folder_tree($a_mailboxes, $folder, $delimiter);
}
}
// allow plugins to alter the folder tree or to localize folder names
$hook = $rcmail->plugins->exec_hook('render_mailboxlist', array(
'list' => $a_mailboxes,
'delimiter' => $delimiter,
'type' => $type,
'attribs' => $attrib,
));
$a_mailboxes = $hook['list'];
$attrib = $hook['attribs'];
if ($type == 'select') {
$attrib['is_escaped'] = true;
$select = new html_select($attrib);
// add no-selection option
if ($attrib['noselection']) {
$select->add(html::quote($rcmail->gettext($attrib['noselection'])), '');
}
$rcmail->render_folder_tree_select($a_mailboxes, $mbox_name, $attrib['maxlength'], $select, $attrib['realnames']);
$out = $select->show($attrib['default']);
}
else {
$js_mailboxlist = array();
$out = html::tag('ul', $attrib, $rcmail->render_folder_tree_html($a_mailboxes, $mbox_name, $js_mailboxlist, $attrib), html::$common_attrib);
$rcmail->output->add_gui_object('mailboxlist', $attrib['id']);
$rcmail->output->set_env('mailboxes', $js_mailboxlist);
$rcmail->output->set_env('unreadwrap', $attrib['unreadwrap']);
$rcmail->output->set_env('collapsed_folders', (string)$rcmail->config->get('collapsed_folders'));
}
return $out;
}
/**
* Return folders list as html_select object
*
* @param array $p Named parameters
*
* @return html_select HTML drop-down object
*/
public function folder_selector($p = array())
{
$p += array('maxlength' => 100, 'realnames' => false, 'is_escaped' => true);
$a_mailboxes = array();
$storage = $this->get_storage();
if (empty($p['folder_name'])) {
$p['folder_name'] = '*';
}
if ($p['unsubscribed']) {
$list = $storage->list_folders('', $p['folder_name'], $p['folder_filter'], $p['folder_rights']);
}
else {
$list = $storage->list_folders_subscribed('', $p['folder_name'], $p['folder_filter'], $p['folder_rights']);
}
$delimiter = $storage->get_hierarchy_delimiter();
foreach ($list as $folder) {
if (empty($p['exceptions']) || !in_array($folder, $p['exceptions'])) {
$this->build_folder_tree($a_mailboxes, $folder, $delimiter);
}
}
$select = new html_select($p);
if ($p['noselection']) {
$select->add(html::quote($p['noselection']), '');
}
$this->render_folder_tree_select($a_mailboxes, $mbox, $p['maxlength'], $select, $p['realnames'], 0, $p);
return $select;
}
/**
* Create a hierarchical array of the mailbox list
*/
public function build_folder_tree(&$arrFolders, $folder, $delm = '/', $path = '')
{
// Handle namespace prefix
$prefix = '';
if (!$path) {
$n_folder = $folder;
$folder = $this->storage->mod_folder($folder);
if ($n_folder != $folder) {
$prefix = substr($n_folder, 0, -strlen($folder));
}
}
$pos = strpos($folder, $delm);
if ($pos !== false) {
$subFolders = substr($folder, $pos+1);
$currentFolder = substr($folder, 0, $pos);
// sometimes folder has a delimiter as the last character
if (!strlen($subFolders)) {
$virtual = false;
}
else if (!isset($arrFolders[$currentFolder])) {
$virtual = true;
}
else {
$virtual = $arrFolders[$currentFolder]['virtual'];
}
}
else {
$subFolders = false;
$currentFolder = $folder;
$virtual = false;
}
$path .= $prefix . $currentFolder;
if (!isset($arrFolders[$currentFolder])) {
$arrFolders[$currentFolder] = array(
'id' => $path,
'name' => rcube_charset::convert($currentFolder, 'UTF7-IMAP'),
'virtual' => $virtual,
'folders' => array());
}
else {
$arrFolders[$currentFolder]['virtual'] = $virtual;
}
if (strlen($subFolders)) {
$this->build_folder_tree($arrFolders[$currentFolder]['folders'], $subFolders, $delm, $path.$delm);
}
}
/**
* Return html for a structured list &lt;ul&gt; for the mailbox tree
*/
public function render_folder_tree_html(&$arrFolders, &$mbox_name, &$jslist, $attrib, $nestLevel = 0)
{
$maxlength = intval($attrib['maxlength']);
$realnames = (bool)$attrib['realnames'];
$msgcounts = $this->storage->get_cache('messagecount');
$collapsed = $this->config->get('collapsed_folders');
$out = '';
foreach ($arrFolders as $key => $folder) {
$title = null;
$folder_class = $this->folder_classname($folder['id']);
$is_collapsed = strpos($collapsed, '&'.rawurlencode($folder['id']).'&') !== false;
$unread = $msgcounts ? intval($msgcounts[$folder['id']]['UNSEEN']) : 0;
if ($folder_class && !$realnames) {
$foldername = $this->gettext($folder_class);
}
else {
$foldername = $folder['name'];
// shorten the folder name to a given length
if ($maxlength && $maxlength > 1) {
$fname = abbreviate_string($foldername, $maxlength);
if ($fname != $foldername) {
$title = $foldername;
}
$foldername = $fname;
}
}
// make folder name safe for ids and class names
$folder_id = rcube_utils::html_identifier($folder['id'], true);
$classes = array('mailbox');
// set special class for Sent, Drafts, Trash and Junk
if ($folder_class) {
$classes[] = $folder_class;
}
if ($folder['id'] == $mbox_name) {
$classes[] = 'selected';
}
if ($folder['virtual']) {
$classes[] = 'virtual';
}
else if ($unread) {
$classes[] = 'unread';
}
$js_name = $this->JQ($folder['id']);
$html_name = $this->Q($foldername) . ($unread ? html::span('unreadcount', sprintf($attrib['unreadwrap'], $unread)) : '');
$link_attrib = $folder['virtual'] ? array() : array(
'href' => $this->url(array('_mbox' => $folder['id'])),
'onclick' => sprintf("return %s.command('list','%s',this)", rcmail::JS_OBJECT_NAME, $js_name),
'rel' => $folder['id'],
'title' => $title,
);
$out .= html::tag('li', array(
'id' => "rcmli".$folder_id,
'class' => join(' ', $classes),
'noclose' => true),
html::a($link_attrib, $html_name) .
(!empty($folder['folders']) ? html::div(array(
'class' => ($is_collapsed ? 'collapsed' : 'expanded'),
'style' => "position:absolute",
'onclick' => sprintf("%s.command('collapse-folder', '%s')", rcmail::JS_OBJECT_NAME, $js_name)
), '&nbsp;') : ''));
$jslist[$folder_id] = array(
'id' => $folder['id'],
'name' => $foldername,
'virtual' => $folder['virtual']
);
if (!empty($folder['folders'])) {
$out .= html::tag('ul', array('style' => ($is_collapsed ? "display:none;" : null)),
$this->render_folder_tree_html($folder['folders'], $mbox_name, $jslist, $attrib, $nestLevel+1));
}
$out .= "</li>\n";
}
return $out;
}
/**
* Return html for a flat list <select> for the mailbox tree
*/
public function render_folder_tree_select(&$arrFolders, &$mbox_name, $maxlength, &$select, $realnames = false, $nestLevel = 0, $opts = array())
{
$out = '';
foreach ($arrFolders as $key => $folder) {
// skip exceptions (and its subfolders)
if (!empty($opts['exceptions']) && in_array($folder['id'], $opts['exceptions'])) {
continue;
}
// skip folders in which it isn't possible to create subfolders
if (!empty($opts['skip_noinferiors'])) {
$attrs = $this->storage->folder_attributes($folder['id']);
if ($attrs && in_array('\\Noinferiors', $attrs)) {
continue;
}
}
if (!$realnames && ($folder_class = $this->folder_classname($folder['id']))) {
$foldername = $this->gettext($folder_class);
}
else {
$foldername = $folder['name'];
// shorten the folder name to a given length
if ($maxlength && $maxlength > 1) {
$foldername = abbreviate_string($foldername, $maxlength);
}
}
$select->add(str_repeat('&nbsp;', $nestLevel*4) . html::quote($foldername), $folder['id']);
if (!empty($folder['folders'])) {
$out .= $this->render_folder_tree_select($folder['folders'], $mbox_name, $maxlength,
$select, $realnames, $nestLevel+1, $opts);
}
}
return $out;
}
/**
* Return internal name for the given folder if it matches the configured special folders
*/
public function folder_classname($folder_id)
{
if ($folder_id == 'INBOX') {
return 'inbox';
}
// for these mailboxes we have localized labels and css classes
foreach (array('sent', 'drafts', 'trash', 'junk') as $smbx)
{
if ($folder_id === $this->config->get($smbx.'_mbox')) {
return $smbx;
}
}
}
/**
* Try to localize the given IMAP folder name.
* UTF-7 decode it in case no localized text was found
*
* @param string $name Folder name
*
* @return string Localized folder name in UTF-8 encoding
*/
public function localize_foldername($name)
{
if ($folder_class = $this->folder_classname($name)) {
return $this->gettext($folder_class);
}
else {
return rcube_charset::convert($name, 'UTF7-IMAP');
}
}
public function localize_folderpath($path)
{
$protect_folders = $this->config->get('protect_default_folders');
$default_folders = (array) $this->config->get('default_folders');
$delimiter = $this->storage->get_hierarchy_delimiter();
$path = explode($delimiter, $path);
$result = array();
foreach ($path as $idx => $dir) {
$directory = implode($delimiter, array_slice($path, 0, $idx+1));
if ($protect_folders && in_array($directory, $default_folders)) {
unset($result);
$result[] = $this->localize_foldername($directory);
}
else {
$result[] = rcube_charset::convert($dir, 'UTF7-IMAP');
}
}
return implode($delimiter, $result);
}
public static function quota_display($attrib)
{
$rcmail = rcmail::get_instance();
if (!$attrib['id']) {
$attrib['id'] = 'rcmquotadisplay';
}
$_SESSION['quota_display'] = !empty($attrib['display']) ? $attrib['display'] : 'text';
$rcmail->output->add_gui_object('quotadisplay', $attrib['id']);
$quota = $rcmail->quota_content($attrib);
$rcmail->output->add_script('rcmail.set_quota('.rcube_output::json_serialize($quota).');', 'docready');
return html::span($attrib, '');
}
public function quota_content($attrib = null)
{
$quota = $this->storage->get_quota();
$quota = $this->plugins->exec_hook('quota', $quota);
$quota_result = (array) $quota;
$quota_result['type'] = isset($_SESSION['quota_display']) ? $_SESSION['quota_display'] : '';
if (!$quota['total'] && $this->config->get('quota_zero_as_unlimited')) {
$quota_result['title'] = $this->gettext('unlimited');
$quota_result['percent'] = 0;
}
else if ($quota['total']) {
if (!isset($quota['percent'])) {
$quota_result['percent'] = min(100, round(($quota['used']/max(1,$quota['total']))*100));
}
$title = sprintf('%s / %s (%.0f%%)',
$this->show_bytes($quota['used'] * 1024), $this->show_bytes($quota['total'] * 1024),
$quota_result['percent']);
$quota_result['title'] = $title;
if ($attrib['width']) {
$quota_result['width'] = $attrib['width'];
}
if ($attrib['height']) {
$quota_result['height'] = $attrib['height'];
}
}
else {
$quota_result['title'] = $this->gettext('unknown');
$quota_result['percent'] = 0;
}
return $quota_result;
}
/**
* Outputs error message according to server error/response codes
*
* @param string $fallback Fallback message label
* @param array $fallback_args Fallback message label arguments
*/
public function display_server_error($fallback = null, $fallback_args = null)
{
$err_code = $this->storage->get_error_code();
$res_code = $this->storage->get_response_code();
if ($res_code == rcube_storage::NOPERM) {
$this->output->show_message('errornoperm', 'error');
}
else if ($res_code == rcube_storage::READONLY) {
$this->output->show_message('errorreadonly', 'error');
}
else if ($err_code && ($err_str = $this->storage->get_error_str())) {
// try to detect access rights problem and display appropriate message
if (stripos($err_str, 'Permission denied') !== false) {
$this->output->show_message('errornoperm', 'error');
}
else {
$this->output->show_message('servererrormsg', 'error', array('msg' => $err_str));
}
}
else if ($err_code < 0) {
$this->output->show_message('storageerror', 'error');
}
else if ($fallback) {
$this->output->show_message($fallback, 'error', $fallback_args);
}
}
/**
* Output HTML editor scripts
*
* @param string $mode Editor mode
*/
public function html_editor($mode = '')
{
$hook = $this->plugins->exec_hook('html_editor', array('mode' => $mode));
if ($hook['abort']) {
return;
}
$lang = strtolower($_SESSION['language']);
// TinyMCE uses two-letter lang codes, with exception of Chinese
if (strpos($lang, 'zh_') === 0) {
$lang = str_replace('_', '-', $lang);
}
else {
$lang = substr($lang, 0, 2);
}
if (!file_exists(INSTALL_PATH . 'program/js/tiny_mce/langs/'.$lang.'.js')) {
$lang = 'en';
}
$script = json_encode(array(
'mode' => $mode,
'lang' => $lang,
'skin_path' => $this->output->get_skin_path(),
'spellcheck' => intval($this->config->get('enable_spellcheck')),
'spelldict' => intval($this->config->get('spellcheck_dictionary'))
));
$this->output->include_script('tiny_mce/tiny_mce.js');
$this->output->include_script('editor.js');
$this->output->add_script("rcmail_editor_init($script)", 'docready');
}
/**
* Replaces TinyMCE's emoticon images with plain-text representation
*
* @param string $html HTML content
*
* @return string HTML content
*/
public static function replace_emoticons($html)
{
$emoticons = array(
'8-)' => 'smiley-cool',
':-#' => 'smiley-foot-in-mouth',
':-*' => 'smiley-kiss',
':-X' => 'smiley-sealed',
':-P' => 'smiley-tongue-out',
':-@' => 'smiley-yell',
":'(" => 'smiley-cry',
':-(' => 'smiley-frown',
':-D' => 'smiley-laughing',
':-)' => 'smiley-smile',
':-S' => 'smiley-undecided',
':-$' => 'smiley-embarassed',
'O:-)' => 'smiley-innocent',
':-|' => 'smiley-money-mouth',
':-O' => 'smiley-surprised',
';-)' => 'smiley-wink',
);
foreach ($emoticons as $idx => $file) {
// <img title="Cry" src="http://.../program/js/tiny_mce/plugins/emotions/img/smiley-cry.gif" border="0" alt="Cry" />
$search[] = '/<img title="[a-z ]+" src="https?:\/\/[a-z0-9_.\/-]+\/tiny_mce\/plugins\/emotions\/img\/'.$file.'.gif"[^>]+\/>/i';
$replace[] = $idx;
}
return preg_replace($search, $replace, $html);
}
/**
* File upload progress handler.
*/
public function upload_progress()
{
$prefix = ini_get('apc.rfc1867_prefix');
$params = array(
'action' => $this->action,
'name' => rcube_utils::get_input_value('_progress', rcube_utils::INPUT_GET),
);
if (function_exists('apc_fetch')) {
$status = apc_fetch($prefix . $params['name']);
if (!empty($status)) {
$status['percent'] = round($status['current']/$status['total']*100);
$params = array_merge($status, $params);
}
}
if (isset($params['percent']))
$params['text'] = $this->gettext(array('name' => 'uploadprogress', 'vars' => array(
'percent' => $params['percent'] . '%',
'current' => $this->show_bytes($params['current']),
'total' => $this->show_bytes($params['total'])
)));
$this->output->command('upload_progress_update', $params);
$this->output->send();
}
/**
* Initializes file uploading interface.
*/
public function upload_init()
{
// Enable upload progress bar
if (($seconds = $this->config->get('upload_progress')) && ini_get('apc.rfc1867')) {
if ($field_name = ini_get('apc.rfc1867_name')) {
$this->output->set_env('upload_progress_name', $field_name);
$this->output->set_env('upload_progress_time', (int) $seconds);
}
}
// find max filesize value
$max_filesize = parse_bytes(ini_get('upload_max_filesize'));
$max_postsize = parse_bytes(ini_get('post_max_size'));
if ($max_postsize && $max_postsize < $max_filesize) {
$max_filesize = $max_postsize;
}
$this->output->set_env('max_filesize', $max_filesize);
$max_filesize = self::show_bytes($max_filesize);
$this->output->set_env('filesizeerror', $this->gettext(array(
'name' => 'filesizeerror', 'vars' => array('size' => $max_filesize))));
return $max_filesize;
}
/**
* Initializes client-side autocompletion.
*/
public function autocomplete_init()
{
static $init;
if ($init) {
return;
}
$init = 1;
if (($threads = (int)$this->config->get('autocomplete_threads')) > 0) {
$book_types = (array) $this->config->get('autocomplete_addressbooks', 'sql');
if (count($book_types) > 1) {
$this->output->set_env('autocomplete_threads', $threads);
$this->output->set_env('autocomplete_sources', $book_types);
}
}
$this->output->set_env('autocomplete_max', (int)$this->config->get('autocomplete_max', 15));
$this->output->set_env('autocomplete_min_length', $this->config->get('autocomplete_min_length'));
$this->output->add_label('autocompletechars', 'autocompletemore');
}
/**
* Returns supported font-family specifications
*
* @param string $font Font name
*
* @param string|array Font-family specification array or string (if $font is used)
*/
public static function font_defs($font = null)
{
$fonts = array(
'Andale Mono' => '"Andale Mono",Times,monospace',
'Arial' => 'Arial,Helvetica,sans-serif',
'Arial Black' => '"Arial Black","Avant Garde",sans-serif',
'Book Antiqua' => '"Book Antiqua",Palatino,serif',
'Courier New' => '"Courier New",Courier,monospace',
'Georgia' => 'Georgia,Palatino,serif',
'Helvetica' => 'Helvetica,Arial,sans-serif',
'Impact' => 'Impact,Chicago,sans-serif',
'Tahoma' => 'Tahoma,Arial,Helvetica,sans-serif',
'Terminal' => 'Terminal,Monaco,monospace',
'Times New Roman' => '"Times New Roman",Times,serif',
'Trebuchet MS' => '"Trebuchet MS",Geneva,sans-serif',
'Verdana' => 'Verdana,Geneva,sans-serif',
);
if ($font) {
return $fonts[$font];
}
return $fonts;
}
/**
* Create a human readable string for a number of bytes
*
* @param int Number of bytes
*
* @return string Byte string
*/
public function show_bytes($bytes)
{
if ($bytes >= 1073741824) {
$gb = $bytes/1073741824;
$str = sprintf($gb>=10 ? "%d " : "%.1f ", $gb) . $this->gettext('GB');
}
else if ($bytes >= 1048576) {
$mb = $bytes/1048576;
$str = sprintf($mb>=10 ? "%d " : "%.1f ", $mb) . $this->gettext('MB');
}
else if ($bytes >= 1024) {
$str = sprintf("%d ", round($bytes/1024)) . $this->gettext('KB');
}
else {
$str = sprintf('%d ', $bytes) . $this->gettext('B');
}
return $str;
}
/**
* Quote a given string.
* Shortcut function for rcube_utils::rep_specialchars_output()
*
* @return string HTML-quoted string
*/
public static function Q($str, $mode = 'strict', $newlines = true)
{
return rcube_utils::rep_specialchars_output($str, 'html', $mode, $newlines);
}
/**
* Quote a given string for javascript output.
* Shortcut function for rcube_utils::rep_specialchars_output()
*
* @return string JS-quoted string
*/
public static function JQ($str)
{
return rcube_utils::rep_specialchars_output($str, 'js');
}
/**
* Returns real size (calculated) of the message part
*
* @param rcube_message_part Message part
*
* @return string Part size (and unit)
*/
public function message_part_size($part)
{
if (isset($part->d_parameters['size'])) {
$size = $this->show_bytes((int)$part->d_parameters['size']);
}
else {
$size = $part->size;
if ($part->encoding == 'base64') {
$size = $size / 1.33;
}
$size = '~' . $this->show_bytes($size);
}
return $size;
}
/************************************************************************
********* Deprecated methods (to be removed) *********
***********************************************************************/
public static function setcookie($name, $value, $exp = 0)
{
rcube_utils::setcookie($name, $value, $exp);
}
public function imap_connect()
{
return $this->storage_connect();
}
public function imap_init()
{
return $this->storage_init();
}
/**
* Connect to the mail storage server with stored session data
*
* @return bool True on success, False on error
*/
public function storage_connect()
{
$storage = $this->get_storage();
if ($_SESSION['storage_host'] && !$storage->is_connected()) {
$host = $_SESSION['storage_host'];
$user = $_SESSION['username'];
$port = $_SESSION['storage_port'];
$ssl = $_SESSION['storage_ssl'];
$pass = $this->decrypt($_SESSION['password']);
if (!$storage->connect($host, $user, $pass, $port, $ssl)) {
if (is_object($this->output)) {
$this->output->show_message('storageerror', 'error');
}
}
else {
$this->set_storage_prop();
- return $storage->is_connected();
}
}
- return false;
+ return $storage->is_connected();
}
}
diff --git a/program/include/rcube_message.php b/program/include/rcube_message.php
index 7bf95d1c5..4e1b5a0c2 100644
--- a/program/include/rcube_message.php
+++ b/program/include/rcube_message.php
@@ -1,758 +1,759 @@
<?php
/*
+-----------------------------------------------------------------------+
| program/include/rcube_message.php |
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2008-2010, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
| PURPOSE: |
| Logical representation of a mail message with all its data |
| and related functions |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
*/
/**
* Logical representation of a mail message with all its data
* and related functions
*
* @package Mail
* @author Thomas Bruederli <roundcube@gmail.com>
*/
class rcube_message
{
/**
* Instace of framework class.
*
* @var rcube
*/
private $app;
/**
* Instance of storage class
*
* @var rcube_storage
*/
private $storage;
/**
* Instance of mime class
*
* @var rcube_mime
*/
private $mime;
private $opt = array();
private $parse_alternative = false;
public $uid;
public $folder;
public $headers;
public $parts = array();
public $mime_parts = array();
public $inline_parts = array();
public $attachments = array();
public $subject = '';
public $sender = null;
public $is_safe = false;
/**
* __construct
*
* Provide a uid, and parse message structure.
*
* @param string $uid The message UID.
* @param string $folder Folder name
*
* @see self::$app, self::$storage, self::$opt, self::$parts
*/
function __construct($uid, $folder = null)
{
$this->uid = $uid;
$this->app = rcube::get_instance();
$this->storage = $this->app->get_storage();
$this->folder = strlen($folder) ? $folder : $this->storage->get_folder();
$this->storage->set_options(array('all_headers' => true));
// Set current folder
$this->storage->set_folder($this->folder);
$this->headers = $this->storage->get_message($uid);
if (!$this->headers)
return;
$this->mime = new rcube_mime($this->headers->charset);
$this->subject = $this->mime->decode_mime_string($this->headers->subject);
list(, $this->sender) = each($this->mime->decode_address_list($this->headers->from, 1));
$this->set_safe((intval($_GET['_safe']) || $_SESSION['safe_messages'][$uid]));
$this->opt = array(
'safe' => $this->is_safe,
'prefer_html' => $this->app->config->get('prefer_html'),
'get_url' => $this->app->url(array(
'action' => 'get',
'mbox' => $this->storage->get_folder(),
'uid' => $uid))
);
if (!empty($this->headers->structure)) {
$this->get_mime_numbers($this->headers->structure);
$this->parse_structure($this->headers->structure);
}
else {
$this->body = $this->storage->get_body($uid);
}
// notify plugins and let them analyze this structured message object
$this->app->plugins->exec_hook('message_load', array('object' => $this));
}
/**
* Return a (decoded) message header
*
* @param string $name Header name
* @param bool $row Don't mime-decode the value
* @return string Header value
*/
public function get_header($name, $raw = false)
{
if (empty($this->headers))
return null;
if ($this->headers->$name)
$value = $this->headers->$name;
else if ($this->headers->others[$name])
$value = $this->headers->others[$name];
return $raw ? $value : $this->mime->decode_header($value);
}
/**
* Set is_safe var and session data
*
* @param bool $safe enable/disable
*/
public function set_safe($safe = true)
{
$this->is_safe = $safe;
$_SESSION['safe_messages'][$this->uid] = $this->is_safe;
}
/**
* Compose a valid URL for getting a message part
*
* @param string $mime_id Part MIME-ID
* @return string URL or false if part does not exist
*/
public function get_part_url($mime_id, $embed = false)
{
if ($this->mime_parts[$mime_id])
return $this->opt['get_url'] . '&_part=' . $mime_id . ($embed ? '&_embed=1' : '');
else
return false;
}
/**
* Get content of a specific part of this message
*
* @param string $mime_id Part MIME-ID
* @param resource $fp File pointer to save the message part
* @param boolean $skip_charset_conv Disables charset conversion
*
* @return string Part content
*/
public function get_part_content($mime_id, $fp = null, $skip_charset_conv = false)
{
if ($part = $this->mime_parts[$mime_id]) {
// stored in message structure (winmail/inline-uuencode)
if (!empty($part->body) || $part->encoding == 'stream') {
if ($fp) {
fwrite($fp, $part->body);
}
return $fp ? true : $part->body;
}
// get from IMAP
$this->storage->set_folder($this->folder);
return $this->storage->get_message_part($this->uid, $mime_id, $part, NULL, $fp, $skip_charset_conv);
}
}
/**
* Determine if the message contains a HTML part
*
* @param bool $recursive Enables checking in all levels of the structure
*
* @return bool True if a HTML is available, False if not
*/
function has_html_part($recursive = true)
{
// check all message parts
foreach ($this->parts as $part) {
if ($part->mimetype == 'text/html') {
// Level check, we'll skip e.g. HTML attachments
if (!$recursive) {
$level = explode('.', $part->mime_id);
// Level too high
if (count($level) > 2) {
continue;
}
// HTML part can be on the lower level, if not...
if (count($level) > 1) {
// It can be an alternative or related message part
$parent = $this->mime_parts[0];
if ($parent->mimetype != 'multipart/alternative' && $parent->mimetype != 'multipart/related') {
continue;
}
}
}
return true;
}
}
return false;
}
/**
* Return the first HTML part of this message
*
* @return string HTML message part content
*/
function first_html_part()
{
// check all message parts
foreach ($this->mime_parts as $pid => $part) {
if ($part->mimetype == 'text/html') {
return $this->get_part_content($pid);
}
}
}
/**
* Return the first text part of this message
*
* @param rcube_message_part $part Reference to the part if found
* @return string Plain text message/part content
*/
function first_text_part(&$part=null)
{
// no message structure, return complete body
if (empty($this->parts))
return $this->body;
// check all message parts
foreach ($this->mime_parts as $mime_id => $part) {
if ($part->mimetype == 'text/plain') {
return $this->get_part_content($mime_id);
}
else if ($part->mimetype == 'text/html') {
$out = $this->get_part_content($mime_id);
// remove special chars encoding
$trans = array_flip(get_html_translation_table(HTML_ENTITIES));
$out = strtr($out, $trans);
// create instance of html2text class
$txt = new html2text($out);
return $txt->get_text();
}
}
$part = null;
return null;
}
/**
* Checks if part of the message is an attachment (or part of it)
*
* @param rcube_message_part $part Message part
*
* @return bool True if the part is an attachment part
*/
public function is_attachment($part)
{
foreach ($this->attachments as $att_part) {
if ($att_part->mime_id == $part->mime_id) {
return true;
}
// check if the part is a subpart of another attachment part (message/rfc822)
if ($att_part->mimetype == 'message/rfc822') {
if (in_array($part, (array)$att_part->parts)) {
return true;
}
}
}
return false;
}
/**
* Read the message structure returend by the IMAP server
* and build flat lists of content parts and attachments
*
* @param rcube_message_part $structure Message structure node
* @param bool $recursive True when called recursively
*/
private function parse_structure($structure, $recursive = false)
{
// real content-type of message/rfc822 part
if ($structure->mimetype == 'message/rfc822' && $structure->real_mimetype)
$mimetype = $structure->real_mimetype;
else
$mimetype = $structure->mimetype;
// show message headers
if ($recursive && is_array($structure->headers) && isset($structure->headers['subject'])) {
$c = new stdClass;
$c->type = 'headers';
$c->headers = &$structure->headers;
$this->parts[] = $c;
}
// Allow plugins to handle message parts
$plugin = $this->app->plugins->exec_hook('message_part_structure',
array('object' => $this, 'structure' => $structure,
'mimetype' => $mimetype, 'recursive' => $recursive));
if ($plugin['abort'])
return;
$structure = $plugin['structure'];
list($message_ctype_primary, $message_ctype_secondary) = explode('/', $plugin['mimetype']);
// print body if message doesn't have multiple parts
if ($message_ctype_primary == 'text' && !$recursive) {
$structure->type = 'content';
$this->parts[] = &$structure;
// Parse simple (plain text) message body
if ($message_ctype_secondary == 'plain')
foreach ((array)$this->uu_decode($structure) as $uupart) {
$this->mime_parts[$uupart->mime_id] = $uupart;
$this->attachments[] = $uupart;
}
}
// the same for pgp signed messages
else if ($mimetype == 'application/pgp' && !$recursive) {
$structure->type = 'content';
$this->parts[] = &$structure;
}
// message contains (more than one!) alternative parts
else if ($mimetype == 'multipart/alternative'
&& is_array($structure->parts) && count($structure->parts) > 1
) {
// get html/plaintext parts
$plain_part = $html_part = $print_part = $related_part = null;
foreach ($structure->parts as $p => $sub_part) {
$sub_mimetype = $sub_part->mimetype;
- // skip empty parts
- if (!$sub_part->size)
+ // skip empty text parts
+ if (!$sub_part->size && preg_match('#^text/(plain|html|enriched)$#', $sub_mimetype)) {
continue;
+ }
// check if sub part is
if ($sub_mimetype == 'text/plain')
$plain_part = $p;
else if ($sub_mimetype == 'text/html')
$html_part = $p;
else if ($sub_mimetype == 'text/enriched')
$enriched_part = $p;
else if (in_array($sub_mimetype, array('multipart/related', 'multipart/mixed', 'multipart/alternative')))
$related_part = $p;
}
// parse related part (alternative part could be in here)
if ($related_part !== null && !$this->parse_alternative) {
$this->parse_alternative = true;
$this->parse_structure($structure->parts[$related_part], true);
$this->parse_alternative = false;
// if plain part was found, we should unset it if html is preferred
if ($this->opt['prefer_html'] && count($this->parts))
$plain_part = null;
}
// choose html/plain part to print
if ($html_part !== null && $this->opt['prefer_html']) {
$print_part = &$structure->parts[$html_part];
}
else if ($enriched_part !== null) {
$print_part = &$structure->parts[$enriched_part];
}
else if ($plain_part !== null) {
$print_part = &$structure->parts[$plain_part];
}
// add the right message body
if (is_object($print_part)) {
$print_part->type = 'content';
$this->parts[] = $print_part;
}
// show plaintext warning
else if ($html_part !== null && empty($this->parts)) {
$c = new stdClass;
$c->type = 'content';
$c->ctype_primary = 'text';
$c->ctype_secondary = 'plain';
$c->mimetype = 'text/plain';
$c->realtype = 'text/html';
$this->parts[] = $c;
}
// add html part as attachment
if ($html_part !== null && $structure->parts[$html_part] !== $print_part) {
$html_part = &$structure->parts[$html_part];
$html_part->mimetype = 'text/html';
$this->attachments[] = $html_part;
}
}
// this is an ecrypted message -> create a plaintext body with the according message
else if ($mimetype == 'multipart/encrypted') {
$p = new stdClass;
$p->type = 'content';
$p->ctype_primary = 'text';
$p->ctype_secondary = 'plain';
$p->mimetype = 'text/plain';
$p->realtype = 'multipart/encrypted';
$this->parts[] = $p;
}
// message contains multiple parts
else if (is_array($structure->parts) && !empty($structure->parts)) {
// iterate over parts
for ($i=0; $i < count($structure->parts); $i++) {
$mail_part = &$structure->parts[$i];
$primary_type = $mail_part->ctype_primary;
$secondary_type = $mail_part->ctype_secondary;
// real content-type of message/rfc822
if ($mail_part->real_mimetype) {
$part_orig_mimetype = $mail_part->mimetype;
$part_mimetype = $mail_part->real_mimetype;
list($primary_type, $secondary_type) = explode('/', $part_mimetype);
}
else
$part_mimetype = $mail_part->mimetype;
// multipart/alternative
if ($primary_type == 'multipart') {
$this->parse_structure($mail_part, true);
// list message/rfc822 as attachment as well (mostly .eml)
if ($part_orig_mimetype == 'message/rfc822' && !empty($mail_part->filename))
$this->attachments[] = $mail_part;
}
// part text/[plain|html] or delivery status
else if ((($part_mimetype == 'text/plain' || $part_mimetype == 'text/html') && $mail_part->disposition != 'attachment') ||
in_array($part_mimetype, array('message/delivery-status', 'text/rfc822-headers', 'message/disposition-notification'))
) {
// Allow plugins to handle also this part
$plugin = $this->app->plugins->exec_hook('message_part_structure',
array('object' => $this, 'structure' => $mail_part,
'mimetype' => $part_mimetype, 'recursive' => true));
if ($plugin['abort'])
continue;
if ($part_mimetype == 'text/html') {
$got_html_part = true;
}
$mail_part = $plugin['structure'];
list($primary_type, $secondary_type) = explode('/', $plugin['mimetype']);
// add text part if it matches the prefs
if (!$this->parse_alternative ||
($secondary_type == 'html' && $this->opt['prefer_html']) ||
($secondary_type == 'plain' && !$this->opt['prefer_html'])
) {
$mail_part->type = 'content';
$this->parts[] = $mail_part;
}
// list as attachment as well
if (!empty($mail_part->filename)) {
$this->attachments[] = $mail_part;
}
// list html part as attachment (here the part is most likely inside a multipart/related part)
else if ($this->parse_alternative && ($secondary_type == 'html' && !$this->opt['prefer_html'])) {
$this->attachments[] = $mail_part;
}
}
// part message/*
else if ($primary_type == 'message') {
$this->parse_structure($mail_part, true);
// list as attachment as well (mostly .eml)
if (!empty($mail_part->filename))
$this->attachments[] = $mail_part;
}
// ignore "virtual" protocol parts
else if ($primary_type == 'protocol') {
continue;
}
// part is Microsoft Outlook TNEF (winmail.dat)
else if ($part_mimetype == 'application/ms-tnef') {
foreach ((array)$this->tnef_decode($mail_part) as $tpart) {
$this->mime_parts[$tpart->mime_id] = $tpart;
$this->attachments[] = $tpart;
}
}
// part is a file/attachment
else if (preg_match('/^(inline|attach)/', $mail_part->disposition) ||
$mail_part->headers['content-id'] ||
($mail_part->filename &&
(empty($mail_part->disposition) || preg_match('/^[a-z0-9!#$&.+^_-]+$/i', $mail_part->disposition)))
) {
// skip apple resource forks
if ($message_ctype_secondary == 'appledouble' && $secondary_type == 'applefile')
continue;
// part belongs to a related message and is linked
if ($mimetype == 'multipart/related'
&& ($mail_part->headers['content-id'] || $mail_part->headers['content-location'])) {
if ($mail_part->headers['content-id'])
$mail_part->content_id = preg_replace(array('/^</', '/>$/'), '', $mail_part->headers['content-id']);
if ($mail_part->headers['content-location'])
$mail_part->content_location = $mail_part->headers['content-base'] . $mail_part->headers['content-location'];
$this->inline_parts[] = $mail_part;
}
// attachment encapsulated within message/rfc822 part needs further decoding (#1486743)
else if ($part_orig_mimetype == 'message/rfc822') {
$this->parse_structure($mail_part, true);
// list as attachment as well (mostly .eml)
if (!empty($mail_part->filename))
$this->attachments[] = $mail_part;
}
// regular attachment with valid content type
// (content-type name regexp according to RFC4288.4.2)
else if (preg_match('/^[a-z0-9!#$&.+^_-]+\/[a-z0-9!#$&.+^_-]+$/i', $part_mimetype)) {
if (!$mail_part->filename)
$mail_part->filename = 'Part '.$mail_part->mime_id;
$this->attachments[] = $mail_part;
}
// attachment with invalid content type
// replace malformed content type with application/octet-stream (#1487767)
else if ($mail_part->filename) {
$mail_part->ctype_primary = 'application';
$mail_part->ctype_secondary = 'octet-stream';
$mail_part->mimetype = 'application/octet-stream';
$this->attachments[] = $mail_part;
}
}
// attachment part as message/rfc822 (#1488026)
else if ($mail_part->mimetype == 'message/rfc822') {
$this->parse_structure($mail_part);
}
}
// if this was a related part try to resolve references
if ($mimetype == 'multipart/related' && sizeof($this->inline_parts)) {
$a_replaces = array();
$img_regexp = '/^image\/(gif|jpe?g|png|tiff|bmp|svg)/';
foreach ($this->inline_parts as $inline_object) {
$part_url = $this->get_part_url($inline_object->mime_id, true);
if ($inline_object->content_id)
$a_replaces['cid:'.$inline_object->content_id] = $part_url;
if ($inline_object->content_location) {
$a_replaces[$inline_object->content_location] = $part_url;
}
if (!empty($inline_object->filename)) {
// MS Outlook sends sometimes non-related attachments as related
// In this case multipart/related message has only one text part
// We'll add all such attachments to the attachments list
if (!isset($got_html_part) && empty($inline_object->content_id)) {
$this->attachments[] = $inline_object;
}
// MS Outlook sometimes also adds non-image attachments as related
// We'll add all such attachments to the attachments list
// Warning: some browsers support pdf in <img/>
else if (!preg_match($img_regexp, $inline_object->mimetype)) {
$this->attachments[] = $inline_object;
}
// @TODO: we should fetch HTML body and find attachment's content-id
// to handle also image attachments without reference in the body
// @TODO: should we list all image attachments in text mode?
}
}
// add replace array to each content part
// (will be applied later when part body is available)
foreach ($this->parts as $i => $part) {
if ($part->type == 'content')
$this->parts[$i]->replaces = $a_replaces;
}
}
}
// message is a single part non-text
else if ($structure->filename) {
$this->attachments[] = $structure;
}
// message is a single part non-text (without filename)
else if (preg_match('/application\//i', $mimetype)) {
$structure->filename = 'Part '.$structure->mime_id;
$this->attachments[] = $structure;
}
}
/**
* Fill aflat array with references to all parts, indexed by part numbers
*
* @param rcube_message_part $part Message body structure
*/
private function get_mime_numbers(&$part)
{
if (strlen($part->mime_id))
$this->mime_parts[$part->mime_id] = &$part;
if (is_array($part->parts))
for ($i=0; $i<count($part->parts); $i++)
$this->get_mime_numbers($part->parts[$i]);
}
/**
* Decode a Microsoft Outlook TNEF part (winmail.dat)
*
* @param rcube_message_part $part Message part to decode
* @return array
*/
function tnef_decode(&$part)
{
// @TODO: attachment may be huge, hadle it via file
if (!isset($part->body)) {
$this->storage->set_folder($this->folder);
$part->body = $this->storage->get_message_part($this->uid, $part->mime_id, $part);
}
$parts = array();
$tnef = new tnef_decoder;
$tnef_arr = $tnef->decompress($part->body);
foreach ($tnef_arr as $pid => $winatt) {
$tpart = new rcube_message_part;
$tpart->filename = trim($winatt['name']);
$tpart->encoding = 'stream';
$tpart->ctype_primary = trim(strtolower($winatt['type']));
$tpart->ctype_secondary = trim(strtolower($winatt['subtype']));
$tpart->mimetype = $tpart->ctype_primary . '/' . $tpart->ctype_secondary;
$tpart->mime_id = 'winmail.' . $part->mime_id . '.' . $pid;
$tpart->size = $winatt['size'];
$tpart->body = $winatt['stream'];
$parts[] = $tpart;
unset($tnef_arr[$pid]);
}
return $parts;
}
/**
* Parse message body for UUencoded attachments bodies
*
* @param rcube_message_part $part Message part to decode
* @return array
*/
function uu_decode(&$part)
{
// @TODO: messages may be huge, hadle body via file
if (!isset($part->body)) {
$this->storage->set_folder($this->folder);
$part->body = $this->storage->get_message_part($this->uid, $part->mime_id, $part);
}
$parts = array();
// FIXME: line length is max.65?
$uu_regexp = '/begin [0-7]{3,4} ([^\n]+)\n/s';
if (preg_match_all($uu_regexp, $part->body, $matches, PREG_SET_ORDER)) {
// update message content-type
$part->ctype_primary = 'multipart';
$part->ctype_secondary = 'mixed';
$part->mimetype = $part->ctype_primary . '/' . $part->ctype_secondary;
$uu_endstring = "`\nend\n";
// add attachments to the structure
foreach ($matches as $pid => $att) {
$startpos = strpos($part->body, $att[1]) + strlen($att[1]) + 1; // "\n"
$endpos = strpos($part->body, $uu_endstring);
$filebody = substr($part->body, $startpos, $endpos-$startpos);
// remove attachments bodies from the message body
$part->body = substr_replace($part->body, "", $startpos, $endpos+strlen($uu_endstring)-$startpos);
$uupart = new rcube_message_part;
$uupart->filename = trim($att[1]);
$uupart->encoding = 'stream';
$uupart->body = convert_uudecode($filebody);
$uupart->size = strlen($uupart->body);
$uupart->mime_id = 'uu.' . $part->mime_id . '.' . $pid;
$ctype = rcube_mime::content_type($uupart->body, $uupart->filename, 'application/octet-stream', true);
$uupart->mimetype = $ctype;
list($uupart->ctype_primary, $uupart->ctype_secondary) = explode('/', $ctype);
$parts[] = $uupart;
unset($matches[$pid]);
}
// remove attachments bodies from the message body
$part->body = preg_replace($uu_regexp, '', $part->body);
}
return $parts;
}
/**
* Deprecated methods (to be removed)
*/
public static function unfold_flowed($text)
{
return rcube_mime::unfold_flowed($text);
}
public static function format_flowed($text, $length = 72)
{
return rcube_mime::format_flowed($text, $length);
}
}
diff --git a/program/include/rcube_output.php b/program/include/rcube_output.php
index 9aa7c9eba..5c582e67c 100644
--- a/program/include/rcube_output.php
+++ b/program/include/rcube_output.php
@@ -1,283 +1,283 @@
<?php
/*
+-----------------------------------------------------------------------+
| program/include/rcube_output.php |
| |
| This file is part of the Roundcube PHP suite |
| Copyright (C) 2005-2012 The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| CONTENTS: |
| Abstract class for output generation |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
| Author: Aleksander Machniak <alec@alec.pl> |
+-----------------------------------------------------------------------+
*/
/**
* Class for output generation
*
* @package HTML
*/
abstract class rcube_output
{
public $browser;
public $type = 'html';
public $ajax_call = false;
public $framed = false;
protected $app;
protected $config;
protected $charset = RCMAIL_CHARSET;
protected $env = array();
protected $pagetitle = '';
protected $object_handlers = array();
/**
* Object constructor
*/
public function __construct($task = null, $framed = false)
{
- $this->app = rcmail::get_instance();
+ $this->app = rcube::get_instance();
$this->config = $this->app->config;
$this->browser = new rcube_browser();
}
/**
* Magic getter
*/
public function __get($var)
{
// allow read-only access to $env
if ($var == 'env')
return $this->env;
return null;
}
/**
* Setter for page title
*
* @param string $title Page title
*/
public function set_pagetitle($title)
{
$this->pagetitle = $title;
}
/**
* Setter for output charset.
* To be specified in a meta tag and sent as http-header
*
* @param string $charset Charset name
*/
public function set_charset($charset)
{
$this->charset = $charset;
}
/**
* Getter for output charset
*
* @return string Output charset name
*/
public function get_charset()
{
return $this->charset;
}
/**
* Getter for the current skin path property
*/
public function get_skin_path()
{
return $this->config->get('skin_path');
}
/**
* Set environment variable
*
* @param string $name Property name
* @param mixed $value Property value
*/
public function set_env($name, $value)
{
$this->env[$name] = $value;
}
/**
* Environment variable getter.
*
* @param string $name Property name
*
* @return mixed Property value
*/
public function get_env($name)
{
return $this->env[$name];
}
/**
* Delete all stored env variables and commands
*/
public function reset()
{
$this->env = array();
$this->object_handlers = array();
$this->pagetitle = '';
}
/**
* Call a client method
*
* @param string Method to call
* @param ... Additional arguments
*/
abstract function command();
/**
* Add a localized label to the client environment
*/
abstract function add_label();
/**
* Invoke display_message command
*
* @param string $message Message to display
* @param string $type Message type [notice|confirm|error]
* @param array $vars Key-value pairs to be replaced in localized text
* @param boolean $override Override last set message
* @param int $timeout Message displaying time in seconds
*/
abstract function show_message($message, $type = 'notice', $vars = null, $override = true, $timeout = 0);
/**
* Redirect to a certain url.
*
* @param mixed $p Either a string with the action or url parameters as key-value pairs
* @param int $delay Delay in seconds
*/
abstract function redirect($p = array(), $delay = 1);
/**
* Send output to the client.
*/
abstract function send();
/**
* Register a template object handler
*
* @param string Object name
* @param string Function name to call
* @return void
*/
public function add_handler($obj, $func)
{
$this->object_handlers[$obj] = $func;
}
/**
* Register a list of template object handlers
*
* @param array Hash array with object=>handler pairs
* @return void
*/
public function add_handlers($arr)
{
$this->object_handlers = array_merge($this->object_handlers, $arr);
}
/**
* Send HTTP headers to prevent caching a page
*/
public function nocacheing_headers()
{
if (headers_sent()) {
return;
}
header("Expires: ".gmdate("D, d M Y H:i:s")." GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
// Request browser to disable DNS prefetching (CVE-2010-0464)
header("X-DNS-Prefetch-Control: off");
// We need to set the following headers to make downloads work using IE in HTTPS mode.
if ($this->browser->ie && rcube_utils::https_check()) {
header('Pragma: private');
header("Cache-Control: private, must-revalidate");
}
else {
header("Cache-Control: private, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
}
}
/**
* Send header with expire date 30 days in future
*
* @param int Expiration time in seconds
*/
public function future_expire_header($offset = 2600000)
{
if (headers_sent())
return;
header("Expires: " . gmdate("D, d M Y H:i:s", time()+$offset) . " GMT");
header("Cache-Control: max-age=$offset");
header("Pragma: ");
}
/**
* Show error page and terminate script execution
*
* @param int $code Error code
* @param string $message Error message
*/
public function raise_error($code, $message)
{
// STUB: to be overloaded by specific output classes
fputs(STDERR, "Error $code: $message\n");
exit(-1);
}
/**
* Convert a variable into a javascript object notation
*
* @param mixed Input value
*
* @return string Serialized JSON string
*/
public static function json_serialize($input)
{
$input = rcube_charset::clean($input);
// sometimes even using rcube_charset::clean() the input contains invalid UTF-8 sequences
// that's why we have @ here
return @json_encode($input);
}
}
diff --git a/program/include/rcube_plugin.php b/program/include/rcube_plugin.php
index c1035733b..45088850a 100644
--- a/program/include/rcube_plugin.php
+++ b/program/include/rcube_plugin.php
@@ -1,359 +1,359 @@
<?php
/*
+-----------------------------------------------------------------------+
| program/include/rcube_plugin.php |
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2008-2009, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
| PURPOSE: |
| Abstract plugins interface/class |
| All plugins need to extend this class |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
*/
/**
* Plugin interface class
*
* @package PluginAPI
*/
abstract class rcube_plugin
{
/**
* Class name of the plugin instance
*
* @var string
*/
public $ID;
/**
* Instance of Plugin API
*
* @var rcube_plugin_api
*/
public $api;
/**
* Regular expression defining task(s) to bind with
*
* @var string
*/
public $task;
/**
* Disables plugin in AJAX requests
*
* @var boolean
*/
public $noajax = false;
/**
* Disables plugin in framed mode
*
* @var boolean
*/
public $noframe = false;
protected $home;
protected $urlbase;
private $mytask;
/**
* Default constructor.
*
* @param rcube_plugin_api $api Plugin API
*/
public function __construct($api)
{
$this->ID = get_class($this);
$this->api = $api;
$this->home = $api->dir . $this->ID;
$this->urlbase = $api->url . $this->ID . '/';
}
/**
* Initialization method, needs to be implemented by the plugin itself
*/
abstract function init();
/**
* Attempt to load the given plugin which is required for the current plugin
*
* @param string Plugin name
* @return boolean True on success, false on failure
*/
public function require_plugin($plugin_name)
{
return $this->api->load_plugin($plugin_name);
}
/**
* Load local config file from plugins directory.
* The loaded values are patched over the global configuration.
*
* @param string $fname Config file name relative to the plugin's folder
* @return boolean True on success, false on failure
*/
public function load_config($fname = 'config.inc.php')
{
$fpath = $this->home.'/'.$fname;
$rcube = rcube::get_instance();
if (is_file($fpath) && !$rcube->config->load_from_file($fpath)) {
rcube::raise_error(array(
'code' => 527, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Failed to load config from $fpath"), true, false);
return false;
}
return true;
}
/**
* Register a callback function for a specific (server-side) hook
*
* @param string $hook Hook name
* @param mixed $callback Callback function as string or array with object reference and method name
*/
public function add_hook($hook, $callback)
{
$this->api->register_hook($hook, $callback);
}
/**
* Unregister a callback function for a specific (server-side) hook.
*
* @param string $hook Hook name
* @param mixed $callback Callback function as string or array with object reference and method name
*/
public function remove_hook($hook, $callback)
{
$this->api->unregister_hook($hook, $callback);
}
/**
* Load localized texts from the plugins dir
*
* @param string $dir Directory to search in
* @param mixed $add2client Make texts also available on the client (array with list or true for all)
*/
public function add_texts($dir, $add2client = false)
{
$domain = $this->ID;
$lang = $_SESSION['language'];
$langs = array_unique(array('en_US', $lang));
$locdir = slashify(realpath(slashify($this->home) . $dir));
$texts = array();
// Language aliases used to find localization in similar lang, see below
$aliases = array(
'de_CH' => 'de_DE',
'es_AR' => 'es_ES',
'fa_AF' => 'fa_IR',
'nl_BE' => 'nl_NL',
'pt_BR' => 'pt_PT',
'zh_CN' => 'zh_TW',
);
// use buffering to handle empty lines/spaces after closing PHP tag
ob_start();
foreach ($langs as $lng) {
$fpath = $locdir . $lng . '.inc';
if (is_file($fpath) && is_readable($fpath)) {
include $fpath;
$texts = (array)$labels + (array)$messages + (array)$texts;
}
else if ($lng != 'en_US') {
// Find localization in similar language (#1488401)
$alias = null;
if (!empty($aliases[$lng])) {
$alias = $aliases[$lng];
}
else if ($key = array_search($lng, $aliases)) {
$alias = $key;
}
if (!empty($alias)) {
$fpath = $locdir . $alias . '.inc';
if (is_file($fpath) && is_readable($fpath)) {
include $fpath;
$texts = (array)$labels + (array)$messages + (array)$texts;
}
}
}
}
ob_end_clean();
// prepend domain to text keys and add to the application texts repository
if (!empty($texts)) {
$add = array();
foreach ($texts as $key => $value)
$add[$domain.'.'.$key] = $value;
- $rcmail = rcmail::get_instance();
+ $rcmail = rcube::get_instance();
$rcmail->load_language($lang, $add);
// add labels to client
if ($add2client) {
$js_labels = is_array($add2client) ? array_map(array($this, 'label_map_callback'), $add2client) : array_keys($add);
$rcmail->output->add_label($js_labels);
}
}
}
/**
* Wrapper for rcmail::gettext() adding the plugin ID as domain
*
* @param string $p Message identifier
* @return string Localized text
* @see rcmail::gettext()
*/
public function gettext($p)
{
return rcube::get_instance()->gettext($p, $this->ID);
}
/**
* Register this plugin to be responsible for a specific task
*
* @param string $task Task name (only characters [a-z0-9_.-] are allowed)
*/
public function register_task($task)
{
if ($this->api->register_task($task, $this->ID))
$this->mytask = $task;
}
/**
* Register a handler for a specific client-request action
*
* The callback will be executed upon a request like /?_task=mail&_action=plugin.myaction
*
* @param string $action Action name (should be unique)
* @param mixed $callback Callback function as string or array with object reference and method name
*/
public function register_action($action, $callback)
{
$this->api->register_action($action, $this->ID, $callback, $this->mytask);
}
/**
* Register a handler function for a template object
*
* When parsing a template for display, tags like <roundcube:object name="plugin.myobject" />
* will be replaced by the return value if the registered callback function.
*
* @param string $name Object name (should be unique and start with 'plugin.')
* @param mixed $callback Callback function as string or array with object reference and method name
*/
public function register_handler($name, $callback)
{
$this->api->register_handler($name, $this->ID, $callback);
}
/**
* Make this javascipt file available on the client
*
* @param string $fn File path; absolute or relative to the plugin directory
*/
public function include_script($fn)
{
$this->api->include_script($this->resource_url($fn));
}
/**
* Make this stylesheet available on the client
*
* @param string $fn File path; absolute or relative to the plugin directory
*/
public function include_stylesheet($fn)
{
$this->api->include_stylesheet($this->resource_url($fn));
}
/**
* Append a button to a certain container
*
* @param array $p Hash array with named parameters (as used in skin templates)
* @param string $container Container name where the buttons should be added to
* @see rcube_remplate::button()
*/
public function add_button($p, $container)
{
if ($this->api->output->type == 'html') {
// fix relative paths
foreach (array('imagepas', 'imageact', 'imagesel') as $key)
if ($p[$key])
$p[$key] = $this->api->url . $this->resource_url($p[$key]);
$this->api->add_content($this->api->output->button($p), $container);
}
}
/**
* Generate an absolute URL to the given resource within the current
* plugin directory
*
* @param string $fn The file name
* @return string Absolute URL to the given resource
*/
public function url($fn)
{
return $this->api->url . $this->resource_url($fn);
}
/**
* Make the given file name link into the plugin directory
*
* @param string $fn Filename
*/
private function resource_url($fn)
{
if ($fn[0] != '/' && !preg_match('|^https?://|i', $fn))
return $this->ID . '/' . $fn;
else
return $fn;
}
/**
* Provide path to the currently selected skin folder within the plugin directory
* with a fallback to the default skin folder.
*
* @return string Skin path relative to plugins directory
*/
public function local_skin_path()
{
$rcmail = rcube::get_instance();
foreach (array($rcmail->config->get('skin'), 'larry') as $skin) {
$skin_path = 'skins/' . $skin;
if (is_dir(realpath(slashify($this->home) . $skin_path)))
break;
}
return $skin_path;
}
/**
* Callback function for array_map
*
* @param string $key Array key.
* @return string
*/
private function label_map_callback($key)
{
return $this->ID.'.'.$key;
}
}
diff --git a/program/include/rcube_plugin_api.php b/program/include/rcube_plugin_api.php
index 9ef68cab9..107c81026 100644
--- a/program/include/rcube_plugin_api.php
+++ b/program/include/rcube_plugin_api.php
@@ -1,494 +1,494 @@
<?php
/*
+-----------------------------------------------------------------------+
| program/include/rcube_plugin_api.php |
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2008-2011, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
| PURPOSE: |
| Plugins repository |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
*/
// location where plugins are loade from
if (!defined('RCMAIL_PLUGINS_DIR'))
define('RCMAIL_PLUGINS_DIR', INSTALL_PATH . 'plugins/');
/**
* The plugin loader and global API
*
* @package PluginAPI
*/
class rcube_plugin_api
{
- static private $instance;
+ static protected $instance;
public $dir;
public $url = 'plugins/';
public $task = '';
public $output;
public $handlers = array();
- private $plugins = array();
- private $tasks = array();
- private $actions = array();
- private $actionmap = array();
- private $objectsmap = array();
- private $template_contents = array();
- private $active_hook = false;
+ protected $plugins = array();
+ protected $tasks = array();
+ protected $actions = array();
+ protected $actionmap = array();
+ protected $objectsmap = array();
+ protected $template_contents = array();
+ protected $active_hook = false;
// Deprecated names of hooks, will be removed after 0.5-stable release
- private $deprecated_hooks = array(
+ protected $deprecated_hooks = array(
'create_user' => 'user_create',
'kill_session' => 'session_destroy',
'upload_attachment' => 'attachment_upload',
'save_attachment' => 'attachment_save',
'get_attachment' => 'attachment_get',
'cleanup_attachments' => 'attachments_cleanup',
'display_attachment' => 'attachment_display',
'remove_attachment' => 'attachment_delete',
'outgoing_message_headers' => 'message_outgoing_headers',
'outgoing_message_body' => 'message_outgoing_body',
'address_sources' => 'addressbooks_list',
'get_address_book' => 'addressbook_get',
'create_contact' => 'contact_create',
'save_contact' => 'contact_update',
'contact_save' => 'contact_update',
'delete_contact' => 'contact_delete',
'manage_folders' => 'folders_list',
'list_mailboxes' => 'mailboxes_list',
'save_preferences' => 'preferences_save',
'user_preferences' => 'preferences_list',
'list_prefs_sections' => 'preferences_sections_list',
'list_identities' => 'identities_list',
'create_identity' => 'identity_create',
'delete_identity' => 'identity_delete',
'save_identity' => 'identity_update',
'identity_save' => 'identity_update',
// to be removed after 0.8
'imap_init' => 'storage_init',
'mailboxes_list' => 'storage_folders',
);
/**
* This implements the 'singleton' design pattern
*
* @return rcube_plugin_api The one and only instance if this class
*/
static function get_instance()
{
if (!self::$instance) {
self::$instance = new rcube_plugin_api();
}
return self::$instance;
}
/**
* Private constructor
*/
- private function __construct()
+ protected function __construct()
{
$this->dir = slashify(RCMAIL_PLUGINS_DIR);
}
/**
* Initialize plugin engine
*
* This has to be done after rcmail::load_gui() or rcmail::json_init()
* was called because plugins need to have access to rcmail->output
*
* @param object rcube Instance of the rcube base class
* @param string Current application task (used for conditional plugin loading)
*/
public function init($app, $task = '')
{
$this->task = $task;
$this->output = $app->output;
// register an internal hook
$this->register_hook('template_container', array($this, 'template_container_hook'));
// maybe also register a shudown function which triggers shutdown functions of all plugin objects
}
/**
* Load and init all enabled plugins
*
* This has to be done after rcmail::load_gui() or rcmail::json_init()
* was called because plugins need to have access to rcmail->output
*
* @param array List of configured plugins to load
* @param array List of plugins required by the application
*/
public function load_plugins($plugins_enabled, $required_plugins = array())
{
foreach ($plugins_enabled as $plugin_name) {
$this->load_plugin($plugin_name);
}
// check existance of all required core plugins
foreach ($required_plugins as $plugin_name) {
$loaded = false;
foreach ($this->plugins as $plugin) {
if ($plugin instanceof $plugin_name) {
$loaded = true;
break;
}
}
// load required core plugin if no derivate was found
if (!$loaded)
$loaded = $this->load_plugin($plugin_name);
// trigger fatal error if still not loaded
if (!$loaded) {
rcube::raise_error(array('code' => 520, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Requried plugin $plugin_name was not loaded"), true, true);
}
}
}
/**
* Load the specified plugin
*
* @param string Plugin name
* @return boolean True on success, false if not loaded or failure
*/
public function load_plugin($plugin_name)
{
static $plugins_dir;
if (!$plugins_dir) {
$dir = dir($this->dir);
$plugins_dir = unslashify($dir->path);
}
// plugin already loaded
if ($this->plugins[$plugin_name] || class_exists($plugin_name, false))
return true;
$fn = $plugins_dir . DIRECTORY_SEPARATOR . $plugin_name . DIRECTORY_SEPARATOR . $plugin_name . '.php';
if (file_exists($fn)) {
include($fn);
// instantiate class if exists
if (class_exists($plugin_name, false)) {
$plugin = new $plugin_name($this);
// check inheritance...
if (is_subclass_of($plugin, 'rcube_plugin')) {
// ... task, request type and framed mode
if ((!$plugin->task || preg_match('/^('.$plugin->task.')$/i', $this->task))
&& (!$plugin->noajax || (is_object($this->output) && $this->output->type == 'html'))
&& (!$plugin->noframe || empty($_REQUEST['_framed']))
) {
$plugin->init();
$this->plugins[$plugin_name] = $plugin;
}
return true;
}
}
else {
rcube::raise_error(array('code' => 520, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "No plugin class $plugin_name found in $fn"), true, false);
}
}
else {
rcube::raise_error(array('code' => 520, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Failed to load plugin file $fn"), true, false);
}
return false;
}
/**
* Allows a plugin object to register a callback for a certain hook
*
* @param string $hook Hook name
* @param mixed $callback String with global function name or array($obj, 'methodname')
*/
public function register_hook($hook, $callback)
{
if (is_callable($callback)) {
if (isset($this->deprecated_hooks[$hook])) {
rcube::raise_error(array('code' => 522, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Deprecated hook name. ".$hook.' -> '.$this->deprecated_hooks[$hook]), true, false);
$hook = $this->deprecated_hooks[$hook];
}
$this->handlers[$hook][] = $callback;
}
else
rcube::raise_error(array('code' => 521, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Invalid callback function for $hook"), true, false);
}
/**
* Allow a plugin object to unregister a callback.
*
* @param string $hook Hook name
* @param mixed $callback String with global function name or array($obj, 'methodname')
*/
public function unregister_hook($hook, $callback)
{
$callback_id = array_search($callback, $this->handlers[$hook]);
if ($callback_id !== false) {
unset($this->handlers[$hook][$callback_id]);
}
}
/**
* Triggers a plugin hook.
* This is called from the application and executes all registered handlers
*
* @param string $hook Hook name
* @param array $args Named arguments (key->value pairs)
* @return array The (probably) altered hook arguments
*/
public function exec_hook($hook, $args = array())
{
if (!is_array($args))
$args = array('arg' => $args);
$args += array('abort' => false);
$this->active_hook = $hook;
foreach ((array)$this->handlers[$hook] as $callback) {
$ret = call_user_func($callback, $args);
if ($ret && is_array($ret))
$args = $ret + $args;
if ($args['abort'])
break;
}
$this->active_hook = false;
return $args;
}
/**
* Let a plugin register a handler for a specific request
*
* @param string $action Action name (_task=mail&_action=plugin.foo)
* @param string $owner Plugin name that registers this action
* @param mixed $callback Callback: string with global function name or array($obj, 'methodname')
* @param string $task Task name registered by this plugin
*/
public function register_action($action, $owner, $callback, $task = null)
{
// check action name
if ($task)
$action = $task.'.'.$action;
else if (strpos($action, 'plugin.') !== 0)
$action = 'plugin.'.$action;
// can register action only if it's not taken or registered by myself
if (!isset($this->actionmap[$action]) || $this->actionmap[$action] == $owner) {
$this->actions[$action] = $callback;
$this->actionmap[$action] = $owner;
}
else {
rcube::raise_error(array('code' => 523, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Cannot register action $action; already taken by another plugin"), true, false);
}
}
/**
* This method handles requests like _task=mail&_action=plugin.foo
* It executes the callback function that was registered with the given action.
*
* @param string $action Action name
*/
public function exec_action($action)
{
if (isset($this->actions[$action])) {
call_user_func($this->actions[$action]);
}
else {
rcube::raise_error(array('code' => 524, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "No handler found for action $action"), true, true);
}
}
/**
* Register a handler function for template objects
*
* @param string $name Object name
* @param string $owner Plugin name that registers this action
* @param mixed $callback Callback: string with global function name or array($obj, 'methodname')
*/
public function register_handler($name, $owner, $callback)
{
// check name
if (strpos($name, 'plugin.') !== 0)
$name = 'plugin.'.$name;
// can register handler only if it's not taken or registered by myself
if (is_object($this->output) && (!isset($this->objectsmap[$name]) || $this->objectsmap[$name] == $owner)) {
$this->output->add_handler($name, $callback);
$this->objectsmap[$name] = $owner;
}
else {
rcube::raise_error(array('code' => 525, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Cannot register template handler $name; already taken by another plugin or no output object available"), true, false);
}
}
/**
* Register this plugin to be responsible for a specific task
*
* @param string $task Task name (only characters [a-z0-9_.-] are allowed)
* @param string $owner Plugin name that registers this action
*/
public function register_task($task, $owner)
{
if ($task != asciiwords($task)) {
rcube::raise_error(array('code' => 526, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Invalid task name: $task. Only characters [a-z0-9_.-] are allowed"), true, false);
}
else if (in_array($task, rcmail::$main_tasks)) {
rcube::raise_error(array('code' => 526, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Cannot register taks $task; already taken by another plugin or the application itself"), true, false);
}
else {
$this->tasks[$task] = $owner;
rcmail::$main_tasks[] = $task;
return true;
}
return false;
}
/**
* Checks whether the given task is registered by a plugin
*
* @param string $task Task name
* @return boolean True if registered, otherwise false
*/
public function is_plugin_task($task)
{
return $this->tasks[$task] ? true : false;
}
/**
* Check if a plugin hook is currently processing.
* Mainly used to prevent loops and recursion.
*
* @param string $hook Hook to check (optional)
* @return boolean True if any/the given hook is currently processed, otherwise false
*/
public function is_processing($hook = null)
{
return $this->active_hook && (!$hook || $this->active_hook == $hook);
}
/**
* Include a plugin script file in the current HTML page
*
* @param string $fn Path to script
*/
public function include_script($fn)
{
if (is_object($this->output) && $this->output->type == 'html') {
$src = $this->resource_url($fn);
$this->output->add_header(html::tag('script', array('type' => "text/javascript", 'src' => $src)));
}
}
/**
* Include a plugin stylesheet in the current HTML page
*
* @param string $fn Path to stylesheet
*/
public function include_stylesheet($fn)
{
if (is_object($this->output) && $this->output->type == 'html') {
$src = $this->resource_url($fn);
$this->output->include_css($src);
}
}
/**
* Save the given HTML content to be added to a template container
*
* @param string $html HTML content
* @param string $container Template container identifier
*/
public function add_content($html, $container)
{
$this->template_contents[$container] .= $html . "\n";
}
/**
* Returns list of loaded plugins names
*
* @return array List of plugin names
*/
public function loaded_plugins()
{
return array_keys($this->plugins);
}
/**
* Callback for template_container hooks
*
* @param array $attrib
* @return array
*/
- private function template_container_hook($attrib)
+ protected function template_container_hook($attrib)
{
$container = $attrib['name'];
return array('content' => $attrib['content'] . $this->template_contents[$container]);
}
/**
* Make the given file name link into the plugins directory
*
* @param string $fn Filename
* @return string
*/
- private function resource_url($fn)
+ protected function resource_url($fn)
{
if ($fn[0] != '/' && !preg_match('|^https?://|i', $fn))
return $this->url . $fn;
else
return $fn;
}
}
diff --git a/program/include/rcube_string_replacer.php b/program/include/rcube_string_replacer.php
index c29f0e476..ad55dd87b 100644
--- a/program/include/rcube_string_replacer.php
+++ b/program/include/rcube_string_replacer.php
@@ -1,178 +1,194 @@
<?php
/*
+-----------------------------------------------------------------------+
| program/include/rcube_string_replacer.php |
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2009, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
| PURPOSE: |
| Handle string replacements based on preg_replace_callback |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
*/
/**
* Helper class for string replacements based on preg_replace_callback
*
* @package Core
*/
class rcube_string_replacer
{
public static $pattern = '/##str_replacement\[([0-9]+)\]##/';
public $mailto_pattern;
public $link_pattern;
private $values = array();
function __construct()
{
// Simplified domain expression for UTF8 characters handling
// Support unicode/punycode in top-level domain part
- $utf_domain = '[^?&@"\'\\/()\s\r\t\n]+\\.([^\\x00-\\x2f\\x3b-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,})';
+ $utf_domain = '[^?&@"\'\\/()\s\r\t\n]+\\.([^\\x00-\\x2f\\x3b-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-zA-Z0-9]{2,})';
$url1 = '.:;,';
- $url2 = 'a-z0-9%=#@+?!&\\/_~\\[\\]{}-';
+ $url2 = 'a-zA-Z0-9%=#$@+?!&\\/_~\\[\\]{}\*-';
- $this->link_pattern = "/([\w]+:\/\/|\Wwww\.)($utf_domain([$url1]?[$url2]+)*)/i";
+ $this->link_pattern = "/([\w]+:\/\/|\W[Ww][Ww][Ww]\.|^[Ww][Ww][Ww]\.)($utf_domain([$url1]?[$url2]+)*)/";
$this->mailto_pattern = "/("
."[-\w!\#\$%&\'*+~\/^`|{}=]+(?:\.[-\w!\#\$%&\'*+~\/^`|{}=]+)*" // local-part
."@$utf_domain" // domain-part
."(\?[$url1$url2]+)?" // e.g. ?subject=test...
- .")/i";
+ .")/";
}
/**
* Add a string to the internal list
*
* @param string String value
* @return int Index of value for retrieval
*/
public function add($str)
{
$i = count($this->values);
$this->values[$i] = $str;
return $i;
}
/**
* Build replacement string
*/
public function get_replacement($i)
{
return '##str_replacement['.$i.']##';
}
/**
* Callback function used to build HTML links around URL strings
*
* @param array Matches result from preg_replace_callback
* @return int Index of saved string value
*/
public function link_callback($matches)
{
$i = -1;
$scheme = strtolower($matches[1]);
- if (preg_match('!^(http|ftp|file)s?://!', $scheme)) {
+ if (preg_match('!^(http|ftp|file)s?://!i', $scheme)) {
$url = $matches[1] . $matches[2];
}
- else if (preg_match('/^(\W)www\.$/', $matches[1], $m)) {
- $url = 'www.' . $matches[2];
+ else if (preg_match('/^(\W*)(www\.)$/i', $matches[1], $m)) {
+ $url = $m[2] . $matches[2];
$url_prefix = 'http://';
$prefix = $m[1];
}
if ($url) {
$suffix = $this->parse_url_brackets($url);
$i = $this->add($prefix . html::a(array(
'href' => $url_prefix . $url,
'target' => '_blank'
), rcmail::Q($url)) . $suffix);
}
// Return valid link for recognized schemes, otherwise, return the unmodified string for unrecognized schemes.
return $i >= 0 ? $this->get_replacement($i) : $matches[0];
}
/**
* Callback function used to build mailto: links around e-mail strings
*
* @param array Matches result from preg_replace_callback
* @return int Index of saved string value
*/
public function mailto_callback($matches)
{
$href = $matches[1];
$suffix = $this->parse_url_brackets($href);
$i = $this->add(html::a(array(
'href' => 'mailto:' . $href,
'onclick' => "return ".rcmail::JS_OBJECT_NAME.".command('compose','".rcmail::JQ($href)."',this)",
), rcmail::Q($href)) . $suffix);
return $i >= 0 ? $this->get_replacement($i) : '';
}
/**
* Look up the index from the preg_replace matches array
* and return the substitution value.
*
* @param array Matches result from preg_replace_callback
* @return string Value at index $matches[1]
*/
public function replace_callback($matches)
{
return $this->values[$matches[1]];
}
+ /**
+ * Replace all defined (link|mailto) patterns with replacement string
+ *
+ * @param string $str Text
+ *
+ * @return string Text
+ */
+ public function replace($str)
+ {
+ // search for patterns like links and e-mail addresses
+ $str = preg_replace_callback($this->link_pattern, array($this, 'link_callback'), $str);
+ $str = preg_replace_callback($this->mailto_pattern, array($this, 'mailto_callback'), $str);
+
+ return $str;
+ }
+
/**
* Replace substituted strings with original values
*/
public function resolve($str)
{
return preg_replace_callback(self::$pattern, array($this, 'replace_callback'), $str);
}
/**
* Fixes bracket characters in URL handling
*/
public static function parse_url_brackets(&$url)
{
// #1487672: special handling of square brackets,
// URL regexp allows [] characters in URL, for example:
// "http://example.com/?a[b]=c". However we need to handle
// properly situation when a bracket is placed at the end
// of the link e.g. "[http://example.com]"
if (preg_match('/(\\[|\\])/', $url)) {
$in = false;
for ($i=0, $len=strlen($url); $i<$len; $i++) {
if ($url[$i] == '[') {
if ($in)
break;
$in = true;
}
else if ($url[$i] == ']') {
if (!$in)
break;
$in = false;
}
}
if ($i<$len) {
$suffix = substr($url, $i);
$url = substr($url, 0, $i);
}
}
return $suffix;
}
}
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index c21202588..39bccac16 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -1,1816 +1,1815 @@
<?php
/*
+-----------------------------------------------------------------------+
| program/steps/mail/func.inc |
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2005-2010, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
| PURPOSE: |
| Provide webmail functionality and GUI objects |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
*/
// setup some global vars used by mail steps
$SENT_MBOX = $RCMAIL->config->get('sent_mbox');
$DRAFTS_MBOX = $RCMAIL->config->get('drafts_mbox');
$SEARCH_MODS_DEFAULT = array(
'*' => array('subject'=>1, 'from'=>1),
$SENT_MBOX => array('subject'=>1, 'to'=>1),
$DRAFTS_MBOX => array('subject'=>1, 'to'=>1)
);
// always instantiate storage object (but not connect to server yet)
$RCMAIL->storage_init();
// set imap properties and session vars
if (strlen(trim($mbox = get_input_value('_mbox', RCUBE_INPUT_GPC, true))))
$RCMAIL->storage->set_folder(($_SESSION['mbox'] = $mbox));
else if ($RCMAIL->storage)
$_SESSION['mbox'] = $RCMAIL->storage->get_folder();
if (!empty($_GET['_page']))
$RCMAIL->storage->set_page(($_SESSION['page'] = intval($_GET['_page'])));
// set default sort col/order to session
if (!isset($_SESSION['sort_col']))
$_SESSION['sort_col'] = !empty($CONFIG['message_sort_col']) ? $CONFIG['message_sort_col'] : '';
if (!isset($_SESSION['sort_order']))
$_SESSION['sort_order'] = strtoupper($CONFIG['message_sort_order']) == 'ASC' ? 'ASC' : 'DESC';
// set threads mode
$a_threading = $RCMAIL->config->get('message_threading', array());
if (isset($_GET['_threads'])) {
if ($_GET['_threads'])
$a_threading[$_SESSION['mbox']] = true;
else
unset($a_threading[$_SESSION['mbox']]);
$RCMAIL->user->save_prefs(array('message_threading' => $a_threading));
}
$RCMAIL->storage->set_threading($a_threading[$_SESSION['mbox']]);
// set message set for search result
if (!empty($_REQUEST['_search']) && isset($_SESSION['search'])
&& $_SESSION['search_request'] == $_REQUEST['_search']
) {
$RCMAIL->storage->set_search_set($_SESSION['search']);
$OUTPUT->set_env('search_request', $_REQUEST['_search']);
$OUTPUT->set_env('search_text', $_SESSION['last_text_search']);
}
// set main env variables, labels and page title
if (empty($RCMAIL->action) || $RCMAIL->action == 'list') {
// connect to storage server and trigger error on failure
$RCMAIL->storage_connect();
$mbox_name = $RCMAIL->storage->get_folder();
if (empty($RCMAIL->action)) {
// initialize searching result if search_filter is used
if ($_SESSION['search_filter'] && $_SESSION['search_filter'] != 'ALL') {
$search_request = md5($mbox_name.$_SESSION['search_filter']);
$RCMAIL->storage->search($mbox_name, $_SESSION['search_filter'], RCMAIL_CHARSET, rcmail_sort_column());
$_SESSION['search'] = $RCMAIL->storage->get_search_set();
$_SESSION['search_request'] = $search_request;
$OUTPUT->set_env('search_request', $search_request);
}
$search_mods = $RCMAIL->config->get('search_mods', $SEARCH_MODS_DEFAULT);
$OUTPUT->set_env('search_mods', $search_mods);
}
$threading = (bool) $RCMAIL->storage->get_threading();
// set current mailbox and some other vars in client environment
$OUTPUT->set_env('mailbox', $mbox_name);
$OUTPUT->set_env('pagesize', $RCMAIL->storage->get_pagesize());
$OUTPUT->set_env('delimiter', $RCMAIL->storage->get_hierarchy_delimiter());
$OUTPUT->set_env('threading', $threading);
$OUTPUT->set_env('threads', $threading || $RCMAIL->storage->get_capability('THREAD'));
$OUTPUT->set_env('preview_pane_mark_read', $RCMAIL->config->get('preview_pane_mark_read', 0));
if ($RCMAIL->storage->get_capability('QUOTA')) {
$OUTPUT->set_env('quota', true);
}
if ($CONFIG['delete_junk'])
$OUTPUT->set_env('delete_junk', true);
if ($CONFIG['flag_for_deletion'])
$OUTPUT->set_env('flag_for_deletion', true);
if ($CONFIG['read_when_deleted'])
$OUTPUT->set_env('read_when_deleted', true);
if ($CONFIG['skip_deleted'])
$OUTPUT->set_env('skip_deleted', true);
if ($CONFIG['display_next'])
$OUTPUT->set_env('display_next', true);
if ($CONFIG['forward_attachment'])
$OUTPUT->set_env('forward_attachment', true);
if ($CONFIG['trash_mbox'])
$OUTPUT->set_env('trash_mailbox', $CONFIG['trash_mbox']);
if ($CONFIG['drafts_mbox'])
$OUTPUT->set_env('drafts_mailbox', $CONFIG['drafts_mbox']);
if ($CONFIG['junk_mbox'])
$OUTPUT->set_env('junk_mailbox', $CONFIG['junk_mbox']);
if (!empty($_SESSION['browser_caps']))
$OUTPUT->set_env('browser_capabilities', $_SESSION['browser_caps']);
if (!$OUTPUT->ajax_call)
$OUTPUT->add_label('checkingmail', 'deletemessage', 'movemessagetotrash',
'movingmessage', 'copyingmessage', 'deletingmessage', 'markingmessage',
'copy', 'move', 'quota');
$OUTPUT->set_pagetitle(rcmail_localize_foldername($RCMAIL->storage->mod_folder($mbox_name)));
}
/**
* Returns 'to' if current folder is configured Sent or Drafts
* or their subfolders, otherwise returns 'from'.
*
* @return string Column name
*/
function rcmail_message_list_smart_column_name()
{
global $RCMAIL;
$delim = $RCMAIL->storage->get_hierarchy_delimiter();
$mbox = $RCMAIL->storage->get_folder();
$sent_mbox = $RCMAIL->config->get('sent_mbox');
$drafts_mbox = $RCMAIL->config->get('drafts_mbox');
if (strpos($mbox.$delim, $sent_mbox.$delim) === 0 || strpos($mbox.$delim, $drafts_mbox.$delim) === 0) {
return 'to';
}
return 'from';
}
/**
* Returns configured messages list sorting column name
* The name is context-sensitive, which means if sorting is set to 'fromto'
* it will return 'from' or 'to' according to current folder type.
*
* @return string Column name
*/
function rcmail_sort_column()
{
global $RCMAIL;
if (isset($_SESSION['sort_col'])) {
$column = $_SESSION['sort_col'];
}
else {
$column = $RCMAIL->config->get('message_sort_col');
}
// get name of smart From/To column in folder context
if ($column == 'fromto') {
$column = rcmail_message_list_smart_column_name();
}
return $column;
}
/**
* Returns configured message list sorting order
*
* @return string Sorting order (ASC|DESC)
*/
function rcmail_sort_order()
{
global $RCMAIL;
if (isset($_SESSION['sort_order'])) {
return $_SESSION['sort_order'];
}
return $RCMAIL->config->get('message_sort_order');
}
/**
* return the message list as HTML table
*/
function rcmail_message_list($attrib)
{
global $CONFIG, $OUTPUT;
// add some labels to client
$OUTPUT->add_label('from', 'to');
// add id to message list table if not specified
if (!strlen($attrib['id']))
$attrib['id'] = 'rcubemessagelist';
// define list of cols to be displayed based on parameter or config
if (empty($attrib['columns'])) {
$a_show_cols = is_array($CONFIG['list_cols']) ? $CONFIG['list_cols'] : array('subject');
$OUTPUT->set_env('col_movable', !in_array('list_cols', (array)$CONFIG['dont_override']));
}
else {
$a_show_cols = preg_split('/[\s,;]+/', strip_quotes($attrib['columns']));
$attrib['columns'] = $a_show_cols;
}
// save some variables for use in ajax list
$_SESSION['list_attrib'] = $attrib;
// make sure 'threads' and 'subject' columns are present
if (!in_array('subject', $a_show_cols))
array_unshift($a_show_cols, 'subject');
if (!in_array('threads', $a_show_cols))
array_unshift($a_show_cols, 'threads');
$skin_path = $_SESSION['skin_path'] = $CONFIG['skin_path'];
// set client env
$OUTPUT->add_gui_object('messagelist', $attrib['id']);
$OUTPUT->set_env('autoexpand_threads', intval($CONFIG['autoexpand_threads']));
$OUTPUT->set_env('sort_col', $_SESSION['sort_col']);
$OUTPUT->set_env('sort_order', $_SESSION['sort_order']);
$OUTPUT->set_env('messages', array());
$OUTPUT->set_env('coltypes', $a_show_cols);
$OUTPUT->include_script('list.js');
$thead = '';
foreach (rcmail_message_list_head($attrib, $a_show_cols) as $cell)
$thead .= html::tag('td', array('class' => $cell['className'], 'id' => $cell['id']), $cell['html']);
return html::tag('table',
$attrib,
html::tag('thead', null, html::tag('tr', null, $thead)) .
html::tag('tbody', null, ''),
array('style', 'class', 'id', 'cellpadding', 'cellspacing', 'border', 'summary'));
}
/**
* return javascript commands to add rows to the message list
*/
function rcmail_js_message_list($a_headers, $insert_top=FALSE, $a_show_cols=null)
{
global $CONFIG, $RCMAIL, $OUTPUT;
if (empty($a_show_cols)) {
if (!empty($_SESSION['list_attrib']['columns']))
$a_show_cols = $_SESSION['list_attrib']['columns'];
else
$a_show_cols = is_array($CONFIG['list_cols']) ? $CONFIG['list_cols'] : array('subject');
}
else {
if (!is_array($a_show_cols))
$a_show_cols = preg_split('/[\s,;]+/', strip_quotes($a_show_cols));
$head_replace = true;
}
$mbox = $RCMAIL->storage->get_folder();
// make sure 'threads' and 'subject' columns are present
if (!in_array('subject', $a_show_cols))
array_unshift($a_show_cols, 'subject');
if (!in_array('threads', $a_show_cols))
array_unshift($a_show_cols, 'threads');
$_SESSION['list_attrib']['columns'] = $a_show_cols;
// Make sure there are no duplicated columns (#1486999)
$a_show_cols = array_unique($a_show_cols);
// Plugins may set header's list_cols/list_flags and other rcube_message_header variables
// and list columns
$plugin = $RCMAIL->plugins->exec_hook('messages_list',
array('messages' => $a_headers, 'cols' => $a_show_cols));
$a_show_cols = $plugin['cols'];
$a_headers = $plugin['messages'];
$thead = $head_replace ? rcmail_message_list_head($_SESSION['list_attrib'], $a_show_cols) : NULL;
// get name of smart From/To column in folder context
if (($f = array_search('fromto', $a_show_cols)) !== false) {
$smart_col = rcmail_message_list_smart_column_name();
}
$OUTPUT->command('set_message_coltypes', $a_show_cols, $thead, $smart_col);
if (empty($a_headers))
return;
// remove 'threads', 'attachment', 'flag', 'status' columns, we don't need them here
foreach (array('threads', 'attachment', 'flag', 'status', 'priority') as $col) {
if (($key = array_search($col, $a_show_cols)) !== FALSE)
unset($a_show_cols[$key]);
}
// loop through message headers
foreach ($a_headers as $n => $header) {
if (empty($header))
continue;
$a_msg_cols = array();
$a_msg_flags = array();
// format each col; similar as in rcmail_message_list()
foreach ($a_show_cols as $col) {
$col_name = $col == 'fromto' ? $smart_col : $col;
if (in_array($col_name, array('from', 'to', 'cc', 'replyto')))
$cont = rcmail_address_string($header->$col_name, 3, false, null, $header->charset);
else if ($col == 'subject') {
$cont = trim(rcube_mime::decode_header($header->$col, $header->charset));
if (!$cont) $cont = rcube_label('nosubject');
$cont = Q($cont);
}
else if ($col == 'size')
$cont = show_bytes($header->$col);
else if ($col == 'date')
$cont = format_date($header->date);
else
$cont = Q($header->$col);
$a_msg_cols[$col] = $cont;
}
$a_msg_flags = array_change_key_case(array_map('intval', (array) $header->flags));
if ($header->depth)
$a_msg_flags['depth'] = $header->depth;
else if ($header->has_children)
$roots[] = $header->uid;
if ($header->parent_uid)
$a_msg_flags['parent_uid'] = $header->parent_uid;
if ($header->has_children)
$a_msg_flags['has_children'] = $header->has_children;
if ($header->unread_children)
$a_msg_flags['unread_children'] = $header->unread_children;
if ($header->others['list-post'])
$a_msg_flags['ml'] = 1;
if ($header->priority)
$a_msg_flags['prio'] = (int) $header->priority;
$a_msg_flags['ctype'] = Q($header->ctype);
$a_msg_flags['mbox'] = $mbox;
// merge with plugin result (Deprecated, use $header->flags)
if (!empty($header->list_flags) && is_array($header->list_flags))
$a_msg_flags = array_merge($a_msg_flags, $header->list_flags);
if (!empty($header->list_cols) && is_array($header->list_cols))
$a_msg_cols = array_merge($a_msg_cols, $header->list_cols);
$OUTPUT->command('add_message_row',
$header->uid,
$a_msg_cols,
$a_msg_flags,
$insert_top);
}
if ($RCMAIL->storage->get_threading()) {
$OUTPUT->command('init_threads', (array) $roots, $mbox);
}
}
/*
* Creates <THEAD> for message list table
*/
function rcmail_message_list_head($attrib, $a_show_cols)
{
$skin_path = $_SESSION['skin_path'];
$image_tag = html::img(array('src' => "%s%s", 'alt' => "%s"));
// check to see if we have some settings for sorting
$sort_col = $_SESSION['sort_col'];
$sort_order = $_SESSION['sort_order'];
// define sortable columns
$a_sort_cols = array('subject', 'date', 'from', 'to', 'fromto', 'size', 'cc');
if (!empty($attrib['optionsmenuicon'])) {
$onclick = 'return ' . JS_OBJECT_NAME . ".command('menu-open', 'messagelistmenu')";
if ($attrib['optionsmenuicon'] === true || $attrib['optionsmenuicon'] == 'true')
$list_menu = html::div(array('onclick' => $onclick, 'class' => 'listmenu',
'id' => 'listmenulink', 'title' => rcube_label('listoptions')));
else
$list_menu = html::a(array('href' => '#', 'onclick' => $onclick),
html::img(array('src' => $skin_path . $attrib['optionsmenuicon'],
'id' => 'listmenulink', 'title' => rcube_label('listoptions')))
);
}
else
$list_menu = '';
$cells = array();
// get name of smart From/To column in folder context
if (($f = array_search('fromto', $a_show_cols)) !== false) {
$smart_col = rcmail_message_list_smart_column_name();
}
foreach ($a_show_cols as $col) {
// get column name
switch ($col) {
case 'flag':
$col_name = '<span class="flagged">&nbsp;</span>';
break;
case 'attachment':
case 'priority':
case 'status':
$col_name = '<span class="' . $col .'">&nbsp;</span>';
break;
case 'threads':
$col_name = $list_menu;
break;
case 'fromto':
$col_name = Q(rcube_label($smart_col));
break;
default:
$col_name = Q(rcube_label($col));
}
// make sort links
if (in_array($col, $a_sort_cols))
$col_name = html::a(array('href'=>"./#sort", 'onclick' => 'return '.JS_OBJECT_NAME.".command('sort','".$col."',this)", 'title' => rcube_label('sortby')), $col_name);
else if ($col_name[0] != '<')
$col_name = '<span class="' . $col .'">' . $col_name . '</span>';
$sort_class = $col == $sort_col ? " sorted$sort_order" : '';
$class_name = $col.$sort_class;
// put it all together
$cells[] = array('className' => $class_name, 'id' => "rcm$col", 'html' => $col_name);
}
return $cells;
}
/**
* return an HTML iframe for loading mail content
*/
function rcmail_messagecontent_frame($attrib)
{
global $OUTPUT, $RCMAIL;
if (empty($attrib['id']))
$attrib['id'] = 'rcmailcontentwindow';
$attrib['name'] = $attrib['id'];
if ($RCMAIL->config->get('preview_pane'))
$OUTPUT->set_env('contentframe', $attrib['id']);
$OUTPUT->set_env('blankpage', $attrib['src'] ? $OUTPUT->abs_url($attrib['src']) : 'program/resources/blank.gif');
return html::iframe($attrib);
}
function rcmail_messagecount_display($attrib)
{
global $RCMAIL;
if (!$attrib['id'])
$attrib['id'] = 'rcmcountdisplay';
$RCMAIL->output->add_gui_object('countdisplay', $attrib['id']);
$content = $RCMAIL->action != 'show' ? rcmail_get_messagecount_text() : rcube_label('loading');
return html::span($attrib, $content);
}
function rcmail_get_messagecount_text($count=NULL, $page=NULL)
{
global $RCMAIL;
if ($page === NULL) {
$page = $RCMAIL->storage->get_page();
}
$page_size = $RCMAIL->storage->get_pagesize();
$start_msg = ($page-1) * $page_size + 1;
if ($count!==NULL)
$max = $count;
else if ($RCMAIL->action)
$max = $RCMAIL->storage->count(NULL, $RCMAIL->storage->get_threading() ? 'THREADS' : 'ALL');
if ($max==0)
$out = rcube_label('mailboxempty');
else
$out = rcube_label(array('name' => $RCMAIL->storage->get_threading() ? 'threadsfromto' : 'messagesfromto',
'vars' => array('from' => $start_msg,
'to' => min($max, $start_msg + $page_size - 1),
'count' => $max)));
return Q($out);
}
function rcmail_mailbox_name_display($attrib)
{
global $RCMAIL;
if (!$attrib['id'])
$attrib['id'] = 'rcmmailboxname';
$RCMAIL->output->add_gui_object('mailboxname', $attrib['id']);
return html::span($attrib, rcmail_get_mailbox_name_text());
}
function rcmail_get_mailbox_name_text()
{
global $RCMAIL;
return rcmail_localize_foldername($RCMAIL->storage->get_folder());
}
function rcmail_send_unread_count($mbox_name, $force=false, $count=null, $mark='')
{
global $RCMAIL;
$old_unseen = rcmail_get_unseen_count($mbox_name);
if ($count === null)
$unseen = $RCMAIL->storage->count($mbox_name, 'UNSEEN', $force);
else
$unseen = $count;
if ($unseen != $old_unseen || ($mbox_name == 'INBOX'))
$RCMAIL->output->command('set_unread_count', $mbox_name, $unseen,
($mbox_name == 'INBOX'), $unseen && $mark ? $mark : '');
rcmail_set_unseen_count($mbox_name, $unseen);
return $unseen;
}
function rcmail_set_unseen_count($mbox_name, $count)
{
// @TODO: this data is doubled (session and cache tables) if caching is enabled
// Make sure we have an array here (#1487066)
if (!is_array($_SESSION['unseen_count']))
$_SESSION['unseen_count'] = array();
$_SESSION['unseen_count'][$mbox_name] = $count;
}
function rcmail_get_unseen_count($mbox_name)
{
if (is_array($_SESSION['unseen_count']) && array_key_exists($mbox_name, $_SESSION['unseen_count']))
return $_SESSION['unseen_count'][$mbox_name];
else
return null;
}
/**
* Sets message is_safe flag according to 'show_images' option value
*
* @param object rcube_message Message
*/
function rcmail_check_safe(&$message)
{
global $RCMAIL;
if (!$message->is_safe
&& ($show_images = $RCMAIL->config->get('show_images'))
&& $message->has_html_part()
) {
switch ($show_images) {
case 1: // known senders only
// get default addressbook, like in addcontact.inc
$CONTACTS = $RCMAIL->get_address_book(-1, true);
if ($CONTACTS) {
$result = $CONTACTS->search('email', $message->sender['mailto'], 1, false);
if ($result->count) {
$message->set_safe(true);
}
}
break;
case 2: // always
$message->set_safe(true);
break;
}
}
}
/**
* Cleans up the given message HTML Body (for displaying)
*
* @param string HTML
* @param array Display parameters
* @param array CID map replaces (inline images)
* @return string Clean HTML
*/
function rcmail_wash_html($html, $p, $cid_replaces)
{
global $REMOTE_OBJECTS;
$p += array('safe' => false, 'inline_html' => true);
// special replacements (not properly handled by washtml class)
$html_search = array(
'/(<\/nobr>)(\s+)(<nobr>)/i', // space(s) between <NOBR>
'/<title[^>]*>[^<]*<\/title>/i', // PHP bug #32547 workaround: remove title tag
'/^(\0\0\xFE\xFF|\xFF\xFE\0\0|\xFE\xFF|\xFF\xFE|\xEF\xBB\xBF)/', // byte-order mark (only outlook?)
'/<html\s[^>]+>/i', // washtml/DOMDocument cannot handle xml namespaces
);
$html_replace = array(
'\\1'.' &nbsp; '.'\\3',
'',
'',
'<html>',
);
$html = preg_replace($html_search, $html_replace, trim($html));
// PCRE errors handling (#1486856), should we use something like for every preg_* use?
if ($html === null && ($preg_error = preg_last_error()) != PREG_NO_ERROR) {
$errstr = "Could not clean up HTML message! PCRE Error: $preg_error.";
if ($preg_error == PREG_BACKTRACK_LIMIT_ERROR)
$errstr .= " Consider raising pcre.backtrack_limit!";
if ($preg_error == PREG_RECURSION_LIMIT_ERROR)
$errstr .= " Consider raising pcre.recursion_limit!";
raise_error(array('code' => 620, 'type' => 'php',
'line' => __LINE__, 'file' => __FILE__,
'message' => $errstr), true, false);
return '';
}
// fix (unknown/malformed) HTML tags before "wash"
$html = preg_replace_callback('/(<[\/]*)([^\s>]+)/', 'rcmail_html_tag_callback', $html);
// charset was converted to UTF-8 in rcube_storage::get_message_part(),
// change/add charset specification in HTML accordingly,
// washtml cannot work without that
$meta = '<meta http-equiv="Content-Type" content="text/html; charset='.RCMAIL_CHARSET.'" />';
// remove old meta tag and add the new one, making sure
// that it is placed in the head (#1488093)
$html = preg_replace('/<meta[^>]+charset=[a-z0-9-_]+[^>]*>/Ui', '', $html);
$html = preg_replace('/(<head[^>]*>)/Ui', '\\1'.$meta, $html, -1, $rcount);
if (!$rcount) {
$html = '<head>' . $meta . '</head>' . $html;
}
// turn relative into absolute urls
$html = rcmail_resolve_base($html);
// clean HTML with washhtml by Frederic Motte
$wash_opts = array(
'show_washed' => false,
'allow_remote' => $p['safe'],
'blocked_src' => "./program/resources/blocked.gif",
'charset' => RCMAIL_CHARSET,
'cid_map' => $cid_replaces,
'html_elements' => array('body'),
);
if (!$p['inline_html']) {
$wash_opts['html_elements'] = array('html','head','title','body');
}
if ($p['safe']) {
$wash_opts['html_elements'][] = 'link';
$wash_opts['html_attribs'] = array('rel','type');
}
// overwrite washer options with options from plugins
if (isset($p['html_elements']))
$wash_opts['html_elements'] = $p['html_elements'];
if (isset($p['html_attribs']))
$wash_opts['html_attribs'] = $p['html_attribs'];
// initialize HTML washer
$washer = new washtml($wash_opts);
if (!$p['skip_washer_form_callback'])
$washer->add_callback('form', 'rcmail_washtml_callback');
// allow CSS styles, will be sanitized by rcmail_washtml_callback()
if (!$p['skip_washer_style_callback'])
$washer->add_callback('style', 'rcmail_washtml_callback');
// Remove non-UTF8 characters (#1487813)
$html = rc_utf8_clean($html);
$html = $washer->wash($html);
$REMOTE_OBJECTS = $washer->extlinks;
return $html;
}
/**
* Convert the given message part to proper HTML
* which can be displayed the message view
*
* @param object rcube_message_part Message part
* @param array Display parameters array
* @return string Formatted HTML string
*/
function rcmail_print_body($part, $p = array())
{
global $RCMAIL;
// trigger plugin hook
$data = $RCMAIL->plugins->exec_hook('message_part_before',
array('type' => $part->ctype_secondary, 'body' => $part->body, 'id' => $part->mime_id)
+ $p + array('safe' => false, 'plain' => false, 'inline_html' => true));
// convert html to text/plain
if ($data['type'] == 'html' && $data['plain']) {
$txt = new html2text($data['body'], false, true);
$body = $txt->get_text();
$part->ctype_secondary = 'plain';
}
// text/html
else if ($data['type'] == 'html') {
$body = rcmail_wash_html($data['body'], $data, $part->replaces);
$part->ctype_secondary = $data['type'];
}
// text/enriched
else if ($data['type'] == 'enriched') {
$part->ctype_secondary = 'html';
require_once(INSTALL_PATH . 'program/lib/enriched.inc');
$body = Q(enriched_to_html($data['body']), 'show');
}
else {
// assert plaintext
$body = $part->body;
$part->ctype_secondary = $data['type'] = 'plain';
}
// free some memory (hopefully)
unset($data['body']);
// plaintext postprocessing
if ($part->ctype_secondary == 'plain')
$body = rcmail_plain_body($body, $part->ctype_parameters['format'] == 'flowed');
// allow post-processing of the message body
$data = $RCMAIL->plugins->exec_hook('message_part_after',
array('type' => $part->ctype_secondary, 'body' => $body, 'id' => $part->mime_id) + $data);
return $data['type'] == 'html' ? $data['body'] : html::tag('pre', array(), $data['body']);
}
/**
* Handle links and citation marks in plain text message
*
* @param string Plain text string
* @param boolean Text uses format=flowed
*
* @return string Formatted HTML string
*/
function rcmail_plain_body($body, $flowed=false)
{
global $RCMAIL;
// make links and email-addresses clickable
$replacer = new rcube_string_replacer;
- // search for patterns like links and e-mail addresses
- $body = preg_replace_callback($replacer->link_pattern, array($replacer, 'link_callback'), $body);
- $body = preg_replace_callback($replacer->mailto_pattern, array($replacer, 'mailto_callback'), $body);
+ // search for patterns like links and e-mail addresses and replace with tokens
+ $body = $replacer->replace($body);
// split body into single lines
$body = preg_split('/\r?\n/', $body);
$quote_level = 0;
$last = -1;
// find/mark quoted lines...
for ($n=0, $cnt=count($body); $n < $cnt; $n++) {
if ($body[$n][0] == '>' && preg_match('/^(>+\s*)+/', $body[$n], $regs)) {
$q = strlen(preg_replace('/\s/', '', $regs[0]));
$body[$n] = substr($body[$n], strlen($regs[0]));
if ($q > $quote_level) {
$body[$n] = $replacer->get_replacement($replacer->add(
str_repeat('<blockquote>', $q - $quote_level))) . $body[$n];
}
else if ($q < $quote_level) {
$body[$n] = $replacer->get_replacement($replacer->add(
str_repeat('</blockquote>', $quote_level - $q))) . $body[$n];
}
else if ($flowed) {
// previous line is flowed
if (isset($body[$last]) && $body[$n]
&& $body[$last][strlen($body[$last])-1] == ' ') {
// merge lines
$body[$last] .= $body[$n];
unset($body[$n]);
}
else {
$last = $n;
}
}
}
else {
$q = 0;
if ($flowed) {
// sig separator - line is fixed
if ($body[$n] == '-- ') {
$last = $last_sig = $n;
}
else {
// remove space-stuffing
if ($body[$n][0] == ' ')
$body[$n] = substr($body[$n], 1);
// previous line is flowed?
if (isset($body[$last]) && $body[$n]
&& $last !== $last_sig
&& $body[$last][strlen($body[$last])-1] == ' '
) {
$body[$last] .= $body[$n];
unset($body[$n]);
}
else {
$last = $n;
}
}
if ($quote_level > 0)
$body[$last] = $replacer->get_replacement($replacer->add(
str_repeat('</blockquote>', $quote_level))) . $body[$last];
}
else if ($quote_level > 0)
$body[$n] = $replacer->get_replacement($replacer->add(
str_repeat('</blockquote>', $quote_level))) . $body[$n];
}
$quote_level = $q;
}
$body = join("\n", $body);
// quote plain text (don't use Q() here, to display entities "as is")
$table = get_html_translation_table(HTML_SPECIALCHARS);
unset($table['?']);
$body = strtr($body, $table);
// colorize signature (up to <sig_max_lines> lines)
$len = strlen($body);
$sig_max_lines = $RCMAIL->config->get('sig_max_lines', 15);
while (($sp = strrpos($body, "-- \n", $sp ? -$len+$sp-1 : 0)) !== false) {
if ($sp == 0 || $body[$sp-1] == "\n") {
// do not touch blocks with more that X lines
if (substr_count($body, "\n", $sp) < $sig_max_lines)
$body = substr($body, 0, max(0, $sp))
.'<span class="sig">'.substr($body, $sp).'</span>';
break;
}
}
// insert url/mailto links and citation tags
$body = $replacer->resolve($body);
return $body;
}
/**
* Callback function for washtml cleaning class
*/
function rcmail_washtml_callback($tagname, $attrib, $content, $washtml)
{
switch ($tagname) {
case 'form':
$out = html::div('form', $content);
break;
case 'style':
// decode all escaped entities and reduce to ascii strings
$stripped = preg_replace('/[^a-zA-Z\(:;]/', '', rcmail_xss_entity_decode($content));
// now check for evil strings like expression, behavior or url()
if (!preg_match('/expression|behavior|javascript:|import[^a]/i', $stripped)) {
if (!$washtml->get_config('allow_remote') && stripos($stripped, 'url('))
$washtml->extlinks = true;
else
$out = html::tag('style', array('type' => 'text/css'), $content);
break;
}
default:
$out = '';
}
return $out;
}
/**
* Callback function for HTML tags fixing
*/
function rcmail_html_tag_callback($matches)
{
$tagname = $matches[2];
$tagname = preg_replace(array(
'/:.*$/', // Microsoft's Smart Tags <st1:xxxx>
'/[^a-z0-9_\[\]\!-]/i', // forbidden characters
), '', $tagname);
return $matches[1].$tagname;
}
/**
* return table with message headers
*/
function rcmail_message_headers($attrib, $headers=NULL)
{
global $OUTPUT, $MESSAGE, $PRINT_MODE, $RCMAIL;
static $sa_attrib;
// keep header table attrib
if (is_array($attrib) && !$sa_attrib)
$sa_attrib = $attrib;
else if (!is_array($attrib) && is_array($sa_attrib))
$attrib = $sa_attrib;
if (!isset($MESSAGE))
return FALSE;
// get associative array of headers object
if (!$headers)
$headers = is_object($MESSAGE->headers) ? get_object_vars($MESSAGE->headers) : $MESSAGE->headers;
// show these headers
$standard_headers = array('subject', 'from', 'to', 'cc', 'bcc', 'replyto',
'mail-reply-to', 'mail-followup-to', 'date', 'priority');
$exclude_headers = $attrib['exclude'] ? explode(',', $attrib['exclude']) : array();
$output_headers = array();
foreach ($standard_headers as $hkey) {
$ishtml = false;
if ($headers[$hkey])
$value = $headers[$hkey];
else if ($headers['others'][$hkey])
$value = $headers['others'][$hkey];
else
continue;
if (in_array($hkey, $exclude_headers))
continue;
$header_title = rcube_label(preg_replace('/(^mail-|-)/', '', $hkey));
if ($hkey == 'date') {
if ($PRINT_MODE)
$header_value = format_date($value, $RCMAIL->config->get('date_long', 'x'));
else
$header_value = format_date($value);
}
else if ($hkey == 'priority') {
if ($value) {
$header_value = html::span('prio' . $value, rcmail_localized_priority($value));
}
else
continue;
}
else if ($hkey == 'replyto') {
if ($headers['replyto'] != $headers['from']) {
$header_value = rcmail_address_string($value, $attrib['max'], true, $attrib['addicon'], $headers['charset'], $header_title);
$ishtml = true;
}
else
continue;
}
else if ($hkey == 'mail-reply-to') {
if ($headers['mail-replyto'] != $headers['reply-to']
&& $headers['reply-to'] != $headers['from']
) {
$header_value = rcmail_address_string($value, $attrib['max'], true, $attrib['addicon'], $headers['charset'], $header_title);
$ishtml = true;
}
else
continue;
}
else if ($hkey == 'mail-followup-to') {
$header_value = rcmail_address_string($value, $attrib['max'], true, $attrib['addicon'], $headers['charset'], $header_title);
$ishtml = true;
}
else if (in_array($hkey, array('from', 'to', 'cc', 'bcc'))) {
$header_value = rcmail_address_string($value, $attrib['max'], true, $attrib['addicon'], $headers['charset'], $header_title);
$ishtml = true;
}
else if ($hkey == 'subject' && empty($value))
$header_value = rcube_label('nosubject');
else
$header_value = trim(rcube_mime::decode_header($value, $headers['charset']));
$output_headers[$hkey] = array(
'title' => $header_title,
'value' => $header_value,
'raw' => $value,
'html' => $ishtml,
);
}
$plugin = $RCMAIL->plugins->exec_hook('message_headers_output',
array('output' => $output_headers, 'headers' => $MESSAGE->headers, 'exclude' => $exclude_headers));
// single header value is requested
if (!empty($attrib['valueof']))
return Q($plugin['output'][$attrib['valueof']]['value'], ($attrib['valueof'] == 'subject' ? 'strict' : 'show'));
// compose html table
$table = new html_table(array('cols' => 2));
foreach ($plugin['output'] as $hkey => $row) {
$table->add(array('class' => 'header-title'), Q($row['title']));
$table->add(array('class' => 'header '.$hkey), $row['html'] ? $row['value'] : Q($row['value'], ($hkey == 'subject' ? 'strict' : 'show')));
}
return $table->show($attrib);
}
/**
* Convert Priority header value into a localized string
*/
function rcmail_localized_priority($value)
{
$labels_map = array(
'1' => 'highest',
'2' => 'high',
'3' => 'normal',
'4' => 'low',
'5' => 'lowest',
);
if ($value && $labels_map[$value])
return rcube_label($labels_map[$value]);
return '';
}
/**
* return block to show full message headers
*/
function rcmail_message_full_headers($attrib, $headers=NULL)
{
global $OUTPUT;
$html = html::div(array('id' => "all-headers", 'class' => "all", 'style' => 'display:none'), html::div(array('id' => 'headers-source'), ''));
$html .= html::div(array('class' => "more-headers show-headers", 'onclick' => "return ".JS_OBJECT_NAME.".command('show-headers','',this)", 'title' => rcube_label('togglefullheaders')), '');
$OUTPUT->add_gui_object('all_headers_row', 'all-headers');
$OUTPUT->add_gui_object('all_headers_box', 'headers-source');
return html::div($attrib, $html);
}
/**
* Handler for the 'messagebody' GUI object
*
* @param array Named parameters
* @return string HTML content showing the message body
*/
function rcmail_message_body($attrib)
{
global $CONFIG, $OUTPUT, $MESSAGE, $RCMAIL, $REMOTE_OBJECTS;
if (!is_array($MESSAGE->parts) && empty($MESSAGE->body))
return '';
if (!$attrib['id'])
$attrib['id'] = 'rcmailMsgBody';
$safe_mode = $MESSAGE->is_safe || intval($_GET['_safe']);
$out = '';
$header_attrib = array();
foreach ($attrib as $attr => $value)
if (preg_match('/^headertable([a-z]+)$/i', $attr, $regs))
$header_attrib[$regs[1]] = $value;
if (!empty($MESSAGE->parts)) {
foreach ($MESSAGE->parts as $i => $part) {
if ($part->type == 'headers')
$out .= rcmail_message_headers(sizeof($header_attrib) ? $header_attrib : NULL, $part->headers);
else if ($part->type == 'content') {
// unsapported
if ($part->realtype) {
if ($part->realtype == 'multipart/encrypted') {
$out .= html::span('part-notice', rcube_label('encryptedmessage'));
}
continue;
}
else if (!$part->size) {
continue;
}
// Check if we have enough memory to handle the message in it
// #1487424: we need up to 10x more memory than the body
else if (!rcmail_mem_check($part->size * 10)) {
$out .= html::span('part-notice', rcube_label('messagetoobig'). ' '
. html::a('?_task=mail&_action=get&_download=1&_uid='.$MESSAGE->uid.'&_part='.$part->mime_id
.'&_mbox='. urlencode($RCMAIL->storage->get_folder()), rcube_label('download')));
continue;
}
if (empty($part->ctype_parameters) || empty($part->ctype_parameters['charset']))
$part->ctype_parameters['charset'] = $MESSAGE->headers->charset;
// fetch part if not available
if (!isset($part->body))
$part->body = $MESSAGE->get_part_content($part->mime_id);
// message is cached but not exists (#1485443), or other error
if ($part->body === false) {
rcmail_message_error($MESSAGE->uid);
}
$plugin = $RCMAIL->plugins->exec_hook('message_body_prefix', array(
'part' => $part, 'prefix' => ''));
$body = rcmail_print_body($part, array('safe' => $safe_mode, 'plain' => !$CONFIG['prefer_html']));
if ($part->ctype_secondary == 'html') {
$body = rcmail_html4inline($body, $attrib['id'], 'rcmBody', $attrs, $safe_mode);
$div_attr = array('class' => 'message-htmlpart');
$style = array();
if (!empty($attrs)) {
foreach ($attrs as $a_idx => $a_val)
$style[] = $a_idx . ': ' . $a_val;
if (!empty($style))
$div_attr['style'] = implode('; ', $style);
}
$out .= html::div($div_attr, $plugin['prefix'] . $body);
}
else
$out .= html::div('message-part', $plugin['prefix'] . $body);
}
}
}
else {
// Check if we have enough memory to handle the message in it
// #1487424: we need up to 10x more memory than the body
if (!rcmail_mem_check(strlen($MESSAGE->body) * 10)) {
$out .= html::span('part-notice', rcube_label('messagetoobig'). ' '
. html::a('?_task=mail&_action=get&_download=1&_uid='.$MESSAGE->uid.'&_part=0'
.'&_mbox='. urlencode($RCMAIL->storage->get_folder()), rcube_label('download')));
}
else {
$plugin = $RCMAIL->plugins->exec_hook('message_body_prefix', array(
'part' => $MESSAGE, 'prefix' => ''));
$out .= html::div('message-part', $plugin['prefix'] . html::tag('pre', array(),
rcmail_plain_body(Q($MESSAGE->body, 'strict', false))));
}
}
// list images after mail body
if ($CONFIG['inline_images'] && !empty($MESSAGE->attachments)) {
foreach ($MESSAGE->attachments as $attach_prop) {
// skip inline images
if ($attach_prop->content_id && $attach_prop->disposition == 'inline') {
continue;
}
// Content-Type: image/*...
if (rcmail_part_image_type($attach_prop)) {
$out .= html::tag('hr') . html::p(array('align' => "center"),
html::img(array(
'src' => $MESSAGE->get_part_url($attach_prop->mime_id, true),
'title' => $attach_prop->filename,
'alt' => $attach_prop->filename,
)));
}
}
}
// tell client that there are blocked remote objects
if ($REMOTE_OBJECTS && !$safe_mode)
$OUTPUT->set_env('blockedobjects', true);
return html::div($attrib, $out);
}
function rcmail_part_image_type($part)
{
$rcmail = rcmail::get_instance();
// Skip TIFF images if browser doesn't support this format...
$tiff_support = !empty($_SESSION['browser_caps']) && !empty($_SESSION['browser_caps']['tif']);
// until we can convert them to JPEG
$tiff_support = $tiff_support || $rcmail->config->get('im_convert_path');
// Content-type regexp
$mime_regex = $tiff_support ? '/^image\//i' : '/^image\/(?!tif)/i';
// Content-Type: image/*...
if (preg_match($mime_regex, $part->mimetype)) {
return $part->mimetype;
}
// Many clients use application/octet-stream, we'll detect mimetype
// by checking filename extension
// Supported image filename extensions to image type map
$types = array(
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'png' => 'image/png',
'gif' => 'image/gif',
'bmp' => 'image/bmp',
);
if ($tiff_support) {
$types['tif'] = 'image/tiff';
$types['tiff'] = 'image/tiff';
}
if ($part->filename
&& preg_match('/^application\/octet-stream$/i', $part->mimetype)
&& preg_match('/\.([^.])$/i', $part->filename, $m)
&& ($extension = strtolower($m[1]))
&& isset($types[$extension])
) {
return $types[$extension];
}
}
/**
* Convert all relative URLs according to a <base> in HTML
*/
function rcmail_resolve_base($body)
{
// check for <base href=...>
if (preg_match('!(<base.*href=["\']?)([hftps]{3,5}://[a-z0-9/.%-]+)!i', $body, $regs)) {
$replacer = new rcube_base_replacer($regs[2]);
$body = $replacer->replace($body);
}
return $body;
}
/**
* modify a HTML message that it can be displayed inside a HTML page
*/
function rcmail_html4inline($body, $container_id, $body_id='', &$attributes=null, $allow_remote=false)
{
$last_style_pos = 0;
$cont_id = $container_id.($body_id ? ' div.'.$body_id : '');
// find STYLE tags
while (($pos = stripos($body, '<style', $last_style_pos)) && ($pos2 = stripos($body, '</style>', $pos)))
{
$pos = strpos($body, '>', $pos) + 1;
$len = $pos2 - $pos;
// replace all css definitions with #container [def]
$styles = substr($body, $pos, $len);
$styles = rcmail_mod_css_styles($styles, $cont_id, $allow_remote);
$body = substr_replace($body, $styles, $pos, $len);
$last_style_pos = $pos2 + strlen($styles) - $len;
}
// modify HTML links to open a new window if clicked
$GLOBALS['rcmail_html_container_id'] = $container_id;
$body = preg_replace_callback('/<(a|link)\s+([^>]+)>/Ui', 'rcmail_alter_html_link', $body);
unset($GLOBALS['rcmail_html_container_id']);
$body = preg_replace(array(
// add comments arround html and other tags
'/(<!DOCTYPE[^>]*>)/i',
'/(<\?xml[^>]*>)/i',
'/(<\/?html[^>]*>)/i',
'/(<\/?head[^>]*>)/i',
'/(<title[^>]*>.*<\/title>)/Ui',
'/(<\/?meta[^>]*>)/i',
// quote <? of php and xml files that are specified as text/html
'/<\?/',
'/\?>/',
// replace <body> with <div>
'/<body([^>]*)>/i',
'/<\/body>/i',
),
array(
'<!--\\1-->',
'<!--\\1-->',
'<!--\\1-->',
'<!--\\1-->',
'<!--\\1-->',
'<!--\\1-->',
'&lt;?',
'?&gt;',
'<div class="'.$body_id.'"\\1>',
'</div>',
),
$body);
$attributes = array();
// Handle body attributes that doesn't play nicely with div elements
$regexp = '/<div class="' . preg_quote($body_id, '/') . '"([^>]*)/';
if (preg_match($regexp, $body, $m)) {
$attrs = $m[0];
// Get bgcolor, we'll set it as background-color of the message container
if ($m[1] && preg_match('/bgcolor=["\']*([a-z0-9#]+)["\']*/', $attrs, $mb)) {
$attributes['background-color'] = $mb[1];
$attrs = preg_replace('/bgcolor=["\']*([a-z0-9#]+)["\']*/', '', $attrs);
}
// Get background, we'll set it as background-image of the message container
if ($m[1] && preg_match('/background=["\']*([^"\'>\s]+)["\']*/', $attrs, $mb)) {
$attributes['background-image'] = 'url('.$mb[1].')';
$attrs = preg_replace('/background=["\']*([^"\'>\s]+)["\']*/', '', $attrs);
}
if (!empty($attributes)) {
$body = preg_replace($regexp, rtrim($attrs), $body, 1);
}
// handle body styles related to background image
if ($attributes['background-image']) {
// get body style
if (preg_match('/#'.preg_quote($cont_id, '/').'\s+\{([^}]+)}/i', $body, $m)) {
// get background related style
if (preg_match_all('/(background-position|background-repeat)\s*:\s*([^;]+);/i', $m[1], $ma, PREG_SET_ORDER)) {
foreach ($ma as $style)
$attributes[$style[1]] = $style[2];
}
}
}
}
// make sure there's 'rcmBody' div, we need it for proper css modification
// its name is hardcoded in rcmail_message_body() also
else {
$body = '<div class="' . $body_id . '">' . $body . '</div>';
}
return $body;
}
/**
* parse link attributes and set correct target
*/
function rcmail_alter_html_link($matches)
{
global $RCMAIL;
// Support unicode/punycode in top-level domain part
$EMAIL_PATTERN = '([a-z0-9][a-z0-9\-\.\+\_]*@[^&@"\'.][^@&"\']*\\.([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,}))';
$tag = $matches[1];
$attrib = parse_attrib_string($matches[2]);
$end = '>';
// Remove non-printable characters in URL (#1487805)
if ($attrib['href'])
$attrib['href'] = preg_replace('/[\x00-\x1F]/', '', $attrib['href']);
if ($tag == 'link' && preg_match('/^https?:\/\//i', $attrib['href'])) {
$tempurl = 'tmp-' . md5($attrib['href']) . '.css';
$_SESSION['modcssurls'][$tempurl] = $attrib['href'];
$attrib['href'] = $RCMAIL->url(array('task' => 'utils', 'action' => 'modcss', 'u' => $tempurl, 'c' => $GLOBALS['rcmail_html_container_id']));
$end = ' />';
}
else if (preg_match('/^mailto:'.$EMAIL_PATTERN.'(\?[^"\'>]+)?/i', $attrib['href'], $mailto)) {
$attrib['href'] = $mailto[0];
$attrib['onclick'] = sprintf(
"return %s.command('compose','%s',this)",
JS_OBJECT_NAME,
JQ($mailto[1].$mailto[3]));
}
else if (empty($attrib['href']) && !$attrib['name']) {
$attrib['href'] = './#NOP';
$attrib['onclick'] = 'return false';
}
else if (!empty($attrib['href']) && $attrib['href'][0] != '#') {
$attrib['target'] = '_blank';
}
return "<$tag" . html::attrib_string($attrib, array('href','name','target','onclick','id','class','style','title','rel','type','media')) . $end;
}
/**
* decode address string and re-format it as HTML links
*/
function rcmail_address_string($input, $max=null, $linked=false, $addicon=null, $default_charset=null, $title=null)
{
global $RCMAIL, $PRINT_MODE, $CONFIG;
$a_parts = rcube_mime::decode_address_list($input, null, true, $default_charset);
if (!sizeof($a_parts))
return $input;
$c = count($a_parts);
$j = 0;
$out = '';
$allvalues = array();
if ($addicon && !isset($_SESSION['writeable_abook'])) {
$_SESSION['writeable_abook'] = $RCMAIL->get_address_sources(true) ? true : false;
}
foreach ($a_parts as $part) {
$j++;
$name = $part['name'];
$mailto = $part['mailto'];
$string = $part['string'];
// IDNA ASCII to Unicode
if ($name == $mailto)
$name = rcube_idn_to_utf8($name);
if ($string == $mailto)
$string = rcube_idn_to_utf8($string);
$mailto = rcube_idn_to_utf8($mailto);
if ($PRINT_MODE) {
$out .= sprintf('%s &lt;%s&gt;', Q($name), $mailto);
}
else if (check_email($part['mailto'], false)) {
if ($linked) {
$address = html::a(array(
'href' => 'mailto:'.$mailto,
'onclick' => sprintf("return %s.command('compose','%s',this)", JS_OBJECT_NAME, JQ($mailto)),
'title' => $mailto,
'class' => "rcmContactAddress",
),
Q($name ? $name : $mailto));
}
else {
$address = html::span(array('title' => $mailto, 'class' => "rcmContactAddress"),
Q($name ? $name : $mailto));
}
if ($addicon && $_SESSION['writeable_abook']) {
$address .= html::a(array(
'href' => "#add",
'onclick' => sprintf("return %s.command('add-contact','%s',this)", JS_OBJECT_NAME, $string),
'title' => rcube_label('addtoaddressbook'),
'class' => 'rcmaddcontact',
),
html::img(array(
'src' => $CONFIG['skin_path'] . $addicon,
'alt' => "Add contact",
)));
}
}
else {
$address = '';
if ($name)
$address .= Q($name);
if ($mailto)
$address .= (strlen($address) ? ' ' : '') . sprintf('&lt;%s&gt;', Q($mailto));
}
$address = html::span('adr', $address);
$allvalues[] = $address;
if (!$moreadrs)
$out .= ($out ? ', ' : '') . $address;
if ($max && $j == $max && $c > $j) {
if ($linked) {
$moreadrs = $c - $j;
}
else {
$out .= '...';
break;
}
}
}
if ($moreadrs) {
$out .= ' ' . html::a(array(
'href' => '#more',
'class' => 'morelink',
'onclick' => sprintf("return %s.show_popup_dialog('%s','%s')",
JS_OBJECT_NAME,
JQ(join(', ', $allvalues)),
JQ($title))
),
Q(rcube_label(array('name' => 'andnmore', 'vars' => array('nr' => $moreadrs)))));
}
return $out;
}
/**
* Wrap text to a given number of characters per line
* but respect the mail quotation of replies messages (>).
* Finally add another quotation level by prpending the lines
* with >
*
* @param string Text to wrap
* @param int The line width
* @return string The wrapped text
*/
function rcmail_wrap_and_quote($text, $length = 72)
{
// Rebuild the message body with a maximum of $max chars, while keeping quoted message.
$max = max(75, $length + 8);
$lines = preg_split('/\r?\n/', trim($text));
$out = '';
foreach ($lines as $line) {
// don't wrap already quoted lines
if ($line[0] == '>')
$line = '>' . rtrim($line);
else if (mb_strlen($line) > $max) {
$newline = '';
foreach(explode("\n", rc_wordwrap($line, $length - 2)) as $l) {
if (strlen($l))
$newline .= '> ' . $l . "\n";
else
$newline .= ">\n";
}
$line = rtrim($newline);
}
else
$line = '> ' . $line;
// Append the line
$out .= $line . "\n";
}
return $out;
}
function rcmail_draftinfo_encode($p)
{
$parts = array();
foreach ($p as $key => $val)
$parts[] = $key . '=' . ($key == 'folder' ? base64_encode($val) : $val);
return join('; ', $parts);
}
function rcmail_draftinfo_decode($str)
{
$info = array();
foreach (preg_split('/;\s+/', $str) as $part) {
list($key, $val) = explode('=', $part, 2);
if ($key == 'folder')
$val = base64_decode($val);
$info[$key] = $val;
}
return $info;
}
function rcmail_message_part_controls($attrib)
{
global $MESSAGE, $RCMAIL;
$part = asciiwords(get_input_value('_part', RCUBE_INPUT_GPC));
if (!is_object($MESSAGE) || !is_array($MESSAGE->parts) || !($_GET['_uid'] && $_GET['_part']) || !$MESSAGE->mime_parts[$part])
return '';
$part = $MESSAGE->mime_parts[$part];
$table = new html_table(array('cols' => 3));
$filename = $part->filename;
if (empty($filename) && $attach_prop->mimetype == 'text/html') {
$filename = rcube_label('htmlmessage');
}
if (!empty($filename)) {
$table->add('title', Q(rcube_label('filename')));
$table->add('header', Q($filename));
$table->add('download-link', html::a(array('href' => './?'.str_replace('_frame=', '_download=', $_SERVER['QUERY_STRING'])), Q(rcube_label('download'))));
}
$table->add('title', Q(rcube_label('filesize')));
$table->add('header', Q($RCMAIL->message_part_size($part)));
return $table->show($attrib);
}
function rcmail_message_part_frame($attrib)
{
global $MESSAGE;
$part = $MESSAGE->mime_parts[asciiwords(get_input_value('_part', RCUBE_INPUT_GPC))];
$ctype_primary = strtolower($part->ctype_primary);
$attrib['src'] = './?' . str_replace('_frame=', ($ctype_primary=='text' ? '_show=' : '_preload='), $_SERVER['QUERY_STRING']);
return html::iframe($attrib);
}
/**
* clear message composing settings
*/
function rcmail_compose_cleanup($id)
{
if (!isset($_SESSION['compose_data_'.$id]))
return;
$rcmail = rcmail::get_instance();
$rcmail->plugins->exec_hook('attachments_cleanup', array('group' => $id));
$rcmail->session->remove('compose_data_'.$id);
}
/**
* Send the MDN response
*
* @param mixed $message Original message object (rcube_message) or UID
* @param array $smtp_error SMTP error array (reference)
*
* @return boolean Send status
*/
function rcmail_send_mdn($message, &$smtp_error)
{
global $RCMAIL;
if (!is_object($message) || !is_a($message, 'rcube_message'))
$message = new rcube_message($message);
if ($message->headers->mdn_to && empty($message->headers->flags['MDNSENT']) &&
($RCMAIL->storage->check_permflag('MDNSENT') || $RCMAIL->storage->check_permflag('*')))
{
$identity = $RCMAIL->user->get_identity();
$sender = format_email_recipient($identity['email'], $identity['name']);
$recipient = array_shift(rcube_mime::decode_address_list(
$message->headers->mdn_to, 1, true, $message->headers->charset));
$mailto = $recipient['mailto'];
$compose = new Mail_mime("\r\n");
$compose->setParam('text_encoding', 'quoted-printable');
$compose->setParam('html_encoding', 'quoted-printable');
$compose->setParam('head_encoding', 'quoted-printable');
$compose->setParam('head_charset', RCMAIL_CHARSET);
$compose->setParam('html_charset', RCMAIL_CHARSET);
$compose->setParam('text_charset', RCMAIL_CHARSET);
// compose headers array
$headers = array(
'Date' => rcmail_user_date(),
'From' => $sender,
'To' => $message->headers->mdn_to,
'Subject' => rcube_label('receiptread') . ': ' . $message->subject,
'Message-ID' => rcmail_gen_message_id(),
'X-Sender' => $identity['email'],
'References' => trim($message->headers->references . ' ' . $message->headers->messageID),
);
if ($agent = $RCMAIL->config->get('useragent'))
$headers['User-Agent'] = $agent;
$body = rcube_label("yourmessage") . "\r\n\r\n" .
"\t" . rcube_label("to") . ': ' . rcube_mime::decode_mime_string($message->headers->to, $message->headers->charset) . "\r\n" .
"\t" . rcube_label("subject") . ': ' . $message->subject . "\r\n" .
"\t" . rcube_label("sent") . ': ' . format_date($message->headers->date, $RCMAIL->config->get('date_long')) . "\r\n" .
"\r\n" . rcube_label("receiptnote") . "\r\n";
$ua = $RCMAIL->config->get('useragent', "Roundcube Webmail (Version ".RCMAIL_VERSION.")");
$report = "Reporting-UA: $ua\r\n";
if ($message->headers->to)
$report .= "Original-Recipient: {$message->headers->to}\r\n";
$report .= "Final-Recipient: rfc822; {$identity['email']}\r\n" .
"Original-Message-ID: {$message->headers->messageID}\r\n" .
"Disposition: manual-action/MDN-sent-manually; displayed\r\n";
$compose->headers($headers);
$compose->setContentType('multipart/report', array('report-type'=> 'disposition-notification'));
$compose->setTXTBody(rc_wordwrap($body, 75, "\r\n"));
$compose->addAttachment($report, 'message/disposition-notification', 'MDNPart2.txt', false, '7bit', 'inline');
$sent = rcmail_deliver_message($compose, $identity['email'], $mailto, $smtp_error, $body_file);
if ($sent)
{
$RCMAIL->storage->set_flag($message->uid, 'MDNSENT');
return true;
}
}
return false;
}
// Fixes some content-type names
function rcmail_fix_mimetype($name)
{
// Some versions of Outlook create garbage Content-Type:
// application/pdf.A520491B_3BF7_494D_8855_7FAC2C6C0608
if (preg_match('/^application\/pdf.+/', $name))
$name = 'application/pdf';
return $name;
}
function rcmail_search_filter($attrib)
{
global $OUTPUT, $CONFIG;
if (!strlen($attrib['id']))
$attrib['id'] = 'rcmlistfilter';
$attrib['onchange'] = JS_OBJECT_NAME.'.filter_mailbox(this.value)';
/*
RFC3501 (6.4.4): 'ALL', 'RECENT',
'ANSWERED', 'DELETED', 'FLAGGED', 'SEEN',
'UNANSWERED', 'UNDELETED', 'UNFLAGGED', 'UNSEEN',
'NEW', // = (RECENT UNSEEN)
'OLD' // = NOT RECENT
*/
$select_filter = new html_select($attrib);
$select_filter->add(rcube_label('all'), 'ALL');
$select_filter->add(rcube_label('unread'), 'UNSEEN');
$select_filter->add(rcube_label('flagged'), 'FLAGGED');
$select_filter->add(rcube_label('unanswered'), 'UNANSWERED');
if (!$CONFIG['skip_deleted']) {
$select_filter->add(rcube_label('deleted'), 'DELETED');
$select_filter->add(rcube_label('undeleted'), 'UNDELETED');
}
$select_filter->add(rcube_label('priority').': '.rcube_label('highest'), 'HEADER X-PRIORITY 1');
$select_filter->add(rcube_label('priority').': '.rcube_label('high'), 'HEADER X-PRIORITY 2');
$select_filter->add(rcube_label('priority').': '.rcube_label('normal'), 'NOT HEADER X-PRIORITY 1 NOT HEADER X-PRIORITY 2 NOT HEADER X-PRIORITY 4 NOT HEADER X-PRIORITY 5');
$select_filter->add(rcube_label('priority').': '.rcube_label('low'), 'HEADER X-PRIORITY 4');
$select_filter->add(rcube_label('priority').': '.rcube_label('lowest'), 'HEADER X-PRIORITY 5');
$out = $select_filter->show($_SESSION['search_filter']);
$OUTPUT->add_gui_object('search_filter', $attrib['id']);
return $out;
}
function rcmail_message_error($uid=null)
{
global $RCMAIL;
// Set env variables for messageerror.html template
if ($RCMAIL->action == 'show') {
$mbox_name = $RCMAIL->storage->get_folder();
$RCMAIL->output->set_env('mailbox', $mbox_name);
$RCMAIL->output->set_env('uid', null);
}
// display error message
$RCMAIL->output->show_message('messageopenerror', 'error');
// ... display message error page
$RCMAIL->output->send('messageerror');
}
// register UI objects
$OUTPUT->add_handlers(array(
'mailboxlist' => 'rcmail_mailbox_list',
'messages' => 'rcmail_message_list',
'messagecountdisplay' => 'rcmail_messagecount_display',
'quotadisplay' => 'rcmail_quota_display',
'mailboxname' => 'rcmail_mailbox_name_display',
'messageheaders' => 'rcmail_message_headers',
'messagefullheaders' => 'rcmail_message_full_headers',
'messagebody' => 'rcmail_message_body',
'messagecontentframe' => 'rcmail_messagecontent_frame',
'messagepartframe' => 'rcmail_message_part_frame',
'messagepartcontrols' => 'rcmail_message_part_controls',
'searchfilter' => 'rcmail_search_filter',
'searchform' => array($OUTPUT, 'search_form'),
));
// register action aliases
$RCMAIL->register_action_map(array(
'preview' => 'show.inc',
'print' => 'show.inc',
'moveto' => 'move_del.inc',
'delete' => 'move_del.inc',
'send' => 'sendmail.inc',
'expunge' => 'folders.inc',
'purge' => 'folders.inc',
'remove-attachment' => 'attachments.inc',
'display-attachment' => 'attachments.inc',
'upload' => 'attachments.inc',
'group-expand' => 'autocomplete.inc',
));
diff --git a/skins/classic/mail.css b/skins/classic/mail.css
index 4b54f22de..f899dbdfb 100644
--- a/skins/classic/mail.css
+++ b/skins/classic/mail.css
@@ -1,1539 +1,1537 @@
/***** Roundcube|Mail mail task styles *****/
#messagetoolbar
{
position: absolute;
top: 47px;
left: 205px;
right: 10px;
height: 35px;
min-width: 650px;
white-space: nowrap;
/* border: 1px solid #cccccc; */
}
#messagetoolbar a,
#messagetoolbar select
{
display: block;
float: left;
padding-right: 10px;
}
#messagetoolbar a.button,
#messagetoolbar a.buttonPas {
display: block;
float: left;
width: 32px;
height: 32px;
padding: 0;
margin: 0 5px;
overflow: hidden;
background: url(images/mail_toolbar.png) 0 0 no-repeat transparent;
opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
}
#messagetoolbar a.buttonPas {
opacity: 0.35;
}
#messagetoolbar a.button.selected {
background-color: #ddd;
margin-left: 4px;
margin-right: 4px;
margin-top: -1px;
border: 1px solid #ccc;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
}
#messagetoolbar a.checkmailSel {
background-position: 0 -32px;
}
#messagetoolbar a.back {
background-position: -32px 0;
}
#messagetoolbar a.backSel {
background-position: -32px -32px;
}
#messagetoolbar a.compose {
background-position: -64px 0;
}
#messagetoolbar a.composeSel {
background-position: -64px -32px;
}
#messagetoolbar a.reply {
background-position: -96px 0;
}
#messagetoolbar a.replySel {
background-position: -96px -32px;
}
#messagetoolbar a.replyAll {
background-position: -128px 0;
}
#messagetoolbar a.replyAllSel {
background-position: -128px -32px;
}
#messagetoolbar a.forward {
background-position: -160px 0;
}
#messagetoolbar a.forwardSel {
background-position: -160px -32px;
}
#messagetoolbar a.delete {
background-position: -192px 0;
}
#messagetoolbar a.deleteSel {
background-position: -192px -32px;
}
#messagetoolbar a.markmessage {
background-position: -256px 0;
}
#messagetoolbar a.messagemenu {
background-position: -288px 0;
}
#messagetoolbar a.spellcheck {
background-position: -384px 0;
}
#messagetoolbar a.spellcheckSel {
background-position: -384px -32px;
}
#messagetoolbar a.attach {
background-position: -352px 0;
}
#messagetoolbar a.attachSel {
background-position: -352px -32px;
}
#messagetoolbar a.insertsig {
background-position: -448px 0;
}
#messagetoolbar a.insertsigSel {
background-position: -448px -32px;
}
#messagetoolbar a.savedraft {
background-position: -322px 0;
}
#messagetoolbar a.savedraftSel {
background-position: -322px -32px;
}
#messagetoolbar a.send {
background-position: -416px 0;
}
#messagetoolbar a.sendSel {
background-position: -416px -32px;
}
#messagetoolbar select.mboxlist
{
position: relative;
margin: 0 8px;
top: 7px;
}
#messagetoolbar select.mboxlist option
{
padding-left: 15px;
}
#messagetoolbar select.mboxlist option[value=""]
{
padding-left: 2px;
}
#messagemenu li a.active:hover,
#markmessagemenu li a.active:hover
{
color: #fff;
background-color: #c00;
}
#messagemenu li a
{
background: url(images/messageactions.png) no-repeat 7px 0;
background-position: 7px 20px;
}
#messagemenu li a.printlink
{
background-position: 7px 1px;
}
#messagemenu li a.downloadlink
{
background-position: 7px -17px;
}
#messagemenu li a.sourcelink
{
background-position: 7px -35px;
}
#messagemenu li a.openlink
{
background-position: 7px -53px;
}
#messagemenu li a.editlink
{
background-position: 7px -71px;
}
#markmessagemenu li a,
#compose-attachments li a
{
background: url(images/messageicons.png) no-repeat;
}
#markmessagemenu li a.readlink
{
background-position: 7px -51px;
}
#markmessagemenu li a.unreadlink
{
background-position: 7px -119px;
}
#markmessagemenu li a.flaggedlink
{
background-position: 7px -153px;
}
#markmessagemenu li a.unflaggedlink
{
background-position: 7px -136px;
}
#searchfilter
{
white-space: nowrap;
position: absolute;
right: 198px;
vertical-align: middle;
}
#searchfilter label
{
font-size: 11px;
}
#mailleftcontainer
{
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 195px;
}
#mailrightcontainer
{
position: absolute;
top: 0;
left: 170px;
bottom: 0;
right: 0;
min-width: 600px;
}
#mailrightcontent
{
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
#messagepartcontainer
{
position: absolute;
top: 80px;
left: 20px;
right: 20px;
bottom: 20px;
}
#mailcontframe
{
position: absolute;
width: 100%;
top: 0;
bottom: 0;
border: 1px solid #999999;
background-color: #F9F9F9;
overflow: hidden;
}
#mailpreviewframe
{
position: absolute;
width: 100%;
top: 205px;
bottom: 0px;
border: 1px solid #999999;
background-color: #F9F9F9;
- overflow: hidden;
}
#messagecontframe
{
position: relative;
top: 0px;
left: 0px;
right: 0px;
bottom: 0px;
width: 100%;
height: 100%;
min-height: 100%; /* Chrome 14 bug */
}
#messagepartframe
{
width: 100%;
height: 100%;
min-height: 100%; /* Chrome 14 bug */
border: 1px solid #999999;
background-color: #F9F9F9;
}
#partheader
{
position: absolute;
top: 10px;
left: 220px;
right: 20px;
height: 40px;
}
#partheader table td
{
padding-left: 2px;
padding-right: 4px;
vertical-align: middle;
font-size: 11px;
}
#partheader table td.title
{
color: #666666;
font-weight: bold;
}
/** mailbox list styles */
#mailboxlist-container
{
position: absolute;
top: 0;
left: 0;
width: 100%;
bottom: 0;
border: 1px solid #999;
background-color: #F9F9F9;
- overflow: hidden;
}
#mailboxlist
{
position:relative;
height: auto;
margin: 0px;
padding: 0px;
list-style-image: none;
list-style-type: none;
overflow: hidden;
white-space: nowrap;
background-color: #FFF;
}
#mailboxlist li
{
display: block;
position: relative;
font-size: 11px;
background: url(images/icons/folders.png) 5px 0 no-repeat;
border-bottom: 1px solid #EBEBEB;
}
#mailboxlist li ul li:last-child
{
border-bottom: none;
}
#mailboxlist li div
{
position: absolute;
left: 8px !important;
left: -16px;
top: 1px;
width: 14px;
height: 16px;
}
#mailboxlist li div.collapsed,
#mailboxlist li div.expanded
{
cursor: pointer;
}
#mailboxlist li div.collapsed
{
background: url(images/icons/collapsed.png) bottom right no-repeat;
}
#mailboxlist li div.expanded
{
background: url(images/icons/expanded.png) bottom right no-repeat;
}
#mailboxlist li.inbox
{
background-position: 5px -18px;
}
#mailboxlist li.drafts
{
background-position: 5px -37px;
}
#mailboxlist li.sent
{
background-position: 5px -54px;
}
#mailboxlist li.junk
{
background-position: 5px -73px;
}
#mailboxlist li.trash
{
background-position: 5px -91px;
}
#mailboxlist li a
{
cursor: default;
display: block;
position: relative;
padding-left: 25px;
padding-top: 2px;
padding-bottom: 2px;
text-decoration: none;
height: 15px;
}
#mailboxlist li.unread
{
font-weight: bold;
}
#mailboxlist li.virtual > a
{
color: #666;
}
#mailboxlist li.recent > a
{
color: #0066FF;
}
#mailboxlist li.selected,
#mailboxlist li.droptarget li.selected
{
background-color: #929292;
}
#mailboxlist li.selected > a,
#mailboxlist li.droptarget li.selected a
{
color: #FFF;
font-weight: bold;
}
#mailboxlist li.droptarget
{
background-color: #FFFFA6;
}
/* styles for nested folders */
#mailboxlist ul {
list-style: none;
padding: 0;
margin: 0;
border-top: 1px solid #EBEBEB;
padding-left: 15px;
background-position: 25px 1px;
background-color: #FFF;
color: blue;
font-weight: normal;
}
#listcontrols
{
position: relative;
white-space: nowrap;
line-height: 22px;
padding: 0 4px;
width: auto;
min-width: 300px;
}
#listcontrols a,
#listcontrols span
{
display: block;
float: left;
font-size: 11px;
}
#listcontrols span input
{
vertical-align: middle;
}
#listcontrols a.button,
#listcontrols a.buttonPas
{
display: block;
float: left;
width: 15px;
height: 15px;
padding: 0;
margin-top: 4px;
margin-right: 2px;
overflow: hidden;
background: url(images/mail_footer.png) 0 0 no-repeat transparent;
opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
}
#listcontrols a.buttonPas
{
opacity: 0.35;
}
#listcontrols a.all {
background-position: -30px 0;
}
#listcontrols a.allsel {
background-position: -30px -15px;
}
#listcontrols a.page {
background-position: -135px 0;
}
#listcontrols a.pagesel {
background-position: -135px -15px;
}
#listcontrols a.unread {
background-position: -45px 0;
}
#listcontrols a.unreadsel {
background-position: -45px -15px;
}
#listcontrols a.invert {
background-position: -60px 0;
}
#listcontrols a.invertsel {
background-position: -60px -15px;
}
#listcontrols a.none {
background-position: -75px 0;
}
#listcontrols a.nonesel {
background-position: -75px -15px;
}
#listcontrols a.expand-all {
background-position: -90px 0;
}
#listcontrols a.expand-allsel {
background-position: -90px -15px;
}
#listcontrols a.collapse-all {
background-position: -105px 0;
}
#listcontrols a.collapse-allsel {
background-position: -105px -15px;
}
#listcontrols a.expand-unread {
background-position: -120px 0;
}
#listcontrols a.expand-unreadsel {
background-position: -120px -15px;
}
#countcontrols
{
position: absolute;
top: 4px;
right: 4px;
white-space: nowrap;
font-size: 11px;
}
#countcontrols a.button,
#countcontrols a.buttonPas
{
float: right;
}
/** message list styles */
body.messagelist
{
margin: 0px;
background-color: #F9F9F9;
}
#messagelist
{
width: 100%;
display: table;
table-layout: fixed;
}
#messagelist thead tr td
{
height: 20px;
padding: 0 4px 0 2px;
vertical-align: middle;
border-bottom: 1px solid #999999;
color: #333333;
background: url(images/listheader.gif) top left repeat-x #CCC;
font-size: 11px;
font-weight: bold;
}
#messagelist thead tr td.sortedASC,
#messagelist thead tr td.sortedDESC
{
background-position: 0 -26px;
}
#messagelist thead tr td.sortedASC a
{
background: url(images/icons/sort.gif) right 0 no-repeat;
}
#messagelist thead tr td.sortedDESC a
{
background: url(images/icons/sort.gif) right -14px no-repeat;
}
#messagelist thead tr td a
{
display: block;
width: auto !important;
width: 100%;
color: #333333;
text-decoration: none;
}
#messagelist thead tr td.size
{
text-align: left;
}
#messagelist thead tr td.subject
{
padding-left: 18px;
width: 99%;
}
#messagelist tbody tr td
{
height: 20px;
padding: 0;
font-size: 11px;
overflow: hidden;
vertical-align: middle;
white-space: nowrap;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
border-bottom: 1px solid #EBEBEB;
cursor: default;
}
#messagelist tbody tr td a
{
color: #000;
text-decoration: none;
white-space: nowrap;
cursor: inherit;
}
#messagelist td img
{
vertical-align: middle;
display: inline-block;
}
#messagelist tbody tr td.flag,
#messagelist tbody tr td.status,
#messagelist tbody tr td.subject span.status
{
cursor: pointer;
}
#messagelist tr td.flag span,
#messagelist tr td.status span,
#messagelist tr td.attachment span,
#messagelist tr td.priority span
{
display: block;
width: 15px;
}
#messagelist tr td div.collapsed,
#messagelist tr td div.expanded,
#messagelist tr td.threads div.listmenu,
#messagelist tr td.attachment span.attachment,
#messagelist tr td.attachment span.report,
#messagelist tr td.priority span.priority,
#messagelist tr td.priority span.prio1,
#messagelist tr td.priority span.prio2,
#messagelist tr td.priority span.prio3,
#messagelist tr td.priority span.prio4,
#messagelist tr td.priority span.prio5,
#messagelist tr td.flag span.flagged,
#messagelist tr td.flag span.unflagged,
#messagelist tr td.flag span.unflagged:hover,
#messagelist tr td.status span.status,
#messagelist tr td.status span.msgicon,
#messagelist tr td.status span.deleted,
#messagelist tr td.status span.unread,
#messagelist tr td.status span.unreadchildren,
#messagelist tr td.subject span.msgicon,
#messagelist tr td.subject span.deleted,
#messagelist tr td.subject span.unread,
#messagelist tr td.subject span.replied,
#messagelist tr td.subject span.forwarded,
#messagelist tr td.subject span.unreadchildren
{
display: inline-block;
vertical-align: middle;
height: 17px;
width: 15px;
background: url(images/messageicons.png) center no-repeat;
}
#messagelist tr td.attachment span.attachment
{
background-position: 0 -170px;
}
#messagelist tr td.attachment span.report
{
background-position: 0 -255px;
}
#messagelist tr td.priority span.priority
{
background-position: 0 -309px;
}
#messagelist tr td.priority span.prio5
{
background-position: 0 -358px;
}
#messagelist tr td.priority span.prio4
{
background-position: 0 -340px;
}
#messagelist tr td.priority span.prio3
{
background-position: 0 -324px;
}
#messagelist tr td.priority span.prio2
{
background-position: 0 -309px;
}
#messagelist tr td.priority span.prio1
{
background-position: 0 -290px;
}
#messagelist tr td.flag span.flagged
{
background-position: 0 -153px;
}
#messagelist tr td.flag span.unflagged:hover
{
background-position: 0 -136px;
}
#messagelist tr td.subject span.msgicon,
#messagelist tr td.subject span.unreadchildren
{
background-position: 0 -51px;
margin: 0 2px;
}
#messagelist tr td.subject span.replied
{
background-position: 0 -85px;
}
#messagelist tr td.subject span.forwarded
{
background-position: 0 -68px;
}
#messagelist tr td.subject span.replied.forwarded
{
background-position: 0 -102px;
}
#messagelist tr td.status span.msgicon,
#messagelist tr td.flag span.unflagged,
#messagelist tr td.status span.unreadchildren
{
background-position: 0 17px; /* no icon */
}
#messagelist tr td.status span.msgicon:hover
{
background-position: 0 -272px;
}
#messagelist tr td.status span.deleted,
#messagelist tr td.subject span.deleted
{
background-position: 0 -187px;
}
#messagelist tr td.status span.status,
#messagelist tr td.status span.unread,
#messagelist tr td.subject span.unread
{
background-position: 0 -119px;
}
#messagelist tr td div.collapsed
{
background-position: 0 -221px;
cursor: pointer;
}
#messagelist tr td div.expanded
{
background-position: 0 -204px;
cursor: pointer;
}
#messagelist tr td.threads div.listmenu
{
background-position: 0 -238px;
cursor: pointer;
}
#messagelist tbody tr td.subject
{
width: 99%;
}
#messagelist tbody tr td.subject a
{
cursor: default;
vertical-align: middle; /* #1487091 */
}
/* thread parent message with unread children */
#messagelist tbody tr.unroot td.subject a
{
text-decoration: underline;
}
#messagelist tr td.attachment,
#messagelist tr td.threads,
#messagelist tr td.status,
#messagelist tr td.flag,
#messagelist tr td.priority
{
width: 17px;
padding: 0 0 0 2px;
}
#messagelist tr td.size
{
width: 60px;
text-align: right;
padding: 0 2px;
}
#messagelist tr td.fromto,
#messagelist tr td.from,
#messagelist tr td.to,
#messagelist tr td.cc,
#messagelist tr td.replyto
{
width: 180px;
padding: 0 2px;
}
#messagelist tr td.date
{
width: 118px;
padding: 0 2px;
}
#messagelist tr.message
{
background-color: #FFF;
}
#messagelist tr.unread
{
font-weight: bold;
background-color: #FFFFFF;
}
#messagelist tr.flagged td,
#messagelist tr.flagged td a
{
color: #CC0000;
}
#messagelist tr.selected td
{
color: #FFFFFF;
background-color: #CC3333;
}
#messagelist tr.unfocused td
{
color: #FFFFFF;
background-color: #929292;
}
#messagelist tr.selected td a
{
color: #FFFFFF;
}
#messagelist tr.unfocused td a
{
color: #FFFFFF;
}
#messagelist tr.deleted td,
#messagelist tr.deleted td a
{
color: #CCCCCC;
}
#listmenu
{
padding: 6px;
}
#listmenu legend
{
color: #999999;
}
#listmenu fieldset
{
border: 1px solid #999999;
margin: 0 5px;
float: left;
}
#listmenu div
{
padding: 8px 0 3px 0;
text-align: center;
clear: both;
}
/***** tree indicators *****/
td span.branch div
{
float: left;
height: 16px;
}
td span.branch div.tree
{
height: 17px;
width: 15px;
background: url(images/tree.gif) 0px 0px no-repeat;
}
td span.branch div.l1
{
background-position: 0px 0px; /* L */
}
td span.branch div.l2
{
background-position: -30px 0px; /* | */
}
td span.branch div.l3
{
background-position: -15px 0px; /* |- */
}
/** message view styles */
#messageframe
{
position: absolute;
top: 0;
left: 180px;
right: 0;
bottom: 0;
border: 1px solid #999;
background-color: #FFF;
overflow: auto;
z-index: 1;
}
div.messageheaderbox
{
margin: -14px 8px 0px 8px;
border: 1px solid #ccc;
}
table.headers-table
{
width: 100%;
background-color: #EBEBEB;
}
#messagebody #full-headers,
#messagebody table.headers-table
{
width: auto;
margin: 6px 8px;
background-color: #F4F4F4;
}
table.headers-table tr td
{
font-size: 11px;
border-bottom:1px solid #FFFFFF;
}
table.headers-table tr td.header-title
{
width: 1%;
color: #666666;
font-weight: bold;
text-align: right;
white-space: nowrap;
padding: 0 4px 0 8px;
}
table.headers-table tr td.header
{
width: 99%;
}
table.headers-table tr td.subject
{
font-weight: bold;
}
table.headers-table tr td.header span
{
white-space: nowrap;
}
#attachment-list
{
margin: 0;
padding: 0 4px 0 8px;
min-height: 16px;
list-style-image: none;
list-style-type: none;
background: url(images/icons/attachment.png) 4px 2px no-repeat #DFDFDF;
}
#messageframe #attachment-list
{
border-bottom: 1px solid #ccc;
}
.messageheaderbox #attachment-list
{
border-top: 1px solid #ccc;
}
#attachment-list:after
{
content: ".";
display: block;
height: 0;
font-size: 0;
clear: both;
visibility: hidden;
}
#attachment-list li
{
float: left;
height: 18px;
font-size: 11px;
padding: 2px 0px 0px 15px;
white-space: nowrap;
}
#attachment-list li a
{
text-decoration: none;
}
#attachment-list li a:hover
{
text-decoration: underline;
}
#messagebody
{
position:relative;
padding-bottom: 10px;
background-color: #FFFFFF;
}
div.message-part,
div.message-htmlpart
{
padding: 10px 8px;
border-top: 1px solid #ccc;
/* overflow: hidden; */
}
#messagebody div:first-child
{
border-top: 0;
}
div.message-part a,
div.message-htmlpart a
{
color: #0000CC;
}
div.message-part pre,
div.message-htmlpart pre,
div.message-part div.pre
{
margin: 0px;
padding: 0px;
font-family: monospace;
font-size: 12px;
white-space: -moz-pre-wrap !important;
white-space: pre-wrap !important;
white-space: pre;
}
div.message-part span.sig
{
color: #666666;
}
div.message-part blockquote
{
color: blue;
border-left: 2px solid blue;
border-right: 2px solid blue;
background-color: #F6F6F6;
margin: 2px 0px;
padding: 1px 8px 1px 10px;
}
div.message-part blockquote blockquote
{
color: green;
border-left: 2px solid green;
border-right: 2px solid green;
}
div.message-part blockquote blockquote blockquote
{
color: #990000;
border-left: 2px solid #bb0000;
border-right: 2px solid #bb0000;
}
body.iframe div.message-htmlpart
{
margin: 8px;
}
div.message-htmlpart div.rcmBody
{
margin: 8px;
}
#messagebody span.part-notice
{
display: block;
}
#message-objects div,
#messagebody span.part-notice
{
margin: 8px;
min-height: 20px;
padding: 10px 10px 6px 46px;
}
#message-objects div a,
#messagebody span.part-notice a
{
color: #666666;
padding-left: 10px;
}
#message-objects div a:hover,
#messagebody span.part-notice a:hover
{
color: #333333;
}
#messageviewlink
{
position: absolute;
top: 8px;
right: 10px;
width: 15px;
height: 15px;
border: 0;
}
#full-headers
{
color: #666666;
text-align: center;
padding: 2px 6px;
border-bottom: 1px solid #ccc;
background-color: #EBEBEB;
}
.messageheaderbox #full-headers
{
border-bottom: 0;
}
div.more-headers
{
cursor: pointer;
height: 8px;
border-bottom: 0;
}
div.show-headers
{
background: url(images/icons/down_small.gif) no-repeat center;
}
div.hide-headers
{
background: url(images/icons/up_small.gif) no-repeat center;
}
#headers-source
{
margin: 2px 0;
padding: 0.5em;
height: 145px;
background: white;
overflow: auto;
font-size: 11px;
border: 1px solid #CCC;
display: none;
text-align: left;
color: #333;
}
/** message compose styles */
#compose-container
{
position: absolute;
top: 0;
left: 185px;
right: 0;
bottom: 0;
margin: 0;
}
#compose-div
{
position: absolute;
top: 85px;
bottom: 0;
margin: 0;
width: 100%;
}
#compose-div .boxfooter
{
height: 22px;
background: none;
border-top: 0;
}
#compose-div .boxlistcontent
{
bottom: 23px;
}
#compose-body
{
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: 0;
font-size: 9pt;
font-family: monospace;
border: 1px solid #999;
resize: none;
}
#compose-body_tbl
{
border: 1px solid #999;
}
#compose-body_tbl td
{
border: none;
}
#compose-body_tbl tr.mceFirst td.mceToolbar
{
border-bottom: 1px solid #ccc;
}
#compose-headers
{
width: 100%;
}
#compose-headers td.editfield
{
padding-right: 8px;
width: 95%;
}
#compose-headers td.top
{
vertical-align: top;
}
#compose-headers td.title,
#compose-subject td.title
{
width: 80px !important;
font-size: 11px;
font-weight: bold;
padding-right: 10px;
white-space: nowrap;
color: #666;
}
#compose-headers td textarea,
#compose-headers td input
{
resize: none;
width: 100%;
border: 1px solid #999;
}
#compose-headers td textarea
{
height: 32px;
}
input.from_address
{
width: 80% !important;
}
#compose-cc,
#compose-bcc,
#compose-replyto,
#compose-followupto
{
display: none;
}
#compose-editorfooter
{
position: absolute;
right: 0;
bottom: 0;
text-align: right;
}
#compose-editorfooter label
{
font-size: 11px;
font-weight: bold;
color: #666;
}
#compose-buttons
{
position: absolute;
left: 0;
bottom: 0;
width: auto;
}
#compose-attachments
{
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 175px;
border: 1px solid #999;
background-color: #F9F9F9;
}
#compose-attachments.droptarget.hover
{
background-color: #F0F0EE;
box-shadow: 0 0 5px 0 #999;
-moz-box-shadow: 0 0 5px 0 #999;
-o-box-shadow: 0 0 5px 0 #999;
}
#compose-attachments ul
{
margin: 0px;
padding: 0px;
background-color: #FFF;
list-style-image: none;
list-style-type: none;
}
#compose-attachments ul li
{
height: 18px;
font-size: 11px;
padding-left: 2px;
padding-top: 2px;
padding-right: 4px;
border-bottom: 1px solid #EBEBEB;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
}
#compose-attachments li a
{
text-indent: -5000px;
width: 17px;
height: 16px;
display: inline-block;
text-decoration: none;
}
#compose-attachments li img
{
vertical-align: middle;
}
#compose-attachments li a.delete,
#compose-attachments li a.cancelupload
{
background-position: 0px -392px;
}
#compose-attachments li span
{
line-height: 18px;
vertical-align: middle;
}
#attachment-form
{
padding: 6px;
}
#attachment-form div
{
padding: 2px;
}
#attachment-form div.buttons
{
margin-top: 4px;
}
#quota
{
position: absolute;
top: 3px;
right: 8px;
width: 100px;
}
#quotaimg
{
position: absolute;
top: 3px;
right: 6px;
z-index: 101;
}
diff --git a/tests/Framework/StringReplacer.php b/tests/Framework/StringReplacer.php
index 11210c0da..6081e5377 100644
--- a/tests/Framework/StringReplacer.php
+++ b/tests/Framework/StringReplacer.php
@@ -1,20 +1,44 @@
<?php
/**
* Test class to test rcube_string_replacer class
*
* @package Tests
*/
class Framework_StringReplacer extends PHPUnit_Framework_TestCase
{
/**
* Class constructor
*/
function test_class()
{
$sr = new rcube_string_replacer;
$this->assertInstanceOf('rcube_string_replacer', $sr, "Class constructor");
}
+
+ /**
+ * Data for test_replace()
+ */
+ function data_replace()
+ {
+ return array(
+ array('http://domain.tld/path*path2', '<a href="http://domain.tld/path*path2" target="_blank">http://domain.tld/path*path2</a>'),
+ array('www.domain.tld', '<a href="http://www.domain.tld" target="_blank">www.domain.tld</a>'),
+ array('WWW.DOMAIN.TLD', '<a href="http://WWW.DOMAIN.TLD" target="_blank">WWW.DOMAIN.TLD</a>'),
+ );
+ }
+
+ /**
+ * @dataProvider data_replace
+ */
+ function test_replace($input, $output)
+ {
+ $replacer = new rcube_string_replacer;
+ $result = $replacer->replace($input);
+ $result = $replacer->resolve($result);
+
+ $this->assertEquals($output, $result);
+ }
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Feb 3, 3:40 PM (18 h, 29 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
427257
Default Alt Text
(681 KB)

Event Timeline