Browse Source

Downgrade RC back to previous version, move updated RC to feature branch

tags/v1.8.2.5
NorbertNader 4 years ago
parent
commit
677e4744f4
100 changed files with 570 additions and 1227 deletions
  1. +2
    -41
      modules/CRM/Roundcube/RC/.htaccess
  2. +10
    -236
      modules/CRM/Roundcube/RC/CHANGELOG
  3. +25
    -40
      modules/CRM/Roundcube/RC/INSTALL
  4. +0
    -8
      modules/CRM/Roundcube/RC/README.md
  5. +2
    -5
      modules/CRM/Roundcube/RC/UPGRADING
  6. +21
    -37
      modules/CRM/Roundcube/RC/index.php
  7. +5
    -2
      modules/CRM/Roundcube/RC/plugins/acl/acl.js
  8. +3
    -1
      modules/CRM/Roundcube/RC/plugins/acl/acl.php
  9. +1
    -1
      modules/CRM/Roundcube/RC/plugins/acl/localization/de_DE.inc
  10. +4
    -42
      modules/CRM/Roundcube/RC/plugins/acl/localization/fy_NL.inc
  11. +4
    -75
      modules/CRM/Roundcube/RC/plugins/acl/localization/sq_AL.inc
  12. +0
    -4
      modules/CRM/Roundcube/RC/plugins/acl/localization/sr_CS.inc
  13. +50
    -50
      modules/CRM/Roundcube/RC/plugins/acl/localization/tr_TR.inc
  14. +28
    -37
      modules/CRM/Roundcube/RC/plugins/acl/localization/zh_TW.inc
  15. +2
    -2
      modules/CRM/Roundcube/RC/plugins/acl/skins/classic/acl.css
  16. +12
    -12
      modules/CRM/Roundcube/RC/plugins/acl/skins/larry/acl.css
  17. +1
    -0
      modules/CRM/Roundcube/RC/plugins/additional_message_headers/additional_message_headers.php
  18. +25
    -19
      modules/CRM/Roundcube/RC/plugins/archive/archive.js
  19. +250
    -440
      modules/CRM/Roundcube/RC/plugins/archive/archive.php
  20. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/composer.json
  21. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/ar_SA.inc
  22. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/ast.inc
  23. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/az_AZ.inc
  24. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/be_BE.inc
  25. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/bg_BG.inc
  26. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/br.inc
  27. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/bs_BA.inc
  28. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/ca_ES.inc
  29. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/cs_CZ.inc
  30. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/cy_GB.inc
  31. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/da_DK.inc
  32. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/de_CH.inc
  33. +3
    -4
      modules/CRM/Roundcube/RC/plugins/archive/localization/de_DE.inc
  34. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/el_GR.inc
  35. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/en_CA.inc
  36. +1
    -3
      modules/CRM/Roundcube/RC/plugins/archive/localization/en_GB.inc
  37. +1
    -3
      modules/CRM/Roundcube/RC/plugins/archive/localization/en_US.inc
  38. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/eo.inc
  39. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/es_419.inc
  40. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/es_AR.inc
  41. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/es_ES.inc
  42. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/et_EE.inc
  43. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/eu_ES.inc
  44. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/fa_AF.inc
  45. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/fa_IR.inc
  46. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/fi_FI.inc
  47. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/fo_FO.inc
  48. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/fr_FR.inc
  49. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/gl_ES.inc
  50. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/he_IL.inc
  51. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/hr_HR.inc
  52. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/hu_HU.inc
  53. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/hy_AM.inc
  54. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/ia.inc
  55. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/id_ID.inc
  56. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/it_IT.inc
  57. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/ja_JP.inc
  58. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/km_KH.inc
  59. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/ko_KR.inc
  60. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/ku.inc
  61. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/ku_IQ.inc
  62. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/lb_LU.inc
  63. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/lt_LT.inc
  64. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/lv_LV.inc
  65. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/ml_IN.inc
  66. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/mn_MN.inc
  67. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/mr_IN.inc
  68. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/nb_NO.inc
  69. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/nl_NL.inc
  70. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/nn_NO.inc
  71. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/pl_PL.inc
  72. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/pt_BR.inc
  73. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/pt_PT.inc
  74. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/ro_RO.inc
  75. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/ru_RU.inc
  76. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/si_LK.inc
  77. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/sk_SK.inc
  78. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/sl_SI.inc
  79. +2
    -15
      modules/CRM/Roundcube/RC/plugins/archive/localization/sq_AL.inc
  80. +2
    -3
      modules/CRM/Roundcube/RC/plugins/archive/localization/sr_CS.inc
  81. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/sv_SE.inc
  82. +9
    -10
      modules/CRM/Roundcube/RC/plugins/archive/localization/tr_TR.inc
  83. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/tzl.inc
  84. +1
    -2
      modules/CRM/Roundcube/RC/plugins/archive/localization/uk_UA.inc
  85. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/vi_VN.inc
  86. +1
    -1
      modules/CRM/Roundcube/RC/plugins/archive/localization/zh_CN.inc
  87. +7
    -8
      modules/CRM/Roundcube/RC/plugins/archive/localization/zh_TW.inc
  88. +1
    -6
      modules/CRM/Roundcube/RC/plugins/attachment_reminder/attachment_reminder.js
  89. +3
    -2
      modules/CRM/Roundcube/RC/plugins/attachment_reminder/attachment_reminder.php
  90. +0
    -1
      modules/CRM/Roundcube/RC/plugins/attachment_reminder/localization/en_US.inc
  91. +1
    -1
      modules/CRM/Roundcube/RC/plugins/attachment_reminder/localization/tr_TR.inc
  92. +2
    -2
      modules/CRM/Roundcube/RC/plugins/attachment_reminder/localization/zh_TW.inc
  93. +0
    -4
      modules/CRM/Roundcube/RC/plugins/database_attachments/config.inc.php.dist
  94. +1
    -0
      modules/CRM/Roundcube/RC/plugins/database_attachments/database_attachments.php
  95. +2
    -1
      modules/CRM/Roundcube/RC/plugins/debug_logger/debug_logger.php
  96. +1
    -1
      modules/CRM/Roundcube/RC/plugins/debug_logger/runlog/runlog.php
  97. +2
    -1
      modules/CRM/Roundcube/RC/plugins/emoticons/emoticons.php
  98. +8
    -13
      modules/CRM/Roundcube/RC/plugins/enigma/README
  99. +7
    -3
      modules/CRM/Roundcube/RC/plugins/enigma/composer.json
  100. +11
    -8
      modules/CRM/Roundcube/RC/plugins/enigma/config.inc.php.dist

+ 2
- 41
modules/CRM/Roundcube/RC/.htaccess View File

@@ -23,7 +23,7 @@ php_value session.gc_probability 1
</IfModule>

<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^favicon\.ico$ skins/larry/images/favicon.ico

@@ -33,10 +33,8 @@ RewriteRule ^favicon\.ico$ skins/larry/images/favicon.ico
RewriteRule ^(?!installer|\.well-known\/|[a-zA-Z0-9]{16})(\.?[^\.]+)$ - [F]
# - deny access to some locations
RewriteRule ^/?(\.git|\.tx|SQL|bin|config|logs|temp|tests|program\/(include|lib|localization|steps)) - [F]
# - deny access to composer binaries
RewriteRule ^/vendor\/bin\/.* - [F]
# - deny access to some documentation files
RewriteRule /?(README\.md|composer\.json-dist|composer\.json|package\.xml|jsdeps.json|Dockerfile)$ - [F]
RewriteRule /?(README\.md|composer\.json-dist|composer\.json|package\.xml|Dockerfile)$ - [F]
</IfModule>

<IfModule mod_deflate.c>
@@ -60,40 +58,3 @@ FileETag MTime Size
<IfModule mod_autoindex.c>
Options -Indexes
</ifModule>

<IfModule mod_headers.c>
# 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

# Optional security header
# Only increased security if the browser support those features
# Be careful! Testing is required! They should be adusted to your intallation / user environment

# HSTS - HTTP Strict Transport Security
#Header always set Strict-Transport-Security "max-age=31536000; preload" env=HTTPS

# HPKP - HTTP Public Key Pinning
# Only template - fill with your values
#Header always set Public-Key-Pins "max-age=3600; report-uri=\"\"; pin-sha256=\"\"; pin-sha256=\"\"" env=HTTPS

# X-Xss-Protection
# This header is used to configure the built in reflective XSS protection found in Internet Explorer, Chrome and Safari (Webkit).
#Header set X-XSS-Protection "1; mode=block"

# X-Frame-Options
# The X-Frame-Options header (RFC), or XFO header, protects your visitors against clickjacking attacks
# Already set by php code! Do not activate both options
#Header set X-Frame-Options SAMEORIGIN

# X-Content-Type-Options
# It prevents Google Chrome and Internet Explorer from trying to mime-sniff the content-type of a response away from the one being declared by the server.
#Header set X-Content-Type-Options: "nosniff"

# CSP - Content Security Policy
# for better privacy/security ask browsers to not set the Referer
# more flags for script, stylesheets and images available, read RFC for more information
#Header set Content-Security-Policy "referrer no-referrer"
</IfModule>

+ 10
- 236
modules/CRM/Roundcube/RC/CHANGELOG View File

@@ -1,232 +1,6 @@
CHANGELOG Roundcube Webmail
===========================

