Compare commits

...

386 Commits

Author SHA1 Message Date
johndoh 279ae66120
Move all message list entry generation to client side (#7287)
Always return cols required for widescreen message list and control layout only on JS side
4 years ago
johndoh 13a066b24f
Elastic: small improvement to splitter code (#7435) 4 years ago
William Rankin 40250563e3
Specify 13px font-size for .html-editor > textarea (#7447)
This is a followup to PR #7375 which set the plaintext message area from 14px to 13px for greater consistency with Classic and Larry skins. With that PR I neglected to consider the font size in the compose screen, which should probably match the 13px of the message area, but currently inherits 14px from the html element which causes an odd jump in font size when replying to a message.

Reference #7375
4 years ago
Aleksander Machniak b22f1c9a1b Add skip-empty option to get_edit_field() (#7444) 4 years ago
Aleksander Machniak ec2e713ecb Fix problem with forwarding inline images attached to messages with no HTML part (#7414) 4 years ago
Gianluca Giacometti 4ada2c3f13
Use more strict selector (#7452) 4 years ago
Aleksander Machniak 98881a0cbd Small code simplification 4 years ago
Aleksander Machniak 1c76c8440f Elastic: Remove unused color variables 4 years ago
Aleksander Machniak 731be15d46 Elastic: Fix context menu (paste) on the recipient input (#7431) 4 years ago
Aleksander Machniak 9ee1f4b636 Merge branch 'master' of github.com:roundcube/roundcubemail 4 years ago
Aleksander Machniak 51eb8a6a68 Update changelog
[skip ci]
4 years ago
Aleksander Machniak 9508acf249 Update changelog
[skip ci]
4 years ago
Aleksander Machniak 30610e867e Merge branch 'fix_encode' of https://github.com/shirosaki/roundcubemail into shirosaki-fix_encode
Refactor the new code
4 years ago
johndoh 9dbe666d4c
Allow skins to define which layout options they support (#7235) 4 years ago
Aleksander Machniak 86d34960c8 Optimize image size 4 years ago
Théo 61185b9362
Update roundcube_logo.png (#7357) 4 years ago
William Rankin 13b03c3953
Specify 13px font-size for .message-part div.pre (#7375)
Default monospace fonts are larger than proportional fonts and so make the plain text message look oddly large, upsetting the aesthetics of the page.
4 years ago
Kent Varmedal b4dabff26c
Add newline when writing logs to stdout (#7418)
Add newline on the end of the line when printing to stdout.
4 years ago
Aleksander Machniak 278cf3c18e Increase maximum size of contact jobtitle and department fields to 128 characters
[skip ci]
4 years ago
Aleksander Machniak e9c592a6e8 Fix bug where subfolders of special folders could have been duplicated on folder list 4 years ago
Aleksander Machniak bb06645b8f Update changelog
[skip ci]
4 years ago
Aleksander Machniak 9b8ed0dfeb Update changelog
[skip ci]
4 years ago
Aleksander Machniak 218cd2ab4a Elastic: Support space-separated email addresses in recipient input (#6529) 4 years ago
Aleksander Machniak 4e00237cc4 Allow opening application/octet-stream attachments according to filename extension (#6821) 4 years ago
Aleksander Machniak eaebae1e54 Fix bug where activation of forward/vacation rule could activate a wrong script (#7423)
Also should fix bug where forward/vacation rule could end up being duplicated (#7349)
4 years ago
Aleksander Machniak 77174ff9ff Fix test after change for #7413 4 years ago
Aleksander Machniak 25772702ac Fix so anchor tags without href attribute are not modified (#7413) 4 years ago
Aleksander Machniak af0e98759d Installer: Fix regression in SMTP test section (#7417) 4 years ago
Aleksander Machniak cd76046237 Update changelog
[skip ci]
4 years ago
Aleksander Machniak 46d3cae2ff Security: Fix cross-site scripting (XSS) via malicious XML attachment 4 years ago
Aleksander Machniak bda02002de Security: Better fix for CVE-2020-12641 4 years ago
Aleksander Machniak ecabb1e667 Security: Fix XSS issue in template object 'username' (#7406) 4 years ago
Aleksander Machniak 31249d932d Security: Fix couple of XSS issues in Installer (#7406) 4 years ago
Aleksander Machniak e05c69afab Fix bug where PDF attachments marked as inline could have not been attached on mail forward (#7382) 4 years ago
Aleksander Machniak 6436c22d2d Elastic: Fix aspect ratio of a contact photo in mail preview (#7339) 4 years ago
Aleksander Machniak da2bb8af6d Fix error when user-configured skin does not exist anymore (#7271)
We fallback to the system skin not the default one.
4 years ago
Aleksander Machniak f6586c7cf7 Fix PHP warning: count(): Parameter must be an array or an object... in ID command handler (#7392) 4 years ago
Aleksander Machniak 82ee69df15 Update changelog
[ci skip]
4 years ago
johndoh 34a0af8964
Allow array in smtp_host config (#7296) 4 years ago
Aleksander Machniak 30d31c323b Improve UX on custom header input (#7207) 4 years ago
Aleksander Machniak a47c558df4 Fix typo 4 years ago
Aleksander Machniak 14a8a99ee2 Update changelog
[ci skip]
4 years ago
Christopher Gurnee 40ecd47f90 Show Encrypt button w/Mailvelope, even if disabled
Before the Elastic skin would keep it hidden until enabled, closes #7353
4 years ago
Aleksander Machniak 06a1964ef6 Fix changelog
[ci skip]
4 years ago
Christopher Gurnee 24d0cf5d34 Let Mailvelope use sender's address to find pubkeys to check signatures 4 years ago
Christopher Gurnee c3d4598985 Add missing \'s to regexes in rcube_check_email() 4 years ago
Aleksander Machniak 7dcba95605 Update changelog
[ci skip]
4 years ago
vaaguirre 9bec8dd506
Fix issue with Modoboa driver for password plugin (#7372)
Was having trouble with updating a password with the Modoboa API (1.9.1). API responded with an error message but 200 HTTP status code, so roundcube displayed a success message even though the password wasn't being updated. Added a line to include a required field in the update request.
4 years ago
Aleksander Machniak 663f7a8c58 Fix default keyservers (use keys.openpgp.org), add note about CORS (#7373, #7367) 4 years ago
johndoh 3af6303ad7
Remove depreciated jquery.trim function (#7371) 4 years ago
Aleksander Machniak 35c29be9b2 Remove use of ext-iconv 4 years ago
Aleksander Machniak 87f42677c2 Don't resize alert and confirm dialogs 4 years ago
Aleksander Machniak 7ead0bb227 Fix empty attachment size handling (#7370) 4 years ago
Aleksander Machniak 014659b600 CS fixes, mostly around undefined variables 4 years ago
Aleksander Machniak f0f6234a1a Use merge instead of append (#7341) 4 years ago
Aleksander Machniak 87ca7a09dc Fix missing flag indication on collapsed thread in Larry and Elastic (#7366) 4 years ago
Aleksander Machniak 377239fa8e Display a warning and do not try to open empty attachments (#7332) 4 years ago
Aleksander Machniak a2ee9f7eab Merge branch 'master' of github.com:roundcube/roundcubemail 4 years ago
Aleksander Machniak 1aebb1985c Fix recipient rename/delete after drag'n'drop, also keep the order 4 years ago
Aleksander Machniak 09848515fe Merge branch 'master' of https://github.com/chilek/roundcubemail into chilek-master 4 years ago
Sander Nilsen 0efa899d6c
Grammar correction (#7346) 4 years ago
Aleksander Machniak 55343ffd7d Update changelog
[ci skip]
4 years ago
johndoh ec86e3cb7f
Markasjunk: Fix regression in jsevent driver #7361 (#7365) 4 years ago
Aleksander Machniak 8fac36e2c2 Fix so the database setup description is compatible with MySQL 8 (#7340)
[ci skip]
4 years ago
Aleksander Machniak 3d2bb47f8d Clarify des_key length requirement (#7350)
[ci skip]
4 years ago
Aleksander Machniak c39081b6a1 Fix bug in extracting required plugins from composer.json that led to spurious error in log (#7364) 4 years ago
Aleksander Machniak 12d4705935 Update changelog
[ci skip]
4 years ago
Tomasz Chiliński 0b09b24a55
enhancement: elastic skin: allow to drag & drop addresses between address input fields during compose message (code simplification) 4 years ago
Aleksander Machniak 8344f07d7f Fix CSRF bypass that could be used to log out an authenticated user (#7302) 4 years ago
Aleksander Machniak 219e353ac1 Fix local file inclusion (and code execution) via crafted 'plugins' option 4 years ago
Aleksander Machniak 4951d6603a Fix remote code execution via crafted 'im_convert_path' or 'im_identify_path' settings 4 years ago
Aleksander Machniak 87e4cd0cf2 Fix XSS issue in handling of CDATA in HTML messages 4 years ago
Tomasz Chiliński 8db9b8b6e2
enhancement: elastic skin: allow to drag & drop addresses between address input fields during compose message (code simplification) 4 years ago
Tomasz Chiliński 682cea5cc5
enhancement: elastic skin: allow to drag & drop addresses between address input fields during compose message (code simplification) 4 years ago
Tomasz Chiliński aae1189dbf
enhancement: elastic skin: allow to drag & drop addresses between address input fields during compose message (update source list address input field to) 4 years ago
Tomasz Chiliński 6f8663f7ef
enhancement: elastic skin: allow to drag & drop addresses between address input fields during compose message 4 years ago
Aleksander Machniak 6b5fc8db95 Fix so Print button for PDF attachments works on Firefox >= 75 (#5125) 4 years ago
Aleksander Machniak b35b5a1a26 Fix typo 4 years ago
Aleksander Machniak bf34e8cf9c Fix performance issue of parsing big HTML messages by disabling HTML5 parser for these (#7331) 4 years ago
Aleksander Machniak 36532345df Make install-jsdeps.sh script working without the 'file' program installed (#7325) 4 years ago
Aleksander Machniak 30b5803ee4 Fix bug where some message/rfc822 parts could not be attached on forward (#7323) 4 years ago
Aleksander Machniak cb9b22dcc1 Fix characters encoding in group rename input after group creation/rename (#7330) 4 years ago
Aleksander Machniak 3e9aefceef Mailvelope: Fix bug where recipients with name were not handled properly in mail compose (#7312) 4 years ago
Aleksander Machniak 15ee34a438 Revert "Fix bug where session was destoryed with window close (#7251)"
This reverts commit 32fac136db.
4 years ago
Aleksander Machniak 4a5efe09f9 Fix bug where a special folder couldn't be created if a special-use flag is not supported (#7147) 4 years ago
Aleksander Machniak 43456db922 Fix so imap error message is displayed to the user on folder create/update (#7245) 4 years ago
Aleksander Machniak 32fac136db Fix bug where session was destoryed with window close (#7251) 4 years ago
Aleksander Machniak 9ddb57f5bb Elastic: Restrict logo size in print view (#7275) 4 years ago
Aleksander Machniak 679cb1833c Merge branch 'zipdownload' of https://github.com/johndoh/roundcubemail into johndoh-zipdownload 4 years ago
Aleksander Machniak ae687d7a7a Update changelog 4 years ago
Aleksander Machniak cb8c07843b Fix marking as spam/ham on moving messages with Move menu (#7189) 4 years ago
PhilW ace991946f zipdownload: enable menu options when menu is opened 4 years ago
Aleksander Machniak e0b56aeb4d Fix PHP warning for real (#7206) 4 years ago
Aleksander Machniak 7d97c5b215 Merge branch 'markasjunk-select' of https://github.com/johndoh/roundcubemail into johndoh-markasjunk-select 4 years ago
johndoh 77e2ee9c9e
Add some public methods to elastic ui.js (#7240) 4 years ago
Aleksander Machniak c2b12d2b2b Elastic: Fix color of a folder with recent messages (#7281) 4 years ago
Aleksander Machniak e84dc4c385 Fix literals handling again 4 years ago
Aleksander Machniak b771cccbaa Update changelog
[skip ci]
4 years ago
dessert1 e66ffae856
Fix handling keyservers configured with protocol prefix (#7295)
`|^[a-z]://|` matches only single-character protocol shortnames, to correctly exclude e.g. `hkps://` the expression should be `|^[a-z]+://|` instead.
4 years ago
Aleksander Machniak 3d4a02a3a6 Fix bug where multiple images in a message were replaced by the first one on forward/reply/edit (#7293) 4 years ago
Aleksander Machniak 2965e60c1f Support many string literals in a "line response", deduplicate code 4 years ago
Aleksander Machniak f9c84e2646 Fix string literals handling in IMAP STATUS (and various other) responses (#7290) 4 years ago
Aleksander Machniak 7df358d64e Fix internal cache use in rcube_imap::get_message()
Two folders, personal and shared, can contain the same UIDs, so
we should check UID and folder name when dealing with internally
cached message.
4 years ago
Aleksander Machniak f0ec65ee70 Fix labels again 4 years ago
Christoph Langguth 81839093bb
Bugfix in password/pwned driver result parsing (#7288) 4 years ago
Aleksander Machniak 005da225f6 Merge branch 'master' of github.com:roundcube/roundcubemail 4 years ago
Aleksander Machniak c26ba1ee5d Improve some labels 4 years ago
johndoh 81dcf4a7de
Allow possibility to define the container of a table with a fixed header (#7239) 4 years ago
Aleksander Machniak 84505edac5 Update changelog
[ci skip]
4 years ago
johndoh 11aa9633b1
Improvements to options menu link template object (#7237) 4 years ago
Aleksander Machniak 623a642457 Update changelog, fix some localization labels 4 years ago
Aleksander Machniak 68350bd385 Merge branch 'master' of https://github.com/mildred/roundcubemail into mildred-master 4 years ago
Aleksander Machniak 3c8b270d8d Small code improvements, update changelog 4 years ago
Aleksander Machniak be7770b5a9 Merge branch 'password_pwned' of https://github.com/clangguth/roundcubemail into clangguth-password_pwned 4 years ago
Christoph Langguth a70baca3ae Refactoring of pwned passwords plugin, taking into account alecpl's comment. 4 years ago
johndoh 97732d5de7
Add selection element to theads as well as tbodies (#7238) 4 years ago
Aleksander Machniak dc1ce546b9 Fix sql syntax error introduced in last commit 4 years ago
Aleksander Machniak 2c1a22d283 Bring back BINARY for some columns after switch to utf8mb4 charset (#7277) 4 years ago
Aleksander Machniak 0fbd184294 Fix cursor position after inserting a group to a recipient input using autocompletion (#7267)
... for larry and classic skins.
4 years ago
Aleksander Machniak b3b5b9665d Fix regression in testing database schema on MSSQL (#7227) 4 years ago
Aleksander Machniak a748214595 Fix so button label in Select image/media dialogs is "Close" not "Cancel" (#7246) 4 years ago
Aleksander Machniak e5247e855e Fix missing contact display name in QR Code data (#7257) 4 years ago
Aleksander Machniak d194b238c7 Support RFC8438: IMAP STATUS=SIZE - for faster folder size calculation (#7269) 4 years ago
Christoph Langguth 370789c8c9 password plugin: add pwned passwords strength driver 4 years ago
Mildred Ki'Lya 88577119d7 Add new archival types to keep the folder structure
Add archival type folderyear and foldermonth to keep the original folder
structure after a YYYY or a YYYY/MM prefix.
4 years ago
Aleksander Machniak 088714619e Fix scroll-jump in MS Edge when using autoresizeable textarea (#7230) 4 years ago
Aleksander Machniak f452d33d44 Update changelog for #7261 4 years ago
Aleksander Machniak b2391417b3 Tests: Add browser test for #7231 4 years ago
Aleksander Machniak 68c8ee0a2b Elastic: Fix recipient input bug when using click to select a contact from autocomplete list (#7231) 4 years ago
Aleksander Machniak b7410ffe89 Use mySQL charset in connection string instead of SET NAMES (#7232)
And switch to utf8mb4 as it is what we're using right now in db schema.
4 years ago
Aleksander Machniak 80a244756d Tests: Add couple of HTML editor tests (including bug #7230) 4 years ago
Aleksander Machniak 38d6659384 Elastic: Fix text selection with Shift+PageUp and Shift+PageDown in plain text editor when using Chrome (#7230) 4 years ago
Aleksander Machniak e58c6547ca Add release mark
[skip ci]
4 years ago
Aleksander Machniak 770d818dd9 Fix undefined variable 4 years ago
Aleksander Machniak 4b219792a7 Tests: Add browser tests for attachment_reminder plugin 4 years ago
Aleksander Machniak f94b871aa6 Tests: Add browser tests for Markasjunk plugin 4 years ago
Aleksander Machniak db5ab6d3f6 Fix identity selection on reply when both sender and recipient addresses are included in identities (#7211) 4 years ago
PhilW 65a6a511a6 markasjunk: handle select all case (#7206) 4 years ago
Aleksander Machniak f2328bbe6b Add note about innodb_large_prefix=true requirement (#7212)
[skip ci]
4 years ago
Aleksander Machniak b80171f37b Fix bug where original attachments with Content-Id were attached to the message on reply (#7122)
All Content-Disposition:inline parts that aren't used in the body are ignored on reply/forward/edit.
4 years ago
Aleksander Machniak 4e2e876101 Update changelog 4 years ago
Paul J. Dorn 305c9355ee
Fix using unix:///path/to/socket.file in memcached driver (#7210)
off by one when stripping the memcache (sans d) compatible AF_UNIX prefix
4 years ago
Aleksander Machniak 32b37fba33 Update localization 4 years ago
Aleksander Machniak ea2d0ad458 Enigma: Fix bug where "Send unencrypted" button didn't work in Elastic skin (#7205) 4 years ago
Aleksander Machniak b606d81cdf MySQL: Use utf8mb4 charset and utf8mb4_unicode_ci collation (#6535, #7113)
Fixes support for utf8 emoji in html signature.
4 years ago
MrSorcus 706912e534
Fix typo (#7203) 4 years ago
Aleksander Machniak 50d6ea30e0 Support for language codes up to 16 chars long (e.g. es-419) in database schema (#6851) 4 years ago
Aleksander Machniak 60c8dd2e23 Fix regression where using an absolute path to SQLite database file on Windows didn't work (#7196) 4 years ago
Aleksander Machniak 0b02e87afe Fix some strict mode warnings 4 years ago
Aleksander Machniak fe796d4040 Remove useless pass-by-reference 4 years ago
Aleksander Machniak 3478b002f8 Enigma: Fix incorrect encrypted mail structure (boundary) with Mail_Mime >= 1.10.5 4 years ago
Aleksander Machniak 4114dc932d Fix bug where it wasn't possible to save flag actions (#7188)
Display proper error when no flag is selected.
4 years ago
Aleksander Machniak a075616fb2 Tests: Add browser tests for Zipdownload plugin 4 years ago
Aleksander Machniak d594ce2483 Tests: Add browser tests for Server Settings section 4 years ago
Aleksander Machniak d340f18295 Fix display issues with mail subject that contains line-breaks (#7191) 4 years ago
Aleksander Machniak 8080eb2c71 Tests: Fix database locking bug 4 years ago
Aleksander Machniak 84aa5d93f1 Tests: Added browser tests for Archive plugin 4 years ago
Aleksander Machniak c6392f2168 Markasjunk: Fix bug where marking as spam/ham didn't work on moving messages with drag-and-drop (#7137) 4 years ago
Aleksander Machniak 6c1e8e1efe Tests: Add Identities tests 4 years ago
Aleksander Machniak cbcebad9c1 Tests: Add Responses edit test 4 years ago
Eli Schiff b6db3e4ad7 Fixed incorrect typeof comparison (#7186) 4 years ago
Aleksander Machniak bdf0a6539e Relaxed domain name validation for extended TLDs support (#5588) 4 years ago
Aleksander Machniak 8793baa006 Update changelog
[skip ci]
4 years ago
Aleksander Machniak 97e6065897
Extract RFC2231 attachment name from message headers (#6729) (#6783)
* Extract RFC2231 attachment name from message headers (#6729)
* Workaround for attachments with invalid content type (e.g. PDF) (#6816)
4 years ago
Aleksander Machniak 1613f3ab4c
INSERT OR REPLACE implementation (#6771)
For now with support in postgres and mysql databases.
For now used in rcube_cache, rcube_imap_cache and enigma plugin
4 years ago
Aleksander Machniak e4281ae6d4 Tests: Try to fix timing issue 4 years ago
Aleksander Machniak d1b61410fc Tests: Add Dialog component 4 years ago
Aleksander Machniak d979aa0584 Tests: Add more browser tests for Responses 4 years ago
Aleksander Machniak 1376b5a647 Fix bug where message parts with no Content-Disposition header and no name were not listed on attachments list (#7117) 4 years ago
Aleksander Machniak b536e18d97 Tests: Add contacts print test 4 years ago
Aleksander Machniak 2f20f43cbb Tests: Change structure of tests 4 years ago
Aleksander Machniak 93519df826 Elastic: Fix disappearing sidebar in mail compose after clicking Mail button
Elastic: Fix incorrect aria-disabled attribute on Mail taskmenu button in mail compose
4 years ago
Aleksander Machniak 689c761026 Enigma: Simplify and fix handling of IDN with not all parts being punny-coded 4 years ago
Aleksander Machniak e89376709c Enigma: Display IDN domains of key users and identities in UTF8 4 years ago
Aleksander Machniak 6e63db6487 Merge branch 'enigma_idn_fix' of https://github.com/MaxBosse/roundcubemail into MaxBosse-enigma_idn_fix 4 years ago
Aleksander Machniak c2c85b0a76 Tests: Fix Print test on mobile, make GreenMail quiet on folder deletion 4 years ago
Aleksander Machniak 2037f2612b Tests: Fix testing with create_default_folders=true 4 years ago
Aleksander Machniak b6e75ebea7 Travis: Use bigger GreenMail startup timeout 4 years ago
Aleksander Machniak c138567ab5 Support 'greenmail' as an imap vendor label, don't call ID when not supported 4 years ago
Aleksander Machniak 4258acf57f Tests: Return proper exit code on error from bootstrap 4 years ago
Max Bosse 3faa976fc8 Fix creation of pgp-keys for IDN emails 4 years ago
Aleksander Machniak 5005c6c3e3 Travis: Fix/Update greenmail download location 4 years ago
Aleksander Machniak 5a6606a245 Tests: Add folder creation test 4 years ago
Aleksander Machniak 4f47ac0405 Fix bug where files in skins/ directory were listed on skins list (#7180) 4 years ago
Aleksander Machniak 700031b3b7 Elastic: Fix non-working folder subscription checkbox for newly added folders (#7174) 4 years ago
Aleksander Machniak 62fb938260 Tests: Add browser test for mail print and bug #7169 4 years ago
Aleksander Machniak 38116c1ae5 Merge branch 'master' of https://github.com/ssodk/roundcubemail into ssodk-master 4 years ago
Aleksander Machniak 5c73848499 Tests: Add Browser::assertElementsCount() helper 4 years ago
Aleksander Machniak c2e348067e Add browser tests for "more recipients" dialog 4 years ago
Aleksander Machniak 47089e9265 Elastic: Fix missing Close button in "more recipients" dialog 4 years ago
Aleksander Machniak f93857fbab Elastic: Fix text selection in recipient inputs (#7129) 4 years ago
ssodk 10ec313034
Update func.inc
Remove duplicates in print-view when the recipient list is expanded
4 years ago
Aleksander Machniak 9311c49cf4 Fix unexpected error message when mail refresh involves folder auto-unsubscribe (#6923) 4 years ago
Aleksander Machniak 470e91e615 Tests: Add forgotten data file 4 years ago
Aleksander Machniak c4f114fa84 Add browser tests for mail preview 4 years ago
Aleksander Machniak 7d2b4f8d15 Enigma: Add missing localization labels used in Larry skin 4 years ago
Aleksander Machniak d8ebf290b2 Add note about Windows and symlinks (#7151) 4 years ago
Aleksander Machniak b26340c271 Fix typo 4 years ago
Aleksander Machniak 646e0b99ea Enigma: Fix so using list checkbox selection does not load the key preview frame 4 years ago
Aleksander Machniak e3556986a1 Fix PHP Warning: array_filter() expects parameter 1 to be array, null given in subscription_options plugin (#7165)
.. when IMAP connection fails
4 years ago
Aleksander Machniak 355ff138fd Enigma: Fix so key list selection is reset when opening key creation form (#7154) 4 years ago
Aleksander Machniak 5d025609d3 Tests: Add browser tests for contact groups 4 years ago
Aleksander Machniak a646b13715 Try to fix flaky test 4 years ago
Aleksander Machniak 31b0275573 Add basic browser tests for message menu and open in new window feature 4 years ago
Aleksander Machniak a9abe62d58 Fix regression where "Open in new window" action didn't work (#7155) 4 years ago
Aleksander Machniak fded360d84 Fix so messages in threads with no root aren't displayed separately (#4999) 4 years ago
Aleksander Machniak 3cab0ad493 Update changelog
[skip ci]
4 years ago
Aleksander Machniak 0eb4674216
Managesieve: Allow display name with email address in vacation :from field (#6760) (#6763) 4 years ago
Aleksander Machniak 1b376517e8 Update changelog
[skip ci]
4 years ago
johndoh 51a9dd631f Add support for SameSite cookie attribute (req PHP >= 7.3.0) (#6772) 4 years ago
Aleksander Machniak 5236f40823 Update changelog
[skip ci]
4 years ago
Aleksander Machniak e8e8c31eb3
Improve namespace roots presentation (#5012) (#6789)
- Display a special icon for other users and shared namespace roots (Elastic)
- Change folders sorting so shared/other users namespaces are listed last

Fixes #5012.
4 years ago
Aleksander Machniak 245e1aa9f9 Update changelog
[skip ci]
4 years ago
johndoh d51352b9cb Add support for nested if conditions (#6829)
* add support for nested if conditions
* add tests for condition parsing in templates
* make [space][slash] ending of condition objects optional (#6954)
4 years ago
Aleksander Machniak 530b53d92f Update changelog 4 years ago
jelle van der Waa 11e5c1af4f Password: Make chpass-wrapper.py Python 3 compatible (#7135)
Remove the ", e" as the exception is never printed and this makes it
Python 3 compatible as well

Closes: #7118
4 years ago
Théo 5a1a33752e Updte copyright year in About (#7138) 4 years ago
Aleksander Machniak 094da1e653 Elastic: Fix bug where it was possible to switch editor mode when 'htmleditor' was in 'dont_override' (#7143) 4 years ago
Aleksander Machniak e2bd4548ed Tests: Move logon helpers to the App component 4 years ago
Aleksander Machniak 2c0dd762ed Update changelog
[skip ci]
4 years ago
Aleksander Machniak cf8277ea3e Tests: Try to fix test that fails on Travis, but not on my setup 4 years ago
Aleksander Machniak f72054e761 Tests: Create Browser and Components for better code structure 4 years ago
Aleksander Machniak 1edd7a4b3f Tests: Add functional tests for contacts export 4 years ago
Aleksander Machniak 57162ef481 Make install.php accept long Chrome version string
[skip ci]
4 years ago
Aleksander Machniak 421dbf5271 Tests: Mantion TESTS_MODE in README
[skip ci]
4 years ago
Aleksander Machniak 564287d6c8 Tests: Try to fix failing toolbar menu tests in phone mode 4 years ago
Aleksander Machniak accb5f63e2 Travis: Fix run.sh 4 years ago
Aleksander Machniak 9a0e71ddee Travis: Enable in-browser tests in phone and tablet mode 4 years ago
Aleksander Machniak 934382c91f Make testing in all phone/tablet/desktop modes of Elastic possible 4 years ago
Aleksander Machniak a32e2b4c6f Addressbook -> Contacts 4 years ago
Aleksander Machniak 59e1efb595 Add more in-browser tests 4 years ago
Aleksander Machniak 7abd4f2c15 Travis: Cleanup 4 years ago
Aleksander Machniak 5defccb919 Travis: Run browser tests on bionic with node-less 4 years ago
Aleksander Machniak 7911c75b1e Travis: Corrected paths 4 years ago
Aleksander Machniak ef0d23241a Travis: Run in-browser tests not in devel_mode 4 years ago
Aleksander Machniak f32b9ae51d Travis: Move install commands to .ci/install.sh 4 years ago
Aleksander Machniak 581bc6886b Travis: Install js deps for in-browser tests 4 years ago
Aleksander Machniak 724f5c740c Travis: Install proper version of WebDriver 4 years ago
Aleksander Machniak 31b33c0f39 Don't require config.inc.php when only config-<env>.inc.php exists 4 years ago
Aleksander Machniak 15885055ca Travis: Try to debug why in-browser tests do not work 4 years ago
Aleksander Machniak 9d1e4b4828 Travis: Fix syntax error 4 years ago
Aleksander Machniak 87304c29d1 Travis: Fix in-browser tests setup 4 years ago
Aleksander Machniak 53a111f8c3 Travis: Debugging setup.sh script 4 years ago
Aleksander Machniak 1f656e5a07 Travis: In-browser tests with GreenMail server 4 years ago
Aleksander Machniak 895b6f54f3 Add more in-browser tests 4 years ago
Aleksander Machniak a88798ab18 We don't need index-test.php anymore 4 years ago
Aleksander Machniak 7ebc159780 Travis: Remove in-browser tests
Yeah, we'd need to setup a test account on some IMAP server which
would be publicly available. I'm not sure we can do that.
Also, we'd need to add config-tests.inc.php file and maybe use sqlite database.
4 years ago
Aleksander Machniak 0ea8e9c289 Travis: Try in-browser tests on PHP 7.3
as PHP 7.4 does not yet have php-zip extension
4 years ago
Aleksander Machniak dd7b51bcd3 Travis: Fix syntax error 4 years ago
Aleksander Machniak d67b288cbc Travis: Fix syntax error 4 years ago
Aleksander Machniak eac409ac4a Travis: Enable in-browser tests 4 years ago
Aleksander Machniak 0b9ff6426e Rewrite Selenium tests with use of laravel/dusk 4 years ago
Aleksander Machniak 47d9ed6d0c Add support for PHPUnit 6 and 7 (#6870)
Fixes composer dependencies: Package phpunit/phpunit-mock-objects is abandoned

We cannot support v8 yet because of errors like:
Declaration of MailFunc::setUp() must be compatible with PHPUnit\Framework\TestCase::setUp(): void
It would require dropping PHP < 7.1 support.
4 years ago
Aleksander Machniak ad84b2df3f Update localization 5 years ago
Aleksander Machniak f610707554 Skip install-jsdeps.sh execution when using "complete" package to update "custom" installation (#7087) 5 years ago
Aleksander Machniak df2acc5eb8 Elastic: Fix hidden list widget on mobile/tablet when selecting folder while search menu is open (#7120) 5 years ago
Aleksander Machniak 9bb95471bf Merge branch 'master' of github.com:roundcube/roundcubemail 5 years ago
Aleksander Machniak 226097fc3f Markasjunk: Fix marking more than one message as spam/ham with email_learn driver (#7121) 5 years ago
Aleksander Machniak 52caed0d66 Remove optional argument leftover 5 years ago
Aleksander Machniak 37cfa0a43b Fix malformed characters in HTML message with charset meta tag not in head (#7116) 5 years ago
Aleksander Machniak 5f30dc68a3 Fix so number of contacts in a group is not limited to 200 when redirecting to mail composer from Contacts (#6972)
Use max_group_members with fallback to 999 if unset.
5 years ago
Aleksander Machniak eadbe91c92 Elastic: Simple search in pretty selects (#7072) 5 years ago
Aleksander Machniak 29defb82e9 Fix bug where next message wasn't displayed after delete in List mode (#7096) 5 years ago
Aleksander Machniak cf90c69ad7 Fix bug where 'text' attribute on body tag was ignored when displaying HTML message (#7109) 5 years ago
Aleksander Machniak 545ea62dfc Fix bug where listing tables in PostgreSQL database with db_prefix didn't work (#7093) 5 years ago
Aleksander Machniak 34e2507aac Fix so contact's organization field accepts up to 128 characters (it was 50)
Also assistant, manager, spouse, website and im
5 years ago
Aleksander Machniak 93c0e02f07 Plugin API: Make actionbefore, before<action>, actionafter and after<action> events working with plugin actions (#7106) 5 years ago
Aleksander Machniak d8d29241a6 Remove redundant spellcheck_langs env variable 5 years ago
Aleksander Machniak 0aa5eca1fd Fix bug where 'skins_allowed' option didn't enforce user skin preference (#7080) 5 years ago
Aleksander Machniak db4bf5573e Travis: Ignore endroid/qr-code in a try to make PHP 7.4 tests working
Travis' PHP 7.4 build does not have php-gd available yet.
5 years ago
Aleksander Machniak a5b15da155 Fix so displayed maximum attachment size depends also on 'max_message_size' (#7105) 5 years ago
Aleksander Machniak 0b45c3c6b0 Fix matching multiple X-Forwarded-For addresses with 'proxy_whitelist' (#7107) 5 years ago
Aleksander Machniak df7b76b023 Travis: Add PHP 7.4 5 years ago
Aleksander Machniak a51beef56c Travis: Remove ppc64le 5 years ago
Aleksander Machniak f3381f12d3 Travis: Move ppc64le arch to the matrix, test it only with the most recent PHP version 5 years ago
Aleksander Machniak 3fda927858 Try tests on different cpu architectures 5 years ago
Sebastiaan Lokhorst 259b7fa065 Explain difference between ssl:// and tls:// for default_host (#7099) 5 years ago
Hiroshi Shirosaki a335102e47 Fix email address name encoding with ISO-2022-JP
Convert to UTF-8 to split addresses correctly.
Base64 encode ISO-2022-JP name.
Add a unit test.
5 years ago
Hiroshi Shirosaki d9667295d8 Fix wordwrap with ISO-2022-JP
A message with ISO-2022-JP-MS characters currupts by wordwrap.
Use ISO-2022-JP-MS charset in wordwrap.
Add a unit test.
5 years ago
Hiroshi Shirosaki 869d1d1eaf Fix ISO-2022-JP-MS encoding convert
ISO-2022-JP-MS characters are removed by iconv on sending mail.
Use mbstring functions on sending.
Add a unit test.
5 years ago
Aleksander Machniak 8471930652 Add 'filter' to required extensions 5 years ago
Aleksander Machniak 5b253fb498 Elastic: Fix contrast of warning toasts (#7058)
Add some color variables and slightly make bg-color stronger on "box" messages.
5 years ago
Aleksander Machniak 90781bff3b Add aria-label to list navigation toolbars 5 years ago
Aleksander Machniak 58aea024b4 Improve style tag handling in TinyMCE (#7088) 5 years ago
Aleksander Machniak 94c795b539 Fix bug where HTML reply could add an empty line with extra indentation above the original message (#7088) 5 years ago
Aleksander Machniak e7cb9bf604 Password: Fix kpasswd and smb drivers' double-escaping bug (#7092) 5 years ago
Aleksander Machniak e3c6989494 Log X-Real-IP only when it's different than REMOTE_ADDR 5 years ago
Aleksander Machniak 3b3dd0cf7a Add note about URI format of hostnames in ldap config (#7082) 5 years ago
Aleksander Machniak 35101ca44a Fix filter selection after removing a first filter (#7079) 5 years ago
Aleksander Machniak 57476c09f9 Fix bug where cancelling switching from HTML to plain text didn't set the flag properly (#7077) 5 years ago
Aleksander Machniak 604e814898 Fix/remove useless keyup event handler on username input in logon form (#6970) 5 years ago
Aleksander Machniak 9219f4cd65 Fix so use of Ctrl+A does not scroll the list (#7020) 5 years ago
Christian Weiske 1c1a73e4d5 Set the content-type of JSON responses to application/json, not text/plain (#6573) 5 years ago
Sebastiaan Lokhorst 511e99ee1a Update SMTP TLS/STARTTLS explanation in config.php (#7066)
Implicit TLS (port 465) is no longer deprecated since RFC 8314.
5 years ago
Aleksander Machniak 2321bce469 Add notes about file ownership (#7009) 5 years ago
Aleksander Machniak 04aff2efa3 Fix so install-jsdeps.sh removes Bootstrap's sourceMappingURL (#7035) 5 years ago
Aleksander Machniak 2f928a516d Fix DB Write test on SQLite database ("database is locked" error) (#7064)
Also fix so SQLite DSN with a relative path to the database file works in Installer
5 years ago
Aleksander Machniak fa34e5ebcd Fix bug where a new saved search added after removing all searches wasn't added to the list (#7061) 5 years ago
Aleksander Machniak 006f7d1087 Fix so modifier type select wasn't hidden after hiding modifier select on header change 5 years ago
Aleksander Machniak ffeebff3f9 Fix bug where Ctype extension wasn't required in Installer and INSTALL file (#7049) 5 years ago
Aleksander Machniak 45546508d2 Replace "Filter disabled" with "Filter enabled" (#7028) 5 years ago
Aleksander Machniak 8d81df7dc3 Fix bug where a new contact group added after removing all groups from addressbook wasn't added to the list 5 years ago
Aleksander Machniak dbc2b5e11c Fix bug where deleting a saved search in addressbook caused display issue on sources/groups list (#7061)
also remove dead code.
5 years ago
Aleksander Machniak 4485940d0e Fix bug where Enter key didn't work on messages list in "List" layout (#7052)
with some code improvements and better checking if selected message is a draft.
5 years ago
Aleksander Machniak 4cf2363f43 Update changelog 5 years ago
johndoh b68c141e1d Always update folder count after purge command (#7051)
... not only when it is the current folder.
5 years ago
Aleksander Machniak e0574d909e Merge branch 'johndoh-html5' 5 years ago
Aleksander Machniak 8a25ddbf53 Update changelog, CS improvements 5 years ago
Aleksander Machniak feb4ecdf51 Elastic: Fix language icon (#6624) 5 years ago
Aleksander Machniak 022a1b683f Enigma: Add script to import keys from filesystem to the db storage (for multihost) 5 years ago
Aleksander Machniak d4a8642d5a Code simplification and style fixes 5 years ago
Aleksander Machniak d2738d1e8b Remove spaces from 'accept' attribute 5 years ago
Aleksander Machniak ba83042b1a Elastic: Remove redundant listmenulink elements 5 years ago
Aleksander Machniak ea3ad31ce0 Fix bug where the Installer would not warn about required schema upgrade (#7042) 5 years ago
Aleksander Machniak 47f72303ac Small correction 5 years ago
Aleksander Machniak 4b607e2ed3 Fix so Elastic is also a default in jqueryui plugin (#7039) 5 years ago
Aleksander Machniak fecff809fe Elastic: Fix data-fab-task handling (#7038)
Since the code is executed before rcmail init event, we have to use rcmail.env.task
instead of rcmail.task.
5 years ago
Aleksander Machniak 0113ea9602 Fix tables listing routine when DSN contained a database with unsupported suffix (#7034) 5 years ago
Aleksander Machniak 2e2028ae78 Elastic: Fix position of mobile floating action button (#7038) 5 years ago
Aleksander Machniak b6810cc163 Mention required min. version of lessc (#7031) 5 years ago
Aleksander Machniak f4722cb451 Fixed typo 5 years ago
Aleksander Machniak d0dd042b73 Fix so update.sh script warns about changed defaults (#7011) 5 years ago
Aleksander Machniak b63bc1ae22 Fix misleading comment 5 years ago
Aleksander Machniak 81bccd00ad Larry: Fix html editor toolbar background in Identities 5 years ago
Aleksander Machniak 22d629a0e9 Elastic: Fix regression in the new editor widget (#7021) 5 years ago
Aleksander Machniak 110eebdd1b Fix db_prefix handling in queries with `TRUNCATE TABLE <name>` and `UNIQUE <name>` (#7013) 5 years ago
Aleksander Machniak ee1f01a0df Fix so 401 error is returned only on failed logon requests (#7010) 5 years ago
Aleksander Machniak 157edd72bb Elastic: Fix Edit responses button state in Mailvelope mode 5 years ago
Aleksander Machniak b4b400c91d Fix invalid Signature button state after escaping Mailvelope mode (#7015) 5 years ago
Aleksander Machniak 1eb50c7cd3 Remove unused variables 5 years ago
Aleksander Machniak 71bcf2e245 Fix regexp for version input to accept rcX releases 5 years ago
Aleksander Machniak b63d549834 Elastic: Change HTML editor widget to improve form flow (#6992) 5 years ago
Aleksander Machniak 4b24ba1372 Fix bug where cache keys could exceed length limit specified in db schema (#7004) 5 years ago
Aleksander Machniak 4cf8952afa Fix PHP warning: "array_merge(): Expected parameter 2 to be an array, null given in sendmail.inc (#7003) 5 years ago
Aleksander Machniak 338b25dec9 Managesieve: Fix locked UI after opening filter frame (#7007) 5 years ago
Aleksander Machniak 03cee8f554 Add a release mark 5 years ago
Aleksander Machniak 8aaf7d35c1 Fix displaying version number for rcX versions 5 years ago
Aleksander Machniak 30af42be87 Remove a note about Larry being default 5 years ago
Aleksander Machniak 757d5fc1b1 Correct file permissions 5 years ago
Thomas Bruederli 9ebba7c2ce Set default skin to 'elastic' in sample config 5 years ago
Aleksander Machniak 6aab238773 Small code improvements 5 years ago
Aleksander Machniak c5c5a9325c Elastic: Fix regression where recipient input didn't update internal input state (#6988) 5 years ago
Aleksander Machniak 508e83470c Master is 1.5-git now 5 years ago
Aleksander Machniak f768ff1464 Update changelog and cleanup 5 years ago
PhilW 75125cbac1 add unit tests for rcmail_output_html::get_template_logo 5 years ago
PhilW 97001e9221 rewrite skin_logo config 5 years ago
Aleksander Machniak 727f8f04d8 Elastic: Fix regression where Encrypt button wasn't displayed in mail compose toolbar (#6982)
Also fix Reply-All button handling
5 years ago
Aleksander Machniak 52c755207d Enigma: Fix bug where signing option was set to disabled after saving a draft in Elastic skin (#6515) 5 years ago
Aleksander Machniak 3a097e6836 Fix bug where inline images could have been ignored if Content-Id header contained redundant spaces (#6980) 5 years ago
Aleksander Machniak df414aa30c Elastic: Fix unread filter icon and search state on folder change (#6978) 5 years ago
Aleksander Machniak 5543240e67 Elastic: Fix language icon (#6624) 5 years ago
Aleksander Machniak 5a0843de4b Enigma: Add script to import keys from filesystem to the db storage (for multihost) 5 years ago
Aleksander Machniak 5b6a50a4e4 Code simplification and style fixes 5 years ago
Aleksander Machniak 6f4c2cf231 Remove spaces from 'accept' attribute 5 years ago
Aleksander Machniak bdce0ba3f2 Elastic: Remove redundant listmenulink elements 5 years ago
Aleksander Machniak 3cd3d8eecb Fix bug where the Installer would not warn about required schema upgrade (#7042) 5 years ago
Aleksander Machniak bd21d43ac9 Small correction 5 years ago
Aleksander Machniak 90738d7a36 Fix so Elastic is also a default in jqueryui plugin (#7039) 5 years ago
Aleksander Machniak 40aef395bb Elastic: Fix data-fab-task handling (#7038)
Since the code is executed before rcmail init event, we have to use rcmail.env.task
instead of rcmail.task.
5 years ago
Aleksander Machniak 67898b23e4 Fix tables listing routine when DSN contained a database with unsupported suffix (#7034) 5 years ago
Aleksander Machniak 2e26aee2b6 Elastic: Fix position of mobile floating action button (#7038) 5 years ago
Aleksander Machniak f2c878c82b Mention required min. version of lessc (#7031) 5 years ago
Aleksander Machniak 814db5a33e Fixed typo 5 years ago
Aleksander Machniak 294683b390 Fix so update.sh script warns about changed defaults (#7011) 5 years ago
Aleksander Machniak a269e7c106 Fix misleading comment 5 years ago
Aleksander Machniak 4d54074ad2 Larry: Fix html editor toolbar background in Identities 5 years ago
Aleksander Machniak c2bd60f1aa Elastic: Fix regression in the new editor widget (#7021) 5 years ago
Aleksander Machniak a80d73602f Fix db_prefix handling in queries with `TRUNCATE TABLE <name>` and `UNIQUE <name>` (#7013) 5 years ago
Aleksander Machniak b8555ce4f3 Fix so 401 error is returned only on failed logon requests (#7010) 5 years ago
Aleksander Machniak 4e840c7669 Elastic: Fix Edit responses button state in Mailvelope mode 5 years ago
Aleksander Machniak 7f6dd16479 Fix invalid Signature button state after escaping Mailvelope mode (#7015) 5 years ago
Aleksander Machniak 98c71ee62e Remove unused variables 5 years ago
Aleksander Machniak c734f3e1ab Fix regexp for version input to accept rcX releases 5 years ago
Aleksander Machniak 3c01f472e0 Elastic: Change HTML editor widget to improve form flow (#6992) 5 years ago
Aleksander Machniak 4cc20eef72 Fix bug where cache keys could exceed length limit specified in db schema (#7004) 5 years ago
Aleksander Machniak 700cc5a055 Fix PHP warning: "array_merge(): Expected parameter 2 to be an array, null given in sendmail.inc (#7003) 5 years ago
Aleksander Machniak 58850f0b93 Managesieve: Fix locked UI after opening filter frame (#7007) 5 years ago
Aleksander Machniak 5677b2fc9d Add a release mark 5 years ago
Aleksander Machniak 8a726316bb Fix displaying version number for rcX versions 5 years ago
Aleksander Machniak 57aa69206a Remove a note about Larry being default 5 years ago
Aleksander Machniak 358f647273 Correct file permissions 5 years ago
Thomas Bruederli 8db933e440 Set default skin to 'elastic' in sample config 5 years ago
Aleksander Machniak 0e2d3789ce Small code improvements 5 years ago
Aleksander Machniak 959654c0c2 Elastic: Fix regression where recipient input didn't update internal input state (#6988) 5 years ago
Aleksander Machniak 9f1d185c44 Master is 1.5-git now 5 years ago
PhilW 32775f0e43 remove redundant type attrib in script tag 5 years ago

@ -0,0 +1,30 @@
<?php
$config = array();
// Database configuration
$config['db_dsnw'] = 'sqlite:////tmp/sqlite.db?mode=0646';
// Test user credentials
$config['tests_username'] = 'test';
$config['tests_password'] = 'test';
// GreenMail
$config['smtp_port'] = 25;
// Settings required by the tests
$config['create_default_folders'] = true;
$config['skin'] = 'elastic';
$config['support_url'] = 'http://support.url';
// Plugins with tests
$config['plugins'] = [
'archive',
'attachment_reminder',
'markasjunk',
'zipdownload'
];
$config['archive_mbox'] = 'Archive';

@ -0,0 +1,22 @@
#!/bin/bash
# The script is intended for use on Travis with Trusty distribution
DIR=$(dirname $0)
# Enable xdebug for code coverage
if [ "$CODE_COVERAGE" != 1 ]; then phpenv config-rm xdebug.ini || true; fi
cd $DIR/..
cp composer.json-dist composer.json
# Add laravel/dusk for Browser tests
if [ "$BROWSER_TESTS" = 1 ]; then composer require "laravel/dusk:~5.9.1" --no-update; fi
# Remove qr-code as it requires php-gd which is not always available on Travis
# and we don't really need it for tests
composer remove endroid/qr-code --no-update
# Install PHP dependencies
composer install --prefer-dist

@ -0,0 +1,25 @@
#!/bin/bash
# The script is intended for use on Travis with Trusty distribution
# It executes unit and functional tests
DIR=$(dirname $0)
cd $DIR/..
if [ "$CODE_COVERAGE" = 1 ]
then
CODE_COVERAGE_ARGS="--coverage-text"
fi
vendor/bin/phpunit -c tests/phpunit.xml $CODE_COVERAGE_ARGS
if [ "$BROWSER_TESTS" = 1 ] && [ $? = 0 ]
then
.ci/setup.sh \
&& echo "TESTS_MODE: DESKTOP" \
&& TESTS_MODE=desktop vendor/bin/phpunit -c tests/Browser/phpunit.xml \
&& echo "TESTS_MODE: PHONE" \
&& TESTS_MODE=phone vendor/bin/phpunit -c tests/Browser/phpunit.xml \
&& echo "TESTS_MODE: TABLET" \
&& TESTS_MODE=tablet vendor/bin/phpunit -c tests/Browser/phpunit.xml
fi

@ -0,0 +1,30 @@
#!/bin/bash
# The script is intended for use on Travis with Trusty distribution
# It installs in-browser tests dependencies and prepares Roundcube instance
GMV=1.5.11
CHROMEVERSION=$(google-chrome-stable --version | tr -cd [:digit:]. | cut -d . -f 1)
GMARGS="-Dgreenmail.setup.all -Dgreenmail.users=test:test -Dgreenmail.startup.timeout=3000"
# Roundcube tests and instance configuration
cp .ci/config-test.inc.php config/config-test.inc.php
# Make temp and logs writeable
sudo chmod 777 temp logs
# Install javascript dependencies
bin/install-jsdeps.sh
# Compile Elastic's styles
lessc skins/elastic/styles/styles.less > skins/elastic/styles/styles.css
lessc skins/elastic/styles/print.less > skins/elastic/styles/print.css
lessc skins/elastic/styles/embed.less > skins/elastic/styles/embed.css
# Install proper WebDriver version for installed Chrome browser
php tests/Browser/install.php $CHROMEVERSION
# GreenMail server download, setup and start
wget https://repo1.maven.org/maven2/com/icegreen/greenmail-standalone/$GMV/greenmail-standalone-$GMV.jar \
&& (sudo java $GMARGS -jar greenmail-standalone-$GMV.jar &) \
&& sleep 5

@ -34,8 +34,8 @@ Options -Indexes
# Disable page indexing
Header set X-Robots-Tag "noindex, nofollow"
# replace 'append' with 'merge' for Apache version 2.2.9 and later
#Header append Cache-Control public env=!NO_CACHE
# replace 'merge' with 'append' for Apache < 2.2.9
#Header merge Cache-Control public env=!NO_CACHE
# Optional security headers
# Only provides increased security if the browser supports those features

@ -1,6 +1,6 @@
language: php
dist: trusty
dist: trusty #
sudo: false
matrix:
@ -14,18 +14,24 @@ matrix:
env: CODE_COVERAGE=1
- php: 7.2
- php: 7.3
dist: bionic # for proper node-less version
env: BROWSER_TESTS=1
addons:
chrome: stable
apt:
packages:
- node-less
- php: 7.4
cache:
directories:
- $HOME/.composer
install:
- if [ "$CODE_COVERAGE" != 1 ]; then phpenv config-rm xdebug.ini || true; fi
- cp composer.json-dist composer.json
- composer install --prefer-dist
- .ci/install.sh
script:
- if [ "$CODE_COVERAGE" = 1 ]; then CODE_COVERAGE_ARGS="--coverage-text"; fi; vendor/bin/phpunit -c tests/phpunit.xml $CODE_COVERAGE_ARGS
- .ci/run.sh
notifications:
email: false

@ -1,12 +1,182 @@
CHANGELOG Roundcube Webmail
===========================
- Allow array in smtp_host config (#7296)
- Remove use of ext-iconv
- Support RFC8438: IMAP STATUS=SIZE - for faster folder size calculation (#7269)
- MySQL: Use utf8mb4 charset and utf8mb4_unicode_ci collation (#6535, #7113)
- Support for language codes up to 16 chars long (e.g. es-419) in database schema (#6851)
- Relaxed domain name validation for extended TLDs support (#5588)
- Allow opening application/octet-stream attachments according to filename extension (#6821)
- Added support for INSERT OR REPLACE queries (#6771)
- Allow skins to define which layout options they support (#7235)
- Extract RFC2231 attachment name from message headers (#6729, #6783)
- Archive: Added options to split archive by year or year+month and folder (#7216)
- Managesieve: Allow display name with email address in vacation :from field (#6760)
- Managesieve: Improve UX on custom header input (#7207)
- Managesieve: Fix bug where activation of forward/vacation rule could activate a wrong script (#7423)
- Managesieve: Fix bug where forward/vacation rule could end up being duplicated (#7349)
- Password: Added 'pwned' password strength driver (#7274)
- Add support for SameSite cookie attribute via session_samesite option (req PHP >= 7.3.0) (#6772)
- Elastic: Moving single recipients between recipient inputs with drag-n-drop (#5069)
- Elastic: Display a special icon for other users and shared namespace roots (#5012)
- Elastic: Support space-separated email addresses in recipient input (#6529, #6457)
- Change folders sorting so shared/other users namespaces are listed last (#5012)
- Display a warning and do not try to open empty attachments (#7332)
- Templates: Add support for expressions in object attributes (#7237)
- Templates: Add support for nested if conditions (#6818)
- Templates: Make [space][slash] ending of condition objects optional (#6954)
- Fix ISO-2022-JP-MS encoding issues (#7091)
- Fix so messages in threads with no root aren't displayed separately (#4999)
- Fix so anchor tags without href attribute are not modified (#7413)
- Fix bug where subfolders of special folders could have been duplicated on folder list
- Increase maximum size of contact jobtitle and department fields to 128 characters
- Fix missing newline after the logged line when writing to stdout (#7418)
- Elastic: Fix context menu (paste) on the recipient input (#7431)
- Fix problem with forwarding inline images attached to messages with no HTML part (#7414)
RELEASE 1.4.6
-------------
- Installer: Fix regression in SMTP test section (#7417)
RELEASE 1.4.5
-------------
- Fix bug in extracting required plugins from composer.json that led to spurious error in log (#7364)
- Fix so the database setup description is compatible with MySQL 8 (#7340)
- Markasjunk: Fix regression in jsevent driver (#7361)
- Fix missing flag indication on collapsed thread in Larry and Elastic (#7366)
- Fix default keyservers (use keys.openpgp.org), add note about CORS (#7373, #7367)
- Password: Fix issue with Modoboa driver (#7372)
- Mailvelope: Use sender's address to find pubkeys to check signatures (#7348)
- Mailvelope: Fix Encrypt button hidden in Elastic (#7353)
- Fix PHP warning: count(): Parameter must be an array or an object... in ID command handler (#7392)
- Fix error when user-configured skin does not exist anymore (#7271)
- Elastic: Fix aspect ratio of a contact photo in mail preview (#7339)
- Fix bug where PDF attachments marked as inline could have not been attached on mail forward (#7382)
- Security: Fix a couple of XSS issues in Installer (#7406)
- Security: Fix XSS issue in template object 'username' (#7406)
- Security: Better fix for CVE-2020-12641
- Security: Fix cross-site scripting (XSS) via malicious XML attachment
RELEASE 1.4.4
-------------
- Fix bug where attachments with Content-Id were attached to the message on reply (#7122)
- Fix identity selection on reply when both sender and recipient addresses are included in identities (#7211)
- Elastic: Fix text selection with Shift+PageUp and Shift+PageDown in plain text editor when using Chrome (#7230)
- Elastic: Fix recipient input bug when using click to select a contact from autocomplete list (#7231)
- Elastic: Fix color of a folder with recent messages (#7281)
- Elastic: Restrict logo size in print view (#7275)
- Fix invalid Content-Type for messages with only html part and inline images - Mail_Mime-1.10.7 (#7261)
- Fix missing contact display name in QR Code data (#7257)
- Fix so button label in Select image/media dialogs is "Close" not "Cancel" (#7246)
- Fix regression in testing database schema on MSSQL (#7227)
- Fix cursor position after inserting a group to a recipient input using autocompletion (#7267)
- Fix string literals handling in IMAP STATUS (and various other) responses (#7290)
- Fix bug where multiple images in a message were replaced by the first one on forward/reply/edit (#7293)
- Fix handling keyservers configured with protocol prefix (#7295)
- Markasjunk: Fix marking as spam/ham on moving messages with Move menu (#7189)
- Markasjunk: Fix bug where moving to Junk was failing on messages selected with Select > All (#7206)
- Fix so imap error message is displayed to the user on folder create/update (#7245)
- Fix bug where a special folder couldn't be created if a special-use flag is not supported (#7147)
- Mailvelope: Fix bug where recipients with name were not handled properly in mail compose (#7312)
- Fix characters encoding in group rename input after group creation/rename (#7330)
- Fix bug where some message/rfc822 parts could not be attached on forward (#7323)
- Make install-jsdeps.sh script working without the 'file' program installed (#7325)
- Fix performance issue of parsing big HTML messages by disabling HTML5 parser for these (#7331)
- Fix so Print button for PDF attachments works on Firefox >= 75 (#5125)
- Security: Fix XSS issue in handling of CDATA in HTML messages [CVE-2020-12625]
- Security: Fix remote code execution via crafted 'im_convert_path' or 'im_identify_path' settings [CVE-2020-12641]
- Security: Fix local file inclusion (and code execution) via crafted 'plugins' option [CVE-2020-12640]
- Security: Fix CSRF bypass that could be used to log out an authenticated user [CVE-2020-12626] (#7302)
RELEASE 1.4.3
-------------
- Enigma: Fix so key list selection is reset when opening key creation form (#7154)
- Enigma: Fix so using list checkbox selection does not load the key preview frame
- Enigma: Fix generation of key pairs for identities with IDN domains (#7181)
- Enigma: Display IDN domains of key users and identities in UTF8
- Enigma: Fix bug where "Send unencrypted" button didn't work in Elastic skin (#7205)
- Managesieve: Fix bug where it wasn't possible to save flag actions (#7188)
- Markasjunk: Fix bug where marking as spam/ham didn't work on moving messages with drag-and-drop (#7137)
- Password: Make chpass-wrapper.py Python 3 compatible (#7135)
- Elastic: Fix disappearing sidebar in mail compose after clicking Mail button
- Elastic: Fix incorrect aria-disabled attribute on Mail taskmenu button in mail compose
- Elastic: Fix bug where it was possible to switch editor mode when 'htmleditor' was in 'dont_override' (#7143)
- Elastic: Fix text selection in recipient inputs (#7129)
- Elastic: Fix missing Close button in "more recipients" dialog
- Elastic: Fix non-working folder subscription checkbox for newly added folders (#7174)
- Fix regression where "Open in new window" action didn't work (#7155)
- Fix PHP Warning: array_filter() expects parameter 1 to be array, null given in subscriptions_option plugin (#7165)
- Fix unexpected error message when mail refresh involves folder auto-unsubscribe (#6923)
- Fix recipient duplicates in print-view when the recipient list has been expanded (#7169)
- Fix bug where files in skins/ directory were listed on skins list (#7180)
- Fix bug where message parts with no Content-Disposition header and no name were not listed on attachments list (#7117)
- Fix display issues with mail subject that contains line-breaks (#7191)
- Fix invalid Content-Transfer-Encoding on multipart messages - Mail_Mime fix (#7170)
- Fix regression where using an absolute path to SQLite database file on Windows didn't work (#7196)
- Fix using unix:///path/to/socket.file in memcached driver (#7210)
RELEASE 1.4.2
-------------
- Add support for PHPUnit 6 and 7 (#6870)
- Plugin API: Make actionbefore, before<action>, actionafter and after<action> events working with plugin actions (#7106)
- Managesieve: Replace "Filter disabled" with "Filter enabled" (#7028)
- Managesieve: Fix so modifier type select wasn't hidden after hiding modifier select on header change
- Managesieve: Fix filter selection after removing a first filter (#7079)
- Markasjunk: Fix marking more than one message as spam/ham with email_learn driver (#7121)
- Password: Fix kpasswd and smb drivers' double-escaping bug (#7092)
- Enigma: Add script to import keys from filesystem to the db storage (for multihost)
- Installer: Fix DB Write test on SQLite database ("database is locked" error) (#7064)
- Installer: Fix so SQLite DSN with a relative path to the database file works in Installer
- Elastic: Fix contrast of warning toasts (#7058)
- Elastic: Simple search in pretty selects (#7072)
- Elastic: Fix hidden list widget on mobile/tablet when selecting folder while search menu is open (#7120)
- Fix so type attribute on script tags is not used on HTML5 pages (#6975)
- Fix unread count after purge on a folder that is not currently selected (#7051)
- Fix bug where Enter key didn't work on messages list in "List" layout (#7052)
- Fix bug where deleting a saved search in addressbook caused display issue on sources/groups list (#7061)
- Fix bug where a new saved search added after removing all searches wasn't added to the list (#7061)
- Fix bug where a new contact group added after removing all groups from addressbook wasn't added to the list
- Fix bug where Ctype extension wasn't required in Installer and INSTALL file (#7049)
- Fix so install-jsdeps.sh removes Bootstrap's sourceMappingURL (#7035)
- Fix so use of Ctrl+A does not scroll the list (#7020)
- Fix/remove useless keyup event handler on username input in logon form (#6970)
- Fix bug where cancelling switching from HTML to plain text didn't set the flag properly (#7077)
- Fix bug where HTML reply could add an empty line with extra indentation above the original message (#7088)
- Fix matching multiple X-Forwarded-For addresses with 'proxy_whitelist' (#7107)
- Fix so displayed maximum attachment size depends also on 'max_message_size' (#7105)
- Fix bug where 'skins_allowed' option didn't enforce user skin preference (#7080)
- Fix so contact's organization field accepts up to 128 characters (it was 50)
- Fix bug where listing tables in PostgreSQL database with db_prefix didn't work (#7093)
- Fix bug where 'text' attribute on body tag was ignored when displaying HTML message (#7109)
- Fix bug where next message wasn't displayed after delete in List mode (#7096)
- Fix so number of contacts in a group is not limited to 200 when redirecting to mail composer from Contacts (#6972)
- Fix malformed characters in HTML message with charset meta tag not in head (#7116)
RELEASE 1.4.1
-------------
- Elastic: Change HTML editor widget to improve form flow (#6992)
- Elastic: Fix position of mobile floating action button (#7038)
- Managesieve: Fix locked UI after opening filter frame (#7007)
- Fix PHP warning: "array_merge(): Expected parameter 2 to be an array, null given in sendmail.inc (#7003)
- Fix bug where cache keys could exceed length limit specified in db schema (#7004)
- Fix invalid Signature button state after escaping Mailvelope mode (#7015)
- Fix so 401 error is returned only on failed logon requests (#7010)
- Fix db_prefix handling in queries with `TRUNCATE TABLE <name>` and `UNIQUE <name>` (#7013)
- Fix so update.sh script warns about changed defaults (#7011)
- Fix tables listing routine when DSN contained a database with unsupported suffix (#7034)
- Fix so Elastic is also a default in jqueryui plugin (#7039)
- Fix bug where the Installer would not warn about required schema upgrade (#7042)
RELEASE 1.4.0
-------------
- Elastic: Resizeable columns (#6929)
- Elastic: Fix position and style of auto-complete dropdown on small screens (#6951)
- Elastic: Fix initial focus on recipients input in mail compose screen
- Elastic: Fix inserting responses at cursor position (#6971)
- Elastic: Fix unread filter icon and search state on folder change (#6978)
- Elastic: Fix regression where Encrypt button wasn't displayed in mail compose toolbar (#6982)
- Elastic: Fix regression where recipient input didn't update internal input state (#6988)
- Enigma: Fix bug where signing option was set to disabled after saving a draft in Elastic skin (#6515)
- Redis: Improve error handling and phpredis 5.X support (#6888)
- Archive: Fix bug where next email was not displayed after Archive button use (#6965)

@ -12,9 +12,9 @@ REQUIREMENTS
* An IMAP, HTTP and SMTP server
* .htaccess support allowing overrides for DirectoryIndex
* PHP Version 5.4 or greater including:
- PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring (required)
- PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring, Filter, Ctype (required)
- PHP PDO with driver for either MySQL, PostgreSQL, SQL Server, Oracle or SQLite (required)
- Iconv, Zip, Fileinfo, Intl, Exif (recommended)
- Zip, Fileinfo, Intl, Exif (recommended)
- LDAP for LDAP addressbook support (optional)
- GD, Imagick (optional thumbnails generation, QR-code)
* PEAR and PEAR packages distributed with Roundcube or external:
@ -44,7 +44,9 @@ REQUIREMENTS
INSTALLATION
============
1. Decompress and put this folder somewhere inside your document root
1. Decompress and put this folder somewhere inside your document root.
Note: Make sure files have proper owner/group for your setup. If you use
tar command `--no-same-owner` option might be helpful.
2. In case you don't use the so-called "complete" release package,
you have to install PHP and javascript dependencies.
2.1. Install PHP dependencies using composer:
@ -63,7 +65,11 @@ INSTALLATION
5. Point your browser to http://url-to-roundcube/installer/
6. Follow the instructions of the install script (or see MANUAL CONFIGURATION)
7. After creating and testing the configuration, remove the installer directory
8. If you use git sources compile css files for the Elastic skin:
------------------------------------------
IMPORTANT: REMOVE THE INSTALLER DIRECTORY!
------------------------------------------
8. If you use git sources compile css files for the Elastic skin (required
lessc >= 1.5.0):
$ cd skins/elastic
$ lessc -x styles/styles.less > styles/styles.css
$ lessc -x styles/print.less > styles/print.css
@ -77,7 +83,7 @@ CONFIGURATION HINTS
IMPORTANT! Read all comments in defaults.inc.php, understand them
and configure your installation to be not surprised by default behaviour.
Roundcube writes internal errors to the 'errors' log file located in the logs
Roundcube writes internal errors to the 'errors.log' log file located in the logs
directory which can be configured in config/config.inc.php. If you want ordinary
PHP errors to be logged there as well, set error_log in php.ini or .htaccess file.
@ -103,9 +109,9 @@ importing the table layout and granting the proper permissions to the
roundcube user. Here is an example of that procedure:
# mysql
> CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost
IDENTIFIED BY 'password';
> CREATE DATABASE roundcubemail CHARACTER SET utf8 COLLATE utf8_general_ci;
> CREATE USER roundcube@localhost IDENTIFIED BY 'password';
> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost;
> quit
# mysql roundcubemail < SQL/mysql.initial.sql
@ -114,6 +120,11 @@ Note 1: 'password' is the master password for the roundcube user. It is strongly
recommended you replace this with a more secure password. Please keep in
mind: You need to specify this password later in 'config/db.inc.php'.
Note 2: When using MySQL < 5.7.7 or MariaDB < 10.2.2 it is required to configure
the database engine with:
innodb_large_prefix=true
innodb_file_format=Barracuda
* SQLite
--------
@ -244,11 +255,6 @@ To enable these features in apache the following modules need to be enabled:
The optimisation is already included in the .htaccess file in the top
directory of your installation.
If you are using Apache version 2.2.9 and later, in the .htaccess file
change the 'append' word to 'merge' for a more correct response. Keeping
as 'append' shouldn't cause any problems though changing to merge will
eliminate the possibility of duplicate 'public' headers in Cache-control.
Lighttpd:
---------
With Lightty the addition of Expire: tags by mod_expire is incompatible with
@ -304,3 +310,6 @@ needed to add following MIME Types definitions (via web.config or IIS Manager):
.woff application/font-woff
.woff2 application/font-woff2
When installing on Windows be aware we're using symbolic links which may need an additional
attention. See https://github.com/roundcube/roundcubemail/issues/7151.

@ -25,9 +25,6 @@ The code designed to run on a webserver is mainly written in PHP and Javascript.
It includes a custom framework with an IMAP library derived from [IlohaMail][iloha]
and requires a set of external libraries (see composer.json and jsdeps.json files).
The current default skin 'Larry' was kindly created by FLINT / Büro für
Gestaltung, Berne, Switzerland.
INSTALLATION
------------

@ -102,14 +102,14 @@ CREATE TABLE [dbo].[users] (
[last_login] [datetime] NULL ,
[failed_login] [datetime] NULL ,
[failed_login_counter] [int] NULL ,
[language] [varchar] (5) COLLATE Latin1_General_CI_AI NULL ,
[language] [varchar] (16) COLLATE Latin1_General_CI_AI NULL ,
[preferences] [text] COLLATE Latin1_General_CI_AI NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
CREATE TABLE [dbo].[dictionary] (
[user_id] [int] ,
[language] [varchar] (5) COLLATE Latin1_General_CI_AI NOT NULL ,
[language] [varchar] (16) COLLATE Latin1_General_CI_AI NOT NULL ,
[data] [text] COLLATE Latin1_General_CI_AI NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
@ -422,6 +422,6 @@ CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts]
WHERE [contact_id] IN (SELECT [contact_id] FROM deleted)
GO
INSERT INTO [dbo].[system] ([name], [value]) VALUES ('roundcube-version', '2019092900')
INSERT INTO [dbo].[system] ([name], [value]) VALUES ('roundcube-version', '2020020101')
GO

@ -0,0 +1,4 @@
ALTER TABLE [dbo].[users] ALTER COLUMN [language] [varchar] (16) COLLATE Latin1_General_CI_AI NULL
GO
ALTER TABLE [dbo].[dictionary] ALTER COLUMN [language] [varchar] (16) COLLATE Latin1_General_CI_AI NOT NULL
GO

@ -12,7 +12,7 @@ CREATE TABLE `session` (
`vars` mediumtext NOT NULL,
PRIMARY KEY(`sess_id`),
INDEX `changed_index` (`changed`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
-- Table structure for table `users`
@ -25,11 +25,11 @@ CREATE TABLE `users` (
`last_login` datetime DEFAULT NULL,
`failed_login` datetime DEFAULT NULL,
`failed_login_counter` int(10) UNSIGNED DEFAULT NULL,
`language` varchar(5),
`language` varchar(16),
`preferences` longtext,
PRIMARY KEY(`user_id`),
UNIQUE `username` (`username`, `mail_host`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
-- Table structure for table `cache`
@ -43,7 +43,7 @@ CREATE TABLE `cache` (
CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`)
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
INDEX `expires_index` (`expires`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
-- Table structure for table `cache_shared`
@ -54,7 +54,7 @@ CREATE TABLE `cache_shared` (
`data` longtext NOT NULL,
PRIMARY KEY (`cache_key`),
INDEX `expires_index` (`expires`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
-- Table structure for table `cache_index`
@ -69,7 +69,7 @@ CREATE TABLE `cache_index` (
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
INDEX `expires_index` (`expires`),
PRIMARY KEY (`user_id`, `mailbox`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
-- Table structure for table `cache_thread`
@ -83,7 +83,7 @@ CREATE TABLE `cache_thread` (
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
INDEX `expires_index` (`expires`),
PRIMARY KEY (`user_id`, `mailbox`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
-- Table structure for table `cache_messages`
@ -99,7 +99,7 @@ CREATE TABLE `cache_messages` (
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
INDEX `expires_index` (`expires`),
PRIMARY KEY (`user_id`, `mailbox`, `uid`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
-- Table structure for table `contacts`
@ -119,7 +119,7 @@ CREATE TABLE `contacts` (
CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`)
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
INDEX `user_contacts_index` (`user_id`,`del`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
-- Table structure for table `contactgroups`
@ -133,7 +133,7 @@ CREATE TABLE `contactgroups` (
CONSTRAINT `user_id_fk_contactgroups` FOREIGN KEY (`user_id`)
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
INDEX `contactgroups_user_index` (`user_id`,`del`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
CREATE TABLE `contactgroupmembers` (
`contactgroup_id` int(10) UNSIGNED NOT NULL,
@ -168,7 +168,7 @@ CREATE TABLE `identities` (
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
INDEX `user_identities_index` (`user_id`, `del`),
INDEX `email_identities_index` (`email`, `del`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
-- Table structure for table `dictionary`
@ -176,12 +176,12 @@ CREATE TABLE `identities` (
CREATE TABLE `dictionary` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, -- redundant, for compat. with Galera Cluster
`user_id` int(10) UNSIGNED DEFAULT NULL, -- NULL here is for "shared dictionaries"
`language` varchar(5) NOT NULL,
`language` varchar(16) NOT NULL,
`data` longtext NOT NULL,
CONSTRAINT `user_id_fk_dictionary` FOREIGN KEY (`user_id`)
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE `uniqueness` (`user_id`, `language`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
-- Table structure for table `searches`
@ -196,7 +196,7 @@ CREATE TABLE `searches` (
CONSTRAINT `user_id_fk_searches` FOREIGN KEY (`user_id`)
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE `uniqueness` (`user_id`, `type`, `name`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
-- Table structure for table `filestore`
@ -211,7 +211,7 @@ CREATE TABLE `filestore` (
CONSTRAINT `user_id_fk_filestore` FOREIGN KEY (`user_id`)
REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE `uniqueness` (`user_id`, `context`, `filename`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
-- Table structure for table `system`
@ -219,8 +219,8 @@ CREATE TABLE `system` (
`name` varchar(64) NOT NULL,
`value` mediumtext,
PRIMARY KEY(`name`)
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
INSERT INTO `system` (`name`, `value`) VALUES ('roundcube-version', '2019092900');
INSERT INTO `system` (`name`, `value`) VALUES ('roundcube-version', '2020020101');

@ -0,0 +1,2 @@
ALTER TABLE `users` MODIFY `language` varchar(16);
ALTER TABLE `dictionary` MODIFY `language` varchar(16) NOT NULL;

@ -0,0 +1,21 @@
ALTER TABLE `session` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `users` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `cache` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `cache_shared` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `cache_index` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `cache_thread` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `cache_messages` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `contacts` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `contactgroups` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `identities` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `dictionary` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `searches` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `filestore` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `system` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `users` CHANGE `username` `username` varchar(128) BINARY NOT NULL;
ALTER TABLE `cache` CHANGE `cache_key` `cache_key` varchar(128) BINARY NOT NULL;
ALTER TABLE `cache_shared` CHANGE `cache_key` `cache_key` varchar(255) BINARY NOT NULL;
ALTER TABLE `cache_index` CHANGE `mailbox` `mailbox` varchar(255) BINARY NOT NULL;
ALTER TABLE `cache_thread` CHANGE `mailbox` `mailbox` varchar(255) BINARY NOT NULL;
ALTER TABLE `cache_messages` CHANGE `mailbox` `mailbox` varchar(255) BINARY NOT NULL;

@ -9,7 +9,7 @@ CREATE TABLE "users" (
"last_login" timestamp with time zone DEFAULT NULL,
"failed_login" timestamp with time zone DEFAULT NULL,
"failed_login_counter" integer DEFAULT NULL,
"language" varchar(5),
"language" varchar(16),
"preferences" long DEFAULT NULL,
CONSTRAINT "users_username_key" UNIQUE ("username", "mail_host")
);
@ -186,7 +186,7 @@ CREATE INDEX "cache_messages_expires_idx" ON "cache_messages" ("expires");
CREATE TABLE "dictionary" (
"user_id" integer DEFAULT NULL
REFERENCES "users" ("user_id") ON DELETE CASCADE,
"language" varchar(5) NOT NULL,
"language" varchar(16) NOT NULL,
"data" long DEFAULT NULL,
CONSTRAINT "dictionary_user_id_lang_key" UNIQUE ("user_id", "language")
);
@ -238,4 +238,4 @@ CREATE TABLE "system" (
"value" long
);
INSERT INTO "system" ("name", "value") VALUES ('roundcube-version', '2019092900');
INSERT INTO "system" ("name", "value") VALUES ('roundcube-version', '2020020101');

@ -0,0 +1,2 @@
ALTER TABLE "users" MODIFY "language" varchar(16) NOT NULL;
ALTER TABLE "dictionary" MODIFY "language" varchar(16);

@ -24,7 +24,7 @@ CREATE TABLE users (
last_login timestamp with time zone DEFAULT NULL,
failed_login timestamp with time zone DEFAULT NULL,
failed_login_counter integer DEFAULT NULL,
"language" varchar(5),
"language" varchar(16),
preferences text DEFAULT ''::text NOT NULL,
CONSTRAINT users_username_key UNIQUE (username, mail_host)
);
@ -246,7 +246,7 @@ CREATE INDEX cache_messages_expires_idx ON cache_messages (expires);
CREATE TABLE dictionary (
user_id integer DEFAULT NULL
REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
"language" varchar(5) NOT NULL,
"language" varchar(16) NOT NULL,
data text NOT NULL,
CONSTRAINT dictionary_user_id_language_key UNIQUE (user_id, "language")
);
@ -314,4 +314,4 @@ CREATE TABLE "system" (
value text
);
INSERT INTO "system" (name, value) VALUES ('roundcube-version', '2019092900');
INSERT INTO "system" (name, value) VALUES ('roundcube-version', '2020020101');

@ -0,0 +1,2 @@
ALTER TABLE "dictionary" ALTER COLUMN "language" TYPE varchar(16);
ALTER TABLE "users" ALTER COLUMN "language" TYPE varchar(16);

@ -74,7 +74,7 @@ CREATE TABLE users (
last_login datetime DEFAULT NULL,
failed_login datetime DEFAULT NULL,
failed_login_counter integer DEFAULT NULL,
language varchar(5),
language varchar(16),
preferences text NOT NULL default ''
);
@ -99,11 +99,11 @@ CREATE INDEX ix_session_changed ON session (changed);
CREATE TABLE dictionary (
user_id integer DEFAULT NULL,
"language" varchar(5) NOT NULL,
language varchar(16) NOT NULL,
data text NOT NULL
);
CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, "language");
CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, language);
--
-- Table structure for table searches
@ -215,4 +215,4 @@ CREATE TABLE system (
value text NOT NULL
);
INSERT INTO system (name, value) VALUES ('roundcube-version', '2019092900');
INSERT INTO system (name, value) VALUES ('roundcube-version', '2020020101');

@ -0,0 +1,57 @@
CREATE TABLE tmp_users (
user_id integer NOT NULL PRIMARY KEY,
username varchar(128) NOT NULL default '',
mail_host varchar(128) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
last_login datetime DEFAULT NULL,
failed_login datetime DEFAULT NULL,
failed_login_counter integer DEFAULT NULL,
language varchar(16),
preferences text NOT NULL default ''
);
INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences)
SELECT user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences FROM users;
DROP TABLE users;
CREATE TABLE users (
user_id integer NOT NULL PRIMARY KEY,
username varchar(128) NOT NULL default '',
mail_host varchar(128) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
last_login datetime DEFAULT NULL,
failed_login datetime DEFAULT NULL,
failed_login_counter integer DEFAULT NULL,
language varchar(16),
preferences text NOT NULL default ''
);
INSERT INTO users (user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences)
SELECT user_id, username, mail_host, created, last_login, failed_login, failed_login_counter, language, preferences FROM tmp_users;
CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
DROP TABLE tmp_users;
DROP TABLE users;
CREATE TABLE tmp_dictionary (
user_id integer DEFAULT NULL,
language varchar(16) NOT NULL,
data text NOT NULL
);
INSERT INTO tmp_dictionary (user_id, language, data) SELECT user_id, language, data FROM dictionary;
CREATE TABLE dictionary (
user_id integer DEFAULT NULL,
language varchar(16) NOT NULL,
data text NOT NULL
);
INSERT INTO dictionary (user_id, language, data) SELECT user_id, language, data FROM tmp_dictionary;
CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, language);
DROP TABLE tmp_dictionary;

@ -14,18 +14,23 @@ and cd into that directory. From there, run the following command in a shell:
./bin/installto.sh <TARGET-FOLDER>
For <TARGET-FOLDER> you specify the path to the Roundcube installation
which should be updated. The update script will then copy all new files to the
For <TARGET-FOLDER> you specify the path to the Roundcube installation
which should be updated. The update script will then copy all new files to the
target location and check and update the configuration and database schema.
After all is done, the temporary folder with the new Roundcube files can be
After all is done, the temporary folder with the new Roundcube files can be
removed again.
WARNING: Make sure files have proper owner/group for your setup. If you use
tar to extract the package, `--no-same-owner` option might be helpful.
WARNING: See Post-Upgrade Activities section below.
WARNING: If you use MySQL < 5.7.7 or MariaDB < 10.2.2 make sure to configure it with:
innodb_large_prefix=true
innodb_file_format=Barracuda
Updating manually
-----------------
If you don't have shell access to the Roundcube installation or if not running
If you don't have shell access to the Roundcube installation or if not running
it on a unix system, you need to do the following operations by hand:
1. Replace index.php and all files in
@ -53,7 +58,8 @@ it on a unix system, you need to do the following operations by hand:
- run `php composer.phar install --no-dev`.
4c. If you use git sources or the release package without dependencies
update javascript dependencies by executing `bin/install-jsdeps.sh` script.
4d. If you use git sources compile css files for the Elastic skin:
4d. If you use git sources compile css files for the Elastic skin (required
lessc >= 1.5.0):
$ cd skins/elastic
$ lessc -x styles/styles.less > styles/styles.css
$ lessc -x styles/print.less > styles/print.css

@ -36,7 +36,6 @@ if (empty($SOURCES['dependencies'])) {
$CURL = trim(`which curl`);
$WGET = trim(`which wget`);
$UNZIP = trim(`which unzip`);
$FILEINFO = trim(`which file`);
if (($CACHEDIR = getenv("CACHEDIR")) && is_writeable($CACHEDIR)) {
// use $CACHEDIR
@ -154,19 +153,17 @@ function fetch_from_source($package, $useCache = true, &$filetype = null)
*/
function extract_filetype($package, &$filetype = null)
{
global $FILEINFO, $CACHEDIR;
global $CACHEDIR;
$filetype = pathinfo($package['url'], PATHINFO_EXTENSION) ?: 'tmp';
$cache_file = $CACHEDIR . '/' . $package['lib'] . '-' . $package['version'] . '.' . $filetype;
if (empty($FILEINFO)) {
rcube::raise_error("Required program 'file' not found.", false, true);
}
// detect downloaded/cached file type
exec(sprintf('%s -b %s', $FILEINFO, $cache_file), $out);
if (stripos($out[0], 'zip') === 0) {
$filetype = 'zip';
// Make sure it is a zip file
if (file_exists($cache_file)) {
$magic = file_get_contents($cache_file, false, null, 0, 4);
if ($magic === "PK\003\004") {
$filetype = 'zip';
}
}
return $cache_file;
@ -237,7 +234,7 @@ function extract_zipfile($package, $srcfile)
echo "Extracting files $pattern into $destdir\n";
exec(sprintf('%s -o %s %s -d %s', $UNZIP, escapeshellarg($srcfile), escapeshellarg($pattern), $destdir), $out, $retval);
if ($retval !== 0) {
rcube::raise_error("Failed to unpack $pattern; " . join('; ' . $out));
rcube::raise_error("Failed to unpack $pattern; " . implode('; ' . $out));
}
}
}
@ -258,22 +255,35 @@ function extract_zipfile($package, $srcfile)
foreach ($package['map'] as $src => $dest) {
echo "Installing $sourcedir/$src into $destdir/$dest\n";
$dest_file = $destdir . '/' . $dest;
$src_file = $sourcedir . '/' . $src;
// make sure the destination's parent directory exists
if (strpos($dest, '/') !== false) {
$parentdir = dirname($destdir . '/' . $dest);
$parentdir = dirname($dest_file);
if (!is_dir($parentdir)) {
mkdir($parentdir, 0775, true);
}
}
// avoid copying source directory as a child into destination
if (is_dir($sourcedir . '/' . $src) && is_dir($destdir . '/' . $dest)) {
exec(sprintf('rm -rf %s/%s', $destdir, $dest));
if (is_dir($src_file) && is_dir($dest_file)) {
exec(sprintf('rm -rf %s', $dest_file));
}
exec(sprintf('mv -f %s/%s %s/%s', $sourcedir, $src, $destdir, $dest), $out, $retval);
exec(sprintf('mv -f %s %s', $src_file, $dest_file), $out, $retval);
if ($retval !== 0) {
rcube::raise_error("Failed to move $src into $destdir/$dest; " . join('; ' . $out));
rcube::raise_error("Failed to move $src into $dest_file; " . implode('; ' . $out));
}
// Remove sourceMappingURL
else if (isset($package['sourcemap']) && $package['sourcemap'] === false) {
if ($content = file($dest_file)) {
$index = count($content);
if (preg_match('|sourceMappingURL=|', $content[$index-1])) {
array_pop($content);
file_put_contents($dest_file, implode('', $content));
}
}
}
}
@ -285,7 +295,7 @@ function extract_zipfile($package, $srcfile)
echo "Extracting zip archive into $destdir\n";
exec(sprintf('%s -o %s -d %s', $UNZIP, escapeshellarg($srcfile), $destdir), $out, $retval);
if ($retval !== 0) {
rcube::raise_error("Failed to unzip $srcfile; " . join('; ' . $out));
rcube::raise_error("Failed to unzip $srcfile; " . implode('; ' . $out));
}
}

@ -34,7 +34,7 @@ if (empty($target_dir) || !is_dir(realpath($target_dir)))
// read version from iniset.php
$iniset = @file_get_contents($target_dir . '/program/include/iniset.php');
if (!preg_match('/define\(.RCMAIL_VERSION.,\s*.([0-9.]+[a-z-]*)/', $iniset, $m))
if (!preg_match('/define\(.RCMAIL_VERSION.,\s*.([0-9.]+[a-z0-9-]*)/', $iniset, $m))
rcube::raise_error("No valid Roundcube installation found at $target_dir", false, true);
$oldversion = $m[1];
@ -110,8 +110,13 @@ if (strtolower($input) == 'y') {
echo "done.\n\n";
}
// Warn about situation when using "complete" package to update "custom" installation (#7087)
// Note: "Complete" package do not include jsdeps.json nor install-jsdeps.sh
if (file_exists("$target_dir/jsdeps.json") && !file_exists(INSTALL_PATH . "jsdeps.json")) {
$adds[] = "WARNING: JavaScript dependencies update skipped.";
}
// check if js-deps are up-to-date
if (file_exists("$target_dir/jsdeps.json") && file_exists("$target_dir/bin/install-jsdeps.sh")) {
else if (file_exists("$target_dir/jsdeps.json") && file_exists("$target_dir/bin/install-jsdeps.sh")) {
$jsdeps = json_decode(file_get_contents("$target_dir/jsdeps.json"));
$package = $jsdeps->dependencies[0];
$dest_file = $target_dir . '/' . $package->dest;
@ -123,7 +128,7 @@ if (strtolower($input) == 'y') {
}
}
else {
$adds[] = "NOTICE: JavaScript dependencies installation skipped...";
$adds[] = "NOTICE: JavaScript dependencies installation skipped.";
}
if (file_exists("$target_dir/installer")) {

@ -29,7 +29,7 @@ $opts = rcube_utils::get_opt(array('v' => 'version', 'y' => 'accept:bool'));
if (!$opts['version']) {
echo "What version are you upgrading from? Type '?' if you don't know.\n";
if (($input = trim(fgets(STDIN))) && preg_match('/^[0-9.]+[a-z-]*$/', $input)) {
if (($input = trim(fgets(STDIN))) && preg_match('/^[0-9.]+[a-z0-9-]*$/', $input)) {
$opts['version'] = $input;
}
else {
@ -43,7 +43,7 @@ $RCI->load_config();
if ($RCI->configured) {
$success = true;
if (($messages = $RCI->check_config()) || $RCI->legacy_config) {
if (($messages = $RCI->check_config($opts['version'])) || $RCI->legacy_config) {
$success = false;
$err = 0;
@ -56,8 +56,6 @@ if ($RCI->configured) {
echo "- '" . $msg['prop'] . "' was replaced by '" . $msg['replacement'] . "'\n";
$err++;
}
echo "\n";
}
// list obsolete config options (just a notice)
@ -70,8 +68,6 @@ if ($RCI->configured) {
echo "- '" . $msg['prop'] . ($msg['name'] ? "': " . $msg['name'] : "'") . "\n";
$err++;
}
echo "\n";
}
if (!$err && $RCI->legacy_config) {
@ -137,6 +133,15 @@ if ($RCI->configured) {
}
}
// list of config options with changed default (just a notice)
if (!empty($messages['defaults'])) {
echo "WARNING: Changed defaults (These config options have new default values):\n";
foreach ($messages['defaults'] as $opt) {
echo "- '{$opt}'\n";
}
}
// check dependencies based on the current configuration
if (is_array($messages['dependencies'])) {
echo "WARNING: Dependency check failed!\n";

@ -22,7 +22,7 @@
"endroid/qr-code": "~1.6.5"
},
"require-dev": {
"phpunit/phpunit": "^4.8.36 || ^5.7.21"
"phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6 || ^7"
},
"suggest": {
"kolab/net_ldap3": "~1.1.1 required for connecting to LDAP",

@ -30,7 +30,8 @@ $config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail';
// The IMAP 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://
// Enter hostname with prefix ssl:// to use Implicit TLS, or use
// prefix tls:// to use STARTTLS.
// Supported replacement variables:
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
@ -40,8 +41,8 @@ $config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail';
$config['default_host'] = 'localhost';
// SMTP server host (for sending mails).
// Enter hostname with prefix tls:// to use STARTTLS, or use
// prefix ssl:// to use the deprecated SSL over SMTP (aka SMTPS)
// Enter hostname with prefix ssl:// to use Implicit TLS, or use
// prefix tls:// to use STARTTLS.
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
@ -49,10 +50,11 @@ $config['default_host'] = 'localhost';
// %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
// To specify differnt SMTP servers for different IMAP hosts provide an array
// of IMAP host (no prefix or port) and SMTP server e.g. array('imap.example.com' => 'smtp.example.net')
$config['smtp_server'] = 'localhost';
// SMTP port (default is 25; use 587 for STARTTLS or 465 for the
// deprecated SSL over SMTP (aka SMTPS))
// SMTP port. Use 25 for cleartext, 465 for Implicit TLS, or 587 for STARTTLS (default)
$config['smtp_port'] = 587;
// SMTP username (if required) if you use %u as the username Roundcube
@ -70,9 +72,9 @@ $config['support_url'] = '';
// Name your service. This is displayed on the login screen and in the window title
$config['product_name'] = 'Roundcube Webmail';
// 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.
// This key is used to encrypt the users imap password which is stored
// in the session record. For the default cipher method it must be
// exactly 24 characters long.
// YOUR KEY MUST BE DIFFERENT THAN THE SAMPLE VALUE FOR SECURITY REASONS
$config['des_key'] = 'rcmail-!24ByteDESkey*Str';
@ -83,4 +85,4 @@ $config['plugins'] = array(
);
// skin name: folder from skins/
$config['skin'] = 'larry';
$config['skin'] = 'elastic';

@ -134,7 +134,8 @@ $config['redis_debug'] = false;
// The IMAP 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://
// Enter hostname with prefix ssl:// to use Implicit TLS, or use
// prefix tls:// to use STARTTLS.
// Supported replacement variables:
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
@ -257,8 +258,8 @@ $config['messages_cache_threshold'] = 50;
// ----------------------------------
// SMTP server host (for sending mails).
// Enter hostname with prefix tls:// to use STARTTLS, or use
// prefix ssl:// to use the deprecated SSL over SMTP (aka SMTPS)
// Enter hostname with prefix ssl:// to use Implicit TLS, or use
// prefix tls:// to use STARTTLS.
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
@ -266,9 +267,11 @@ $config['messages_cache_threshold'] = 50;
// %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
// To specify differnt SMTP servers for different IMAP hosts provide an array
// of IMAP host (no prefix or port) and SMTP server e.g. array('imap.example.com' => 'smtp.example.net')
$config['smtp_server'] = 'localhost';
// SMTP port (default is 587)
// SMTP port. Use 25 for cleartext, 465 for Implicit TLS, or 587 for STARTTLS (default)
$config['smtp_port'] = 587;
// SMTP username (if required) if you use %u as the username Roundcube
@ -501,6 +504,11 @@ $config['session_auth_name'] = null;
// Session path. Defaults to PHP session.cookie_path setting.
$config['session_path'] = null;
// Session samesite. Defaults to PHP session.cookie_samesite setting.
// Requires PHP >= 7.3.0, see https://wiki.php.net/rfc/same-site-cookie for more info
// Possible values: null (default), 'Lax', or 'Strict'
$config['session_samesite'] = null;
// Backend to use for session storage. Can either be 'db' (default), 'redis', 'memcache', or 'php'
//
// If set to 'memcache' or 'memcached', a list of servers need to be specified in 'memcache_hosts'
@ -536,6 +544,7 @@ $config['x_frame_options'] = 'sameorigin';
// This key is used for encrypting purposes, like storing of imap password
// in the session. For historical reasons it's called DES_key, but it's used
// with any configured cipher_method (see below).
// For the default cipher_method a required key length is 24 characters.
$config['des_key'] = 'rcmail-!24ByteDESkey*Str';
// Encryption algorithm. You can use any method supported by OpenSSL.
@ -646,9 +655,12 @@ $config['identities_level'] = 0;
$config['identity_image_size'] = 64;
// 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'
$config['client_mimetypes'] = null; # null == default
// Attachments of these types will open in a preview window.
// Either a comma-separated list or an array. Default list includes:
// text/plain,text/html,
// image/jpeg,image/gif,image/png,image/bmp,image/tiff,image/webp,
// application/x-javascript,application/pdf,application/x-shockwave-flash
$config['client_mimetypes'] = null;
// Path to a local mime magic database file for PHPs finfo extension.
// Set to null if the default path should be used.
@ -839,8 +851,8 @@ $config['compose_responses_static'] = array(
);
// List of HKP key servers for PGP public key lookups in Enigma/Mailvelope
// Default: array("keys.fedoraproject.org", "keybase.io")
$config['keyservers'] = array();
// Note: Lookup is client-side, so the server must support Cross-Origin Resource Sharing
$config['keyservers'] = array('keys.openpgp.org');
// ----------------------------------
// ADDRESSBOOK SETTINGS
@ -883,6 +895,7 @@ $config['ldap_public']['Verisign'] = array(
// %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
// Note: Host can also be a full URI e.g. ldaps://hostname.local:636 (for SSL)
'hosts' => array('directory.verisign.com'),
'port' => 389,
'use_tls' => false,
@ -1079,10 +1092,11 @@ $config['contact_search_name'] = '{name} <{email}>';
// Use this charset as fallback for message decoding
$config['default_charset'] = 'ISO-8859-1';
// skin name: folder from skins/
// Skin name: folder from skins/
$config['skin'] = 'elastic';
// limit skins available/shown in the settings section
// Limit skins available for the user.
// Note: When not empty, it should include the default skin set in 'skin' option.
$config['skins_allowed'] = array();
// Enables using standard browser windows (that can be handled as tabs)

@ -1,27 +0,0 @@
<?php
/*
+-----------------------------------------------------------------------+
| Roundcube Webmail Selenium Tests Entry Point |
| |
| Copyright (C) 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: |
| This is the public entry point for all HTTP requests to the |
| Roundcube webmail application loading the 'tests' environment. |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <thomas@roundcube.net> |
+-----------------------------------------------------------------------+
*/
define('INSTALL_PATH', realpath(__DIR__) . '/');
$GLOBALS['env'] = 'test';
// include index.php from application root directory
include INSTALL_PATH . 'index.php';

@ -2,7 +2,7 @@
/**
+-------------------------------------------------------------------------+
| Roundcube Webmail IMAP Client |
| Version 1.4-git |
| Version 1.5-git |
| |
| Copyright (C) The Roundcube Dev Team |
| |
@ -106,7 +106,9 @@ if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') {
$pass_charset = $RCMAIL->config->get('password_charset', 'UTF-8');
// purge the session in case of new login when a session already exists
$RCMAIL->kill_session();
if ($request_valid) {
$RCMAIL->kill_session();
}
$auth = $RCMAIL->plugins->exec_hook('authenticate', array(
'host' => $RCMAIL->autoselect_host(),
@ -180,13 +182,15 @@ if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') {
$RCMAIL->plugins->exec_hook('login_failed', array(
'code' => $error_code, 'host' => $auth['host'], 'user' => $auth['user']));
$RCMAIL->kill_session();
if (!isset($_SESSION['user_id'])) {
$RCMAIL->kill_session();
}
}
}
// end session
else if ($RCMAIL->task == 'logout' && isset($_SESSION['user_id'])) {
$RCMAIL->request_security_check($mode = rcube_utils::INPUT_GET);
$RCMAIL->request_security_check(rcube_utils::INPUT_GET | rcube_utils::INPUT_POST);
$userdata = array(
'user' => $_SESSION['username'],
@ -234,7 +238,8 @@ if (empty($RCMAIL->user->ID)) {
$plugin = $RCMAIL->plugins->exec_hook('unauthenticated', array(
'task' => 'login',
'error' => $session_error,
'http_code' => !$session_error ? 401 : 200
// Return 401 only on failed logins (#7010)
'http_code' => empty($session_error) && !empty($error_message) ? 401 : 200
));
$RCMAIL->set_task($plugin['task']);

@ -31,11 +31,12 @@ $required_php_exts = array(
'PDO' => 'PDO',
'Multibyte' => 'mbstring',
'OpenSSL' => 'openssl',
'Filter' => 'filter',
'Ctype' => 'ctype',
);
$optional_php_exts = array(
'FileInfo' => 'fileinfo',
'Libiconv' => 'iconv',
'Intl' => 'intl',
'Exif' => 'exif',
'LDAP' => 'ldap',
@ -74,7 +75,6 @@ $source_urls = array(
'Session' => 'http://www.php.net/manual/en/book.session.php',
'PCRE' => 'http://www.php.net/manual/en/book.pcre.php',
'FileInfo' => 'http://www.php.net/manual/en/book.fileinfo.php',
'Libiconv' => 'http://www.php.net/manual/en/book.iconv.php',
'Multibyte' => 'http://www.php.net/manual/en/book.mbstring.php',
'OpenSSL' => 'http://www.php.net/manual/en/book.openssl.php',
'JSON' => 'http://www.php.net/manual/en/book.json.php',
@ -87,6 +87,8 @@ $source_urls = array(
'GD' => 'http://www.php.net/manual/en/book.image.php',
'Imagick' => 'http://www.php.net/manual/en/book.imagick.php',
'Zip' => 'http://www.php.net/manual/en/book.zip.php',
'Filter' => 'http://www.php.net/manual/en/book.filter.php',
'Ctype' => 'http://www.php.net/manual/en/book.ctype.php',
'pdo_mysql' => 'http://www.php.net/manual/en/ref.pdo-mysql.php',
'pdo_pgsql' => 'http://www.php.net/manual/en/ref.pdo-pgsql.php',
'pdo_sqlite' => 'http://www.php.net/manual/en/ref.pdo-sqlite.php',

@ -104,7 +104,7 @@ $input_support = new html_inputfield(array('name' => '_support_url', 'size' => 5
echo $input_support->show($RCI->getprop('support_url'));
?>
<div>Provide an URL where a user can get support for this Roundcube installation.<br/>PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!</div>
<div>Provide a URL where a user can get support for this Roundcube installation.<br/>PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!</div>
<p class="hint">Enter an absolute URL (including http://) to a support page/form or a mailto: link.</p>
</dd>

Before

Width:  |  Height:  |  Size: 653 B

After

Width:  |  Height:  |  Size: 653 B

Before

Width:  |  Height:  |  Size: 637 B

After

Width:  |  Height:  |  Size: 637 B

Before

Width:  |  Height:  |  Size: 565 B

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

@ -3,7 +3,7 @@
/**
+-------------------------------------------------------------------------+
| Roundcube Webmail setup tool |
| Version 1.4-git |
| Version 1.5-git |
| |
| Copyright (C) The Roundcube Dev Team |
| |

@ -139,7 +139,7 @@ if ($RCI->configured) {
else {
$RCI->fail('DSN (write)', $db_error_msg);
echo '<p class="hint">Make sure that the configured database exists and that the user has write privileges<br />';
echo 'DSN: ' . $RCI->config['db_dsnw'] . '</p>';
echo 'DSN: ' . rcube::Q($RCI->config['db_dsnw']) . '</p>';
}
}
else {
@ -152,15 +152,15 @@ else {
// initialize db with schema found in /SQL/*
if ($db_working && $_POST['initdb']) {
if (!($success = $RCI->init_db($DB))) {
if (!$RCI->init_db($DB)) {
$db_working = false;
echo '<p class="warning">Please try to inizialize the database manually as described in the INSTALL guide.
Make sure that the configured database extists and that the user as write privileges</p>';
Make sure that the configured database extists and that the user as write privileges</p>';
}
}
else if ($db_working && $_POST['updatedb']) {
if (!($success = $RCI->update_db($_POST['version']))) {
if (!$RCI->update_db($_POST['version'])) {
echo '<p class="warning">Database schema update failed.</p>';
}
}
@ -189,6 +189,11 @@ if ($db_working) {
// more database tests
if ($db_working) {
// Using transactions to workaround SQLite bug (#7064)
if ($DB->db_provider == 'sqlite') {
$DB->startTransaction();
}
// write test
$insert_id = md5(uniqid());
$db_write = $DB->query("INSERT INTO " . $DB->quote_identifier($RCI->config['db_prefix'] . 'session')
@ -204,6 +209,11 @@ if ($db_working) {
}
echo '<br />';
// Transaction end
if ($DB->db_provider == 'sqlite') {
$DB->rollbackTransaction();
}
// check timezone settings
$tz_db = 'SELECT ' . $DB->unixtimestamp($DB->now()) . ' AS tz_db';
$tz_db = $DB->query($tz_db);
@ -253,6 +263,15 @@ else {
echo "<br/>";
}
$smtp_hosts = $RCI->get_hostlist('smtp_server');
if (!empty($smtp_hosts)) {
$smtp_host_field = new html_select(array('name' => '_smtp_host', 'id' => 'smtp_server'));
$smtp_host_field->add($smtp_hosts);
}
else {
$smtp_host_field = new html_inputfield(array('name' => '_smtp_host', 'id' => 'smtp_server'));
}
$user = $RCI->getprop('smtp_user', '(none)');
$pass = $RCI->getprop('smtp_pass', '(none)');
@ -260,10 +279,16 @@ if ($user == '%u') {
$user_field = new html_inputfield(array('name' => '_smtp_user', 'id' => 'smtp_user'));
$user = $user_field->show($_POST['_smtp_user']);
}
else {
$user = html::quote($user);
}
if ($pass == '%p') {
$pass_field = new html_passwordfield(array('name' => '_smtp_pass', 'id' => 'smtp_pass'));
$pass = $pass_field->show();
}
else {
$pass = html::quote($pass);
}
?>
@ -274,11 +299,11 @@ if ($pass == '%p') {
<tbody>
<tr>
<td><label for="smtp_server">Server</label></td>
<td><?php echo rcube_utils::parse_host($RCI->getprop('smtp_server', 'localhost')); ?></td>
<td><?php echo $smtp_host_field->show($_POST['_smtp_host']); ?></td>
</tr>
<tr>
<td><label for="smtp_port">Port</label></td>
<td><?php echo $RCI->getprop('smtp_port'); ?></td>
<td><?php echo rcube::Q($RCI->getprop('smtp_port')); ?></td>
</tr>
<tr>
<td><label for="smtp_user">Username</label></td>
@ -301,6 +326,9 @@ if (isset($_POST['sendmail'])) {
echo '<p>Trying to send email...<br />';
$smtp_host = trim($_POST['_smtp_host']);
$smtp_port = $RCI->getprop('smtp_port');
$from = rcube_utils::idn_to_ascii(trim($_POST['_from']));
$to = rcube_utils::idn_to_ascii(trim($_POST['_to']));
@ -330,8 +358,7 @@ if (isset($_POST['sendmail'])) {
$head = $mail_object->txtHeaders($send_headers);
$SMTP = new rcube_smtp();
$SMTP->connect(rcube_utils::parse_host($RCI->getprop('smtp_server')),
$RCI->getprop('smtp_port'), $CONFIG['smtp_user'], $CONFIG['smtp_pass']);
$SMTP->connect($smtp_host, $smtp_port, $CONFIG['smtp_user'], $CONFIG['smtp_pass']);
$status = $SMTP->send_mail($headers['From'], $headers['To'], $head, $body);
$smtp_response = $SMTP->get_response();

@ -94,6 +94,7 @@
"sha1": "ee9e9d6bbbb6181dc519778af2b38804a6aa62a4",
"license": "MIT",
"flat": true,
"sourcemap": false,
"map": {
"bootstrap.bundle.min.js": "bootstrap.bundle.min.js",
"bootstrap.min.css": "bootstrap.min.css"

@ -21,14 +21,18 @@ $labels['advanced'] = 'Edistynyt tila';
$labels['add'] = 'Lisää';
$labels['newuser'] = 'LIsää kohde';
$labels['editperms'] = 'Muokkaa oikeuksia';
$labels['actions'] = 'Käyttöoikeuksien toiminnot...';
$labels['anyone'] = 'Kaikki käyttäjät (kuka tahansa)';
$labels['anonymous'] = 'Vieraat (anonyymit)';
$labels['identifier'] = 'Tunniste';
$labels['aclr'] = 'Lue viestit';
$labels['aclc'] = 'Luo alikansioita';
$labels['aclk'] = 'Luo alikansioita';
$labels['acld'] = 'Poista viestejä';
$labels['aclt'] = 'Poista viestejä';
$labels['acle'] = 'Tiivistä';
$labels['aclx'] = 'Poista kansio';
$labels['acla'] = 'Hallitse';
$labels['aclfull'] = 'Täydet käyttöoikeudet';
$labels['aclother'] = 'Muu';
$labels['aclread'] = 'Luku';
@ -42,15 +46,24 @@ $labels['shortaclc'] = 'Luo';
$labels['shortaclk'] = 'Luo';
$labels['shortacld'] = 'Poista';
$labels['shortaclt'] = 'Poista';
$labels['shortacle'] = 'Tiivistä';
$labels['shortaclx'] = 'Kansion poisto';
$labels['shortacla'] = 'Hallitse';
$labels['shortaclother'] = 'Muu';
$labels['shortaclread'] = 'Luku';
$labels['shortaclwrite'] = 'Kirjoitus';
$labels['shortacldelete'] = 'Poisto';
$labels['longaclr'] = 'Kansion voi avata lukua varten';
$labels['longaclp'] = 'Viestejä voidaan lähettää tähän kansioon';
$labels['longaclc'] = 'Kansioita voidaan luoda (tai uudelleennimetä) suoraan tämän kansion alle';
$labels['longaclk'] = 'Kansioita voidaan luoda (tai uudelleennimetä) suoraan tämän kansion alle';
$labels['longacle'] = 'Viestit voidaan tiivistää';
$labels['longaclx'] = 'Kansio voidaan poistaa tai nimetä uudelleen';
$labels['longacla'] = 'Kansion käyttöoikeuksia voi muuttaa';
$labels['longaclread'] = 'Kansion voi avata lukua varten';
$labels['longacldelete'] = 'Viestit voidaan poistaa';
$labels['longaclother'] = 'Muut käyttöoikeudet';
$labels['ariasummaryacltable'] = 'Lista käyttöoikeuksista';
$labels['arialabelaclactions'] = 'Listatoiminnot';
$messages['deleting'] = 'Poistetaan käyttöoikeuksia...';
$messages['saving'] = 'Tallennetaan käyttöoikeuksia...';

@ -21,7 +21,7 @@ $labels['advanced'] = 'Mode avancé';
$labels['add'] = 'Ajouter';
$labels['newuser'] = 'Ajouter une entrée';
$labels['editperms'] = 'Modifier les permissions';
$labels['actions'] = 'Actions des droits daccès...';
$labels['actions'] = 'Actions des droits daccès';
$labels['anyone'] = 'Tous les utilisateurs (nimporte qui)';
$labels['anonymous'] = 'Invités (anonyme)';
$labels['identifier'] = 'Identifiant';
@ -82,7 +82,7 @@ $labels['longaclwrite'] = 'Les courriels peuvent-être marqués, écrits ou copi
$labels['longacldelete'] = 'Les courriels peuvent être supprimés';
$labels['longaclother'] = 'Autres droits daccès';
$labels['ariasummaryacltable'] = 'Liste de droits daccès';
$labels['arialabelaclactions'] = 'Lister les actions';
$labels['arialabelaclactions'] = 'Actions de listage';
$labels['arialabelaclform'] = 'Formulaire de droits daccès';
$messages['deleting'] = 'Suppression des droits daccès…';
$messages['saving'] = 'Enregistrement des droits daccès…';
@ -93,6 +93,6 @@ $messages['updateerror'] = 'Impossible de mettre à jour les droits daccès';
$messages['deleteerror'] = 'Impossible de supprimer les droits daccès';
$messages['createerror'] = 'Impossible dajouter des droits daccès';
$messages['deleteconfirm'] = 'Êtes-vous certain de vouloir retirer les droits daccès des utilisateurs sélectionnés?';
$messages['norights'] = 'Aucun droit na été spécifié!';
$messages['nouser'] = 'Aucun nom dutilisateur na été spécifié!';
$messages['norights'] = 'Aucun droit na été indiqué';
$messages['nouser'] = 'Aucun nom dutilisateur na été indiqué';
?>

@ -48,7 +48,7 @@ $labels['shortaclr'] = 'Bixwîne';
$labels['shortacls'] = 'Bihêle';
$labels['shortaclw'] = 'Binivîse';
$labels['shortacli'] = 'Tev bike';
$labels['shortaclp'] = 'Şandî';
$labels['shortaclp'] = 'Bişîne';
$labels['shortaclc'] = 'Çêke';
$labels['shortaclk'] = 'Çêke';
$labels['shortacld'] = 'Jê bibe';

@ -1,6 +1,6 @@
<?php
class Acl_Plugin extends PHPUnit_Framework_TestCase
class Acl_Plugin extends PHPUnit\Framework\TestCase
{
function setUp()

@ -1,6 +1,6 @@
<?php
class AdditionalMessageHeaders_Plugin extends PHPUnit_Framework_TestCase
class AdditionalMessageHeaders_Plugin extends PHPUnit\Framework\TestCase
{
function setUp()

@ -199,6 +199,17 @@ class archive extends rcube_plugin
case 'sender':
$subfolder = $this->sender_subfolder($message->get('from'));
break;
case 'folderyear':
$subfolder = $rcmail->format_date($message->timestamp, 'Y')
. $delimiter . $mbox;
break;
case 'foldermonth':
$subfolder = $rcmail->format_date($message->timestamp, 'Y')
. $delimiter . $rcmail->format_date($message->timestamp, 'm')
. $delimiter . $mbox;
break;
}
// compose full folder path
@ -414,6 +425,8 @@ class archive extends rcube_plugin
$archive_type->add($this->gettext('archivetypetbmonth'), 'tbmonth');
$archive_type->add($this->gettext('archivetypesender'), 'sender');
$archive_type->add($this->gettext('archivetypefolder'), 'folder');
$archive_type->add($this->gettext('archivetypefolderyear'), 'folderyear');
$archive_type->add($this->gettext('archivetypefoldermonth'), 'foldermonth');
$args['blocks']['archive'] = array(
'name' => rcube::Q($this->gettext('settingstitle')),

@ -3,7 +3,7 @@
"type": "roundcube-plugin",
"description": "This adds a button to move the selected messages to an archive folder. The folder (and the optional structure of subfolders) can be selected in the settings panel.",
"license": "GPLv3+",
"version": "3.4",
"version": "3.5",
"authors": [
{
"name": "Thomas Bruederli",

@ -24,6 +24,8 @@ $labels['settingstitle'] = 'Archive';
$labels['archivetype'] = 'Divide archive by';
$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)';
$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)';
$labels['archivetypefolderyear'] = 'Year then original folder (e.g. Archive/...)';
$labels['archivetypefoldermonth'] = 'Month then original folder (e.g. Archive/2012/...)';
$labels['archivetypefolder'] = 'Original folder';
$labels['archivetypesender'] = 'Sender email';
$labels['unkownsender'] = 'unknown';

@ -26,6 +26,8 @@ $labels['archivetypeyear'] = 'Year (e.g. Archive/2012)';
$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)';
$labels['archivetypetbmonth'] = 'Month - Thunderbird compatible (e.g. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Original folder';
$labels['archivetypefolderyear'] = 'Year then original folder (e.g. Archive/...)';
$labels['archivetypefoldermonth'] = 'Month then original folder (e.g. Archive/2012/...)';
$labels['archivetypesender'] = 'Sender email';
$labels['unkownsender'] = 'unknown';
$labels['readonarchive'] = 'Mark the message as read on archive';

@ -27,8 +27,8 @@ $labels['archivetypeyear'] = 'Year (e.g. Archive/2012)';
$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)';
$labels['archivetypetbmonth'] = 'Month - Thunderbird compatible (e.g. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Original folder';
$labels['archivetypefolderyear'] = 'Year and the original folder (e.g. Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Year, month and the original folder (e.g. Archive/2012/06/...)';
$labels['archivetypesender'] = 'Sender email';
$labels['unkownsender'] = 'unknown';
$labels['readonarchive'] = 'Mark the message as read on archive';
?>

@ -22,11 +22,12 @@ $labels['archiveerror'] = 'Certains courriels nont pas pu être archivés.';
$labels['archivefolder'] = 'Archives';
$labels['settingstitle'] = 'Archives';
$labels['archivetype'] = 'Diviser larchive par';
$labels['archivetypeyear'] = 'Année (ex. Archives/2012)';
$labels['archivetypemonth'] = 'Mois (ex. Archives/2012/06)';
$labels['archivetypetbmonth'] = 'Mois - compatible avec Thunderbird (p.ex. Archive/2012/2012-06)';
$labels['archivetypeyear'] = 'Année (p. ex. Archives/2012)';
$labels['archivetypemonth'] = 'Mois (p. ex. Archives/2012/06)';
$labels['archivetypetbmonth'] = 'Mois compatible avec Thunderbird (p.ex. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Dossier original';
$labels['archivetypefolderyear'] = 'Année puis dossier original (p. ex. Archive/...)';
$labels['archivetypefoldermonth'] = 'Mois puis dossier original (p. ex. Archive/2012/...)';
$labels['archivetypesender'] = 'Courriel de lexpéditeur';
$labels['unkownsender'] = 'inconnu';
$labels['readonarchive'] = 'Marquer le courriel comme lu lors de larchivage';
?>

@ -15,17 +15,18 @@
*/
$labels['buttontext'] = '보관';
$labels['buttontitle'] = '이 메시지를 보관함에 저장';
$labels['buttontitle'] = '이 메시지를 보관 편지함에 저장';
$labels['archived'] = '성공적으로 보관함';
$labels['archivedreload'] = '성공적으로 보관되었습니다. 페이지를 다시 불러와서 새로운 보관함 폴더를 확인하세요.';
$labels['archivedreload'] = '성공적으로 보관되었습니다. 페이지를 다시 불러와서 새로운 보관 편지함 폴더를 확인하세요.';
$labels['archiveerror'] = '일부 메시지가 보관되지 않음';
$labels['archivefolder'] = '보관';
$labels['settingstitle'] = '보관';
$labels['archivefolder'] = '보관 편지함';
$labels['settingstitle'] = '보관 편지함';
$labels['archivetype'] = '보관된 메시지 정리 기준';
$labels['archivetypeyear'] = '연도 (예: 보관/2012)';
$labels['archivetypemonth'] = '월 (예: 보관/2012/06)';
$labels['archivetypetbmonth'] = '월 - 썬더버드 호환 (예: 보관/2012/2012-06)';
$labels['archivetypefolder'] = '원본 폴더';
$labels['archivetypesender'] = '발송자 이메일';
$labels['unkownsender'] = '알 수 없음';
$labels['readonarchive'] = '편지 보관함에서 메시지를 읽음으로 표시';
$labels['readonarchive'] = '보관 편지함에서 메시지를 읽음으로 표시';
?>

@ -1,6 +1,6 @@
<?php
class Archive_Plugin extends PHPUnit_Framework_TestCase
class Archive_Plugin extends PHPUnit\Framework\TestCase
{
function setUp()

@ -0,0 +1,82 @@
<?php
namespace Tests\Browser\Plugins\Archive;
use Tests\Browser\Components\Popupmenu;
class MailTest extends \Tests\Browser\TestCase
{
public static function setUpBeforeClass()
{
\bootstrap::init_db();
\bootstrap::init_imap();
\bootstrap::purge_mailbox('INBOX');
\bootstrap::purge_mailbox('Archive');
// import single email messages
foreach (glob(TESTS_DIR . 'data/mail/list_00.eml') as $f) {
\bootstrap::import_message($f, 'INBOX');
}
}
public function testMailUI()
{
$this->browse(function ($browser) {
$browser->go('mail');
if (!$browser->isDesktop()) {
$browser->click('.back-sidebar-button');
}
// Folders list
$browser->whenAvailable('#mailboxlist', function ($browser) {
$browser->assertVisible('li.mailbox.archive')
->assertMissing('li.mailbox.archive .unreadcount');
});
if (!$browser->isDesktop()) {
$browser->click('.back-list-button');
}
// Toolbar menu (Archive button inactive)
$browser->assertToolbarMenu([], ['archive']);
$browser->whenAvailable('#messagelist tbody', function ($browser) {
$browser->ctrlClick('tr:last-child');
});
$browser->clickToolbarMenuItem('archive')
->waitForMessage('confirmation', 'Successfully archived')
->closeMessage('confirmation');
if (!$browser->isDesktop()) {
$browser->click('.back-sidebar-button');
}
// Folders list
$browser->whenAvailable('#mailboxlist', function ($browser) {
$browser->assertSeeIn('li.mailbox.archive .unreadcount', '1')
->click('li.mailbox.archive')
->waitUntilNotBusy();
});
// Messages list contains the moved message
$browser->assertElementsCount('#messagelist tbody tr', 1);
// Toolbar menu (Archive button inactive again)
$browser->assertToolbarMenu([], ['archive']);
// Test archive class on folder in folder selector
$browser->ctrlClick('#messagelist tbody tr')
->clickToolbarMenuItem('more')
->with(new Popupmenu('message-menu'), function ($browser) {
$browser->clickMenuItem('move');
})
->with(new Popupmenu('folder-selector'), function ($browser) {
$browser->assertVisible('li.archive')
->assertSeeIn('li.archive', 'Archive');
})
->click(); // close menus
});
}
}

@ -0,0 +1,149 @@
<?php
namespace Tests\Browser\Plugins\Archive;
class SettingsTest extends \Tests\Browser\TestCase
{
public static function setUpBeforeClass()
{
\bootstrap::init_db();
}
/**
* Test Folders UI
*/
public function testFolders()
{
$this->browse(function ($browser) {
$browser->go('settings', 'folders');
// Folders list
$browser->with('#subscription-table', function ($browser) {
$browser->assertHasClass('li:nth-child(7)', 'archive')
->assertSeeIn('li:nth-child(7)', 'Archive')
->assertPresent('li:nth-child(7) [type=checkbox][disabled]');
});
});
}
/**
* Test Preferences UI
*/
public function testPreferences()
{
$this->browse(function ($browser) {
$browser->go('settings');
if (!$browser->isDesktop()) {
$browser->click('#settings-menu li.preferences')
->waitFor('#sections-table');
}
$browser->click('#sections-table tr.folders');
if ($browser->isPhone()) {
$browser->waitFor('#layout-content .footer a.button.submit:not(.disabled)');
}
$browser->withinFrame('#preferences-frame', function ($browser) {
if (!$browser->isPhone()) {
$browser->waitFor('.formbuttons button.submit');
}
// Main Options fieldset
$browser->with('form.propform fieldset.main', function ($browser) {
$browser->assertSeeIn('legend', 'Main Options');
$browser->assertSeeIn('label[for=_archive_mbox]', 'Archive')
->assertVisible('select[name=_archive_mbox]')
->assertSelected('select[name=_archive_mbox]', 'Archive');
$browser->select('_archive_mbox', 'Drafts');
});
// Archive fieldset
$browser->with('form.propform fieldset.archive', function ($browser) {
$browser->assertSeeIn('legend', 'Archive');
$browser->assertSeeIn('label[for=ff_archive_type]', 'Divide archive by')
->assertVisible('select[name=_archive_type]')
->assertSelected('select[name=_archive_type]', '')
->with('select[name=_archive_type]', function ($browser) {
$browser->assertValue('option:nth-child(1)', '')
->assertSeeIn('option:nth-child(1)', 'None')
->assertValue('option:nth-child(2)', 'year')
->assertSeeIn('option:nth-child(2)', 'Year (e.g. Archive/2012)')
->assertValue('option:nth-child(3)', 'month')
->assertSeeIn('option:nth-child(3)', 'Month (e.g. Archive/2012/06)')
->assertValue('option:nth-child(4)', 'tbmonth')
->assertSeeIn('option:nth-child(4)', 'Month - Thunderbird compatible (e.g. Archive/2012/2012-06)')
->assertValue('option:nth-child(5)', 'sender')
->assertSeeIn('option:nth-child(5)', 'Sender email')
->assertValue('option:nth-child(6)', 'folder')
->assertSeeIn('option:nth-child(6)', 'Original folder');
});
$browser->select('_archive_type', 'year');
});
// Submit form
if (!$browser->isPhone()) {
$browser->click('.formbuttons button.submit');
}
});
if ($browser->isPhone()) {
$browser->click('#layout-content .footer a.submit');
}
$browser->waitForMessage('confirmation', 'Successfully saved');
// Verify if every option has been updated
$browser->withinFrame('#preferences-frame', function ($browser) {
$browser->assertSelected('_archive_mbox', 'Drafts');
$browser->assertSelected('_archive_type', 'year');
});
});
}
/**
* Test Preferences UI (Server Settings)
*/
public function testServerSettings()
{
$this->browse(function ($browser) {
$browser->go('settings', 'preferences');
$browser->click('#sections-table tr.server');
$browser->withinFrame('#preferences-frame', function ($browser) {
if (!$browser->isPhone()) {
$browser->waitFor('.formbuttons button.submit');
}
// Main Options fieldset
$browser->with('form.propform fieldset.main', function ($browser) {
$browser->assertSeeIn('label[for=ff_read_on_archive]', 'Mark the message as read on archive')
->assertCheckboxState('_read_on_archive', false)
->setCheckboxState('_read_on_archive', true);
});
// Submit form
if (!$browser->isPhone()) {
$browser->click('.formbuttons button.submit');
}
});
if ($browser->isPhone()) {
$browser->click('#layout-content .footer a.submit');
}
$browser->waitForMessage('confirmation', 'Successfully saved');
// Verify if every option has been updated
$browser->withinFrame('#preferences-frame', function ($browser) {
$browser->assertCheckboxState('_read_on_archive', true);
});
});
}
}

@ -13,6 +13,7 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/
$messages['missingattachment'] = "Manus puudu?";
$messages['forgotattachment'] = "Unustasid faili lisada?";
$messages['reminderoption'] = "Tuleta mulle meelde kui unustasin manuse lisada";
$messages['keywords'] = "manus,manuses,lisatud,lisasin,fail,file,failis,attachment,file,attach,attached,attaching,enclosed,CV,cover letter";

@ -13,6 +13,7 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/
$messages['missingattachment'] = "첨부파일을 잊으셨나요?";
$messages['forgotattachment'] = "파일을 첨부하는 것을 잊으셨습니까?";
$messages['reminderoption'] = "잊었던 첨부파일 추가에 대해 알림";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,첨부,파일,동봉,이력서";

@ -1,6 +1,6 @@
<?php
class AttachmentReminder_Plugin extends PHPUnit_Framework_TestCase
class AttachmentReminder_Plugin extends PHPUnit\Framework\TestCase
{
function setUp()

@ -0,0 +1,94 @@
<?php
namespace Tests\Browser\Plugins\AttachmentReminder;
use Tests\Browser\Components\Dialog;
class PluginTest extends \Tests\Browser\TestCase
{
public static function setUpBeforeClass()
{
\bootstrap::init_db();
}
/**
* Test Preferences UI (Composing Messages)
*/
public function testPreferences()
{
$this->browse(function ($browser) {
$browser->go('settings', 'preferences');
$browser->click('#sections-table tr.compose');
$browser->withinFrame('#preferences-frame', function ($browser) {
if (!$browser->isPhone()) {
$browser->waitFor('.formbuttons button.submit');
}
// Main Options fieldset
$browser->with('form.propform fieldset.main', function ($browser) {
$browser->assertSeeIn('label[for=rcmfd_attachment_reminder]', 'Remind about forgotten attachments')
->assertCheckboxState('_attachment_reminder', false)
->setCheckboxState('_attachment_reminder', true);
});
// Submit form
if (!$browser->isPhone()) {
$browser->click('.formbuttons button.submit');
}
});
if ($browser->isPhone()) {
$browser->click('#layout-content .footer a.submit');
}
$browser->waitForMessage('confirmation', 'Successfully saved');
// Verify if every option has been updated
$browser->withinFrame('#preferences-frame', function ($browser) {
$browser->assertCheckboxState('_attachment_reminder', true);
});
});
}
/**
* Test Mail Compose page
*
* @depends testPreferences
*/
public function testMailCompose()
{
$this->browse(function ($browser) {
$send_btn = $browser->isPhone() ? '.buttons a.send' : '.formbuttons button.send';
$browser->go('mail', 'compose');
$browser->waitFor('#compose_to')
->type('#compose_to input', 'test@domain.tld')
->type('#compose-subject', 'subject')
->type('#composebody', 'File attached')
->click($send_btn);
// Expect a dialog, Click "Attach a file" button
$browser->with(new Dialog(), function ($browser) {
$browser->assertDialogTitle('Missing attachment?')
->assertDialogContent('Did you forget to attach a file?')
->assertButton('mainaction.attach', 'Attach a file')
->assertButton('send', 'Send')
->clickButton('mainaction.attach');
});
// Click the Send button again
$browser->click($send_btn);
// Expect the dialog again, click Send button (in the dialog)
$browser->with(new Dialog(), function ($browser) {
$browser->assertDialogTitle('Missing attachment?')
->clickButton('send');
});
$browser->waitForMessage('confirmation', 'Message sent successfully.');
});
}
}

@ -1,6 +1,6 @@
<?php
class Autologon_Plugin extends PHPUnit_Framework_TestCase
class Autologon_Plugin extends PHPUnit\Framework\TestCase
{
function setUp()

@ -1,6 +1,6 @@
<?php
class DatabaseAttachments_Plugin extends PHPUnit_Framework_TestCase
class DatabaseAttachments_Plugin extends PHPUnit\Framework\TestCase
{
function setUp()

@ -1,6 +1,6 @@
<?php
class DebugLogger_Plugin extends PHPUnit_Framework_TestCase
class DebugLogger_Plugin extends PHPUnit\Framework\TestCase
{
function setUp()

@ -1,6 +1,6 @@
<?php
class Emoticons_Plugin extends PHPUnit_Framework_TestCase
class Emoticons_Plugin extends PHPUnit\Framework\TestCase
{
function setUp()

@ -1,6 +1,6 @@
<?php
class EmoticonsEngine extends PHPUnit_Framework_TestCase
class EmoticonsEngine extends PHPUnit\Framework\TestCase
{
function setUp()

@ -0,0 +1,188 @@
#!/usr/bin/env php
<?php
/*
+-----------------------------------------------------------------------+
| This file is part of the Roundcube Webmail client |
| |
| Copyright (C) The Roundcube Dev Team |
| Copyright (C) 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: |
| Import keys from Enigma's homedir into database for multihost |
| support. |
+-----------------------------------------------------------------------+
| Author: Aleksander Machniak <alec@alec.pl> |
+-----------------------------------------------------------------------+
*/
define('INSTALL_PATH', realpath(__DIR__ . '/../../../') . '/');
require INSTALL_PATH . 'program/include/clisetup.php';
$rcmail = rcube::get_instance();
// get arguments
$args = rcube_utils::get_opt(array(
'u' => 'user',
'h' => 'host',
'd' => 'dir',
'x' => 'dry-run',
));
if ($_SERVER['argv'][1] == 'help') {
print_usage();
exit;
}
if (empty($args['dir'])) {
rcube::raise_error("--dir argument is required", true);
}
$host = get_host($args);
$dirs = array();
// Read the homedir and iterate over all subfolders (as users)
if (empty($args['user'])) {
if ($dh = opendir($args['dir'])) {
while (($dir = readdir($dh)) !== false) {
if ($dir != '.' && $dir != '..') {
$dirs[$args['dir'] . '/' . $dir] = $dir;
}
}
closedir($dh);
}
}
// a single user
else {
$dirs = array($args['dir'] => $args['user']);
}
foreach ($dirs as $dir => $user) {
echo "Importing keys from $dir\n";
if ($user_id = get_user_id($user, $host)) {
reset_state($user_id, !empty($args['dry-run']));
import_dir($user_id, $dir, !empty($args['dry-run']));
}
}
function print_usage()
{
print "Usage: import.sh [options]\n";
print "Options:\n";
print " --user=username User, if not set --dir subfolders will be iterated\n";
print " --host=host The IMAP hostname or IP the given user is related to\n";
print " --dir=path Location of the gpg homedir\n";
print " --dry-run Do nothing, just list found user/files\n";
}
function get_host($args)
{
global $rcmail;
if (empty($args['host'])) {
$hosts = $rcmail->config->get('default_host', '');
if (is_string($hosts)) {
$args['host'] = $hosts;
}
else if (is_array($hosts) && count($hosts) == 1) {
$args['host'] = reset($hosts);
}
else {
rcube::raise_error("Specify a host name", true);
}
// host can be a URL like tls://192.168.12.44
$host_url = parse_url($args['host']);
if ($host_url['host']) {
$args['host'] = $host_url['host'];
}
}
return $args['host'];
}
function get_user_id($username, $host)
{
global $rcmail;
$db = $rcmail->get_dbh();
// find user in local database
$user = rcube_user::query($username, $host);
if (empty($user)) {
rcube::raise_error("User does not exist: $username");
}
return $user->ID;
}
function reset_state($user_id, $dry_run = false)
{
global $rcmail;
if ($dry_run) {
return;
}
$db = $rcmail->get_dbh();
$db->query("DELETE FROM " . $db->table_name('filestore', true)
. " WHERE `user_id` = ? AND `context` = ?",
$user_id, 'enigma');
}
function import_dir($user_id, $dir, $dry_run = false)
{
global $rcmail;
$db = $rcmail->get_dbh();
$table = $db->table_name('filestore', true);
$db_files = array('pubring.gpg', 'secring.gpg', 'pubring.kbx');
$maxsize = min($db->get_variable('max_allowed_packet', 1048500), 4*1024*1024) - 2000;
foreach (glob("$dir/private-keys-v1.d/*.key") as $file) {
$db_files[] = substr($file, strlen($dir) + 1);
}
foreach ($db_files as $file) {
if ($mtime = @filemtime("$dir/$file")) {
$data = file_get_contents("$dir/$file");
$data = base64_encode($data);
$datasize = strlen($data);
if ($datasize > $maxsize) {
rcube::raise_error(array(
'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
'message' => "Enigma: Failed to save $file. Size exceeds max_allowed_packet."
), true, false);
continue;
}
echo "* $file\n";
if ($dry_run) {
continue;
}
$result = $db->query(
"INSERT INTO $table (`user_id`, `context`, `filename`, `mtime`, `data`)"
. " VALUES(?, 'enigma', ?, ?, ?)",
$user_id, $file, $mtime, $data);
if ($db->is_error($result)) {
rcube::raise_error(array(
'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
'message' => "Enigma: Failed to save $file into database."
), true, false);
}
}
}
}

@ -146,6 +146,7 @@ rcube_webmail.prototype.enigma_import_success = function()
// Display key(s) generation form
rcube_webmail.prototype.enigma_key_create = function()
{
this.keys_list.clear_selection();
this.enigma_loadframe('&_action=plugin.enigmakeys&_a=create&_nav=hide');
};
@ -346,7 +347,7 @@ rcube_webmail.prototype.enigma_keylist_select = function(list)
{
var id = list.get_single_selection(), url;
if (id)
if (id && !list.multi_selecting)
url = '&_action=plugin.enigmakeys&_a=info&_id=' + id;
this.enigma_loadframe(url);
@ -668,7 +669,7 @@ rcube_webmail.prototype.enigma_key_not_found = function(data)
text: rcmail.get_label('enigma.sendunencrypted'),
click: function(e) {
$(this).remove();
$('#enigmaencryptopt').prop('checked', false);
$('#enigmaencryptopt').prop('checked', false).change();
rcmail.command('send', {nocheck: true}, e.target, e.originalEvent);
}
});

@ -676,17 +676,8 @@ class enigma_driver_gnupg extends enigma_driver
continue;
}
if (empty($existing)) {
$result = $db->query(
"INSERT INTO $table (`user_id`, `context`, `filename`, `mtime`, `data`)"
. " VALUES(?, 'enigma', ?, ?, ?)",
$this->rc->user->ID, $filename, $mtime, $data);
}
else {
$result = $db->query(
"UPDATE $table SET `mtime` = ?, `data` = ? WHERE `file_id` = ?",
$mtime, $data, $existing['file_id']);
}
$unique = array('user_id' => $this->rc->user->ID, 'context' => 'enigma', 'filename' => $filename);
$result = $db->insert_or_update($table, $unique, array('mtime', 'data'), array($mtime, $data));
if ($db->is_error($result)) {
rcube::raise_error(array(

@ -242,8 +242,6 @@ class enigma_mime_message extends Mail_mime
}
$this->headers = array_merge($this->headers, $headers);
return;
}
else {
$output = $message->encode($boundary, $skip_head);
@ -253,9 +251,16 @@ class enigma_mime_message extends Mail_mime
}
$this->headers = array_merge($this->headers, $output['headers']);
}
return $output['body'];
// remember the boundary used, in case we'd handle headers() call later
if (empty($boundary) && !empty($this->headers['Content-Type'])) {
if (preg_match('/boundary="([^"]+)/', $this->headers['Content-Type'], $m)) {
$this->build_params['boundary'] = $m[1];
}
}
return $filename ? null : $output['body'];
}
/**

@ -436,6 +436,11 @@ class enigma_ui
$table->add_header('valid', $this->enigma->gettext('uservalid'));
foreach ($this->data->users as $user) {
// Display domains in UTF8
if ($email = rcube_utils::idn_to_utf8($user->email)) {
$user->email = $email;
}
$username = $user->name;
if ($user->comment) {
$username .= ' (' . $user->comment . ')';
@ -746,8 +751,8 @@ class enigma_ui
$identities = $plugin['identities'];
foreach ($identities as $idx => $ident) {
$name = empty($ident['name']) ? ($ident['email']) : $ident['ident'];
$attr = array('value' => $idx, 'data-name' => $ident['name'], 'data-email' => $ident['email']);
$name = format_email_recipient($ident['email'], $ident['name']);
$attr = array('value' => $idx, 'data-name' => $ident['name'], 'data-email' => $ident['email_ascii']);
$identities[$idx] = html::tag('li', null, html::label(null, $checkbox->show($idx, $attr) . rcube::Q($name)));
}

@ -63,6 +63,7 @@ $labels['keydisable'] = 'Деактивиране';
$labels['keyrevoke'] = 'Отмяна';
$labels['keysend'] = 'Изпрати писмо с публичен ключ';
$labels['keychpass'] = 'Промени паролата';
$labels['keyadd'] = 'Добавяне на ключ';
$labels['newkeyident'] = 'Самоличност';
$labels['newkeypass'] = 'Парола';
$labels['newkeypassconfirm'] = 'Потвърди паролата';
@ -76,7 +77,6 @@ $labels['signmsg'] = 'Подпиши цифрово това писмо';
$labels['sendunencrypted'] = 'Изпрати некриптирано';
$labels['enterkeypasstitle'] = 'Въведете парола на ключа';
$labels['enterkeypass'] = 'Нужна е парола за отваряне на ключ ($keyid) за потребител $user.';
$labels['arialabelkeyexportoptions'] = 'Опции за експорт на ключ';
$labels['attachpubkeymsg'] = 'Прикачи моя публичен ключ';
$labels['keyexportprompt'] = 'Желаете ли да включите секретните ключове в записания OpenPGP файл?';
$labels['onlypubkeys'] = 'Експорт само на Публичните ключове';
@ -87,6 +87,9 @@ $labels['keyimportsearchlabel'] = 'Търси на сървъри за ключ
$labels['managekeys'] = 'Управление на PGP ключовете';
$labels['identitymatchingprivkeys'] = 'Имате $nr съвпадащи PGP частни ключа, съхранени във вашия ключодържател:';
$labels['identitynoprivkeys'] = 'Тази самоличност на подателя все още няма частен PGP ключ, съхраняван във вашия ключодържател.';
$labels['arialabelkeyexportoptions'] = 'Опции за експорт на ключ';
$labels['arialabelkeysearchform'] = 'Форма за търсене на ключове';
$labels['arialabelkeyoptions'] = 'Настройки на ключа';
$messages['sigvalid'] = 'Верифициран подпис от $sender.';
$messages['sigvalidpartial'] = 'Верифициран подпис от $sender, но част от съдържанието на писмото не е било подписано';
$messages['siginvalid'] = 'Невалиден подпис от $sender.';
@ -118,7 +121,7 @@ $messages['keyremoveconfirm'] = 'Желаете ли да изтриете из
$messages['keyremovesuccess'] = 'Ключовете са изтрити успешно.';
$messages['keyremoveerror'] = 'Невъзможно изтриване на ключове.';
$messages['keyimporttext'] = 'Можете да импортирате частни и публични ключове или сигнатури за отмяна в ASCII-Armor формат.';
$messages['keyimportsearchtext'] = 'Можете да търсите публични ключове по идентификатор, потребитлско име или адрес на ел. поща, след което директно да ги импортирате.';
$messages['keyimportsearchtext'] = 'Можете да търсите публични ключове по идентификатор, потребителско име или адрес на ел. поща, след което директно да ги импортирате.';
$messages['formerror'] = 'Моля попълнете формата. Всички полета са задължителни!';
$messages['passwordsdiffer'] = 'Паролите не съвпадат!';
$messages['keygenerateerror'] = 'Невъзможно генериране на ключова двойка';

@ -71,13 +71,13 @@ $labels['encryptmsg'] = 'Enrinegañ ar gemennadenn-mañ';
$labels['signmsg'] = 'Sinañ ent niverel ar gemennadenn-mañ';
$labels['enterkeypasstitle'] = 'Enankañ frazenn-dremen an alc\'hwez';
$labels['enterkeypass'] = 'Ur frazenn-dremen a zo dleet evit dibrennañ an alc\'hwez prevez ($keyid= evit an arveriad: $user';
$labels['arialabelkeyexportoptions'] = 'Dibarzhioù ezporzhiañ an alc\'hwezioù';
$labels['attachpubkeymsg'] = 'Stagañ ma alc\'hwez foran';
$labels['keyexportprompt'] = 'Fellout a ra deoc\'h enkorfañ an alc\'hwezioù kuzh er restr alc\'hwezioù OpenPGP enrollet?';
$labels['onlypubkeys'] = 'Ezporzhiañ an alc\'hwezhioù foran hepken';
$labels['withprivkeys'] = 'Ezporzhiañ an alc\'hwezioù kuzh';
$labels['findkey'] = 'Klask war an dafariad(où) alc\'hwezioù';
$labels['keyimportsearchlabel'] = 'Klask war an dafariad(où) alc\'hwezioù';
$labels['arialabelkeyexportoptions'] = 'Dibarzhioù ezporzhiañ an alc\'hwezioù';
$messages['sigvalid'] = 'Sinadur gwiriet a-berzh $sender.';
$messages['sigvalidpartial'] = 'Sinadur gwiriet a-berzh $sender, met ul lodenn eus ar c\'horf n\'eo ket enrineget.';
$messages['siginvalid'] = 'Sinadur didalvoudek a-berzh $sender.';

@ -76,7 +76,6 @@ $labels['signmsg'] = 'Digitálně podepsat tuto zprávu';
$labels['sendunencrypted'] = 'Poslat nešifrovaně';
$labels['enterkeypasstitle'] = 'Zadejte heslo pro klíč';
$labels['enterkeypass'] = 'Heslo je nutné k odemknutí soukromého klíče ($keyid) pro uživatele: $user.';
$labels['arialabelkeyexportoptions'] = 'Možnosti pro export klíčů';
$labels['attachpubkeymsg'] = 'Připojit můj veřejný klíč';
$labels['keyexportprompt'] = 'Chcete do uloženého souboru s klíči OpenPGP zahrnout i tajné klíče?';
$labels['onlypubkeys'] = 'Exportovat pouze veřejné klíče';
@ -87,6 +86,7 @@ $labels['keyimportsearchlabel'] = 'Hledat klíč na keyserveru';
$labels['managekeys'] = 'Spravovat PGP klíče';
$labels['identitymatchingprivkeys'] = 'V klíčence máte $nr odpovídajících soukromých PGP klíčů:';
$labels['identitynoprivkeys'] = 'Klíčenka neobsahuje soukromý PGP klíč identity odesílatele.';
$labels['arialabelkeyexportoptions'] = 'Možnosti pro export klíčů';
$messages['sigvalid'] = 'Ověřený podpis od $sender.';
$messages['sigvalidpartial'] = 'Ověřený podpis od $sender, ale část těla není podepsána.';
$messages['siginvalid'] = 'Nesprávný podpis od $sender.';

@ -76,7 +76,6 @@ $labels['signmsg'] = 'Llofnodi\'r neges yma yn ddigidol';
$labels['sendunencrypted'] = 'Danfon heb amgodi';
$labels['enterkeypasstitle'] = 'Rhowch yr ymadrodd cyfrin';
$labels['enterkeypass'] = 'Mae angen ymadrodd cyfrin i ddatgloi allwedd breifat ($keyid) ar gyfer defnyddiwr: $user:';
$labels['arialabelkeyexportoptions'] = 'Dewisiadau allforio allweddi';
$labels['attachpubkeymsg'] = 'Atodi fy allwedd cyhoeddus';
$labels['keyexportprompt'] = 'Ydych eisiau cynnwys allweddi cyfrinachol yn y ffeil OpenPGP i\'w gadw?';
$labels['onlypubkeys'] = 'Allforio Allweddi Cyhoeddus yn unig';
@ -87,6 +86,7 @@ $labels['keyimportsearchlabel'] = 'Chwilio ar weinydd(wyr) allweddi';
$labels['managekeys'] = 'Rheoli allweddi PGP';
$labels['identitymatchingprivkeys'] = 'Mae gennych $nr allwedd preifat cyfatebol wedi eu storio yn eich cylch allwedd:';
$labels['identitynoprivkeys'] = 'Nid oes gan y danfonwr hwn allwedd preifat PGP wedi ei storio yn eich estyniad cylch allwedd.';
$labels['arialabelkeyexportoptions'] = 'Dewisiadau allforio allweddi';
$messages['sigvalid'] = 'Llofnod wedi ddilysu o $sender.';
$messages['sigvalidpartial'] = 'Llofnod wedi ddilysu o $sender, ond ni arwyddywyd rhan o gorff y neges';
$messages['siginvalid'] = 'Llofnod annilys o $sender.';

@ -76,7 +76,6 @@ $labels['signmsg'] = 'Diese Nachricht digital signieren';
$labels['sendunencrypted'] = 'Unverschlüsselt senden';
$labels['enterkeypasstitle'] = 'Bitte Schlüssel Passwort eingeben';
$labels['enterkeypass'] = 'Ein Passwort wird benötigt um den privaten Schlüssel ($keyid) für Benutzer: $user zu entsperren';
$labels['arialabelkeyexportoptions'] = 'Optionen für Schlüsselexport';
$labels['attachpubkeymsg'] = 'Meinen öffentlichen Schlüssel anfügen';
$labels['keyexportprompt'] = 'Möchten Sie geheime Schlüssel in die gespeicherte OpenPGP-Schlüsseldatei mit aufnehmen?';
$labels['onlypubkeys'] = 'Nur öffentliche Schlüssel exportieren';
@ -87,6 +86,7 @@ $labels['keyimportsearchlabel'] = 'Auf Schlüsselserver(n) suchen';
$labels['managekeys'] = 'PGP-Schlüssel verwalten';
$labels['identitymatchingprivkeys'] = 'Für diesen Absender sind $nr private Schlüssel in Ihrem Schlüsselbund gespeichert:';
$labels['identitynoprivkeys'] = 'Für diesen Absender existiert noch kein PGP Schlüsselpaar in Ihrem Schlüsselbund.';
$labels['arialabelkeyexportoptions'] = 'Optionen für Schlüsselexport';
$messages['sigvalid'] = 'Signatur von $sender wurde erfolgreich überprüft.';
$messages['sigvalidpartial'] = 'Signatur von $sender wurde überprüft, aber ein Teil der Nachricht wurde nicht signiert.';
$messages['siginvalid'] = 'Ungültige Signatur von $sender.';

@ -63,6 +63,7 @@ $labels['keydisable'] = 'Deaktivieren';
$labels['keyrevoke'] = 'Widerrufen';
$labels['keysend'] = 'Öffentlichen Schlüssel versenden';
$labels['keychpass'] = 'Passwort ändern';
$labels['keyadd'] = 'Schlüssel hinzufügen';
$labels['newkeyident'] = 'Identität';
$labels['newkeypass'] = 'Passwort';
$labels['newkeypassconfirm'] = 'Passwort bestätigen';
@ -76,7 +77,6 @@ $labels['signmsg'] = 'Diese Nachricht digital signieren';
$labels['sendunencrypted'] = 'Unverschlüsselt senden';
$labels['enterkeypasstitle'] = 'Bitte Schlüsselpasswort eingeben';
$labels['enterkeypass'] = 'Ein Passwort wird benötigt, um den privaten Schlüssel ($keyid) für Benutzer »$user« zu entsperren.';
$labels['arialabelkeyexportoptions'] = 'Optionen für Schlüsselexport';
$labels['attachpubkeymsg'] = 'Meinen öffentlichen Schlüssel anfügen';
$labels['keyexportprompt'] = 'Möchten Sie geheime Schlüssel in die gespeicherte OpenPGP-Schlüsseldatei mit aufnehmen?';
$labels['onlypubkeys'] = 'Nur öffentliche Schlüssel exportieren';
@ -87,6 +87,9 @@ $labels['keyimportsearchlabel'] = 'Auf Schlüsselserver(n) suchen';
$labels['managekeys'] = 'PGP-Schlüssel verwalten';
$labels['identitymatchingprivkeys'] = 'Sie haben $nr passende private Schlüssel in Ihrem Schlüsselverzeichnis:';
$labels['identitynoprivkeys'] = 'Für diese Absender-Identität ist bis jetzt kein privater PGP-Schlüsselverzeichnis gespeichert.';
$labels['arialabelkeyexportoptions'] = 'Optionen für Schlüsselexport';
$labels['arialabelkeysearchform'] = 'Suchmaske für Schlüssel';
$labels['arialabelkeyoptions'] = 'Schlüsseloptionen';
$messages['sigvalid'] = 'Signatur von $sender wurde erfolgreich überprüft.';
$messages['sigvalidpartial'] = 'Signatur von $sender wurde überprüft, aber ein Teil der Nachricht wurde nicht signiert.';
$messages['siginvalid'] = 'Ungültige Signatur von $sender.';

@ -24,6 +24,7 @@ $labels['keyuserid'] = 'Ταυτότητα Χρήστη';
$labels['keytype'] = 'Τύπος κλειδιού';
$labels['fingerprint'] = 'Δακτυλικό αποτύπωμα';
$labels['subkeys'] = 'Υποκλειδιά';
$labels['keyprops'] = 'Ιδιότητες κλειδιού';
$labels['basicinfo'] = 'Βασικές πληροφορίες';
$labels['userids'] = 'Επιπλέον Χρήστες';
$labels['typepublickey'] = 'δημόσιο κλειδί';
@ -62,16 +63,20 @@ $labels['keydisable'] = 'Απενεργοποίηση';
$labels['keyrevoke'] = 'Απόσυρση';
$labels['keysend'] = 'Αποστολή δημοσίου κλειδιού στο μήνυμα';
$labels['keychpass'] = 'Αλλαγή κωδικού';
$labels['keyadd'] = 'Προσθήκη κλειδιού';
$labels['newkeyident'] = 'Ταυτότητα';
$labels['newkeypass'] = 'Κωδικός Πρόσβασης';
$labels['newkeypassconfirm'] = 'Επιβέβαιωση κωδικού πρόσβασης';
$labels['newkeysize'] = 'Μέγεθος κλειδιού';
$labels['key2048'] = '2048 bits - προκαθορισμένο';
$labels['key4096'] = '4096 bits - ασφαλέστερο';
$labels['keygenerating'] = 'Δημιουργία κλειδιών...';
$labels['encryptionoptions'] = 'Επιλογές κρυπτογράφησης...';
$labels['encryptmsg'] = 'Κρυπτογράφηση του μηνύματος';
$labels['signmsg'] = 'Ψηφιακή υπογραφή του μηνύματος';
$labels['sendunencrypted'] = 'Αποστολή χωρίς κρυπτογράφηση';
$labels['enterkeypasstitle'] = 'Εισάσετε τον κωδικό του κλειδιού';
$labels['enterkeypass'] = 'Απαιτείται ένας κωδικός για το ξεκλειδωμα του κρυφού κλειδιού ($keyid) του χρήστη: $user.';
$labels['arialabelkeyexportoptions'] = 'Επιλογές εξαγωγής κλειδιών';
$labels['attachpubkeymsg'] = 'Επισύναψη του δημόσιου κλειδιού μου';
$labels['keyexportprompt'] = 'Θέλετε να συμπεριληφθούν τα μυστικά κλειδικά στο αποθηκευμένο αρχείο κλειδιών OpenPGP;';
$labels['onlypubkeys'] = 'Εξαγωγή Δημοσίων Κλειδιών Μόνο';
@ -79,6 +84,9 @@ $labels['withprivkeys'] = 'Εξαγωγή Μυστικών Κλειδιών';
$labels['findkey'] = 'Αναζήτηση στον(ους) εξυπηρετητή(ές) κλειδιών';
$labels['keyimportlabel'] = 'Εισαγωγή από αρχείο';
$labels['keyimportsearchlabel'] = 'Αναζήτηση στον(ους) εξυπηρετητή(ές) κλειδιών';
$labels['managekeys'] = 'Διαχείριση PGP κλειδιών';
$labels['arialabelkeyexportoptions'] = 'Επιλογές εξαγωγής κλειδιών';
$labels['arialabelkeyoptions'] = 'Επιλογές κλειδιών';
$messages['sigvalid'] = 'Επαληθευμένη υπογραφή από τον $sender.';
$messages['sigvalidpartial'] = 'Επαληθευμένη υπογραφή από τον $sender, αλλά τμήμα του κειμένου δεν έχει υπογραφεί.';
$messages['siginvalid'] = 'Άκυρη υπογραφή από τον $sender.';
@ -88,14 +96,17 @@ $messages['sigerror'] = 'Ανεπαλήθευτη υπογραφή. Εσωτερ
$messages['decryptok'] = 'Το μήνυμα αποκρυπτογραφήθηκε.';
$messages['decrypterror'] = 'Η αποκρυπτογράφηση απέτυχε.';
$messages['decryptnokey'] = 'Η αποκρυπτογράφηση απέτυχε. Το ιδιωτικό κλειδί δε βρέθηκε. Ταυτότητα κλειδιού: $keyid.';
$messages['decryptbadpass'] = 'Η αποκρυπτογράφηση απέτυχε. Μη έγκυρος κωδικός πρόσβασης.';
$messages['decryptnopass'] = 'Η αποκρυπτογράφηση απέτυχε. Απαιτείται ο κωδικός του κλειδιού.';
$messages['decryptpartial'] = 'Το μήνυμα αποκρυπτογραφήθηκε, αλλά τμήμα του μηνύματος δεν ήταν κρυπτογραφημένο.';
$messages['signerror'] = 'Η υπογραφή απέτυχε.';
$messages['signnokey'] = 'Η υπογραφή απέτυχε. Το ιδιωτικό κλειδί δε βρέθηκε.';
$messages['signbadpass'] = 'Η υπογραφή απέτυχε. Λάθος κωδικός πρόσβασης.';
$messages['signnopass'] = 'Η υπογραφή απέτυχε. Απαιτείται ο κωδικός του κλειδιού.';
$messages['encrypterror'] = 'Η κρυπτογράφηση απέτυχε.';
$messages['encryptnokey'] = 'Η κρυπτογράφηση απέτυχε. Το δημόσιο κλειδί του $email δε βρέθηκε.
';
$messages['encryptnoprivkey'] = 'Η κρυπτογράφηση απέτυχε. Το ιδιωτικό κλειδί δε βρέθηκε.';
$messages['nokeysfound'] = 'Δε βρέθηκαν κλειδιά';
$messages['keynotfound'] = 'Το κλειδί δε βρέθηκε!';
$messages['keyopenerror'] = 'Αδυναμία ανάκτησης των πληροφοριών του κλειδιού! Εσωτερικό σφάλμα.';
@ -112,5 +123,6 @@ $messages['passwordsdiffer'] = 'Οι κωδικοί δεν ταιριάζουν
$messages['keygenerateerror'] = 'Αποτυχία δημιουργίας ζεύγους κλειδιών.';
$messages['keygeneratesuccess'] = 'Το ζεύγος κλειδιών δημιουργήθηκε και εισήχθη επιτυχώς.';
$messages['keygennosupport'] = 'To πρόγραμμα περιήγησής σας δεν υποστηρίζει κρυπτογράφηση. Δεν ήταν δυνατή η δημιουργία ενός ζεύγος κλειδιών!';
$messages['noidentselected'] = 'Πρέπει να επιλέξετε τουλάχιστον μια ταυτότητα για το κλειδί!';
$messages['nonameident'] = 'Η Ταυτότητα πρέπει να έχει ορισμένο όνομα χρήστη!';
?>

@ -76,7 +76,6 @@ $labels['signmsg'] = 'Digitally sign this message';
$labels['sendunencrypted'] = 'Send unencrypted';
$labels['enterkeypasstitle'] = 'Enter key passphrase';
$labels['enterkeypass'] = 'A passphrase is needed to unlock the secret key ($keyid) for user: $user.';
$labels['arialabelkeyexportoptions'] = 'Keys export options';
$labels['attachpubkeymsg'] = 'Attach my public key';
$labels['keyexportprompt'] = 'Do you want to include secret keys in the saved OpenPGP keys file?';
$labels['onlypubkeys'] = 'Export Public Keys Only';
@ -87,6 +86,7 @@ $labels['keyimportsearchlabel'] = 'Search on key server(s)';
$labels['managekeys'] = 'Manage PGP keys';
$labels['identitymatchingprivkeys'] = 'You have $nr matching PGP private keys stored in your keyring:';
$labels['identitynoprivkeys'] = 'This sender identity doesn\'t yet have a PGP private key stored in your keyring.';
$labels['arialabelkeyexportoptions'] = 'Keys export options';
$messages['sigvalid'] = 'Verified signature from $sender.';
$messages['sigvalidpartial'] = 'Verified signature from $sender, but part of the body was not signed.';
$messages['siginvalid'] = 'Invalid signature from $sender.';

@ -66,6 +66,7 @@ $labels['keydisable'] = 'Disable';
$labels['keyrevoke'] = 'Revoke';
$labels['keysend'] = 'Send public key in a message';
$labels['keychpass'] = 'Change password';
$labels['keyadd'] = 'Add key';
$labels['newkeyident'] = 'Identity';
$labels['newkeypass'] = 'Password';
@ -82,7 +83,6 @@ $labels['sendunencrypted'] = 'Send unencrypted';
$labels['enterkeypasstitle'] = 'Enter key passphrase';
$labels['enterkeypass'] = 'A passphrase is needed to unlock the secret key ($keyid) for user: $user.';
$labels['arialabelkeyexportoptions'] = 'Keys export options';
$labels['attachpubkeymsg'] = 'Attach my public key';
$labels['keyexportprompt'] = 'Do you want to include secret keys in the saved OpenPGP keys file?';
@ -96,6 +96,10 @@ $labels['managekeys'] = 'Manage PGP keys';
$labels['identitymatchingprivkeys'] = 'You have $nr matching PGP private keys stored in your keyring:';
$labels['identitynoprivkeys'] = 'This sender identity doesn\'t yet have a PGP private key stored in your keyring.';
$labels['arialabelkeyexportoptions'] = 'Keys export options';
$labels['arialabelkeysearchform'] = 'Keys search form';
$labels['arialabelkeyoptions'] = 'Key options';
$messages = array();
$messages['sigvalid'] = 'Verified signature from $sender.';
$messages['sigvalidpartial'] = 'Verified signature from $sender, but part of the body was not signed.';

@ -72,7 +72,6 @@ $labels['encryptmsg'] = 'Encriptar este mensaje.';
$labels['signmsg'] = 'Firmar digitalmente este mensaje';
$labels['enterkeypasstitle'] = 'Escriba la frase de contraseña';
$labels['enterkeypass'] = 'Se necesita una contraseña para desbloquear la clave secreta ($keyid) para el usuario: $user.';
$labels['arialabelkeyexportoptions'] = 'Opciones de claves de exportación';
$labels['attachpubkeymsg'] = 'Adjuntar mi clave pública';
$labels['keyexportprompt'] = '¿Quiere incluir claves secretas en el archivo guardado de claves OpenPGP?';
$labels['onlypubkeys'] = 'Exportar Sólo las Claves Públicas';
@ -80,6 +79,7 @@ $labels['withprivkeys'] = 'Exportar las Claves Secretas';
$labels['findkey'] = 'Buscar en servidor(es) de claves';
$labels['keyimportlabel'] = 'Importar desde archivo';
$labels['keyimportsearchlabel'] = 'Buscar en servidor(es) de claves';
$labels['arialabelkeyexportoptions'] = 'Opciones de claves de exportación';
$messages['sigvalid'] = 'Firma verificada por $sender.';
$messages['sigvalidpartial'] = 'Firma verificada de $sender, pero parte parte del cuerpo no estaba firmado.';
$messages['siginvalid'] = 'Firma inválida por $sender.';

@ -76,7 +76,6 @@ $labels['signmsg'] = 'Digitalki sinatu mezu hau';
$labels['sendunencrypted'] = 'Bidali zifratu gabe';
$labels['enterkeypasstitle'] = 'Sartu gakoaren pasaesaldia';
$labels['enterkeypass'] = 'Pasaesaldi bat behar da erabiltzaile honen gako sekretua ($keyid) desblokeatzeko: $user';
$labels['arialabelkeyexportoptions'] = 'Gakoen esportazio aukerak';
$labels['attachpubkeymsg'] = 'Erantsi nire gako publikoa';
$labels['keyexportprompt'] = 'Nahi al duzu gako sekretuak sartzea gordetako OpenPGP gakoen fitxategian?';
$labels['onlypubkeys'] = 'Esportatu bakarrik gako publikoak';
@ -85,6 +84,7 @@ $labels['findkey'] = 'Bilatu gako zerbitzari(et)an';
$labels['keyimportlabel'] = 'Inportatu fitxategitik';
$labels['keyimportsearchlabel'] = 'Bilatu gako zerbitzari(et)an';
$labels['managekeys'] = 'Kudeatu PGP gakoak';
$labels['arialabelkeyexportoptions'] = 'Gakoen esportazio aukerak';
$messages['sigvalid'] = '$sender-en sinadura egiaztatuta';
$messages['sigvalidpartial'] = '$sender-en sinadura egiaztatuta, baina testu-gorputzaren zati bat ez dago sinatua.';
$messages['siginvalid'] = '$sender-en sinadura baliogabea.';

@ -75,13 +75,15 @@ $labels['encryptmsg'] = 'Salaa tämä viesti';
$labels['signmsg'] = 'Lisää digitaalinen allekirjoitus tähän viestiin';
$labels['sendunencrypted'] = 'Lähetä salaamaton';
$labels['enterkeypasstitle'] = 'Anna tunnuslause';
$labels['arialabelkeyexportoptions'] = 'Avaimien vientivalinnat';
$labels['attachpubkeymsg'] = 'Liitä julkinen avaimeni';
$labels['onlypubkeys'] = 'Vie vain julkiset avaimet';
$labels['findkey'] = 'Etsi avainpalvelimilta';
$labels['keyimportlabel'] = 'Tuo tiedostosta';
$labels['keyimportsearchlabel'] = 'Etsi avainpalvelimilta';
$labels['managekeys'] = 'Hallinnoi PGP-avaimia';
$labels['arialabelkeyexportoptions'] = 'Avaimien vientivalinnat';
$messages['sigvalid'] = 'Vahvistettu allekirjoitus lähettäjältä $sender.';
$messages['sigvalidpartial'] = 'Vahvistettu allekirjoitus lähettäjältä $sender, mutta viestisisällön osaa ei allekirjoitettu. ';
$messages['siginvalid'] = 'Virheellinen allekirjoitus lähettäjältä $sender.';
$messages['sigunverified'] = 'Vahvistamaton allekirjoitus. Varmennetta ei ole vahvistettu. Varmenteen tunniste: $keyid.';
$messages['signokey'] = 'Vahvistamaton allekirjoitus. Julkista avainta ei löydy. Avaimen tunniste: $keyid.';
@ -89,17 +91,22 @@ $messages['sigerror'] = 'Vahvistamaton allekirjoitus. Sisäinen virhe.';
$messages['decryptok'] = 'Viestin salaus purettu.';
$messages['decrypterror'] = 'Salauksen purkaminen epäonnistui.';
$messages['decryptnokey'] = 'Salauksen purkaminen epäonnistui. Yksityistä avainta ei löytynyt. Avaimen tunniste: $keyid.';
$messages['decryptbadpass'] = 'Salauksen purkaminen epäonnistui. Väärä salasana.';
$messages['decryptnopass'] = 'Salauksen purkaminen epäonnistui. Avaimen salasana vaaditaan.';
$messages['decryptpartial'] = 'Viestin salaus purettiin, mutta osa viestisisällöstä ei ollut salattu.';
$messages['signerror'] = 'Allekirjoittaminen epäonnistui.';
$messages['signnokey'] = 'Allekirjoittaminen epäonnistui. Yksityistä avainta ei löytynyt.';
$messages['signbadpass'] = 'Allekirjoitus epäonnistui. Virheellinen salasana.';
$messages['signnopass'] = 'Allekirjoitus epäonnistui. Avaimen salasana vaaditaan.';
$messages['encrypterror'] = 'Salaaminen epäonnistui.';
$messages['encryptnokey'] = 'Salaaminen epäonnistui. Osoitteelle $email ei löytynyt julkista avainta.';
$messages['encryptnoprivkey'] = 'Salaus epäonnistui. Yksityistä avainta ei löytynyt.';
$messages['nokeysfound'] = 'Avaimia ei löytynyt';
$messages['keynotfound'] = 'Avainta ei löytynyt!';
$messages['keyopenerror'] = 'Avaintietojen noutaminen ei onnistu! Sisäinen virhe.';
$messages['keylisterror'] = 'Avainten listaaminen ei onnistu! Sisäinen virhe.';
$messages['keysimportfailed'] = 'Avaimen tuominen epäonnistui! Sisäinen virhe.';
$messages['keysimportsuccess'] = 'Avain tai avaimet tuotiin onnistuneesti. Tuotiin: $new, muuttumaton: $old.';
$messages['keyremoving'] = 'Poistetaan avaimia...';
$messages['keyremoveconfirm'] = 'Oletko varma että haluat poistaa valitut avaimet?';
$messages['keyremovesuccess'] = 'Avaimet poistettu onnistuneesti';
@ -109,5 +116,6 @@ $messages['passwordsdiffer'] = 'Salasanat eivät täsmää!';
$messages['keygenerateerror'] = 'Avainparin luominen epäonnistui';
$messages['keygeneratesuccess'] = 'Avainpari luotiin ja tuotiin onnistuneesti.';
$messages['keygennosupport'] = 'Selaimesi ei tue salaustekniikkaa. Avainparin luominen ei onnistu!';
$messages['noidentselected'] = 'Sinun täytyy valita vähintään yksi identiteetti avaimelle!';
$messages['nonameident'] = 'Identiteetillä tulee olla käyttäjänimi määritettynä!';
?>

@ -70,8 +70,8 @@ $labels['encryptmsg'] = 'Brongla hesi boð';
$labels['signmsg'] = 'Undirskriva hesi boð';
$labels['enterkeypasstitle'] = 'Skriva loyniorð';
$labels['enterkeypass'] = 'Tað er tørvur á einum loyniorðið fyri at stongja upp loyndar-lykilin ($keyid) hjá brúkara:';
$labels['arialabelkeyexportoptions'] = 'Lykla út flytingar møguleikar';
$labels['keyimportlabel'] = 'Inflyt frá fílu';
$labels['arialabelkeyexportoptions'] = 'Lykla út flytingar møguleikar';
$messages['sigvalid'] = 'Váttað undirskrift frá $sender.';
$messages['siginvalid'] = 'Ógildig undirskrift frá $sender.';
$messages['sigunverified'] = 'Óvátta undirskrift: skjal er ikki vátta. Skjal ID: $keyid.';

@ -25,20 +25,20 @@ $labels['keytype'] = 'Type de clé';
$labels['fingerprint'] = 'Empreinte';
$labels['subkeys'] = 'Sous-clés';
$labels['keyprops'] = 'Propriétés de la clé';
$labels['basicinfo'] = 'Informations de base';
$labels['basicinfo'] = 'Renseignements de base';
$labels['userids'] = 'Utilisateurs supplémentaires';
$labels['typepublickey'] = 'Clé publique';
$labels['typepublickey'] = 'clé publique';
$labels['typekeypair'] = 'biclé';
$labels['keyattfound'] = 'Ce courriel contient une/des clé(s) PGP jointe(s).';
$labels['keyattimport'] = 'Importer une/des clé(s)';
$labels['keyattfound'] = 'Ce courriel contient des clés PGP jointes.';
$labels['keyattimport'] = 'Importer des clés';
$labels['typesign'] = 'Signer';
$labels['typeencrypt'] = 'Chiffrer';
$labels['typecert'] = 'Certifier';
$labels['typeauth'] = 'Authentification';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorithme ';
$labels['subkeyalgo'] = 'Algorithme';
$labels['subkeycreated'] = 'Créée';
$labels['subkeyexpires'] = 'Expire';
$labels['subkeyexpires'] = 'Expire le';
$labels['subkeyusage'] = 'Utilisation';
$labels['expiresnever'] = 'jamais';
$labels['unknown'] = 'inconnu';
@ -57,26 +57,26 @@ $labels['wholesession'] = 'la session complète';
$labels['createkeys'] = 'Créer une nouvelle biclé';
$labels['importkeys'] = 'Importer des clés';
$labels['exportkeys'] = 'Exporter des clés';
$labels['keyactions'] = 'Actions des clés...';
$labels['keyactions'] = 'Actions des clés';
$labels['keyremove'] = 'Supprimer';
$labels['keydisable'] = 'Désactiver';
$labels['keyrevoke'] = 'Révoquer';
$labels['keysend'] = 'Envoyer la clé publique dans un courriel';
$labels['keychpass'] = 'Changer le mot de passe';
$labels['keyadd'] = 'Ajouter une clé';
$labels['newkeyident'] = 'Identité';
$labels['newkeypass'] = 'Mot de passe';
$labels['newkeypassconfirm'] = 'Confirmer le mot de passe';
$labels['newkeysize'] = 'Taille de la clé';
$labels['key2048'] = '2048 bits - par défaut';
$labels['key4096'] = '4096 bits - plus sécurisé';
$labels['keygenerating'] = 'Génération des clés...';
$labels['encryptionoptions'] = 'Options de chiffrement...';
$labels['key2048'] = '2048 bits par défaut';
$labels['key4096'] = '4096 bits plus sécurisé';
$labels['keygenerating'] = 'Génération des clés';
$labels['encryptionoptions'] = 'Options de chiffrement';
$labels['encryptmsg'] = 'Chiffrer ce courriel';
$labels['signmsg'] = 'Signer numériquement ce courriel';
$labels['sendunencrypted'] = 'Envoyer non chiffré';
$labels['enterkeypasstitle'] = 'Saisir la phrase de passe de la clé';
$labels['enterkeypass'] = 'Un phrase de passe est nécessaire pour débloquer la clé secrète ($keyid) pour lutilisateur : $user.';
$labels['arialabelkeyexportoptions'] = 'Options dexportation des clés';
$labels['attachpubkeymsg'] = 'Joindre ma clé publique';
$labels['keyexportprompt'] = 'Voulez-vous inclure les clés secrètes dans le fichier des clés OpenPGP enregistrées?';
$labels['onlypubkeys'] = 'Exporter seulement les clés publiques';
@ -87,6 +87,9 @@ $labels['keyimportsearchlabel'] = 'Rechercher sur les serveurs de clés';
$labels['managekeys'] = 'Gérer les clés PGP';
$labels['identitymatchingprivkeys'] = 'Vous avez $nr clés PGP privées correspondantes enregistrées dans votre trousseau :';
$labels['identitynoprivkeys'] = 'Cette identité dexpéditeur na pas encore de clé PGP privée enregistrée dans votre trousseau.';
$labels['arialabelkeyexportoptions'] = 'Options dexportation des clés';
$labels['arialabelkeysearchform'] = 'Formulaire de recherche de clés';
$labels['arialabelkeyoptions'] = 'Options des clés';
$messages['sigvalid'] = 'Signature vérifiée de $sender.';
$messages['sigvalidpartial'] = 'La signature de $sender a été vérifiée, mais une partie du corps nétait pas signée.';
$messages['siginvalid'] = 'Signature invalide de $sender.';
@ -107,23 +110,23 @@ $messages['signnopass'] = 'Échec de signature. Le mot de passe de la clé est e
$messages['encrypterror'] = 'Échec de chiffrement.';
$messages['encryptnokey'] = 'Échec de chiffrement. La clé publique est introuvable pour $email.';
$messages['encryptnoprivkey'] = 'Échec de chiffrement. La clé privée est introuvable.';
$messages['nokeysfound'] = 'Aucune clé trouvée';
$messages['keynotfound'] = 'La clé est introuvable!';
$messages['keyopenerror'] = 'Impossible dobtenir les informations sur la clé! Erreur interne.';
$messages['keylisterror'] = 'Impossible de lister les clés! Erreur interne.';
$messages['keysimportfailed'] = 'Impossible dimporter les clés! Erreur interne.';
$messages['nokeysfound'] = 'Aucune clé na été trouvée';
$messages['keynotfound'] = 'La clé est introuvable';
$messages['keyopenerror'] = 'Impossible dobtenir les Renseignements de la clé. Erreur interne.';
$messages['keylisterror'] = 'Impossible de lister les clés. Erreur interne.';
$messages['keysimportfailed'] = 'Impossible dimporter les clés. Erreur interne.';
$messages['keysimportsuccess'] = 'Importation de clé réussie. Importées : $new, non modifiées : $old.';
$messages['keyremoving'] = 'Suppression de des clés...';
$messages['keyremoving'] = 'Suppression de des clés';
$messages['keyremoveconfirm'] = 'Voulez-vous vraiment supprimer les clés sélectionnées?';
$messages['keyremovesuccess'] = 'Clés supprimées avec succès';
$messages['keyremoveerror'] = 'Impossible de supprimer les clés sélectionnées';
$messages['keyimporttext'] = 'Vous pouvez importer des clés privées et publiques ou des signatures de révocation au format ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Vous pouvez chercher des clés publiques par identifiant de clé, nom dutilisateur ou adresse courriel, et ensuite les importer directement.';
$messages['formerror'] = 'Veuillez remplir le formulaire. Tous les champs sont obligatoires!';
$messages['passwordsdiffer'] = 'Les mots de passe ne correspondent pas!';
$messages['formerror'] = 'Veuillez remplir le formulaire. Tous les champs sont requis.';
$messages['passwordsdiffer'] = 'Les mots de passe ne correspondent pas';
$messages['keygenerateerror'] = 'La génération de la biclé a échoué';
$messages['keygeneratesuccess'] = 'Une biclé a été générée et importée avec succès.';
$messages['keygennosupport'] = 'Votre navigateur ne prend pas en charge le chiffrement. Activez-le pour générer une biclé!';
$messages['noidentselected'] = 'Vous devez choisir au moins une identité pour la clé!';
$messages['nonameident'] = 'Un nom dutilisateur doit être défini pour lidentité!';
$messages['keygennosupport'] = 'Votre navigateur ne prend pas en charge le chiffrement. Activez-le pour générer une biclé';
$messages['noidentselected'] = 'Vous devez choisir au moins une identité pour la clé';
$messages['nonameident'] = 'Un nom dutilisateur doit être défini pour lidentité';
?>

@ -76,7 +76,6 @@ $labels['signmsg'] = 'חתימה דיגיטלית של הודעה זו';
$labels['sendunencrypted'] = 'לשלוח ללא הצפנה';
$labels['enterkeypasstitle'] = 'נא להקיש צרור אותיות וסימנים ליצירת מפתח';
$labels['enterkeypass'] = 'יש להקיש צרור אותיות וסימנים שנבחרו קודם כדי לשחרר נעילה של המפתח הסודי (keyid$) של משתמש user$';
$labels['arialabelkeyexportoptions'] = 'אפשרויות ייצוא של מפתחות';
$labels['attachpubkeymsg'] = 'צירוף המפתח הציבורי שלי';
$labels['keyexportprompt'] = 'האם ברצונך לכלול מפתחות סודיים בקובץ השמור של המפתחות ?';
$labels['onlypubkeys'] = 'ייצוא מפתחות ציבוריים בלבד';
@ -87,6 +86,7 @@ $labels['keyimportsearchlabel'] = 'חיפוש בשרת(י) מפתח';
$labels['managekeys'] = 'ניהול מפתחות הצפנה';
$labels['identitymatchingprivkeys'] = 'קיימים $nr מפתחות הצפנה פרטיים תואמים בצרור המפתחות שלך';
$labels['identitynoprivkeys'] = 'לזהות השולחת אין עדיין מפתח הצפנה פרטי בצרור המפתחות שלך';
$labels['arialabelkeyexportoptions'] = 'אפשרויות ייצוא של מפתחות';
$messages['sigvalid'] = 'אימות חתימה מ sender$';
$messages['sigvalidpartial'] = 'אומתה חתימה של sender$ אבל חלק מגוף ההודעה לא נחתם';
$messages['siginvalid'] = 'חתימה לא תקינה מ sender$';

@ -68,13 +68,13 @@ $labels['encryptionoptions'] = 'Mogućnosti šifriranja...';
$labels['encryptmsg'] = 'Šifriraj ovu poruku';
$labels['signmsg'] = 'Digitalno potpiši ovu poruku';
$labels['sendunencrypted'] = 'Pošalji nešifrirano';
$labels['arialabelkeyexportoptions'] = 'Mogućnosti izvoza ključeva';
$labels['attachpubkeymsg'] = 'Priloži moj javni ključ';
$labels['keyexportprompt'] = 'Želite li uključiti tajne ključeve iz datoteke OpenPGP ključeva?';
$labels['onlypubkeys'] = 'Izvezi samo javne ključeve';
$labels['withprivkeys'] = 'Izvezi tajne ključeve';
$labels['keyimportlabel'] = 'Uvezi iz datoteke';
$labels['managekeys'] = 'Upravljaj PGP ključevima';
$labels['arialabelkeyexportoptions'] = 'Mogućnosti izvoza ključeva';
$messages['decryptok'] = 'Poruka dešifrirana.';
$messages['decrypterror'] = 'Dešifriranje neuspješno.';
$messages['decryptnokey'] = 'Dešifriranje neuspješno. Nije pronađen privatni ključ. ID ključa: $keyid.';

@ -63,6 +63,7 @@ $labels['keydisable'] = 'Tilt';
$labels['keyrevoke'] = 'Visszavon';
$labels['keysend'] = 'Kűld el a nyilvános kulcsot az üzenetben';
$labels['keychpass'] = 'Jelszó módosítás';
$labels['keyadd'] = 'Kulcs hozzáadása';
$labels['newkeyident'] = 'Azonosító';
$labels['newkeypass'] = 'Jelszó';
$labels['newkeypassconfirm'] = 'Jelszó megerősítése';
@ -76,7 +77,6 @@ $labels['signmsg'] = 'Ennek az üzenetnek a digtális aláírása';
$labels['sendunencrypted'] = 'Küldés titkosítatlanul';
$labels['enterkeypasstitle'] = 'Írd be a jelmondatot';
$labels['enterkeypass'] = 'Jelmondat(passphrase) szükséges a titkos kulcs ($keyid) felhasznlóhoz ($user) feloldásához. ';
$labels['arialabelkeyexportoptions'] = 'Kulcsok exportálásához opciók';
$labels['attachpubkeymsg'] = 'A nyilvános kulcsom csatolása';
$labels['keyexportprompt'] = 'A mentett OpenPGP kulcsoknál legyenek-e tárolva a titkos kulcsok is?';
$labels['onlypubkeys'] = 'Csak a nyilvános kulcsok exportálása';
@ -87,6 +87,9 @@ $labels['keyimportsearchlabel'] = 'Keresés a kulcs szerver(ek)en';
$labels['managekeys'] = 'PGP kulcsok kezelése';
$labels['identitymatchingprivkeys'] = '$nr egyező PGP privát kulcs van a kulcskarikádon: ';
$labels['identitynoprivkeys'] = 'Ennek küldőnek még nincs meg a PGP prívát kulcsa a kulcskarikádon.';
$labels['arialabelkeyexportoptions'] = 'Kulcsok exportálásához opciók';
$labels['arialabelkeysearchform'] = 'Kulcs kereső űrlap';
$labels['arialabelkeyoptions'] = 'Kulcs opciók';
$messages['sigvalid'] = 'A $sender feladó aláírása ellenőrízve.';
$messages['sigvalidpartial'] = 'A $sender feladó aláírása ellenőrízve, de részei az üzenetnek nem voltak aláírva.';
$messages['siginvalid'] = 'Érvénytelen aláírás a következő feladótól: $sender';

@ -72,7 +72,6 @@ $labels['signmsg'] = 'Signar digitalmente iste message';
$labels['sendunencrypted'] = 'Inviar sin cryptation';
$labels['enterkeypasstitle'] = 'Entra le contrasigno del clave';
$labels['enterkeypass'] = 'Un contrasigno es necessari pro disblocar le clave secrete ($keyid) pro le usator: $user.';
$labels['arialabelkeyexportoptions'] = 'Optiones de exportation de claves';
$labels['attachpubkeymsg'] = 'Attachar mi clave public';
$labels['keyexportprompt'] = 'Includer le claves secrete in le file de claves OpenPGP a salveguardar?';
$labels['onlypubkeys'] = 'Exportar claves public solmente';
@ -80,6 +79,7 @@ $labels['withprivkeys'] = 'Exportar claves secrete';
$labels['findkey'] = 'Cercar in servitor(es) de claves';
$labels['keyimportlabel'] = 'Importar ab file';
$labels['keyimportsearchlabel'] = 'Cercar in servitor(es) de claves';
$labels['arialabelkeyexportoptions'] = 'Optiones de exportation de claves';
$messages['sigvalid'] = 'Signatura de $sender verificate.';
$messages['sigvalidpartial'] = 'Signatura de $sender verificate, ma un parte del texto non ha essite signate.';
$messages['siginvalid'] = 'Signatura de $sender invalide.';

@ -76,7 +76,6 @@ $labels['signmsg'] = 'Tandatantani pesan ini';
$labels['sendunencrypted'] = 'Kirim dengan tidak di enskripsi';
$labels['enterkeypasstitle'] = 'Masukkan frasa sandi kunci';
$labels['enterkeypass'] = 'Frasa sandi diperlukan untuk membuka kunci rahasia ($keyid) untuk pengguna: $user.';
$labels['arialabelkeyexportoptions'] = 'Opsi ekspor kunci';
$labels['attachpubkeymsg'] = 'Lampirkan kunci publik saya';
$labels['keyexportprompt'] = 'Apakah Anda ingin menyertakan kunci rahasia dalam berkas kunci OpenPGP yang disimpan?';
$labels['onlypubkeys'] = 'Ekspor Kunci Publik Saja';
@ -84,6 +83,7 @@ $labels['withprivkeys'] = 'Ekspor Kunci Rahasia';
$labels['findkey'] = 'Cari pada server kunci';
$labels['keyimportlabel'] = 'Impor dari berkas';
$labels['keyimportsearchlabel'] = 'Cari pada server kunci';
$labels['arialabelkeyexportoptions'] = 'Opsi ekspor kunci';
$messages['sigvalid'] = 'Tanda tangan terverifikasi dari $sender.';
$messages['sigvalidpartial'] = 'Tanda tangan terverifikasi dari $sender, tapi sebagian pesan tidak ditandatangani.';
$messages['siginvalid'] = 'Tanda tangan tak valid dari $sender.';

@ -76,7 +76,6 @@ $labels['signmsg'] = 'Firma digitalmente questo messaggio';
$labels['sendunencrypted'] = 'Invia non cifrato';
$labels['enterkeypasstitle'] = 'Inserisci frase sicura della chiave';
$labels['enterkeypass'] = 'È richiesta una frase segreta per sbloccare la chiave ($keyid) per l\'utente: $user.';
$labels['arialabelkeyexportoptions'] = 'Opzioni esportazione chiave';
$labels['attachpubkeymsg'] = 'Allega la mia chiave pubblica';
$labels['keyexportprompt'] = 'Vuoi includere le chiavi segrete nel file di chiavi OpenPGP salvato?';
$labels['onlypubkeys'] = 'Esporta solo chiavi pubbliche';
@ -87,6 +86,7 @@ $labels['keyimportsearchlabel'] = 'Cerca nei server';
$labels['managekeys'] = 'Gestisci chiavi PGP';
$labels['identitymatchingprivkeys'] = 'Hai $nr chiavi private PGP corrispondenti memorizzate nel tuo portachiavi:';
$labels['identitynoprivkeys'] = 'L\'identità del mittente non ha ancora una chiave privata PGP memorizzata nel tuo portachiavi.';
$labels['arialabelkeyexportoptions'] = 'Opzioni esportazione chiave';
$messages['sigvalid'] = 'Firma da $sender verificata.';
$messages['sigvalidpartial'] = 'Firma da $sender verificata, ma parte del corpo del messaggio non è firmata.';
$messages['siginvalid'] = 'Firma non valida da $sender.';

@ -63,6 +63,7 @@ $labels['keydisable'] = '無効化';
$labels['keyrevoke'] = '廃止';
$labels['keysend'] = 'メッセージ中に公開鍵を送信';
$labels['keychpass'] = 'パスワードを変更';
$labels['keyadd'] = 'キーを追加';
$labels['newkeyident'] = '識別情報';
$labels['newkeypass'] = 'パスワード';
$labels['newkeypassconfirm'] = 'パスワードの確認';
@ -76,7 +77,6 @@ $labels['signmsg'] = 'このメッセージに電子署名';
$labels['sendunencrypted'] = '暗号化しないで送信';
$labels['enterkeypasstitle'] = 'キーのパスフレーズを入力';
$labels['enterkeypass'] = 'ユーザー: $userの秘密鍵($keyid)の解除にパスフレーズが必要です。';
$labels['arialabelkeyexportoptions'] = 'キーのエクスポートのオプション';
$labels['attachpubkeymsg'] = '公開鍵を添付';
$labels['keyexportprompt'] = '保存したOpenPGPのキーファイルに秘密鍵も含めますか?';
$labels['onlypubkeys'] = '公開鍵だけエクスポート';
@ -87,6 +87,9 @@ $labels['keyimportsearchlabel'] = 'キーサーバーで検索';
$labels['managekeys'] = 'PGPの鍵を管理';
$labels['identitymatchingprivkeys'] = 'キーリングに$nr個の合致するPGPのプライベートキー:';
$labels['identitynoprivkeys'] = 'この送信者の識別へのPGP秘密鍵はキーリングにまだありません。';
$labels['arialabelkeyexportoptions'] = 'キーのエクスポートのオプション';
$labels['arialabelkeysearchform'] = 'キーを検索:';
$labels['arialabelkeyoptions'] = 'キーのオプション';
$messages['sigvalid'] = '$senderからの署名を検証しました。';
$messages['sigvalidpartial'] = '$senderからの署名を検証しましたが、本文の一部は署名されていません。';
$messages['siginvalid'] = '$senderからの署名は正しくありません。';

@ -24,6 +24,7 @@ $labels['keyuserid'] = '사용자 ID';
$labels['keytype'] = '키 유형';
$labels['fingerprint'] = '지문';
$labels['subkeys'] = '하위 키';
$labels['keyprops'] = '키 속성';
$labels['basicinfo'] = '기본 정보';
$labels['userids'] = '추가 사용자';
$labels['typepublickey'] = '공개 키';
@ -62,16 +63,20 @@ $labels['keydisable'] = '비활성화';
$labels['keyrevoke'] = '폐기';
$labels['keysend'] = '메시지에 공개 키 전송';
$labels['keychpass'] = '암호 변경';
$labels['keyadd'] = '키 추가';
$labels['newkeyident'] = '신원';
$labels['newkeypass'] = '암호';
$labels['newkeypassconfirm'] = '암호 확인';
$labels['newkeysize'] = '키 크기';
$labels['key2048'] = '2048 비트 - 기본';
$labels['key4096'] = '4096 비트 - 보안 강화';
$labels['keygenerating'] = '키를 생성하는 중...';
$labels['encryptionoptions'] = '암호화 옵션...';
$labels['encryptmsg'] = '이 메시지를 암호화';
$labels['signmsg'] = '이 메시지에 디지털 서명 추가';
$labels['sendunencrypted'] = '암호화하지 않은 채로 전송';
$labels['enterkeypasstitle'] = '키 암호문 입력';
$labels['enterkeypass'] = '다음 사용자에 대한 비밀 키($keyid)의 잠금을 해제하려면 암호문이 필요합니다: $user.';
$labels['arialabelkeyexportoptions'] = '키 내보내기 옵션';
$labels['attachpubkeymsg'] = '내 공개 키 첨부';
$labels['keyexportprompt'] = '암호 키를 저장된 OpenPGP 키 파일에 포함하시겠습니까?';
$labels['onlypubkeys'] = '공개 키만 내보내기';
@ -79,6 +84,12 @@ $labels['withprivkeys'] = '비밀 키 내보내기';
$labels['findkey'] = '키 서버에서 검색';
$labels['keyimportlabel'] = '파일에서 가져오기';
$labels['keyimportsearchlabel'] = '키 서버에서 검색';
$labels['managekeys'] = 'PGP 키 관리';
$labels['identitymatchingprivkeys'] = '열쇠고리에 저장된 PGP 개인 키 중 $nr개 일치하는 키가 있습니다:';
$labels['identitynoprivkeys'] = '현재 보내는 사람 신원에는 열쇠고리에 저장된 PGP 개인 키가 없습니다.';
$labels['arialabelkeyexportoptions'] = '키 내보내기 옵션';
$labels['arialabelkeysearchform'] = '키 검색 상자';
$labels['arialabelkeyoptions'] = '키 옵션';
$messages['sigvalid'] = '$sender이(가) 보낸 검증된 서명.';
$messages['sigvalidpartial'] = '$sender의 검증된 서명이긴 하나, 본문 일부가 서명되지 않았습니다.';
$messages['siginvalid'] = '$sender이(가) 보낸 검증되지 않은 서명.';
@ -88,6 +99,7 @@ $messages['sigerror'] = '검증되지 않은 서명. 내부 오류.';
$messages['decryptok'] = '메시지가 복호화됨.';
$messages['decrypterror'] = '복호화에 실패함.';
$messages['decryptnokey'] = '복호화에 실패함. 비공개 키를 찾을 수 없음. 키 ID: $keyid.';
$messages['decryptnomdc'] = '복호화를 건너뛰었습니다. 메시지 무결성이 보호되지 않습니다.';
$messages['decryptbadpass'] = '복호화에 실패함. 잘못된 암호.';
$messages['decryptnopass'] = '복호화에 실패함. 키 암호가 필요합니다.';
$messages['decryptpartial'] = '메시지가 복호화됐지만 본문 일부가 암호화 되지 않았습니다.';
@ -97,6 +109,7 @@ $messages['signbadpass'] = '서명에 실패함. 잘못된 암호.';
$messages['signnopass'] = '서명 추가에 실패함. 키 암호가 필요합니다.';
$messages['encrypterror'] = '암호화에 실패함.';
$messages['encryptnokey'] = '암호화에 실패함. $email에 대한 공개 키를 찾을 수 없음.';
$messages['encryptnoprivkey'] = '암호화에 실패했습니다. 비공개 키를 찾을 수 없습니다.';
$messages['nokeysfound'] = '키를 찾을 수 없음';
$messages['keynotfound'] = '키를 발견하지 못함!';
$messages['keyopenerror'] = '키 정보를 얻을 수 없음! 내부 오류.';

@ -63,6 +63,7 @@ $labels['keydisable'] = 'Išjungti';
$labels['keyrevoke'] = 'Atšaukti';
$labels['keysend'] = 'Siųsti viešąjį raktą kartu su laišku';
$labels['keychpass'] = 'Keisti slaptažodį';
$labels['keyadd'] = 'Pridėti raktą';
$labels['newkeyident'] = 'Tapatybė';
$labels['newkeypass'] = 'Slaptažodis';
$labels['newkeypassconfirm'] = 'Pakartokite slaptažodį';
@ -76,7 +77,6 @@ $labels['signmsg'] = 'Pasirašyti šį laišką';
$labels['sendunencrypted'] = 'Siųsti nešifruotą';
$labels['enterkeypasstitle'] = 'Įveskite rakto slaptafrazę';
$labels['enterkeypass'] = 'Naudotojo $user slaptajam raktui ($keyid) atrakinti reikalinga slaptafrazė.';
$labels['arialabelkeyexportoptions'] = 'Raktų eksportavimo parinktys';
$labels['attachpubkeymsg'] = 'Prisegti mano viešąjį raktą';
$labels['keyexportprompt'] = 'Ar norite įkelti privačiuosius raktus, saugojamus OpenPGP raktų faile?';
$labels['onlypubkeys'] = 'Eksportuoti tik viešuosius raktus';
@ -87,6 +87,9 @@ $labels['keyimportsearchlabel'] = 'Ieškoti raktų serveryje(-iuose)';
$labels['managekeys'] = 'Tvarkyti PGP raktus';
$labels['identitymatchingprivkeys'] = 'Turite $nr atitinkančius PGP privačiuosius raktus, saugomus jūsų raktinėje:';
$labels['identitynoprivkeys'] = 'Šio siuntėjo tapatybė kol kas neturi jūsų raktinėje saugomo PGP privačiojo rakto.';
$labels['arialabelkeyexportoptions'] = 'Raktų eksportavimo parinktys';
$labels['arialabelkeysearchform'] = 'Raktų paieškos forma';
$labels['arialabelkeyoptions'] = 'Rakto parinktys';
$messages['sigvalid'] = 'Galiojantis $sender parašas.';
$messages['sigvalidpartial'] = '$sender parašas patvirtintas, bet už dalį laiško nebuvo pasirašyta.';
$messages['siginvalid'] = 'Negaliojantis $sender parašas.';

@ -76,7 +76,6 @@ $labels['signmsg'] = 'Digitāli parakstīt šo e-pastu';
$labels['sendunencrypted'] = 'Sūtīt nešifrētu';
$labels['enterkeypasstitle'] = 'Ievadiet atslēgas paroli';
$labels['enterkeypass'] = 'Lai atbloķētu lietotāja $user šifrēto atslēgu ($keyid), ir nepieciešama parole.';
$labels['arialabelkeyexportoptions'] = 'Atslēgu eksportēšanas iestatījumi';
$labels['attachpubkeymsg'] = 'Pievienot manu publisko atslēgu';
$labels['keyexportprompt'] = 'Vai iekļaut slepenās atslēgas saglabātajos openPGP atslēgu failos?';
$labels['onlypubkeys'] = 'Eksportēt tikai publiskās atslēgas';
@ -84,6 +83,7 @@ $labels['withprivkeys'] = 'Eksportēt slepenās atslēgas';
$labels['findkey'] = 'Meklēt atslēgu serveros.';
$labels['keyimportlabel'] = 'Importēt no faila';
$labels['keyimportsearchlabel'] = 'Meklēt atslēgu serveros.';
$labels['arialabelkeyexportoptions'] = 'Atslēgu eksportēšanas iestatījumi';
$messages['sigvalid'] = 'Pārbaudīts $sender paraksts.';
$messages['sigvalidpartial'] = 'Pārbaudīts $sender paraksts, bet daļa no e-pasta nav parakstīta.';
$messages['siginvalid'] = 'Nederīgs paraksts no $sender.';

@ -76,7 +76,6 @@ $labels['signmsg'] = 'Onderteken dit bericht digitaal';
$labels['sendunencrypted'] = 'Niet versleuteld versturen';
$labels['enterkeypasstitle'] = 'Voer sleutelwachtwoord in';
$labels['enterkeypass'] = 'Een wachtwoord is vereist om de geheime sleutel ($keyid) te openen voor gebruiker: $user.';
$labels['arialabelkeyexportoptions'] = 'Opties voor sleutels exporteren';
$labels['attachpubkeymsg'] = 'Voeg mijn publieke sleutel bij';
$labels['keyexportprompt'] = 'Wilt u geheime sleutels bewaren in het opgeslagen OpenPGP-sleutelbestand?';
$labels['onlypubkeys'] = 'Alleen publieke sleutels exporteren';
@ -87,6 +86,7 @@ $labels['keyimportsearchlabel'] = 'Zoek op sleutel server(s)';
$labels['managekeys'] = 'PGP sleutels beheren';
$labels['identitymatchingprivkeys'] = 'U heeft $nr overeenkomende PGP-privésleutels opgeslagen.';
$labels['identitynoprivkeys'] = 'De afzender heeft (nog) geen PGP-privésleutel opgeslagen.';
$labels['arialabelkeyexportoptions'] = 'Opties voor sleutels exporteren';
$messages['sigvalid'] = 'Ondertekening van $sender geverifieerd.';
$messages['sigvalidpartial'] = 'Ondertekening van $sender geverifieerd, maar een deel van de inhoud was niet ondertekend.';
$messages['siginvalid'] = 'Ongeldige ondertekening van $sender.';

@ -76,7 +76,6 @@ $labels['signmsg'] = 'Podpisz wiadomość';
$labels['sendunencrypted'] = 'Wyślij niezaszyfrowaną';
$labels['enterkeypasstitle'] = 'Wprowadź hasło klucza';
$labels['enterkeypass'] = 'Wymagane jest hasło do klucza ($keyid) użytkownika: $user.';
$labels['arialabelkeyexportoptions'] = 'Opcje eksportu kluczy';
$labels['attachpubkeymsg'] = 'Załącz mój klucz publiczny';
$labels['keyexportprompt'] = 'Czy chcesz dołączyć klucze prywatne do utworzonego pliku kluczy PGP?';
$labels['onlypubkeys'] = 'Eksportuj tylko klucze publiczne';
@ -87,6 +86,7 @@ $labels['keyimportsearchlabel'] = 'Wyszukiwanie na serwerach kluczy';
$labels['managekeys'] = 'Zarządzaj kluczami PGP';
$labels['identitymatchingprivkeys'] = 'Masz $nr pasujących kluczy prywatnych PGP w bazie kluczy.';
$labels['identitynoprivkeys'] = 'Brak klucza prywatnego PGP dla wybranej tożsamości nadawcy.';
$labels['arialabelkeyexportoptions'] = 'Opcje eksportu kluczy';
$messages['sigvalid'] = 'Zweryfikowany podpis nadawcy $sender.';
$messages['sigvalidpartial'] = 'Zweryfikowany podpis od $sender, ale część wiadomości nie została podpisana.';
$messages['siginvalid'] = 'Błędny podpis nadawcy $sender.';

@ -76,7 +76,6 @@ $labels['signmsg'] = 'Assinar digitalmente essa mensagem';
$labels['sendunencrypted'] = 'Enviar não criptografado';
$labels['enterkeypasstitle'] = 'Digite a frase secreta da chave';
$labels['enterkeypass'] = 'Uma frase secreta é necessária para desbloquear a chave ($keyid) para o usuário: $user.';
$labels['arialabelkeyexportoptions'] = 'Opções de exportação das chaves';
$labels['attachpubkeymsg'] = 'Anexar minha chave pública';
$labels['keyexportprompt'] = 'Deseja incluir chaves secretas no arquivo de chaves OpenPGP salva?';
$labels['onlypubkeys'] = 'Exportar somente Chaves Públicas';
@ -87,6 +86,7 @@ $labels['keyimportsearchlabel'] = 'Procurar no(s) servidor(es) de chaves';
$labels['managekeys'] = 'Gerenciar chaves PGP';
$labels['identitymatchingprivkeys'] = 'Você tem $nr chaves PGP guardadas no chaveiro correspondente:';
$labels['identitynoprivkeys'] = 'A identidade deste emissor ainda não tem uma chave privada PGP armazenada em sua keyring.';
$labels['arialabelkeyexportoptions'] = 'Opções de exportação das chaves';
$messages['sigvalid'] = 'Verificar assinatura de $sender.';
$messages['sigvalidpartial'] = 'Verificar assinatura de $sender, mas parte do corpo não foi assinada.';
$messages['siginvalid'] = 'Assinatura inválida de $sender.';

@ -63,6 +63,7 @@ $labels['keydisable'] = 'Desactivar';
$labels['keyrevoke'] = 'Revogar';
$labels['keysend'] = 'Enviar chave pública numa mensagem';
$labels['keychpass'] = 'Alterar palavra-passe';
$labels['keyadd'] = 'Adicionar chave';
$labels['newkeyident'] = 'Identidade';
$labels['newkeypass'] = 'Palavra-passe';
$labels['newkeypassconfirm'] = 'Confirmar palavra-passe';
@ -76,7 +77,6 @@ $labels['signmsg'] = 'Assinar digitalmente esta mensagem';
$labels['sendunencrypted'] = 'Enviar desencriptado';
$labels['enterkeypasstitle'] = 'Digite chave de frase de acesso';
$labels['enterkeypass'] = 'É necessária uma frase de acesso para desbloquear a chave secreta ($keyid) do utilizador: $user.';
$labels['arialabelkeyexportoptions'] = 'Opções de exportação de chaves';
$labels['attachpubkeymsg'] = 'Anexar a minha chave pública';
$labels['keyexportprompt'] = 'Deseja incluir as chaves secretas no ficheiro, guardado, de chaves OpenPGP?';
$labels['onlypubkeys'] = 'Exportar apenas Chaves Públicas';
@ -87,6 +87,9 @@ $labels['keyimportsearchlabel'] = 'Pesquisar no(s) servidor(es) de chaves';
$labels['managekeys'] = 'Gerir chaves PGP';
$labels['identitymatchingprivkeys'] = 'Tem $nr correspondências de chaves PGP privadas armazenadas no seu porta-chaves:';
$labels['identitynoprivkeys'] = 'Esta identidade do remetente ainda não tem uma chave PGP privada armazenada no seu porta-chaves.';
$labels['arialabelkeyexportoptions'] = 'Opções de exportação de chaves';
$labels['arialabelkeysearchform'] = 'Formulário de pesquisa de chaves';
$labels['arialabelkeyoptions'] = 'Opções da chave';
$messages['sigvalid'] = 'Assinatura verificada de $sender.';
$messages['sigvalidpartial'] = 'Assinatura verificada a partir de $sender, mas parte do corpo não foi assinado.';
$messages['siginvalid'] = 'Assinatura inválida de $sender.';

@ -71,7 +71,6 @@ $labels['encryptmsg'] = 'Criptează acest mesaj';
$labels['signmsg'] = 'Semnează digital acest mesaj';
$labels['enterkeypasstitle'] = 'Introdu fraza de acces cheie';
$labels['enterkeypass'] = 'O frază de acces este necesară pentru a debloca cheia secretă ($keyid) pentru utilizatorul: $user.';
$labels['arialabelkeyexportoptions'] = 'Opțiuni export chei';
$labels['attachpubkeymsg'] = 'Atașează cheia mea publică';
$labels['keyexportprompt'] = 'Vrei să incluzi cheile secrete în fișierul de chei OpenPGP salvat?';
$labels['onlypubkeys'] = 'Exportă doar Cheile Publice';
@ -79,6 +78,7 @@ $labels['withprivkeys'] = 'Exportă Cheile Secrete';
$labels['findkey'] = 'Caută în serverele de chei';
$labels['keyimportlabel'] = 'Importă din fișier';
$labels['keyimportsearchlabel'] = 'Caută în serverele de chei';
$labels['arialabelkeyexportoptions'] = 'Opțiuni export chei';
$messages['sigvalid'] = 'Semnătură $sender verificată.';
$messages['sigvalidpartial'] = 'Semnătură $sender verificată, dar parte a mesajului nu a fost semnat.';
$messages['siginvalid'] = 'Semnătură nevalidă de la $sender.';

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save