- Various improvements for templating engine and skin behaviours
- Support conditional include
- Support for 'link' objects
- Support including files with path relative to templates directory
- Use <button> instead of <input> for submit button on logon screen
- Reset onerror on images if placeholder does not exist to prevent from requests storm
- Unified and simplified code for loading content frame for responses and identities
- Display contact import and advanced search in popup dialogs
- Make possible to set (some) config options from a skin
- Added optional checkbox selection for the list widget
- Make 'compose' command always enabled
- Add .log suffix to all log file names, add option log_file_ext to control this (#313)
- Archive: Fix archiving by sender address on cyrus-imap
- Archive: Add Thunderbird compatible Month option (#5623)
- Return "401 Unauthorized" status when login fails (#5663)
- Support both comma and semicolon as recipient separator, drop recipients_separator option (#5092)
- Plugin API: Added 'show_bytes' hook (#5001)
- subscriptions_option: show \\Noselect folders greyed out (#5621)
- Add option to not indent quoted text on top-posting reply (#5105)
- Removed global $CONFIG variable
- Password: Automatic virtualmin domain setting, removed password_virtualmin_format option (#5759)
- Support AUTHENTICATE LOGIN for IMAP connections (#5563)
- Support LDAP GSSAPI authentication (#5703)
- Allow contacts without an email address (#5079)
- Localized timezone selector (#4983)
- Use 7bit encoding for ISO-2022-* charsets in sent mail (#5640)
- Fix touch event issue on messages list in IE/Edge (#5781)
- Fix so links over images are not removed in plain text signatures converted from HTML (#4473)
- Fix various issues when downloading files with names containing non-ascii chars, use RFC 2231 (#5772)
- Add Preferences > Mailbox View > Main Options > Layout (#5829)
- Password: Fix compatibility with PHP 7+ in cpanel_webmail driver (#5820)
- Managesieve: Fix parsing dot-staffed lines in multiline text (#5838)
- Fix decoding non-ascii attachment names from TNEF attachments (#5646, #5799)
- Fix uninitialized string offset in rcube_utils::bin2ascii() and make sure rcube_utils::random_bytes() result has always requested length (#5788)
- Fix bug where HTML messages with @media styles could moddify style of page body (#5811)
- Fix style issue on selected and unfocused message that is part of a thread (#5798)
- Fix bug where a.button style from managesieve plugin could impact other elements (#5800)
- Fix position of selected icon for (Mailvelope) Encrypt button
- Fix fatal error when using DMY- or MDY-based date format in PostgreSQL (#5808)
- Fix bug where errors were not printed when using bin/update.sh (#5834)
- Fix PHP 7.2 warnings on count() use (#5845)

RELEASE 1.3.0
-------------
- Update to TinyMCE 4.5.7
- Fix bug where invalid recipients could be silently discarded (#5739)
- Fix conflict with _gid cookie of Google Analytics (#5748)
- Print error from CLI scripts when system/exec function is disabled (#5744)
- Fix bug where comment notation within style tag would cause the whole style to be ignored (#5747)
- Fix bug where it wasn't possible to scroll folders list in Edge (#5750)
- Fix folders list sorting on Windows - if php-intl is available (#5732)
- Fix addressbook searching by gender (#5757)
- Fix prevention from using % and * characters in folder name (#5762)
- Fix POST parameter reflection in default_charset selector (#5768)
- Enigma: Fix compatibility with assets_dir
- Managesieve: Skip redundant LISTSCRIPTS command
- Fix SQL syntax error on MariaDB 10.2 (#5774)
- Fix bug where zipdownload ignored files with the same name (#5777)
- Fix bug where it wasn't possible to set timezone to auto-detected value (#5782)

RELEASE 1.3-rc
--------------
- "Flattened" the larry theme: fresher look by removing shadows and gradients
- Support logging to php://stdout (#5721)
- Add support for DelSp=Yes in format=flowed messages (#5702)
- Update to jQuery 3.2.1
- Update to TinyMCE 4.5.6
- Plugin API: Call message_part_structure hook for sub-parts of multipart/alternative message (#5678)
- Enigma: Always use detached signatures (#5624)
- Enigma: Fix handling of messages with nested PGP encrypted parts (#5634)
- Minimize unwanted message loading in preview frame on drag (#5616)
- Fix failing database schema check in all engines except mysql (#5730)
- Fix autocomplete popup closing with click outside the input, don't handle Tab key as Enter (#5606)
- Fix jsdeps.json synchronization on update, warn about missing requirements of install-jsdeps.sh (#5598)
- Fix missing thread expand icon on search result in widescreen mode (#5613)
- Fix bug where image data URIs in css style were treated as evil/remote in mail preview (#5580)
- Fix bug where external content in src attribute of input/video tags was not secured (#5583)
- Fix PHP error on update of a contact with multiple email addresses when using PHP 7.1 (#5587)
- Fix bug where mail content frame couldn't be reset in some corner cases (#5608)
- Fix bug where some classic skin images were not displayed in IE/Edge (#5614)
- Fix bug where signature couldn't be added above the quote in Firefox 51 (#5628)
- Fix regression where groups with email address were resolved to its members' addresses
- Fix update of group name in the contacts list header on group rename (#5648)
- Add rewrite rule to disable access to /vendor/bin folder in .htaccess (#5630)
- Fix bug where it was too easy accidentally move a folder when using the subscription checkbox (#5655)
- Managesieve: Fix parser issue with empty lines between comments (#5657)
- Managesieve: Fix possible defect in handling \r\n in scripts (#5685)
- Fix/rephrase "unsaved changes" warning when cancelling a draft (#5610)
- Fix XSS issue in handling of a style tag inside of an svg element [CVE-2017-6820]
- Fix bug where settings/upload.inc could not be used by plugins (#5694)
- Fix regression in LDAP fuzzy search where it always used prefix search instead (#5713)
- Fix bug where namespace prefix could not be truncated on folders list if show_real_foldernames=true (#5695)
- Fix undesired effects when postgres database uses different timezone than PHP host (#5708)
- Installer: Fix DB schema initialization on MS SQL Server
- Fix bug where base_dn setting was ignored inside group_filters (#5720)
- Password: Fix security issue in virtualmin and sasl drivers [CVE-2017-8114]

RELEASE 1.3-beta
----------------
- Nicely handle contact deletion on contact edit (#5522)
- vcard_attachments: Add possibility to attach contact vCard to composed message (#4997)
- Preserve message internal/received date on import in mbox format (#5559)
- Zipdownload: Fix date format in mbox "From line"
- Possibility to display QR code for contacts data (#5030)
- Added identicon plugin
- Widescreen layout aka three column view (#5093)
- Unify automatic marking as \Seen in preview pane, full-page and extwin views (#5071)
- Disable double-click on the list when preview pane is on (#5199)
- Support hostname and hostname:port in force_https option (#5511)
- Support ALLOW-FROM in x_frame_options (#5122)
- Allow to omit a subject when sending an email (#5068)
- Warn about too many disclosed recipients in composed email [max_disclosed_recipients] (#5132)
- identity_select: Support Received header (#5085)
- Plugin API: Added get_compose_responses hook (#5457)
- Display error when trying to upload more files than specified in max_file_uploads (#5483)
- Add missing sql upgrade file for 'ip' column resize in session table (#5465)
- Do not show inline images of unsupported mimetype (#5463)
- Password: Added replacement variables support in password_pop_host (#5539)
- Password: Don't store passwords in temp files when using dovecotpw (#5531)
- Password: Added LDAP PPolicy driver (#5364)
- Password: Added cpanel_webmail driver (#5549)
- Password: Added possibility to nicely redirect from other plugins on password expiration (#5468)
- Implement separate action to mark all messages in a folder as \Seen (#5006)
- Implement marking as \Seen in all folders or in a folder and its subfolders (#5076)
- Archive: Don't reload messages list when it's not needed (#5225)
- Archive: Add option to automatically mark archived messages as \Seen (#5142)
- Improve randomness of password salts and random hashes (#5266)
- Password/cPanel: Add support for hash authentication and reseller accounts (#5252)
- Support host-specific imap_conn_options/smtp_conn_options/managesieve_conn_options (#5136)
- Center and scale images in attachment preview frame (#5421)
- Added max_message_size option enforced when attaching files to a composed message (#4993)
- Added Search button in quick search menus (#5312)
- Implement "one click" attachment/messages/photo upload (#5024)
- Squirrelmail_usercopy: Add option to define character set of data files
- Removed useless 'created' column from 'session' table (#5389)
- Dropped legacy browsers support (#5167)
- Removed legacy_browser plugin
- Removed hacks for IE < 10
- Update to jQuery 3.1.1 and jQuery-UI 1.12.0
- compile .min.js files with ECMASCRIPT5 option
- Require PHP >= 5.4
- Add possibility to preview and download attachments in mail compose (#5053)
- Add possibility to rename attachments in mail compose (#4996)
- Remove backward compatibility "layer" of bc.php (#4902)
- Support WEBP images in mail messages (#5362)
- Support MathML in HTML message preview (#5182)
- Rename Addressbook to Contacts (#5233)
- Remove PHP mail() support, smtp_server is required now (#5340)
- Display full message subject in onmouseover on truncated subject in mail view (#5346)
- Enigma: Support GnuPG 2.1 (#5313)
- Enigma: Support key generation for multiple identities (#5383)
- Enigma: Import keys from key-server(s) (#5286)
- Enigma: Search missing public keys on a key-server in mail compose (#5286)
- Enigma: Delete user keys when using deluser.sh script
- Enigma: Fix redundant list-secret-keys/list-public-keys calls on signing/encryption
- Enigma: Implement PGP encryption and signing in one go (#5302)
- Enigma: Display signature verification status for encrypted+signed messages (#5302)
- Display different attachment icon on encrypted messages
- Display different confirmation text when moving messages to Trash (#5220)
- Indicate that a collapsed thread has flagged children (#5013)
- Implemented message/rfc822 attachment preview
- Update to jsTimezoneDetect 1.0.6
- Managesieve: Add (optional) RAW script editor (#5414)
- Managesieve: Add option to automatically set vacation :from address (#5428)
- Managesieve: Support 'string' test from variables extension [RFC 5229] (#5248)
- Managesieve: Support 'duplicate' extension [RFC 7352]
- Managesieve: Unhide advanced rule controls if there are inputs with errors
- Managesieve: Display warning message when filter form contains errors
- Control search engine crawlers via X-Robots-Tag header instead of <meta> and robots.txt (#5098)
- Fixed redundancy in sql caching system and compatibility with Galera Cluster (#5439)
- Removed redundant 'created' column from cache and cache_shared tables
- Removed use of redundant data records
- Added missing primary keys (dictionary, cache, cache_shared tables)
- Fix so templating system does not mess with external (e.g. email) content (#5499)
- Fix redundant keep-alive/refresh after session error on compose page (#5500)
- Managesieve: Fix handling of scripts with nested rules (#5540)
- Fix variable substitution in ldap host for some use-cases, e.g. new_user_identity (#5544)
- Enigma: Fix PHP fatal error when decrypting a message with invalid signature (#5555)
- Fix adding images to new identity signatures
- Fix rsync error handling in installto.sh script (#5562)
- Fix some advanced search issues with multiple addressbooks (#5572)
- Fix so group/addressbook selection is retained on page refresh

RELEASE 1.2.3
-------------
- Searching in both contacts and groups when LDAP addressbook with group_filters option is used
- Fix vulnerability in handling of mail()'s 5th argument
- Fix To: header encoding in mail sent with mail() method (#5475)
- Fix flickering of header topline in min-mode (#5426)
- Fix bug where folders list would scroll to top when clicking on subscription checkbox (#5447)
- Fix decoding of GB2312/GBK text when iconv is not installed (#5448)
- Fix regression where creation of default folders wasn't functioning without prefix (#5460)
- Enigma: Fix bug where last records on keys list were hidden (#5461)
- Enigma: Fix key search with keyword containing non-ascii characters (#5459)
- Fix bug where deleting folders with subfolders could fail in some cases (#5466)
- Fix bug where IMAP password could be exposed via error message (#5472)
- Fix bug where it wasn't possible to store more that 2MB objects in memcache/apc,
Added memcache_max_allowed_packet and apc_max_allowed_packet settings (#5452)
- Fix "Illegal string offset" warning in rcube::log_bug() on PHP 7.1 (#5508)
- Fix storing "empty" values in rcube_cache/rcube_cache_shared (#5519)
- Fix missing content check when image resize fails on attachment thumbnail generation (#5485)
- Fix displaying attached images with wrong Content-Type specified (#5527)

RELEASE 1.2.2
-------------
- Enigma: Add possibility to configure gpg-agent binary location (enigma_pgp_agent)
- Enigma: Fix signature verification with some IMAP servers, e.g. Gmail, DBMail (#5371)
- Enigma: Make recipient key searches case-insensitive (#5434)
- Fix regression in resizing JPEG images with Imagick (#5376)
- Managesieve: Fix parsing of vacation date-time with non-default date_format (#5372)
- Use SymLinksIfOwnerMatch in .htaccess instead of FollowSymLinks disabled on some hosts for security reasons (#5370)
- Wash position:fixed style in HTML mail for better security (#5264)
- Fix bug where memcache_debug didn't work for session operations
- Fix bug where Message-ID domain part was tied to username instead of current identity (#5385)
- Fix bug where blocked.gif couldn't be attached to reply/forward with insecure content
- Fix E_DEPRECATED warning when using Auth_SASL::factory() (#5401)
- Fix bug where names of downloaded files could be malformed when derived from the message subject (#5404)
- Fix so "All" messages selection is resetted on search reset (#5413)
- Fix bug where folder creation could fail if personal namespace contained more than one entry (#5403)
- Fix error causing empty INBOX listing in Firefox when using an URL with user:password specified (#5400)
- Fix PHP warning when handling shared namespace with empty prefix (#5420)
- Fix so folders list is scrolled to the selected folder on page load (#5424)
- Fix so when moving to Trash we make sure the folder exists (#5192)
- Fix displaying size of attachments with zero size
- Fix so "Action disabled" error uses more appropriate 404 code (#5440)

RELEASE 1.2.1
-------------
- Update TinyMCE to version 4.3.13 (#5309)
@@ -290,7 +64,7 @@ RELEASE 1.2-rc
- Fix .htaccess rewrite rules to not block .well-known URIs (#4943)
- Fix mail view scaling on iOS (#4915)
- Fix PHP7 warning "session_start(): Session callback expects true/false return value" (#4948)
- Fix XSS issue in SVG images handling [CVE-2015-8864, CVE-2016-4068] (#4949)
- Fix XSS issue in SVG images handling (#4949)
- Fix missing language name in "Add to Dictionary" request in HTML mode (#4951)
- Fix (again) security issue in DBMail driver of password plugin [CVE-2015-2181] (#4958)
- Fix bug where Archive/Junk buttons were not active after page jump with select=all mode (#4961)
@@ -299,7 +73,7 @@ RELEASE 1.2-rc
- Fix additional_message_headers plugin compatibility with Mail_Mime >= 1.9 (#4966)
- Hide DSN option in Preferences when smtp_server is not used (#4967)
- Fix handling of body parameter in mail compose request
- Protect download urls against CSRF using unique request tokens [CVE-2016-4069] (#4957)
- Protect download urls against CSRF using unique request tokens (#4957)
- newmail_notifier: Refactor desktop notifications
- Fix so contactlist_fields option can be set via config file
- Fix so SPECIAL-USE assignments are forced only until user sets special folders (#4782)
@@ -449,7 +223,7 @@ RELEASE 1.1.1
- Fix fatal errors on systems without mbstring extension or mb_regex_encoding() function (#4769)
- Fix cursor position on reply below the quote in HTML mode (#4759)
- Fix so "over quota" errors are displayed also in message compose page
- Fix duplicate entries suppression in autocomplete result (#4776)
- Fix duplicate entries supression in autocomplete result (#4776)
- Fix "Non-static method PEAR::isError() should not be called statically" errors (#4770)
- Fix parsing invalid HTML messages with BOM after <!DOCTYPE> (#4777)
- Fix duplicate entry on timezones list in rcube_config::timezone_name_from_abbr() (#4779)
@@ -522,7 +296,7 @@ RELEASE 1.1-beta
- Fix restoring draft messages from localStorage if editor mode differs (#4631)
- Added config option/user preference to disable saving messages in localStorage (#4606)
- Added config option 'imap_log_session' to enable Roundcube <-> IMAP session ID logging
- Added config option 'log_session_id' to control the length of the session identifier in logs
- Added config option 'log_session_id' to control the lengh of the session identifer in logs
- Implemented 'storage_connected' API hook after successful IMAP login (#4638)
- Intergrate Net_LDAP3 and rcube_ldap_generic classes
- Add option (disabled_actions) to disable UI elements/actions (#4478)
@@ -835,7 +609,7 @@ RELEASE 0.9.4
- Make identities matching case insensitive (#1881)
- Fix issue where too big message data was stored in cache causing sql errors (#4325)
- Fix iframe scrollbars on webkit desktop browsers (#4319)
- Fix issue where legacy config was overridden by default config (#4305)
- Fix issue where legacy config was overriden by default config (#4305)
- Fix newmail_notifier issue where favicon wasn't changed back to default (#4324)
- Fix setting of Junk and NonJunk flags by markasjunk plugin (#4303)
- Fix lack of Reply-To address in header of forwarded message body (#4314)
@@ -919,7 +693,7 @@ RELEASE 0.9.1
- Fix so Sender: address is added to Cc: field on reply to all (#4140)
- Fix so addressbook_search_mode works also for group search (#4183)
- Fix removal of a contact from a group in LDAP addressbook (#4185)
- Include SQL query in the log on SQL error (#4172)
- Inlcude SQL query in the log on SQL error (#4172)
- Fix handling untagged responses in IMAP FETCH - "could not load message" error (#4180)
- Fix very small window size in Chrome (#4087)
- Fix list page reset when viewing a message in Larry skin (#4182)
@@ -1206,7 +980,7 @@ RELEASE 0.8-rc
- Add IE8 hack for messages list issue (#3317)
- Fix handling errors on draft auto-save
- Fix importing vCard photo with ENCODING param specified (#3746)
- Support multiple name/email pairs for Bcc and Reply-To identity settings (#3752)
- Support mutliple name/email pairs for Bcc and Reply-To identity settings (#3752)
- Set flexible width to login form fields (#3735)
- Fix re-draw bug on list columns change in IE8 (#3318)
- Allow mass-removal of addresses from a group (#3259)
@@ -1702,7 +1476,7 @@ RELEASE 0.4.1

RELEASE 0.4
-----------
- Fix disappearing upload form disappears when user selects a file on Safari (#2917)
- Fix disapearing upload form disapears when user selects a file on Safari (#2917)
- Don't replace error messages with loading info (#2534)
- Fix JS errors on compose mode switch (#2952)
- Fix message structure parsing when it lacks optional fields (#2960)
@@ -2365,7 +2139,7 @@ RELEASE 0.1-RC2
- Improve message compose screen (closes #1060)
- Select next row after removing one from list (#1063)
- Make smtp HELO/EHLO hostname configurable (#851)
- IPv6 Compatibility (#1023), Patch #1484373
- IPv6 Compatability (#1023), Patch #1484373
- Unlock interface when message sending fails (#1188)
- Eval PHP code in template includes (if configured)
- Show message when folder is empty. Mo more static text in table (#1068)
@@ -2471,7 +2245,7 @@ RELEASE 0.1-RC1
- Corrected date string in sent message header (closes #887)
- Correclty choose "To" column in sent and draft mailboxes (closes #769)
- Changed srong tooltips for message browse buttons (closes #757)
- Fixed signature delimiter character to be standard (Bug #830)
- Fixed signature delimeter character to be standard (Bug #830)
- Fixed XSS vulnerability (Bug #877)
- Remove newlines from mail headers (Bug #827)
- Selection issues when moving/deleting (Bug #837)


+ 25
- 40
modules/CRM/Roundcube/RC/INSTALL View File

@@ -3,18 +3,18 @@ INTRODUCTION

This file describes the basic steps to install Roundcube Webmail on your
web server. For additional information, please also consult the project's
wiki page at https://github.com/roundcube/roundcubemail/wiki
wiki page at http://trac.roundcube.net/wiki


REQUIREMENTS
============

* An IMAP, HTTP and SMTP server
* The Apache, Lighttpd, Cherokee or Hiawatha web server
* .htaccess support allowing overrides for DirectoryIndex
* PHP Version 5.4 or greater including:
* PHP Version 5.3.7 or greater including:
- PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring (required)
- PHP PDO with driver for either MySQL, PostgreSQL, SQL Server, Oracle or SQLite (required)
- Iconv, Zip, Fileinfo, Intl, Exif (recommended)
- Libiconv, Zip, Fileinfo, Intl, Exif (recommended)
- LDAP for LDAP addressbook support (optional)
* PEAR and PEAR packages distributed with Roundcube or external:
- Mail_Mime 1.10.0 or newer
@@ -23,43 +23,37 @@ REQUIREMENTS
- Net_IDNA2 0.1.1 or newer
- Auth_SASL 1.0.6 or newer
- Net_Sieve 1.3.2 or newer (for managesieve plugin)
- Crypt_GPG 1.6.0 or newer (for enigma plugin)
- Endroid/QrCode 1.6.0 or newer (https://github.com/endroid/QrCode)
- Crypt_GPG 1.4.1 or newer (for enigma plugin)
* php.ini options (see .htaccess file):
- error_reporting E_ALL & ~E_NOTICE & ~E_STRICT
- error_reporting E_ALL & ~E_NOTICE (or lower)
- memory_limit > 16MB (increase as suitable to support large attachments)
- file_uploads enabled (for attachment upload features)
- session.auto_start disabled
- suhosin.session.encrypt disabled
- mbstring.func_overload disabled
* A MySQL, PostgreSQL, MS SQL Server (2005 or newer), Oracle database
or SQLite support in PHP - with permission to create tables
* Composer installed either locally or globally (https://getcomposer.org)
- magic_quotes_runtime disabled
- magic_quotes_sybase disabled
- register_globals disabled (PHP < 5.4)
* A MySQL (4.0.8 or newer), PostgreSQL, MS SQL Server (2005 or newer), Oracle
database or SQLite support in PHP
* One of the above databases with permission to create tables
* An SMTP server (recommended) or PHP configured for mail delivery
* Composer installed either locally or globally (optional, for plugin installation)


INSTALLATION
============

1. Decompress and put this folder somewhere inside your document root
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:
- get composer from https://getcomposer.org/download/
- rename the composer.json-dist file into composer.json
- if you want to use LDAP address books, enable the LDAP libraries in your
composer.json file by moving the items from "suggest" to the "require"
section (remove the explanation texts after the version!).
- run `php composer.phar install --no-dev`
2.2. Install Javascript dependencies by executing `bin/install-jsdeps.sh` script.
3. Make sure that the following directories (and the files within)
2. Make sure that the following directories (and the files within)
are writable by the webserver
- /temp
- /logs
4. Create a new database and a database user for Roundcube (see DATABASE SETUP)
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. Check Known Issues section of this file
3. Create a new database and a database user for Roundcube (see DATABASE SETUP)
4. Point your browser to http://url-to-roundcube/installer/
5. Follow the instructions of the install script (or see MANUAL CONFIGURATION)
6. After creating and testing the configuration, remove the installer directory
7. Check Known Issues section of this file


CONFIGURATION HINTS
@@ -129,7 +123,7 @@ createuser and createdb commands.
* Microsoft SQL Server
----------------------
Language/locale of the database must be set to us_english (1033). More info
on this at https://github.com/roundcube/roundcubemail/issues/4078.
on this at http://trac.roundcube.net/ticket/1488918.


Database cleaning
@@ -147,14 +141,12 @@ to config/config.inc.php and make the necessary adjustments according to your
environment and your needs. More configuration options can be copied from the
config/defaults.inc.php file into your local config.inc.php file as needed.
Read the comments above the individual configuration options to find out what
they do or read https://github.com/roundcube/roundcubemail/wiki/Installation
for even more guidance.
they do or read http://trac.roundcube.net/wiki/Howto_Install for even more
guidance.

You can also modify the default .htaccess file. This is necessary to
increase the allowed size of file attachments, for example:

php_value upload_max_filesize 5M
php_value post_max_size 6M
php_value upload_max_filesize 2M


SECURE YOUR INSTALLATION
@@ -177,14 +169,7 @@ NOTE: In Apache 2.4, support for .htaccess files has been disabled by
default. Therefore you first need to enable this in your Apache main or
virtual host config by with:

AllowOverride all

For non-apache web servers add equivalent configuration parameters to deny
direct access to these private resources.

It is also recommended to change the document root to <install path>/public_html
after installation if Roundcube runs at root of a dedicated virtual host. This
will automatically keep sensitive files out of reach for http requests.
AllowOverride all


UPGRADING


+ 0
- 8
modules/CRM/Roundcube/RC/README.md View File

@@ -3,14 +3,6 @@ Roundcube Webmail
[roundcube.net](http://roundcube.net)


ATTENTION
---------
This is just a snapshot from the GIT repository and is **NOT A STABLE
version of Roundcube**. It's not recommended to replace an existing installation
of Roundcube with this version. Also using a separate database for this
installation is highly recommended.


INTRODUCTION
------------
Roundcube Webmail is a browser-based multilingual IMAP client with an


+ 2
- 5
modules/CRM/Roundcube/RC/UPGRADING View File

@@ -41,18 +41,15 @@ it on a unix system, you need to do the following operations by hand:
./skins/
./plugins/
./vendor/
4. Update dependencies:
4a. If you previously installed plugins through composer, update dependencies
by running `php composer.phar update --no-dev`.
by running `php composer.phar update --no-dev`
4b. Install/update dependencies using composer:
- get composer from https://getcomposer.org/download/
- rename the composer.json-dist file into composer.json
- if you want to use LDAP address books, enable the LDAP libraries in your
composer.json file by moving the items from "suggest" to the "require"
section (remove the explanation texts after the version!).
- 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.
- run `php composer.phar install --no-dev`
5. Run `./bin/update.sh` from the commandline OR
open http://url-to-roundcube/installer/ in a browser and choose "3 Test config".
To enable the latter one, you have to temporary set 'enable_installer'


+ 21
- 37
modules/CRM/Roundcube/RC/index.php View File

@@ -2,9 +2,9 @@
/**
+-------------------------------------------------------------------------+
| Roundcube Webmail IMAP Client |
| Version 1.4-git |
| Version 1.2.1 |
| |
| Copyright (C) 2005-2017, The Roundcube Dev Team |
| Copyright (C) 2005-2016, The Roundcube Dev Team |
| |
| This program is free software: you can redistribute it and/or modify |
| it under the terms of the GNU General Public License (with exceptions |
@@ -72,23 +72,11 @@ if ($RCMAIL->action == 'error' && !empty($_GET['_code'])) {

// check if https is required (for login) and redirect if necessary
if (empty($_SESSION['user_id']) && ($force_https = $RCMAIL->config->get('force_https', false))) {
// force_https can be true, <hostname>, <hostname>:<port>, <port>
if (!is_bool($force_https)) {
list($host, $port) = explode(':', $force_https);
$https_port = is_bool($force_https) ? 443 : $force_https;

if (is_numeric($host) && empty($port)) {
$port = $host;
$host = '';
}
}

if (!rcube_utils::https_check($port ?: 443)) {
if (empty($host)) {
$host = preg_replace('/:[0-9]+$/', '', $_SERVER['HTTP_HOST']);
}
if ($port && $port != 443) {
$host .= ':' . $port;
}
if (!rcube_utils::https_check($https_port)) {
$host = preg_replace('/:[0-9]+$/', '', $_SERVER['HTTP_HOST']);
$host .= ($https_port != 443 ? ':' . $https_port : '');

header('Location: https://' . $host . $_SERVER['REQUEST_URI']);
exit;
@@ -103,17 +91,17 @@ $RCMAIL->action = $startup['action'];
// try to log in
if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') {
$request_valid = $_SESSION['temp'] && $RCMAIL->check_request();
$pass_charset = $RCMAIL->config->get('password_charset', 'ISO-8859-1');

// purge the session in case of new login when a session already exists
$RCMAIL->kill_session();

$auth = $RCMAIL->plugins->exec_hook('authenticate', array(
'host' => $RCMAIL->autoselect_host(),
'user' => trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST)),
'pass' => rcube_utils::get_input_value('_pass', rcube_utils::INPUT_POST, true, $pass_charset),
'valid' => $request_valid,
'cookiecheck' => true,
'host' => $RCMAIL->autoselect_host(),
'user' => trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST)),
'pass' => rcube_utils::get_input_value('_pass', rcube_utils::INPUT_POST, true,
$RCMAIL->config->get('password_charset', 'ISO-8859-1')),
'cookiecheck' => true,
'valid' => $request_valid,
));

// Login
@@ -156,18 +144,18 @@ if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') {
}
else {
if (!$auth['valid']) {
$error_code = rcmail::ERROR_INVALID_REQUEST;
$error_code = RCMAIL::ERROR_INVALID_REQUEST;
}
else {
$error_code = is_numeric($auth['error']) ? $auth['error'] : $RCMAIL->login_error();
}

$error_labels = array(
rcmail::ERROR_STORAGE => 'storageerror',
rcmail::ERROR_COOKIES_DISABLED => 'cookiesdisabled',
rcmail::ERROR_INVALID_REQUEST => 'invalidrequest',
rcmail::ERROR_INVALID_HOST => 'invalidhost',
rcmail::ERROR_RATE_LIMIT => 'accountlocked',
RCMAIL::ERROR_STORAGE => 'storageerror',
RCMAIL::ERROR_COOKIES_DISABLED => 'cookiesdisabled',
RCMAIL::ERROR_INVALID_REQUEST => 'invalidrequest',
RCMAIL::ERROR_INVALID_HOST => 'invalidhost',
RCMAIL::ERROR_RATE_LIMIT => 'accountlocked',
);

$error_message = !empty($auth['error']) && !is_numeric($auth['error']) ? $auth['error'] : ($error_labels[$error_code] ?: 'loginfailed');
@@ -235,7 +223,7 @@ if (empty($RCMAIL->user->ID)) {
$OUTPUT->add_footer(html::div(array('style' => "background:#ef9398; border:2px solid #dc5757; padding:0.5em; margin:2em auto; width:50em"),
html::tag('h2', array('style' => "margin-top:0.2em"), "Installer script is still accessible") .
html::p(null, "The install script of your Roundcube installation is still stored in its default location!") .
html::p(null, "Please <b>remove</b> the whole <tt>installer</tt> folder from the Roundcube directory because
html::p(null, "Please <b>remove</b> the whole <tt>installer</tt> folder from the Roundcube directory because .
these files may expose sensitive configuration data like server passwords and encryption keys
to the public. Make sure you cannot access the <a href=\"./installer/\">installer script</a> from your browser.")
));
@@ -245,10 +233,6 @@ if (empty($RCMAIL->user->ID)) {

$RCMAIL->set_task($plugin['task']);

if (!$session_error) {
header('HTTP/1.0 401 Unauthorized');
}

$OUTPUT->send($plugin['task']);
}
else {
@@ -259,7 +243,7 @@ else {
$disabled_actions = (array) $RCMAIL->config->get('disabled_actions');
if (in_array($RCMAIL->task . '.' . ($RCMAIL->action ?: 'index'), $disabled_actions)) {
rcube::raise_error(array(
'code' => 404, 'type' => 'php',
'code' => 403, 'type' => 'php',
'message' => "Action disabled"), true, true);
}
}
@@ -286,7 +270,7 @@ if (is_file($incfile = INSTALL_PATH . 'program/steps/'.$RCMAIL->task.'/func.inc'
}

// allow 5 "redirects" to another action
$redirects = 0;
$redirects = 0; $incstep = null;
while ($redirects < 5) {
// execute a plugin action
if (preg_match('/^plugin\./', $RCMAIL->action)) {


+ 5
- 2
modules/CRM/Roundcube/RC/plugins/acl/acl.js View File

@@ -1,5 +1,8 @@
/**
* ACL plugin script
*
* @version @package_version@
* @author Aleksander Machniak <alec@alec.pl>
*/

if (window.rcmail) {
@@ -350,7 +353,7 @@ rcube_webmail.prototype.acl_init_form = function(id)
id ? this.get_label('acl.editperms') : this.get_label('acl.newuser'),
buttons,
{
button_classes: ['mainaction submit'],
button_classes: ['mainaction'],
modal: true,
closeOnEscape: true,
close: function(e, ui) {
@@ -368,7 +371,7 @@ rcube_webmail.prototype.acl_init_form = function(id)
$('input:checked', type_list).focus();
}

// Returns class name according to ACL comparison result
// Returns class name according to ACL comparision result
rcube_webmail.prototype.acl_class = function(acl1, acl2)
{
var i, len, found = 0;


+ 3
- 1
modules/CRM/Roundcube/RC/plugins/acl/acl.php View File

@@ -3,8 +3,10 @@
/**
* Folders Access Control Lists Management (RFC4314, RFC2086)
*
* @version @package_version@
* @author Aleksander Machniak <alec@alec.pl>
*
*
* Copyright (C) 2011-2012, Kolab Systems AG
*
* This program is free software: you can redistribute it and/or modify
@@ -611,7 +613,7 @@ class acl extends rcube_plugin
* @param array $acl1 ACL rights array (or string)
* @param array $acl2 ACL rights array (or string)
*
* @param int Comparison result, 2 - full match, 1 - partial match, 0 - no match
* @param int Comparision result, 2 - full match, 1 - partial match, 0 - no match
*/
function acl_compare($acl1, $acl2)
{


+ 1
- 1
modules/CRM/Roundcube/RC/plugins/acl/localization/de_DE.inc View File

@@ -21,7 +21,7 @@ $labels['username'] = 'Benutzer:';
$labels['advanced'] = 'Erweiterter Modus';
$labels['newuser'] = 'Eintrag hinzufügen';
$labels['editperms'] = 'Zugriffsrechte bearbeiten';
$labels['actions'] = 'Zugriffsrechteaktionen …';
$labels['actions'] = 'Zugriffsrechte Aktionen...';
$labels['anyone'] = 'Alle Benutzer (anyone)';
$labels['anonymous'] = 'Gäste (anonymous)';
$labels['identifier'] = 'Bezeichnung';


+ 4
- 42
modules/CRM/Roundcube/RC/plugins/acl/localization/fy_NL.inc View File

@@ -15,47 +15,9 @@

For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/
$labels['sharing'] = 'Dielen';
$labels['myrights'] = 'Tagong Rjochten';
$labels['username'] = 'Brûker:';
$labels['advanced'] = 'Avansearre modus';
$labels['newuser'] = 'Ynfier taheakje';
$labels['editperms'] = 'Bewurkje tagongsrjochten';
$labels['actions'] = 'Tagong aksjes...';
$labels['anyone'] = 'Alle brûkers (eltsenien)';
$labels['anonymous'] = 'Gasten (anonym)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Opsykje';
$labels['aclr'] = 'Lêzen berjochten';
$labels['acls'] = 'Bewarje Sjoen steat';
$labels['aclw'] = 'Skriuw flaggen';
$labels['acli'] = 'Ynfoegje (Kopiearje yn)';
$labels['aclp'] = 'Pleatse';
$labels['aclc'] = 'Underlizzende mappen oanmeitsje';
$labels['aclk'] = 'Underlizzende mappen oanmeitsje';
$labels['acld'] = 'Berjochten wiskje';
$labels['aclt'] = 'Berjochten wiskje';
$labels['aclx'] = 'Map ferwiderje';
$labels['acla'] = 'Beheare';
$labels['aclfull'] = 'Folsleine kontrôle';
$labels['aclother'] = 'Oars';
$labels['aclread'] = 'Lêze';
$labels['aclwrite'] = 'Skriuwe';
$labels['acldelete'] = 'Ferwiderje';
$labels['shortacll'] = 'Opsykje';
$labels['shortaclr'] = 'Lêze';
$labels['shortacls'] = 'Hâlde';
$labels['shortaclw'] = 'Skriuwe';
$labels['shortacli'] = 'Ynfoegje';
$labels['shortaclp'] = 'Pleatse';
$labels['shortaclc'] = 'Oanmeitsje';
$labels['shortaclk'] = 'Oanmeitsje';
$labels['shortacld'] = 'Ferwiderje';
$labels['shortaclt'] = 'Ferwiderje';
$labels['shortaclx'] = 'Map ferwiderje';
$labels['shortacla'] = 'Beheare';
$labels['shortaclother'] = 'Oars';
$labels['shortaclread'] = 'Lêze';
$labels['shortaclwrite'] = 'Skriuwe';
$labels['shortacldelete'] = 'Ferwiderje';
$labels['acldelete'] = 'Fuortsmite';
$labels['shortacld'] = 'Fuortsmite';
$labels['shortaclt'] = 'Fuortsmite';
$labels['shortacldelete'] = 'Fuortsmite';
?>

+ 4
- 75
modules/CRM/Roundcube/RC/plugins/acl/localization/sq_AL.inc View File

@@ -15,82 +15,11 @@

For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/
$labels['myrights'] = 'Të drejta Hyrjeje';
$labels['username'] = 'Përdorues:';
$labels['advanced'] = 'Mënyra e përparuar';
$labels['newuser'] = 'Shtoni zë';
$labels['editperms'] = 'Përpunoni leje';
$labels['actions'] = 'Veprime të drejtash hyrjeje…';
$labels['anyone'] = 'Krejt përdoruesit (cilido)';
$labels['anonymous'] = 'Mysafirë (në mënyrë anonime)';
$labels['identifier'] = 'Identifikues';
$labels['acll'] = 'Kërkim';
$labels['aclr'] = 'Lexoni mesazhe';
$labels['acls'] = 'Mbaje gjendjen i Parë';
$labels['acli'] = 'Fut (Kopje te)';
$labels['aclp'] = 'Postim';
$labels['aclc'] = 'Krijo nëndosje';
$labels['aclk'] = 'Krijo nëndosje';
$labels['acld'] = 'Fshiji mesazhet';
$labels['aclt'] = 'Fshiji mesazhet';
$labels['acle'] = 'Spastroje';
$labels['aclx'] = 'Fshije dosjen';
$labels['acla'] = 'Administroni';
$labels['acln'] = 'Shto shënime te mesazhet';
$labels['aclfull'] = 'Kontroll i plotë';
$labels['aclother'] = 'Tjetër';
$labels['aclread'] = 'Leximi';
$labels['aclwrite'] = 'Shkrimi';
$labels['aclr'] = 'Lexo mesazhet';
$labels['aclwrite'] = 'Shkruaj';
$labels['acldelete'] = 'Fshije';
$labels['shortacll'] = 'Kërkim';
$labels['shortaclr'] = 'Leximi';
$labels['shortacls'] = 'Mbaje';
$labels['shortaclw'] = 'Shkrimi';
$labels['shortacli'] = 'Fut';
$labels['shortaclp'] = 'Posto';
$labels['shortaclc'] = 'Krijoje';
$labels['shortaclk'] = 'Krijoje';
$labels['shortaclc'] = 'Krijo';
$labels['shortaclk'] = 'Krijo';
$labels['shortacld'] = 'Fshije';
$labels['shortaclt'] = 'Fshije';
$labels['shortacle'] = 'Spastro';
$labels['shortaclx'] = 'Fshirje dosjeje';
$labels['shortacla'] = 'Administro';
$labels['shortacln'] = 'Shto shënim';
$labels['shortaclother'] = 'Tjetër';
$labels['shortaclread'] = 'Leximi';
$labels['shortaclwrite'] = 'Shkrimi';
$labels['shortacldelete'] = 'Fshirjeje';
$labels['longacll'] = 'Dosja është e dukshme në lista dhe në të mund të pajtoheni';
$labels['longaclr'] = 'Dosja mund të hapet për lexim';
$labels['longacls'] = 'Mund të ndryshohet shenja Mesazhe të Parë';
$labels['longaclw'] = 'Mund të ndryshohen shenjat dhe fjalëkyçet për mesazhet, hiq të Parë dhe të Fshirë';
$labels['longacli'] = 'Mesazhet mund të shkruhen ose kopjohen në dosje';
$labels['longaclp'] = 'Mesazhet mund të postohen te kjo dosje';
$labels['longaclc'] = 'Dosjet mund të krijohen (ose riemërtohen) drejt e nën këtë dosje';
$labels['longaclk'] = 'Dosjet mund të krijohen (ose riemërtohen) drejt e nën këtë dosje';
$labels['longacld'] = 'Mund të ndryshohet shenja Mesazhe të Fshirë';
$labels['longaclt'] = 'Mund të ndryshohet shenja Mesazhe të Parë';
$labels['longacle'] = 'Mesazhet mund të spastrohen';
$labels['longaclx'] = 'Dosja mund të fshihet ose riemërtohet';
$labels['longacla'] = 'Mund të ndryshohen të drejta hyrjeje te dosja';
$labels['longacln'] = 'Mund të ndryshohen tejtëdhëna të përbashkëta (shënime) mesazhesh';
$labels['longaclfull'] = 'Kontroll i plotë, përfshi administrim dosjesh';
$labels['longaclread'] = 'Dosja mund të hapet për lexim';
$labels['longaclwrite'] = 'Mesazheve mund t’u vihet shenjë, shkruhen ose kopjohen te dosja';
$labels['longacldelete'] = 'Mesazhet mund të fshihen';
$labels['longaclother'] = 'Të tjera të drejta hyrjesh';
$labels['ariasummaryacltable'] = 'Listë të drejtash hyrjeje';
$labels['arialabelaclactions'] = 'Paraqit veprime';
$labels['arialabelaclform'] = 'Formular të drejtash hyrjeje';
$messages['deleting'] = 'Po fshihen të drejta hyrjeje…';
$messages['saving'] = 'Po ruhen të drejtash hyrjeje…';
$messages['updatesuccess'] = 'U ndryshuan me sukses të drejta hyrjeje';
$messages['deletesuccess'] = 'U fshinë me sukses të drejta hyrjeje';
$messages['createsuccess'] = 'U shtuan me sukses të drejta hyrjeje';
$messages['updateerror'] = 'S’arrihet të përditësohen të drejta hyrjeje';
$messages['deleteerror'] = 'S’arrihet të fshihen të drejta hyrjeje';
$messages['createerror'] = 'S’arrihet të shtohen të drejta hyrjeje';
$messages['deleteconfirm'] = 'Jeni i sigurt, doni t’i hiqni të drejta hyrjeje përdoruesit(ve) të përzgjedhur?';
$messages['norights'] = 'S’janë specifikuar të drejta!';
$messages['nouser'] = 'S’është specifikuar emër përdoruesi!';
?>

+ 0
- 4
modules/CRM/Roundcube/RC/plugins/acl/localization/sr_CS.inc View File

@@ -45,10 +45,6 @@ $labels['shortaclr'] = 'Прочитана';
$labels['shortacls'] = 'Задржи';
$labels['shortaclw'] = 'Пиши';
$labels['shortacli'] = 'Убаци';
$labels['shortaclc'] = 'Направи';
$labels['shortaclk'] = 'Направи';
$labels['shortacld'] = 'Обриши';
$labels['shortaclt'] = 'Обриши';
$labels['shortaclother'] = 'Друго';
$labels['shortaclread'] = 'Читање';
$labels['shortaclwrite'] = 'Упис';


+ 50
- 50
modules/CRM/Roundcube/RC/plugins/acl/localization/tr_TR.inc View File

@@ -16,30 +16,30 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/
$labels['sharing'] = 'Paylaşım';
$labels['myrights'] = 'Erişim İzinleri';
$labels['myrights'] = 'Erişim Hakları';
$labels['username'] = 'Kullanıcı:';
$labels['advanced'] = 'Gelişmiş kip';
$labels['newuser'] = 'Kayıt ekle';
$labels['advanced'] = 'Gelişmiş mod';
$labels['newuser'] = 'Girdi ekle';
$labels['editperms'] = 'İzinleri düzenle';
$labels['actions'] = 'Erişim izinleri işlemleri...';
$labels['anyone'] = 'Tüm kullanıcılar (kim olursa)';
$labels['anonymous'] = 'Ziyaretçiler (isimsiz)';
$labels['actions'] = 'Erişim hakları aksiyonları...';
$labels['anyone'] = 'Tüm kullanıcılar(kim olursa)';
$labels['anonymous'] = 'Ziyaretçiler(anonim)';
$labels['identifier'] = 'Tanımlayıcı';
$labels['acll'] = 'Arama';
$labels['aclr'] = 'İletileri oku';
$labels['acls'] = 'Okundu durumu korunsun';
$labels['aclw'] = 'Yazma işaretleri';
$labels['acli'] = 'Ekle (kopyala)';
$labels['aclr'] = 'Mesajları oku';
$labels['acls'] = 'Göründü durumunu muhafaza et';
$labels['aclw'] = 'Yazma bayrakları';
$labels['acli'] = 'Ekle(kopyala)';
$labels['aclp'] = 'Gönder';
$labels['aclc'] = 'Alt klasörler oluştur';
$labels['aclk'] = 'Alt klasörler oluştur';
$labels['acld'] = 'İletileri sil';
$labels['aclt'] = 'İletileri sil';
$labels['aclc'] = 'Alt dizinler oluştur';
$labels['aclk'] = 'Alt dizinler oluştur';
$labels['acld'] = 'Mesajları sil';
$labels['aclt'] = 'Mesajları sil';
$labels['acle'] = 'Sil';
$labels['aclx'] = 'Klasörü sil';
$labels['aclx'] = 'Dizini sil';
$labels['acla'] = 'Yönet';
$labels['acln'] = 'İletilere not ekle';
$labels['aclfull'] = 'Tam denetim';
$labels['acln'] = 'Mesajlara not ekle';
$labels['aclfull'] = 'Tam kontrol';
$labels['aclother'] = 'Diğer';
$labels['aclread'] = 'Oku';
$labels['aclwrite'] = 'Yaz';
@@ -55,7 +55,7 @@ $labels['shortaclk'] = 'Oluştur';
$labels['shortacld'] = 'Sil';
$labels['shortaclt'] = 'Sil';
$labels['shortacle'] = 'Sil';
$labels['shortaclx'] = 'Klasörü sil';
$labels['shortaclx'] = 'Dizin sil';
$labels['shortacla'] = 'Yönet';
$labels['shortacln'] = 'Not ekle';
$labels['shortaclother'] = 'Diğer';
@@ -63,36 +63,36 @@ $labels['shortaclread'] = 'Oku';
$labels['shortaclwrite'] = 'Yaz';
$labels['shortacldelete'] = 'Sil';
$labels['longacll'] = 'Klasör listesinde görülebilir ve abone olunabilir';
$labels['longaclr'] = 'Klasör okunmak üzere açılabilir';
$labels['longacls'] = 'İletilerin Okundu işareti değiştirilebilir';
$labels['longaclw'] = 'Okundu ve Silindi işaretleri dışındaki işaret ve anahtar sözcükler değiştirilebilir';
$labels['longacli'] = 'Klasöre iletiler yazılabilir ya da kopyalanabilir';
$labels['longaclp'] = 'İletiler bu klasöre gönderilebilir';
$labels['longaclc'] = 'Klasörler doğrudan bu klasör altında oluşturulabilir (ya da yeniden adlandırılabilir).';
$labels['longaclk'] = 'Klasörler doğrudan bu klasör altında oluşturulabilir (ya da yeniden adlandırılabilir).';
$labels['longacld'] = 'İleti Silindi işareti değiştirilebilir';
$labels['longaclt'] = 'İleti Silindi işareti değiştirilebilir';
$labels['longacle'] = 'İletiler silinebilir';
$labels['longaclx'] = 'Klasör silinebilir ya da yeniden adlandırılabilir';
$labels['longacla'] = 'Klasör erişim izinleri değiştirilebilir';
$labels['longacln'] = 'İletilerin paylaşılan üst verileri (notlar) değiştirilebilir';
$labels['longaclfull'] = 'Klasör yönetimi dahil tam denetim';
$labels['longaclread'] = 'Klasör okunmak üzere açılabilir';
$labels['longaclwrite'] = 'Klasöre iletiler işaretlenebilir, yazılabilir ya da kopyalanabilir';
$labels['longacldelete'] = 'İletiler silinebilir';
$labels['longaclother'] = 'Diğer erişim izinleri';
$labels['ariasummaryacltable'] = 'Erişim izinleri listesi';
$labels['arialabelaclactions'] = 'İşlem listesi';
$labels['arialabelaclform'] = 'Erişim izinleri formu';
$messages['deleting'] = 'Erişim izinleri siliniyor...';
$messages['saving'] = 'Erişim izinleri kaydediliyor...';
$messages['updatesuccess'] = 'Erişim izinleri değiştirildi';
$messages['deletesuccess'] = 'Erişim izinleri silindi';
$messages['createsuccess'] = 'Erişim izinleri eklendi';
$messages['updateerror'] = 'Erişim izinleri güncellenemedi';
$messages['deleteerror'] = 'Erişim izinleri silinemedi';
$messages['createerror'] = 'Erişim izinleri eklenemedi';
$messages['deleteconfirm'] = 'Seçilmiş kullanıcılar için erişim izinlerini silmek istediğinize emin misiniz?';
$messages['norights'] = 'Herhangi bir izin belirtilmemiş!';
$messages['nouser'] = 'Herhangi bir kullanıcı belirtilmemiş!';
$labels['longaclr'] = 'Dizin yazma için okunabilir';
$labels['longacls'] = 'Mesajların göründü bayrağı değiştirilebilir';
$labels['longaclw'] = 'Görülme ve Silinme bayrakları hariç bayraklar ve anahtar kelimeler değiştirilebilir';
$labels['longacli'] = 'Mesajlar dizini yazılabilir veya kopyalanabilir';
$labels['longaclp'] = 'Mesajlar bu dizine gönderilebilir';
$labels['longaclc'] = 'Dizinler doğrudan bu klasör altında oluşturulabilir veya yeniden adlandırılabilir.';
$labels['longaclk'] = 'Dizinler doğrudan bu klasör altında oluşturulabilir veya yeniden adlandırılabilir.';
$labels['longacld'] = 'mesajları sil bayrakları değiştirilebilir';
$labels['longaclt'] = 'mesajları sil, bayraklar değiştirilebilir';
$labels['longacle'] = 'Mesajlar silinebilir';
$labels['longaclx'] = 'Klasörü silinebilir veya yeniden adlandırılabilir';
$labels['longacla'] = 'Dizin erişim hakları değiştirilebilir';
$labels['longacln'] = 'Mesajların paylaşılan üst verileri (notlar) değiştirilebilir';
$labels['longaclfull'] = 'Dizin yönetimi de dahil olmak üzere tam kontrol';
$labels['longaclread'] = 'Dizin yazma için okunabilir';
$labels['longaclwrite'] = 'Dizin yönetimi de dahil olmak üzere tam kontrol';
$labels['longacldelete'] = 'Mesajlar silinebilir';
$labels['longaclother'] = 'Diğer erişim hakları';
$labels['ariasummaryacltable'] = 'Erişim hakları listesi';
$labels['arialabelaclactions'] = 'Aksiyon listesi';
$labels['arialabelaclform'] = 'Erişim hakları formu';
$messages['deleting'] = 'Erişim hakları siliniyor...';
$messages['saving'] = 'Erişim hakları kaydediliyor...';
$messages['updatesuccess'] = 'Erişim hakları değiştirildi';
$messages['deletesuccess'] = 'Erişim hakları silindi';
$messages['createsuccess'] = 'Erişim hakları eklendi';
$messages['updateerror'] = 'Erişim hakları güncellenemedi';
$messages['deleteerror'] = 'Erişim haklarını silinemedi';
$messages['createerror'] = 'Erişim hakları eklenemedi';
$messages['deleteconfirm'] = 'Seçilen kullanıcılar için erişim haklarını silmek istediğinizden emin misiniz?';
$messages['norights'] = 'Hiçbir hak belirtilmemiş!';
$messages['nouser'] = 'Hbir kullanıcı belirtilmemiş!';
?>

+ 28
- 37
modules/CRM/Roundcube/RC/plugins/acl/localization/zh_TW.inc View File

@@ -15,32 +15,29 @@

For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/
$labels['sharing'] = '享';
$labels['sharing'] = '享';
$labels['myrights'] = '存取權限';
$labels['username'] = '使用者:';
$labels['advanced'] = '進階模式';
$labels['newuser'] = '新增項目';
$labels['editperms'] = '編輯權限';
$labels['actions'] = '權限設定...';
$labels['anyone'] = '所有使用者 (任何人)';
$labels['anonymous'] = '訪客 (匿名)';
$labels['identifier'] = '識別碼';
$labels['actions'] = '權限設定';
$labels['anyone'] = '所有使用者 (anyone)';
$labels['anonymous'] = '訪客 (anonymous)';
$labels['identifier'] = '識別';
$labels['acll'] = '尋找';
$labels['aclr'] = '讀取郵件';
$labels['aclr'] = '讀取訊息';
$labels['acls'] = '保持上線狀態';
$labels['aclw'] = '寫入標';
$labels['acli'] = '插入 (複製到這裡)';
$labels['aclw'] = '寫入標';
$labels['acli'] = '插入(複製到這裡)';
$labels['aclp'] = '發表';
$labels['aclc'] = '建立子資料夾';
$labels['aclk'] = '建立子資料夾';
$labels['acld'] = '刪除郵件';
$labels['aclt'] = '刪除郵件';
$labels['acld'] = '刪除訊息';
$labels['aclt'] = '刪除訊息';
$labels['acle'] = '刪去';
$labels['aclx'] = '刪除資料夾';
$labels['acla'] = '管理者';
$labels['acln'] = '評注郵件';
$labels['aclfull'] = '完全控制';
$labels['aclother'] = '其';
$labels['aclother'] = '其';
$labels['aclread'] = '讀取';
$labels['aclwrite'] = '寫入';
$labels['acldelete'] = '刪除';
@@ -57,33 +54,27 @@ $labels['shortaclt'] = '刪除';
$labels['shortacle'] = '刪去';
$labels['shortaclx'] = '資料夾刪除';
$labels['shortacla'] = '管理者';
$labels['shortacln'] = '評注';
$labels['shortaclother'] = '其他';
$labels['shortaclother'] = '其它';
$labels['shortaclread'] = '讀取';
$labels['shortaclwrite'] = '寫入';
$labels['shortacldelete'] = '刪除';
$labels['longacll'] = '此資料夾可以觀看和訂閱';
$labels['longaclr'] = '此資料夾可以開啟並讀取';
$labels['longacls'] = '能修改郵件旗標';
$labels['longaclw'] = '郵件旗標和關鍵字可以變更,不包含已檢視和刪除的';
$labels['longacli'] = '郵件能寫入或複製到資料夾';
$labels['longaclp'] = '郵件能發表到此資料夾';
$labels['longaclc'] = '這個資料夾之下可以建子資料夾 (或重新命名)';
$labels['longaclk'] = '這個資料夾之下可以建子資料夾 (或重新命名)';
$labels['longacld'] = '能修改郵件刪除旗標';
$labels['longaclt'] = '能修改郵件刪除旗標';
$labels['longacle'] = '能刪去郵件';
$labels['longaclx'] = '資料夾能刪除或重新命名';
$labels['longacll'] = '此資料夾權限可以訂閱和瀏覽';
$labels['longaclr'] = '資料夾能被打開與讀取';
$labels['longacls'] = '能修改訊息標幟';
$labels['longaclw'] = '內容旗標和關鍵字可以變更,不包含已檢視和刪除的';
$labels['longacli'] = '訊息能寫入或複製到資料夾';
$labels['longaclp'] = '訊息能被投遞到這個資料夾';
$labels['longaclc'] = '這個資料夾之下可以建子資料夾(或重新命名)';
$labels['longaclk'] = '這個資料夾之下可以建子資料夾(或重新命名)';
$labels['longacld'] = '能修改訊息刪除標幟';
$labels['longaclt'] = '能修改訊息刪除標幟';
$labels['longacle'] = '能抹除訊息';
$labels['longaclx'] = '資料夾能刪除或重新命名';
$labels['longacla'] = '能變更資料夾權限';
$labels['longacln'] = '郵件共享的元資料 (評注) 能更改';
$labels['longaclfull'] = '完全控制包含資料夾管理';
$labels['longaclread'] = '資料夾能開啟並讀取';
$labels['longaclwrite'] = '郵件可以標記、寫入或複製到資料夾';
$labels['longacldelete'] = '郵件能刪除';
$labels['longaclother'] = '其他權限';
$labels['ariasummaryacltable'] = '權限清單';
$labels['arialabelaclactions'] = '清單動作';
$labels['arialabelaclform'] = '權限表單';
$labels['longaclread'] = '資料夾能被打開與讀取';
$labels['longaclwrite'] = '信件可以被標記、編寫或複製到資料夾';
$labels['longacldelete'] = '訊息能被刪除';
$messages['deleting'] = '刪除權限...';
$messages['saving'] = '儲存權限...';
$messages['updatesuccess'] = '權限變更完成';
@@ -92,7 +83,7 @@ $messages['createsuccess'] = '權限新增完成';
$messages['updateerror'] = '無法更新權限';
$messages['deleteerror'] = '無法刪除權限';
$messages['createerror'] = '無法新增權限';
$messages['deleteconfirm'] = '確定要刪除所選使用者的權限嗎?';
$messages['deleteconfirm'] = '您確定要刪除所選取使用者的權限嗎?';
$messages['norights'] = '沒有指定任何權限';
$messages['nouser'] = '沒有指定用戶名稱';
?>

+ 2
- 2
modules/CRM/Roundcube/RC/plugins/acl/skins/classic/acl.css View File

@@ -47,12 +47,12 @@

#acltable tbody td.partial
{
background: url(images/partial.png) center no-repeat;
background: url(images/partial.png?v=05d7.389) center no-repeat;
}

#acltable tbody td.enabled
{
background: url(images/enabled.png) center no-repeat;
background: url(images/enabled.png?v=9d9a.674) center no-repeat;
}

#acltable tr.selected td


+ 12
- 12
modules/CRM/Roundcube/RC/plugins/acl/skins/larry/acl.css View File

@@ -63,14 +63,14 @@

#acltable tbody td.partial
{
background-image: url(images/partial.png);
background-image: url(images/partial.png?v=05d7.389);
background-position: center;
background-repeat: no-repeat;
}

#acltable tbody td.enabled
{
background-image: url(images/enabled.png);
background-image: url(images/enabled.png?v=9d9a.674);
background-position: center;
background-repeat: no-repeat;
}
@@ -78,21 +78,21 @@
#acltable tbody tr.selected td.partial
{
background-color: #019bc6;
background-image: url(images/partial.png), -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/partial.png), -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
background-image: url(images/partial.png), -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/partial.png), -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/partial.png), linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/partial.png?v=05d7.389), -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/partial.png?v=05d7.389), -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
background-image: url(images/partial.png?v=05d7.389), -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/partial.png?v=05d7.389), -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/partial.png?v=05d7.389), linear-gradient(top, #019bc6 0%, #017cb4 100%);
}

#acltable tbody tr.selected td.enabled
{
background-color: #019bc6;
background-image: url(images/enabled.png), -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/enabled.png), -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
background-image: url(images/enabled.png), -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/enabled.png), -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/enabled.png), linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/enabled.png?v=9d9a.674), -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/enabled.png?v=9d9a.674), -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
background-image: url(images/enabled.png?v=9d9a.674), -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/enabled.png?v=9d9a.674), -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
background-image: url(images/enabled.png?v=9d9a.674), linear-gradient(top, #019bc6 0%, #017cb4 100%);
}

#aclform


+ 1
- 0
modules/CRM/Roundcube/RC/plugins/additional_message_headers/additional_message_headers.php View File

@@ -9,6 +9,7 @@
* Enable the plugin in config.inc.php and add your desired headers:
* $config['additional_message_headers'] = array('User-Agent' => 'My-Very-Own-Webmail');
*
* @version @package_version@
* @author Ziba Scott
* @website http://roundcube.net
*/


+ 25
- 19
modules/CRM/Roundcube/RC/plugins/archive/archive.js View File

@@ -1,10 +1,11 @@
/**
* Archive plugin script
* @version 2.4
*
* @licstart The following is the entire license notice for the
* JavaScript code in this file.
*
* Copyright (c) 2012-2016, The Roundcube Dev Team
* Copyright (c) 2012-2014, The Roundcube Dev Team
*
* The JavaScript code in this page is free software: you can redistribute it
* and/or modify it under the terms of the GNU General Public License
@@ -17,30 +18,29 @@

function rcmail_archive(prop)
{
if (rcmail_is_archive())
if (!rcmail.env.uid && (!rcmail.message_list || !rcmail.message_list.get_selection().length))
return;

var post_data = rcmail.selection_post_data();

// exit if selection is empty
if (!post_data._uid)
return;

rcmail.show_contentframe(false);

// Disable message command buttons until a message is selected
rcmail.enable_command(rcmail.env.message_commands, false);
rcmail.enable_command('plugin.archive', false);

// let the server sort the messages to the according subfolders
rcmail.with_selected_messages('move', post_data, null, 'plugin.move2archive');
if (!rcmail_is_archive()) {
if (!rcmail.env.archive_type) {
// simply move to archive folder (if no partition type is set)
rcmail.command('move', rcmail.env.archive_folder);
}
else {
// let the server sort the messages to the according subfolders
rcmail.http_post('plugin.move2archive', rcmail.selection_post_data());
}
}
}

function rcmail_is_archive()
{
// check if current folder is an archive folder or one of its children
return rcmail.env.mailbox == rcmail.env.archive_folder
|| rcmail.env.mailbox.startsWith(rcmail.env.archive_folder + rcmail.env.delimiter);
if (rcmail.env.mailbox == rcmail.env.archive_folder
|| rcmail.env.mailbox.startsWith(rcmail.env.archive_folder + rcmail.env.delimiter)
) {
return true;
}
}

// callback for app-onload event
@@ -59,5 +59,11 @@ if (window.rcmail) {
var li;
if (rcmail.env.archive_folder && (li = rcmail.get_folder_li(rcmail.env.archive_folder, '', true)))
$(li).addClass('archive');
});

// callback for server response
rcmail.addEventListener('plugin.move2archive_response', function(result) {
if (result.update)
rcmail.command('list'); // refresh list
});
})
}

+ 250
- 440
modules/CRM/Roundcube/RC/plugins/archive/archive.php View File

@@ -6,484 +6,294 @@
* Plugin that adds a new button to the mailbox toolbar
* to move messages to a (user selectable) archive folder.
*
* @version 3.2
* @version 2.4
* @license GNU GPLv3+
* @author Andre Rodier, Thomas Bruederli, Aleksander Machniak
*/
class archive extends rcube_plugin
{
public $task = 'settings|mail';


function init()
{
$rcmail = rcmail::get_instance();

// register special folder type
rcube_storage::$folder_types[] = 'archive';

if ($rcmail->task == 'mail' && ($rcmail->action == '' || $rcmail->action == 'show')
&& ($archive_folder = $rcmail->config->get('archive_mbox'))
) {
$skin_path = $this->local_skin_path();
if (is_file($this->home . "/$skin_path/archive.css")) {
$this->include_stylesheet("$skin_path/archive.css");
}

$this->include_script('archive.js');
$this->add_texts('localization', true);
$this->add_button(
array(
'type' => 'link',
'label' => 'buttontext',
'command' => 'plugin.archive',
'class' => 'button buttonPas archive disabled',
'classact' => 'button archive',
'width' => 32,
'height' => 32,
'title' => 'buttontitle',
'domain' => $this->ID,
'innerclass' => 'inner',
),
'toolbar');

// register hook to localize the archive folder
$this->add_hook('render_mailboxlist', array($this, 'render_mailboxlist'));

// set env variables for client
$rcmail->output->set_env('archive_folder', $archive_folder);
$rcmail->output->set_env('archive_type', $rcmail->config->get('archive_type',''));
}
else if ($rcmail->task == 'mail') {
// handler for ajax request
$this->register_action('plugin.move2archive', array($this, 'move_messages'));
}
else if ($rcmail->task == 'settings') {
$this->add_hook('preferences_list', array($this, 'prefs_table'));
$this->add_hook('preferences_save', array($this, 'save_prefs'));
}
function init()
{
$rcmail = rcmail::get_instance();

// register special folder type
rcube_storage::$folder_types[] = 'archive';

if ($rcmail->task == 'mail' && ($rcmail->action == '' || $rcmail->action == 'show')
&& ($archive_folder = $rcmail->config->get('archive_mbox'))
) {
$skin_path = $this->local_skin_path();
if (is_file($this->home . "/$skin_path/archive.css"))
$this->include_stylesheet("$skin_path/archive.css");

$this->include_script('archive.js');
$this->add_texts('localization', true);
$this->add_button(
array(
'type' => 'link',
'label' => 'buttontext',
'command' => 'plugin.archive',
'class' => 'button buttonPas archive disabled',
'classact' => 'button archive',
'width' => 32,
'height' => 32,
'title' => 'buttontitle',
'domain' => $this->ID,
),
'toolbar');

// register hook to localize the archive folder
$this->add_hook('render_mailboxlist', array($this, 'render_mailboxlist'));

// set env variables for client
$rcmail->output->set_env('archive_folder', $archive_folder);
$rcmail->output->set_env('archive_type', $rcmail->config->get('archive_type',''));
}

/**
* Hook to give the archive folder a localized name in the mailbox list
*/
function render_mailboxlist($p)
{
$rcmail = rcmail::get_instance();
$archive_folder = $rcmail->config->get('archive_mbox');
$show_real_name = $rcmail->config->get('show_real_foldernames');

// set localized name for the configured archive folder
if ($archive_folder && !$show_real_name) {
if (isset($p['list'][$archive_folder])) {
$p['list'][$archive_folder]['name'] = $this->gettext('archivefolder');
}
else {
// search in subfolders
$this->_mod_folder_name($p['list'], $archive_folder, $this->gettext('archivefolder'));
}
}

return $p;
else if ($rcmail->task == 'mail') {
// handler for ajax request
$this->register_action('plugin.move2archive', array($this, 'move_messages'));
}
else if ($rcmail->task == 'settings') {
$dont_override = $rcmail->config->get('dont_override', array());
if (!in_array('archive_mbox', $dont_override)) {
$this->add_hook('preferences_list', array($this, 'prefs_table'));
$this->add_hook('preferences_save', array($this, 'save_prefs'));
}
}
}

/**
* Hook to give the archive folder a localized name in the mailbox list
*/
function render_mailboxlist($p)
{
$rcmail = rcmail::get_instance();
$archive_folder = $rcmail->config->get('archive_mbox');
$show_real_name = $rcmail->config->get('show_real_foldernames');

// set localized name for the configured archive folder
if ($archive_folder && !$show_real_name) {
if (isset($p['list'][$archive_folder]))
$p['list'][$archive_folder]['name'] = $this->gettext('archivefolder');
else // search in subfolders
$this->_mod_folder_name($p['list'], $archive_folder, $this->gettext('archivefolder'));
}

/**
* Helper method to find the archive folder in the mailbox tree
*/
private function _mod_folder_name(&$list, $folder, $new_name)
{
foreach ($list as $idx => $item) {
if ($item['id'] == $folder) {
$list[$idx]['name'] = $new_name;
return true;
}
else if (!empty($item['folders'])) {
if ($this->_mod_folder_name($list[$idx]['folders'], $folder, $new_name)) {
return true;
}
}
}

return false;
return $p;
}

/**
* Helper method to find the archive folder in the mailbox tree
*/
private function _mod_folder_name(&$list, $folder, $new_name)
{
foreach ($list as $idx => $item) {
if ($item['id'] == $folder) {
$list[$idx]['name'] = $new_name;
return true;
} else if (!empty($item['folders']))
if ($this->_mod_folder_name($list[$idx]['folders'], $folder, $new_name))
return true;
}
return false;
}

/**
* Plugin action to move the submitted list of messages to the archive subfolders
* according to the user settings and their headers.
*/
function move_messages()
{
$this->add_texts('localization');

$rcmail = rcmail::get_instance();
$storage = $rcmail->get_storage();
$delimiter = $storage->get_hierarchy_delimiter();
$archive_folder = $rcmail->config->get('archive_mbox');
$archive_type = $rcmail->config->get('archive_type', '');
$current_mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);

$result = array('reload' => false, 'update' => false, 'errors' => array());
$folders = array();
$uids = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
$search_request = rcube_utils::get_input_value('_search', rcube_utils::INPUT_GPC);

if ($uids == '*') {
$index = $storage->index(null, rcmail_sort_column(), rcmail_sort_order());
$messageset = array($current_mbox => $index->get());
}
else {
$messageset = rcmail::get_uids();
}

/**
* Plugin action to move the submitted list of messages to the archive subfolders
* according to the user settings and their headers.
*/
function move_messages()
{
$rcmail = rcmail::get_instance();

// only process ajax requests
if (!$rcmail->output->ajax_call) {
return;
}
foreach ($messageset as $mbox => $uids) {
$storage->set_folder(($current_mbox = $mbox));

$this->add_texts('localization');

$storage = $rcmail->get_storage();
$delimiter = $storage->get_hierarchy_delimiter();
$read_on_move = (bool) $rcmail->config->get('read_on_archive');
$archive_type = $rcmail->config->get('archive_type', '');
$archive_folder = $rcmail->config->get('archive_mbox');
$archive_prefix = $archive_folder . $delimiter;
$current_mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);
$search_request = rcube_utils::get_input_value('_search', rcube_utils::INPUT_GPC);
$uids = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);

// count messages before changing anything
if ($_POST['_from'] != 'show') {
$threading = (bool) $storage->get_threading();
$old_count = $storage->count(null, $threading ? 'THREADS' : 'ALL');
$old_pages = ceil($old_count / $storage->get_pagesize());
foreach ($uids as $uid) {
if (!$archive_folder || !($message = $rcmail->storage->get_message($uid))) {
continue;
}

$count = 0;

// this way response handler for 'move' action will be executed
$rcmail->action = 'move';
$this->result = array(
'reload' => false,
'error' => false,
'sources' => array(),
'destinations' => array(),
);

foreach (rcmail::get_uids(null, null, $multifolder) as $mbox => $uids) {
if (!$archive_folder || strpos($mbox, $archive_prefix) === 0) {
$count = count($uids);
continue;
}
else if (!$archive_type || $archive_type == 'folder') {
$folder = $archive_folder;
$subfolder = null;
switch ($archive_type) {
case 'year':
$subfolder = $rcmail->format_date($message->timestamp, 'Y');
break;

if ($archive_type == 'folder') {
// compose full folder path
$folder .= $delimiter . $mbox;
case 'month':
$subfolder = $rcmail->format_date($message->timestamp, 'Y') . $delimiter . $rcmail->format_date($message->timestamp, 'm');
break;

// create archive subfolder if it doesn't yet exist
$this->subfolder_worker($folder);
}
case 'folder':
$subfolder = $current_mbox;
break;

$count += $this->move_messages_worker($uids, $mbox, $folder, $read_on_move);
case 'sender':
$from = $message->get('from');
if (preg_match('/[\b<](.+@.+)[\b>]/i', $from, $m)) {
$subfolder = $m[1];
}
else {
if ($uids == '*') {
$index = $storage->index(null, rcmail_sort_column(), rcmail_sort_order());
$uids = $index->get();
}

$messages = $storage->fetch_headers($mbox, $uids);
$execute = array();

foreach ($messages as $message) {
$subfolder = null;
switch ($archive_type) {
case 'year':
$subfolder = $rcmail->format_date($message->timestamp, 'Y');
break;

case 'month':
$subfolder = $rcmail->format_date($message->timestamp, 'Y')
. $delimiter . $rcmail->format_date($message->timestamp, 'm');
break;

case 'tbmonth':
$subfolder = $rcmail->format_date($message->timestamp, 'Y')
. $delimiter . $rcmail->format_date($message->timestamp, 'Y')
. '-' . $rcmail->format_date($message->timestamp, 'm');
break;

case 'sender':
$subfolder = $this->sender_subfolder($message->get('from'));
break;
}

// compose full folder path
$folder = $archive_folder . ($subfolder ? $delimiter . $subfolder : '');

$execute[$folder][] = $message->uid;
}

foreach ($execute as $folder => $uids) {
// create archive subfolder if it doesn't yet exist
$this->subfolder_worker($folder);

$count += $this->move_messages_worker($uids, $mbox, $folder, $read_on_move);
}
}
}

if ($this->result['error']) {
if ($_POST['_from'] != 'show') {
$rcmail->output->command('list_mailbox');
$subfolder = $this->gettext('unkownsender');
}

$rcmail->output->show_message($this->gettext('archiveerror'), 'warning');
$rcmail->output->send();
}

if (!empty($_POST['_refresh'])) {
// FIXME: send updated message rows instead of reloading the entire list
$rcmail->output->command('refresh_list');
}
else {
$addrows = true;
}
// replace reserved characters in folder name
$repl = $delimiter == '-' ? '_' : '-';
$replacements[$delimiter] = $repl;
$replacements['.'] = $repl; // some IMAP server do not allow . characters
$subfolder = strtr($subfolder, $replacements);
break;

// refresh saved search set after moving some messages
if ($search_request && $rcmail->storage->get_search_set()) {
$_SESSION['search'] = $rcmail->storage->refresh_search();
default:
$subfolder = '';
break;
}

if ($_POST['_from'] == 'show') {
if ($next = rcube_utils::get_input_value('_next_uid', rcube_utils::INPUT_GPC)) {
$rcmail->output->command('show_message', $next);
}
else {
$rcmail->output->command('command', 'list');
// compose full folder path
$folder = $archive_folder . ($subfolder ? $delimiter . $subfolder : '');

// create archive subfolder if it doesn't yet exist
// we'll create all folders in the path
if (!in_array($folder, $folders)) {
if (empty($list)) {
$list = $storage->list_folders('', $archive_folder . '*', 'mail', null, true);
}
$path = explode($delimiter, $folder);

for ($i=0; $i<count($path); $i++) {
$_folder = implode($delimiter, array_slice($path, 0, $i+1));
if (!in_array($_folder, $list)) {
if ($storage->create_folder($_folder, true)) {
$result['reload'] = true;
$list[] = $_folder;
}
}
}

$rcmail->output->send();
$folders[] = $folder;
}

$mbox = $storage->get_folder();
$msg_count = $storage->count(null, $threading ? 'THREADS' : 'ALL');
$exists = $storage->count($mbox, 'EXISTS', true);
$page_size = $storage->get_pagesize();
$page = $storage->get_page();
$pages = ceil($msg_count / $page_size);
$nextpage_count = $old_count - $page_size * $page;
$remaining = $msg_count - $page_size * ($page - 1);

// jump back one page (user removed the whole last page)
if ($page > 1 && $remaining == 0) {
$page -= 1;
$storage->set_page($page);
$_SESSION['page'] = $page;
$jump_back = true;
}

// update message count display
$rcmail->output->set_env('messagecount', $msg_count);
$rcmail->output->set_env('current_page', $page);
$rcmail->output->set_env('pagecount', $pages);
$rcmail->output->set_env('exists', $exists);

// update mailboxlist
$unseen_count = $msg_count ? $storage->count($mbox, 'UNSEEN') : 0;
$old_unseen = rcmail_get_unseen_count($mbox);
$quota_root = $multifolder ? $this->result['sources'][0] : 'INBOX';

if ($old_unseen != $unseen_count) {
$rcmail->output->command('set_unread_count', $mbox, $unseen_count, ($mbox == 'INBOX'));
rcmail_set_unseen_count($mbox, $unseen_count);
}

$rcmail->output->command('set_quota', $rcmail->quota_content(null, $quota_root));
$rcmail->output->command('set_rowcount', rcmail_get_messagecount_text($msg_count), $mbox);

if ($threading) {
$count = rcube_utils::get_input_value('_count', rcube_utils::INPUT_POST);
}

// add new rows from next page (if any)
if ($addrows && $count && $uids != '*' && ($jump_back || $nextpage_count > 0)) {
$a_headers = $storage->list_messages($mbox, null,
rcmail_sort_column(), rcmail_sort_order(), $jump_back ? null : $count);

rcmail_js_message_list($a_headers, false);
}

if ($this->result['reload']) {
$rcmail->output->show_message($this->gettext('archivedreload'), 'confirmation');
// move message to target folder
if ($storage->move_message(array($uid), $folder)) {
$result['update'] = true;
}
else {
$rcmail->output->show_message($this->gettext('archived'), 'confirmation');

if (!$read_on_move) {
foreach ($this->result['destinations'] as $folder) {
rcmail_send_unread_count($folder, true);
}
}
$result['errors'][] = $uid;
}

// send response
$rcmail->output->send();
} // end for
}

/**
* Move messages from one folder to another and mark as read if needed
*/
private function move_messages_worker($uids, $from_mbox, $to_mbox, $read_on_move)
{
$storage = rcmail::get_instance()->get_storage();

if ($read_on_move) {
// don't flush cache (4th argument)
$storage->set_flag($uids, 'SEEN', $from_mbox, true);
}

// move message to target folder
if ($storage->move_message($uids, $to_mbox, $from_mbox)) {
if (!in_array($from_mbox, $this->result['sources'])) {
$this->result['sources'][] = $from_mbox;
}
if (!in_array($to_mbox, $this->result['destinations'])) {
$this->result['destinations'][] = $to_mbox;
}

return count($uids);
}

$this->result['error'] = true;
// send response
if ($result['errors']) {
$rcmail->output->show_message($this->gettext('archiveerror'), 'warning');
}

/**
* Create archive subfolder if it doesn't yet exist
*/
private function subfolder_worker($folder)
{
$storage = rcmail::get_instance()->get_storage();
$delimiter = $storage->get_hierarchy_delimiter();

if ($this->folders === null) {
$this->folders = $storage->list_folders('', $archive_folder . '*', 'mail', null, true);
}

if (!in_array($folder, $this->folders)) {
$path = explode($delimiter, $folder);

// we'll create all folders in the path
for ($i=0; $i<count($path); $i++) {
$_folder = implode($delimiter, array_slice($path, 0, $i+1));
if (!in_array($_folder, $this->folders)) {
if ($storage->create_folder($_folder, true)) {
$this->result['reload'] = true;
$this->folders[] = $_folder;
}
}
}
}
if ($result['reload']) {
$rcmail->output->show_message($this->gettext('archivedreload'), 'confirmation');
}

/**
* Hook to inject plugin-specific user settings
*/
function prefs_table($args)
{
global $CURR_SECTION;

$this->add_texts('localization');

$rcmail = rcmail::get_instance();
$dont_override = $rcmail->config->get('dont_override', array());

if ($args['section'] == 'folders' && !in_array('archive_mbox', $dont_override)) {
$mbox = $rcmail->config->get('archive_mbox');
$type = $rcmail->config->get('archive_type');

// load folders list when needed
if ($CURR_SECTION) {
$select = $rcmail->folder_selector(array(
'noselection' => '---',
'realnames' => true,
'maxlength' => 30,
'folder_filter' => 'mail',
'folder_rights' => 'w',
'onchange' => "if ($(this).val() == 'INBOX') $(this).val('')",