From 4212156c5c79d2f58342feb0d3ed1893f177bcab Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9my=20Bobbio?= Date: Sat, 18 Jun 2011 17:05:19 +0200 Subject: [PATCH] Imported Upstream version 0.5 --- .htaccess | 1 + CHANGELOG | 163 +- INSTALL | 56 +- INSTALL.orig | 53 +- README | 40 +- SQL/mssql.initial.sql | 115 +- SQL/mssql.upgrade.sql | 99 + SQL/mysql.initial.sql | 73 +- SQL/mysql.update.sql | 86 +- SQL/postgres.initial.sql | 110 +- SQL/postgres.update.sql | 49 +- SQL/sqlite.initial.sql | 33 +- SQL/sqlite.update.sql | 143 +- UPGRADING | 110 +- bin/cleandb.sh | 81 + bin/{decrypt.php => decrypt.sh} | 10 +- bin/jsshrink.sh | 48 + bin/jsunshrink.sh | 24 + bin/msgexport.sh | 44 +- bin/msgimport.sh | 43 +- bin/update.sh | 29 +- config/db.inc.php.dist | 14 +- config/main.inc.php.dist | 520 +- config/mimetypes.php | 2 + index.php | 144 +- installer/check.php | 90 +- installer/config.php | 26 +- installer/index.php | 8 +- installer/rcube_install.php | 105 +- installer/test.php | 65 +- installer/utils.php | 5 +- installer/welcome.html | 4 +- .../additional_message_headers.php | 33 +- .../config.inc.php.dist | 14 + .../additional_message_headers/package.xml | 47 + plugins/archive/archive.js | 8 +- plugins/archive/archive.php | 48 +- plugins/archive/localization/cs_CZ.inc | 4 +- plugins/archive/localization/es_AR.inc | 10 + plugins/archive/localization/es_ES.inc | 10 + plugins/archive/localization/ja_JP.inc | 10 + plugins/archive/localization/nl_NL.inc | 8 + plugins/archive/localization/sv_SE.inc | 8 + plugins/archive/localization/zh_TW.inc | 8 + plugins/archive/package.xml | 64 + plugins/autologon/autologon.php | 3 +- .../database_attachments.php | 8 +- plugins/emoticons/emoticons.php | 84 +- .../example_addressbook.php | 19 +- .../example_addressbook_backend.php | 39 +- .../filesystem_attachments.php | 33 +- plugins/help/config.inc.php.dist | 3 - plugins/help/content/about.html | 2 +- plugins/help/help.php | 126 +- plugins/help/localization/cs_CZ.inc | 4 +- plugins/help/localization/da_DK.inc | 8 + plugins/help/localization/de_DE.inc | 8 + plugins/help/localization/es_ES.inc | 8 + plugins/help/localization/ja_JP.inc | 10 + plugins/help/localization/ru_RU.inc | 23 + plugins/help/localization/zh_TW.inc | 8 + plugins/help/skins/default/help.css | 13 +- .../help/skins/default/templates/help.html | 15 +- .../http_authentication.php | 7 +- plugins/managesieve/Changelog | 65 + plugins/managesieve/config.inc.php.dist | 25 +- plugins/managesieve/lib/Net/Sieve.php | 1595 +-- plugins/managesieve/lib/rcube_sieve.php | 1611 +-- plugins/managesieve/localization/bg_BG.inc | 2 +- plugins/managesieve/localization/cs_CZ.inc | 2 +- plugins/managesieve/localization/de_CH.inc | 2 +- plugins/managesieve/localization/de_DE.inc | 73 +- plugins/managesieve/localization/en_GB.inc | 2 +- plugins/managesieve/localization/en_US.inc | 43 +- plugins/managesieve/localization/es_AR.inc | 81 + plugins/managesieve/localization/es_ES.inc | 31 +- plugins/managesieve/localization/et_EE.inc | 2 +- plugins/managesieve/localization/fi_FI.inc | 21 +- plugins/managesieve/localization/fr_FR.inc | 4 +- plugins/managesieve/localization/hu_HU.inc | 2 +- plugins/managesieve/localization/it_IT.inc | 27 +- plugins/managesieve/localization/ja_JP.inc | 82 + plugins/managesieve/localization/nb_NO.inc | 54 + plugins/managesieve/localization/nl_NL.inc | 2 +- plugins/managesieve/localization/pl_PL.inc | 41 +- plugins/managesieve/localization/pt_BR.inc | 2 +- plugins/managesieve/localization/pt_PT.inc | 80 + plugins/managesieve/localization/ru_RU.inc | 72 +- plugins/managesieve/localization/sk_SK.inc | 85 + plugins/managesieve/localization/sl_SI.inc | 2 +- plugins/managesieve/localization/sv_SE.inc | 45 +- plugins/managesieve/localization/uk_UA.inc | 58 +- plugins/managesieve/localization/zh_CN.inc | 2 +- plugins/managesieve/localization/zh_TW.inc | 78 + plugins/managesieve/managesieve.js | 818 +- plugins/managesieve/managesieve.php | 1907 +-- .../skins/default/filter_add_act.png | Bin 1391 -> 0 bytes .../skins/default/filter_add_pas.png | Bin 1409 -> 0 bytes .../skins/default/filter_add_sel.png | Bin 1305 -> 0 bytes .../skins/default/filter_del_act.png | Bin 1337 -> 0 bytes .../skins/default/filter_del_pas.png | Bin 1339 -> 0 bytes .../skins/default/filter_del_sel.png | Bin 1230 -> 0 bytes .../skins/default/filter_down_act.png | Bin 1327 -> 0 bytes .../skins/default/filter_down_pas.png | Bin 1350 -> 0 bytes .../skins/default/filter_down_sel.png | Bin 1231 -> 0 bytes .../skins/default/filter_up_act.png | Bin 1321 -> 0 bytes .../skins/default/filter_up_pas.png | Bin 1333 -> 0 bytes .../skins/default/filter_up_sel.png | Bin 1192 -> 0 bytes .../managesieve/skins/default/managesieve.css | 213 +- .../skins/default/managesieve_toolbar.png | Bin 0 -> 12093 bytes .../{managesieveedit.html => filteredit.html} | 18 +- .../skins/default/templates/managesieve.html | 33 +- .../skins/default/templates/setedit.html | 24 + plugins/markasjunk/localization/cs_CZ.inc | 4 +- plugins/markasjunk/localization/da_DK.inc | 7 + plugins/markasjunk/localization/de_DE.inc | 6 + plugins/markasjunk/localization/es_AR.inc | 7 + plugins/markasjunk/localization/es_ES.inc | 7 + plugins/markasjunk/localization/ja_JP.inc | 9 + plugins/markasjunk/localization/sk_SK.inc | 15 + plugins/markasjunk/localization/zh_TW.inc | 7 + plugins/markasjunk/markasjunk.js | 8 +- plugins/markasjunk/markasjunk.php | 7 +- plugins/markasjunk/package.xml | 66 + .../new_user_dialog/localization/cs_CZ.inc | 7 + .../new_user_dialog/localization/es_ES.inc | 7 + .../new_user_dialog/localization/gl_ES.inc | 7 + .../new_user_dialog/localization/it_IT.inc | 7 + .../new_user_dialog/localization/ja_JP.inc | 9 + .../new_user_dialog/localization/nl_NL.inc | 7 + .../new_user_dialog/localization/pt_BR.inc | 7 + .../new_user_dialog/localization/pt_PT.inc | 7 + .../new_user_dialog/localization/sk_SK.inc | 16 + .../new_user_dialog/localization/sl_SI.inc | 7 + .../new_user_dialog/localization/zh_TW.inc | 7 + plugins/new_user_dialog/new_user_dialog.php | 70 +- plugins/new_user_dialog/package.xml | 123 + .../new_user_identity/new_user_identity.php | 7 +- plugins/password/README | 106 +- plugins/password/config.inc.php.dist | 96 +- .../password/drivers/chgvirtualminpasswd.c | 28 + plugins/password/drivers/chpass-wrapper.py | 32 + plugins/password/drivers/chpasswd.php | 36 + plugins/password/drivers/hmail.php | 61 + plugins/password/drivers/ldap.php | 196 +- plugins/password/drivers/ldap_simple.php | 242 + plugins/password/drivers/pam.php | 41 + plugins/password/drivers/poppassd.php | 26 +- plugins/password/drivers/sasl.php | 4 +- plugins/password/drivers/sql.php | 112 +- plugins/password/drivers/virtualmin.php | 40 + plugins/password/drivers/vpopmaild.php | 65 +- plugins/password/drivers/xmail.php | 101 + plugins/password/localization/az_AZ.inc | 24 + plugins/password/localization/ca_ES.inc | 20 + plugins/password/localization/cs_CZ.inc | 4 + plugins/password/localization/en_US.inc | 7 +- plugins/password/localization/es_AR.inc | 21 + plugins/password/localization/es_ES.inc | 21 + plugins/password/localization/fi_FI.inc | 22 + plugins/password/localization/it_IT.inc | 3 + plugins/password/localization/ja_JP.inc | 23 + plugins/password/localization/lt_LT.inc | 21 + plugins/password/localization/lv_LV.inc | 20 + plugins/password/localization/pl_PL.inc | 1 + plugins/password/localization/ru_RU.inc | 35 + plugins/password/localization/sk_SK.inc | 29 + plugins/password/localization/sv_SE.inc | 3 + plugins/password/localization/tr_TR.inc | 21 + plugins/password/localization/zh_TW.inc | 21 + plugins/password/package.xml | 243 + plugins/password/password.js | 5 +- plugins/password/password.php | 363 +- .../show_additional_headers.php | 4 +- .../squirrelmail_usercopy/config.inc.php.dist | 20 + .../squirrelmail_usercopy.php | 144 +- .../localization/cs_CZ.inc | 4 +- .../localization/es_ES.inc | 6 + .../localization/ja_JP.inc | 8 + .../localization/zh_TW.inc | 6 + .../subscriptions_option.php | 16 +- plugins/userinfo/localization/cs_CZ.inc | 4 +- plugins/userinfo/localization/da_DK.inc | 9 + plugins/userinfo/localization/es_ES.inc | 9 + plugins/userinfo/localization/ja_JP.inc | 11 + plugins/userinfo/localization/ru_RU.inc | 9 + plugins/userinfo/localization/zh_TW.inc | 9 + plugins/userinfo/userinfo.php | 6 +- .../vcard_attachments/localization/cs_CZ.inc | 21 + .../vcard_attachments/localization/de_CH.inc | 2 +- .../vcard_attachments/localization/de_DE.inc | 2 +- .../vcard_attachments/localization/en_US.inc | 2 +- .../vcard_attachments/localization/es_ES.inc | 7 + .../vcard_attachments/localization/et_EE.inc | 7 + .../vcard_attachments/localization/it_IT.inc | 7 + .../vcard_attachments/localization/ja_JP.inc | 9 + .../vcard_attachments/localization/pl_PL.inc | 7 + .../vcard_attachments/localization/ru_RU.inc | 2 +- .../vcard_attachments/localization/sv_SE.inc | 7 + .../vcard_attachments/localization/zh_TW.inc | 7 + plugins/vcard_attachments/package.xml | 99 + .../vcard_attachments/skins/default/vcard.png | Bin 0 -> 493 bytes .../{ => skins/default}/vcard_add_contact.png | Bin .../vcard_attachments/vcard_attachments.php | 273 +- plugins/vcard_attachments/vcardattach.js | 19 +- plugins/virtuser_file/virtuser_file.php | 106 + plugins/virtuser_query/virtuser_query.php | 117 + program/include/bugs.inc | 111 - program/include/clisetup.php | 90 + program/include/html.php | 130 +- program/include/iniset.php | 108 +- program/include/main.inc | 673 +- program/include/rcmail.php | 749 +- program/include/rcmail.php.orig | 1327 ++ program/include/rcube_addressbook.php | 123 +- program/include/rcube_browser.php | 40 +- program/include/rcube_config.php | 501 +- program/include/rcube_contacts.php | 941 +- program/include/rcube_html_page.php | 72 +- program/include/rcube_imap.php | 7596 +++++++----- program/include/rcube_imap_generic.php | 3334 +++++ program/include/rcube_json_output.php | 112 +- program/include/rcube_ldap.php | 113 +- program/include/rcube_mail_mime.php | 206 - program/include/rcube_mdb2.php | 1171 +- program/include/rcube_message.php | 1057 +- program/include/rcube_mime_struct.php | 214 + program/include/rcube_plugin.php | 110 +- program/include/rcube_plugin_api.php | 209 +- program/include/rcube_result_set.php | 77 +- program/include/rcube_session.php | 343 + program/include/rcube_shared.inc | 313 +- program/include/rcube_smtp.php | 167 +- program/include/rcube_sqlite.inc | 73 +- program/include/rcube_string_replacer.php | 82 +- program/include/rcube_template.php | 354 +- program/include/rcube_user.php | 940 +- program/include/rcube_vcard.php | 95 +- program/include/session.inc | 271 - program/js/app.js | 3668 +----- program/js/app.js.src | 4936 +++++--- program/js/common.js | 467 +- program/js/common.js.src | 392 +- program/js/editor.js | 158 +- program/js/googiespell.js | 786 +- program/js/googiespell.js.src | 691 +- program/js/jquery-1.3.min.js | 19 - program/js/jquery-1.4.min.js | 167 + program/js/list.js | 626 +- program/js/list.js.src | 1013 +- program/js/tiny_mce/langs/ar.js | 184 +- program/js/tiny_mce/langs/az.js | 171 + program/js/tiny_mce/langs/bg.js | 22 +- program/js/tiny_mce/langs/bn.js | 170 + program/js/tiny_mce/langs/br.js | 170 + program/js/tiny_mce/langs/bs.js | 20 +- program/js/tiny_mce/langs/ca.js | 146 +- program/js/tiny_mce/langs/cs.js | 100 +- program/js/tiny_mce/langs/cy.js | 170 + program/js/tiny_mce/langs/da.js | 35 +- program/js/tiny_mce/langs/de.js | 59 +- program/js/tiny_mce/langs/el.js | 20 +- program/js/tiny_mce/langs/en.js | 20 +- program/js/tiny_mce/langs/es.js | 30 +- program/js/tiny_mce/langs/et.js | 32 +- program/js/tiny_mce/langs/eu.js | 206 + program/js/tiny_mce/langs/fa.js | 144 +- program/js/tiny_mce/langs/fi.js | 49 +- program/js/tiny_mce/langs/fr.js | 100 +- program/js/tiny_mce/langs/gl.js | 170 + program/js/tiny_mce/langs/he.js | 84 +- program/js/tiny_mce/langs/hi.js | 170 + program/js/tiny_mce/langs/hr.js | 23 +- program/js/tiny_mce/langs/hu.js | 40 +- program/js/tiny_mce/langs/hy.js | 173 + program/js/tiny_mce/langs/ia.js | 170 + program/js/tiny_mce/langs/id.js | 170 + program/js/tiny_mce/langs/is.js | 20 +- program/js/tiny_mce/langs/it.js | 80 +- program/js/tiny_mce/langs/ja.js | 28 +- program/js/tiny_mce/langs/ka.js | 173 + program/js/tiny_mce/langs/ko.js | 20 +- program/js/tiny_mce/langs/lt.js | 80 +- program/js/tiny_mce/langs/lv.js | 76 +- program/js/tiny_mce/langs/mk.js | 20 +- program/js/tiny_mce/langs/ms.js | 20 +- program/js/tiny_mce/langs/nb.js | 20 +- program/js/tiny_mce/langs/nl.js | 32 +- program/js/tiny_mce/langs/nn.js | 20 +- program/js/tiny_mce/langs/no.js | 170 + program/js/tiny_mce/langs/pl.js | 54 +- program/js/tiny_mce/langs/ps.js | 170 + program/js/tiny_mce/langs/pt.js | 68 +- program/js/tiny_mce/langs/ro.js | 38 +- program/js/tiny_mce/langs/ru.js | 162 +- program/js/tiny_mce/langs/si.js | 94 +- program/js/tiny_mce/langs/sk.js | 126 +- program/js/tiny_mce/langs/sl.js | 20 +- program/js/tiny_mce/langs/sq.js | 170 + program/js/tiny_mce/langs/sr.js | 22 +- program/js/tiny_mce/langs/sv.js | 24 +- program/js/tiny_mce/langs/ta.js | 170 + program/js/tiny_mce/langs/te.js | 170 + program/js/tiny_mce/langs/th.js | 170 + program/js/tiny_mce/langs/tr.js | 118 +- program/js/tiny_mce/langs/tw.js | 178 + program/js/tiny_mce/langs/uk.js | 80 +- program/js/tiny_mce/langs/vi.js | 168 +- program/js/tiny_mce/langs/zh.js | 162 +- .../plugins/compat2x/editor_plugin.js | 1 - .../plugins/compat2x/editor_plugin_src.js | 616 - .../plugins/contextmenu/editor_plugin.js | 2 +- .../plugins/contextmenu/editor_plugin_src.js | 64 +- .../directionality/editor_plugin_src.js | 9 +- .../plugins/emotions/editor_plugin.js | 2 +- .../plugins/emotions/editor_plugin_src.js | 13 +- .../tiny_mce/plugins/emotions/langs/ar_dlg.js | 4 +- .../tiny_mce/plugins/emotions/langs/az_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/be_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/bn_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/br_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/ca_dlg.js | 28 +- .../tiny_mce/plugins/emotions/langs/cs_dlg.js | 34 +- .../tiny_mce/plugins/emotions/langs/cy_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/eu_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/fa_dlg.js | 36 +- .../tiny_mce/plugins/emotions/langs/fr_dlg.js | 10 +- .../tiny_mce/plugins/emotions/langs/gl_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/hi_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/hy_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/ia_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/id_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/ka_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/lt_dlg.js | 4 +- .../tiny_mce/plugins/emotions/langs/nl_dlg.js | 2 +- .../tiny_mce/plugins/emotions/langs/no_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/ps_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/pt_dlg.js | 10 +- .../tiny_mce/plugins/emotions/langs/ro_dlg.js | 6 +- .../tiny_mce/plugins/emotions/langs/ru_dlg.js | 36 +- .../tiny_mce/plugins/emotions/langs/sk_dlg.js | 34 +- .../tiny_mce/plugins/emotions/langs/sq_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/ta_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/te_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/th_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/tr_dlg.js | 24 +- .../tiny_mce/plugins/emotions/langs/tw_dlg.js | 20 + .../tiny_mce/plugins/emotions/langs/uk_dlg.js | 32 +- .../tiny_mce/plugins/emotions/langs/vi_dlg.js | 36 +- .../tiny_mce/plugins/emotions/langs/zh_dlg.js | 8 +- .../tiny_mce/plugins/media/editor_plugin.js | 2 +- .../plugins/media/editor_plugin_src.js | 27 +- .../js/tiny_mce/plugins/media/langs/ar_dlg.js | 28 +- .../js/tiny_mce/plugins/media/langs/az_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/be_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/bn_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/br_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/ca_dlg.js | 134 +- .../js/tiny_mce/plugins/media/langs/cs_dlg.js | 166 +- .../js/tiny_mce/plugins/media/langs/cy_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/da_dlg.js | 16 +- .../js/tiny_mce/plugins/media/langs/de_dlg.js | 4 +- .../js/tiny_mce/plugins/media/langs/et_dlg.js | 192 +- .../js/tiny_mce/plugins/media/langs/eu_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/fa_dlg.js | 146 +- .../js/tiny_mce/plugins/media/langs/fi_dlg.js | 118 +- .../js/tiny_mce/plugins/media/langs/fr_dlg.js | 38 +- .../js/tiny_mce/plugins/media/langs/gl_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/he_dlg.js | 40 +- .../js/tiny_mce/plugins/media/langs/hi_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/hy_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/ia_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/id_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/ja_dlg.js | 4 +- .../js/tiny_mce/plugins/media/langs/ka_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/lt_dlg.js | 62 +- .../js/tiny_mce/plugins/media/langs/nl_dlg.js | 2 +- .../js/tiny_mce/plugins/media/langs/no_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/pl_dlg.js | 38 +- .../js/tiny_mce/plugins/media/langs/ps_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/pt_dlg.js | 28 +- .../js/tiny_mce/plugins/media/langs/ru_dlg.js | 174 +- .../js/tiny_mce/plugins/media/langs/sk_dlg.js | 160 +- .../js/tiny_mce/plugins/media/langs/sq_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/ta_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/te_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/th_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/tr_dlg.js | 88 +- .../js/tiny_mce/plugins/media/langs/tw_dlg.js | 103 + .../js/tiny_mce/plugins/media/langs/uk_dlg.js | 156 +- .../js/tiny_mce/plugins/media/langs/vi_dlg.js | 174 +- .../js/tiny_mce/plugins/media/langs/zh_dlg.js | 144 +- program/js/tiny_mce/plugins/media/media.htm | 9 +- .../plugins/nonbreaking/editor_plugin_src.js | 9 +- program/js/tiny_mce/plugins/paste/blank.htm | 22 - .../js/tiny_mce/plugins/paste/css/blank.css | 14 - .../tiny_mce/plugins/paste/css/pasteword.css | 3 - .../tiny_mce/plugins/paste/editor_plugin.js | 2 +- .../plugins/paste/editor_plugin_src.js | 719 +- .../js/tiny_mce/plugins/paste/js/pastetext.js | 2 +- .../js/tiny_mce/plugins/paste/js/pasteword.js | 6 +- .../js/tiny_mce/plugins/paste/langs/ar_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/az_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/be_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/bg_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/bn_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/br_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/bs_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/ca_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/cs_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/cy_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/da_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/de_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/el_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/es_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/et_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/eu_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/fa_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/fi_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/fr_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/gl_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/he_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/hi_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/hr_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/hu_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/hy_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/ia_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/id_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/is_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/it_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/ja_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/ka_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/ko_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/lt_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/lv_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/mk_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/ms_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/nb_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/nl_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/nn_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/no_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/pl_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/ps_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/pt_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/ro_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/ru_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/si_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/sk_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/sl_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/sq_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/sr_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/sv_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/ta_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/te_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/th_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/tr_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/tw_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/uk_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/vi_dlg.js | 5 + .../js/tiny_mce/plugins/paste/langs/zh_dlg.js | 5 + .../js/tiny_mce/plugins/paste/pastetext.htm | 10 +- .../js/tiny_mce/plugins/paste/pasteword.htm | 10 +- .../plugins/searchreplace/editor_plugin.js | 2 +- .../searchreplace/editor_plugin_src.js | 11 +- .../plugins/searchreplace/js/searchreplace.js | 4 + .../plugins/searchreplace/langs/ar_dlg.js | 26 +- .../plugins/searchreplace/langs/az_dlg.js | 16 + .../plugins/searchreplace/langs/be_dlg.js | 16 + .../plugins/searchreplace/langs/bn_dlg.js | 16 + .../plugins/searchreplace/langs/br_dlg.js | 16 + .../plugins/searchreplace/langs/ca_dlg.js | 20 +- .../plugins/searchreplace/langs/cy_dlg.js | 16 + .../plugins/searchreplace/langs/da_dlg.js | 2 +- .../plugins/searchreplace/langs/eu_dlg.js | 16 + .../plugins/searchreplace/langs/fa_dlg.js | 22 +- .../plugins/searchreplace/langs/fr_dlg.js | 18 +- .../plugins/searchreplace/langs/gl_dlg.js | 16 + .../plugins/searchreplace/langs/he_dlg.js | 4 +- .../plugins/searchreplace/langs/hi_dlg.js | 16 + .../plugins/searchreplace/langs/hy_dlg.js | 16 + .../plugins/searchreplace/langs/ia_dlg.js | 16 + .../plugins/searchreplace/langs/id_dlg.js | 16 + .../plugins/searchreplace/langs/ka_dlg.js | 16 + .../plugins/searchreplace/langs/no_dlg.js | 16 + .../plugins/searchreplace/langs/pl_dlg.js | 6 +- .../plugins/searchreplace/langs/ps_dlg.js | 16 + .../plugins/searchreplace/langs/pt_dlg.js | 8 +- .../plugins/searchreplace/langs/ro_dlg.js | 2 +- .../plugins/searchreplace/langs/ru_dlg.js | 18 +- .../plugins/searchreplace/langs/sk_dlg.js | 22 +- .../plugins/searchreplace/langs/sq_dlg.js | 16 + .../plugins/searchreplace/langs/ta_dlg.js | 16 + .../plugins/searchreplace/langs/te_dlg.js | 16 + .../plugins/searchreplace/langs/th_dlg.js | 16 + .../plugins/searchreplace/langs/tr_dlg.js | 10 +- .../plugins/searchreplace/langs/tw_dlg.js | 16 + .../plugins/searchreplace/langs/uk_dlg.js | 10 +- .../plugins/searchreplace/langs/vi_dlg.js | 18 +- .../plugins/searchreplace/langs/zh_dlg.js | 22 +- .../plugins/searchreplace/searchreplace.htm | 13 +- .../spellchecker/classes/EnchantSpell.php | 66 - .../spellchecker/classes/GoogleSpell.php | 166 - .../plugins/spellchecker/classes/PSpell.php | 81 - .../spellchecker/classes/PSpellShell.php | 112 - .../spellchecker/classes/SpellChecker.php | 61 - .../spellchecker/classes/utils/JSON.php | 595 - .../spellchecker/classes/utils/Logger.php | 268 - .../tiny_mce/plugins/spellchecker/config.php | 34 - .../plugins/spellchecker/editor_plugin.js | 2 +- .../plugins/spellchecker/editor_plugin_src.js | 135 +- .../plugins/spellchecker/includes/general.php | 98 - .../js/tiny_mce/plugins/spellchecker/rpc.php | 111 - .../plugins/tabfocus/editor_plugin.js | 1 + .../plugins/tabfocus/editor_plugin_src.js | 112 + program/js/tiny_mce/plugins/table/cell.htm | 9 +- .../tiny_mce/plugins/table/editor_plugin.js | 2 +- .../plugins/table/editor_plugin_src.js | 1825 ++- program/js/tiny_mce/plugins/table/js/cell.js | 65 +- .../tiny_mce/plugins/table/js/merge_cells.js | 38 +- program/js/tiny_mce/plugins/table/js/row.js | 71 +- program/js/tiny_mce/plugins/table/js/table.js | 41 +- .../js/tiny_mce/plugins/table/langs/ar_dlg.js | 50 +- .../js/tiny_mce/plugins/table/langs/az_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/be_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/bn_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/br_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/ca_dlg.js | 72 +- .../js/tiny_mce/plugins/table/langs/cs_dlg.js | 42 +- .../js/tiny_mce/plugins/table/langs/cy_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/da_dlg.js | 6 +- .../js/tiny_mce/plugins/table/langs/de_dlg.js | 38 +- .../js/tiny_mce/plugins/table/langs/es_dlg.js | 2 +- .../js/tiny_mce/plugins/table/langs/et_dlg.js | 136 +- .../js/tiny_mce/plugins/table/langs/eu_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/fa_dlg.js | 90 +- .../js/tiny_mce/plugins/table/langs/fi_dlg.js | 2 +- .../js/tiny_mce/plugins/table/langs/fr_dlg.js | 36 +- .../js/tiny_mce/plugins/table/langs/gl_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/he_dlg.js | 22 +- .../js/tiny_mce/plugins/table/langs/hi_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/hy_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/ia_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/id_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/it_dlg.js | 12 +- .../js/tiny_mce/plugins/table/langs/ja_dlg.js | 6 +- .../js/tiny_mce/plugins/table/langs/ka_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/lt_dlg.js | 36 +- .../js/tiny_mce/plugins/table/langs/nl_dlg.js | 14 +- .../js/tiny_mce/plugins/table/langs/no_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/pl_dlg.js | 20 +- .../js/tiny_mce/plugins/table/langs/ps_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/pt_dlg.js | 40 +- .../js/tiny_mce/plugins/table/langs/ro_dlg.js | 4 +- .../js/tiny_mce/plugins/table/langs/ru_dlg.js | 98 +- .../js/tiny_mce/plugins/table/langs/sk_dlg.js | 88 +- .../js/tiny_mce/plugins/table/langs/sq_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/sv_dlg.js | 2 +- .../js/tiny_mce/plugins/table/langs/ta_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/te_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/th_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/tr_dlg.js | 50 +- .../js/tiny_mce/plugins/table/langs/tw_dlg.js | 74 + .../js/tiny_mce/plugins/table/langs/uk_dlg.js | 70 +- .../js/tiny_mce/plugins/table/langs/vi_dlg.js | 108 +- .../js/tiny_mce/plugins/table/langs/zh_dlg.js | 110 +- .../js/tiny_mce/plugins/table/merge_cells.htm | 11 +- program/js/tiny_mce/plugins/table/row.htm | 9 +- program/js/tiny_mce/plugins/table/table.htm | 13 +- .../plugins/visualchars/editor_plugin_src.js | 9 +- .../js/tiny_mce/plugins/xhtmlxtras/abbr.htm | 148 - .../tiny_mce/plugins/xhtmlxtras/acronym.htm | 148 - .../plugins/xhtmlxtras/attributes.htm | 153 - .../js/tiny_mce/plugins/xhtmlxtras/cite.htm | 148 - .../plugins/xhtmlxtras/css/attributes.css | 11 - .../tiny_mce/plugins/xhtmlxtras/css/popup.css | 9 - .../plugins/xhtmlxtras/css/xhtmlxtras.css | 24 - .../js/tiny_mce/plugins/xhtmlxtras/del.htm | 169 - .../plugins/xhtmlxtras/editor_plugin.js | 1 - .../plugins/xhtmlxtras/editor_plugin_src.js | 136 - .../js/tiny_mce/plugins/xhtmlxtras/ins.htm | 169 - .../js/tiny_mce/plugins/xhtmlxtras/js/abbr.js | 25 - .../tiny_mce/plugins/xhtmlxtras/js/acronym.js | 25 - .../plugins/xhtmlxtras/js/attributes.js | 123 - .../js/tiny_mce/plugins/xhtmlxtras/js/cite.js | 25 - .../js/tiny_mce/plugins/xhtmlxtras/js/del.js | 60 - .../plugins/xhtmlxtras/js/element_common.js | 231 - .../js/tiny_mce/plugins/xhtmlxtras/js/ins.js | 59 - .../plugins/xhtmlxtras/langs/en_dlg.js | 32 - program/js/tiny_mce/themes/advanced/about.htm | 4 +- .../js/tiny_mce/themes/advanced/anchor.htm | 9 +- .../js/tiny_mce/themes/advanced/charmap.htm | 1 - .../tiny_mce/themes/advanced/color_picker.htm | 6 +- .../themes/advanced/editor_template.js | 2 +- .../themes/advanced/editor_template_src.js | 401 +- program/js/tiny_mce/themes/advanced/image.htm | 9 +- .../js/tiny_mce/themes/advanced/img/icons.gif | Bin 11505 -> 11794 bytes .../js/tiny_mce/themes/advanced/js/anchor.js | 14 +- .../js/tiny_mce/themes/advanced/js/charmap.js | 10 + .../js/tiny_mce/themes/advanced/js/image.js | 4 +- .../js/tiny_mce/themes/advanced/js/link.js | 8 +- .../js/tiny_mce/themes/advanced/langs/ar.js | 102 +- .../tiny_mce/themes/advanced/langs/ar_dlg.js | 94 +- .../js/tiny_mce/themes/advanced/langs/az.js | 63 + .../tiny_mce/themes/advanced/langs/az_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/be.js | 62 + .../tiny_mce/themes/advanced/langs/be_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/bn.js | 62 + .../tiny_mce/themes/advanced/langs/bn_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/br.js | 62 + .../tiny_mce/themes/advanced/langs/br_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/ca.js | 64 +- .../tiny_mce/themes/advanced/langs/ca_dlg.js | 60 +- .../js/tiny_mce/themes/advanced/langs/cs.js | 36 +- .../tiny_mce/themes/advanced/langs/cs_dlg.js | 24 +- .../js/tiny_mce/themes/advanced/langs/cy.js | 62 + .../tiny_mce/themes/advanced/langs/cy_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/da.js | 2 +- .../tiny_mce/themes/advanced/langs/da_dlg.js | 12 +- .../js/tiny_mce/themes/advanced/langs/de.js | 13 +- .../tiny_mce/themes/advanced/langs/de_dlg.js | 8 +- .../js/tiny_mce/themes/advanced/langs/el.js | 4 +- .../js/tiny_mce/themes/advanced/langs/es.js | 10 +- .../tiny_mce/themes/advanced/langs/es_dlg.js | 8 +- .../js/tiny_mce/themes/advanced/langs/et.js | 26 +- .../tiny_mce/themes/advanced/langs/et_dlg.js | 22 +- .../js/tiny_mce/themes/advanced/langs/eu.js | 72 + .../tiny_mce/themes/advanced/langs/eu_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/fa.js | 104 +- .../tiny_mce/themes/advanced/langs/fa_dlg.js | 72 +- .../js/tiny_mce/themes/advanced/langs/fi.js | 12 +- .../tiny_mce/themes/advanced/langs/fi_dlg.js | 4 +- .../js/tiny_mce/themes/advanced/langs/fr.js | 40 +- .../tiny_mce/themes/advanced/langs/fr_dlg.js | 30 +- .../js/tiny_mce/themes/advanced/langs/gl.js | 62 + .../tiny_mce/themes/advanced/langs/gl_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/he.js | 14 +- .../tiny_mce/themes/advanced/langs/he_dlg.js | 8 +- .../js/tiny_mce/themes/advanced/langs/hi.js | 62 + .../tiny_mce/themes/advanced/langs/hi_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/hu.js | 4 +- .../tiny_mce/themes/advanced/langs/hu_dlg.js | 8 +- .../js/tiny_mce/themes/advanced/langs/hy.js | 62 + .../tiny_mce/themes/advanced/langs/hy_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/ia.js | 62 + .../tiny_mce/themes/advanced/langs/ia_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/id.js | 62 + .../tiny_mce/themes/advanced/langs/id_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/it.js | 12 +- .../tiny_mce/themes/advanced/langs/it_dlg.js | 10 +- .../js/tiny_mce/themes/advanced/langs/ja.js | 4 +- .../tiny_mce/themes/advanced/langs/ja_dlg.js | 2 +- .../js/tiny_mce/themes/advanced/langs/ka.js | 62 + .../tiny_mce/themes/advanced/langs/ka_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/lt.js | 33 +- .../tiny_mce/themes/advanced/langs/lt_dlg.js | 30 +- .../js/tiny_mce/themes/advanced/langs/nl.js | 4 +- .../js/tiny_mce/themes/advanced/langs/no.js | 62 + .../tiny_mce/themes/advanced/langs/no_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/pl.js | 4 +- .../js/tiny_mce/themes/advanced/langs/ps.js | 62 + .../tiny_mce/themes/advanced/langs/ps_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/pt.js | 46 +- .../tiny_mce/themes/advanced/langs/pt_dlg.js | 12 +- .../js/tiny_mce/themes/advanced/langs/ro.js | 10 +- .../tiny_mce/themes/advanced/langs/ro_dlg.js | 22 +- .../js/tiny_mce/themes/advanced/langs/ru.js | 71 +- .../tiny_mce/themes/advanced/langs/ru_dlg.js | 70 +- .../js/tiny_mce/themes/advanced/langs/si.js | 95 +- .../tiny_mce/themes/advanced/langs/si_dlg.js | 92 +- .../js/tiny_mce/themes/advanced/langs/sk.js | 74 +- .../tiny_mce/themes/advanced/langs/sk_dlg.js | 66 +- .../js/tiny_mce/themes/advanced/langs/sq.js | 62 + .../tiny_mce/themes/advanced/langs/sq_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/sr.js | 6 +- .../tiny_mce/themes/advanced/langs/sr_dlg.js | 12 +- .../js/tiny_mce/themes/advanced/langs/sv.js | 4 +- .../tiny_mce/themes/advanced/langs/sv_dlg.js | 8 +- .../js/tiny_mce/themes/advanced/langs/ta.js | 62 + .../tiny_mce/themes/advanced/langs/ta_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/te.js | 62 + .../tiny_mce/themes/advanced/langs/te_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/th.js | 62 + .../tiny_mce/themes/advanced/langs/th_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/tr.js | 54 +- .../tiny_mce/themes/advanced/langs/tr_dlg.js | 34 +- .../js/tiny_mce/themes/advanced/langs/tw.js | 64 + .../tiny_mce/themes/advanced/langs/tw_dlg.js | 51 + .../js/tiny_mce/themes/advanced/langs/uk.js | 14 +- .../tiny_mce/themes/advanced/langs/uk_dlg.js | 18 +- .../js/tiny_mce/themes/advanced/langs/vi.js | 98 +- .../tiny_mce/themes/advanced/langs/vi_dlg.js | 58 +- .../js/tiny_mce/themes/advanced/langs/zh.js | 70 +- .../tiny_mce/themes/advanced/langs/zh_dlg.js | 60 +- program/js/tiny_mce/themes/advanced/link.htm | 9 +- .../themes/advanced/skins/default/content.css | 9 +- .../themes/advanced/skins/default/dialog.css | 7 +- .../themes/advanced/skins/default/ui.css | 11 +- .../themes/advanced/skins/o2k7/content.css | 9 +- .../themes/advanced/skins/o2k7/dialog.css | 5 +- .../themes/advanced/skins/o2k7/ui.css | 8 +- .../themes/advanced/source_editor.htm | 10 +- .../themes/simple/editor_template_src.js | 10 +- program/js/tiny_mce/tiny_mce.js | 363 +- program/js/tiny_mce/tiny_mce_popup.js | 2 +- program/js/tiny_mce/tiny_mce_src.js | 10095 +++++++++------- program/js/tiny_mce/utils/editable_selects.js | 9 +- program/js/tiny_mce/utils/form_utils.js | 11 +- program/js/tiny_mce/utils/mctabs.js | 9 +- program/js/tiny_mce/utils/validate.js | 9 +- program/lib/html2text.php | 151 +- program/lib/imap.inc | 2534 ---- program/lib/mime.inc | 330 - program/lib/tnef_decoder.inc | 352 - program/lib/tnef_decoder.php | 330 + program/lib/washtml.php | 79 +- program/localization/ar_SA/labels.inc | 187 +- program/localization/ar_SA/messages.inc | 59 +- program/localization/ast/labels.inc | 12 +- program/localization/ast/messages.inc | 13 +- program/localization/az_AZ/labels.inc | 393 +- program/localization/az_AZ/messages.inc | 153 +- program/localization/bg_BG/labels.inc | 106 +- program/localization/bg_BG/messages.inc | 38 +- program/localization/bn_BD/labels.inc | 9 +- program/localization/bn_BD/messages.inc | 7 +- program/localization/br/labels.inc | 9 +- program/localization/br/messages.inc | 6 +- program/localization/bs_BA/labels.inc | 9 +- program/localization/bs_BA/messages.inc | 6 +- program/localization/ca_ES/labels.inc | 273 +- program/localization/ca_ES/messages.inc | 108 +- program/localization/cs_CZ/labels.inc | 97 +- program/localization/cs_CZ/messages.inc | 47 +- program/localization/cy_GB/labels.inc | 103 +- program/localization/cy_GB/messages.inc | 44 +- program/localization/da_DK/labels.inc | 101 +- program/localization/da_DK/messages.inc | 28 +- program/localization/de_CH/labels.inc | 119 +- program/localization/de_CH/messages.inc | 58 +- program/localization/de_DE/labels.inc | 112 +- program/localization/de_DE/messages.inc | 48 +- program/localization/el_GR/labels.inc | 11 +- program/localization/el_GR/messages.inc | 55 +- program/localization/en_GB/labels.inc | 132 +- program/localization/en_GB/messages.inc | 80 +- program/localization/en_US/labels.inc | 122 +- program/localization/en_US/messages.inc | 58 +- program/localization/eo/labels.inc | 7 +- program/localization/eo/messages.inc | 5 +- program/localization/es_AR/labels.inc | 72 +- program/localization/es_AR/messages.inc | 24 +- program/localization/es_ES/labels.inc | 166 +- program/localization/es_ES/messages.inc | 108 +- program/localization/et_EE/labels.inc | 145 +- program/localization/et_EE/messages.inc | 114 +- program/localization/eu_ES/labels.inc | 9 +- program/localization/eu_ES/messages.inc | 7 +- program/localization/fa/labels.inc | 10 +- program/localization/fa/messages.inc | 9 +- program/localization/fa_AF/labels.inc | 3 - program/localization/fa_AF/messages.inc | 3 - program/localization/fi_FI/labels.inc | 90 +- program/localization/fi_FI/messages.inc | 29 +- program/localization/fr_FR/labels.inc | 111 +- program/localization/fr_FR/messages.inc | 47 +- program/localization/ga_IE/labels.inc | 9 +- program/localization/ga_IE/messages.inc | 6 +- program/localization/gl_ES/labels.inc | 128 +- program/localization/gl_ES/messages.inc | 71 +- program/localization/he_IL/labels.inc | 105 +- program/localization/he_IL/messages.inc | 46 +- program/localization/hi_IN/labels.inc | 9 +- program/localization/hi_IN/messages.inc | 6 +- program/localization/hr_HR/labels.inc | 124 +- program/localization/hr_HR/messages.inc | 22 +- program/localization/hu_HU/labels.inc | 189 +- program/localization/hu_HU/messages.inc | 63 +- program/localization/hy_AM/labels.inc | 9 +- program/localization/hy_AM/messages.inc | 9 +- program/localization/id_ID/labels.inc | 154 +- program/localization/id_ID/messages.inc | 51 +- program/localization/index.inc | 14 +- program/localization/is_IS/labels.inc | 9 +- program/localization/is_IS/messages.inc | 6 +- program/localization/it_IT/labels.inc | 129 +- program/localization/it_IT/messages.inc | 53 +- program/localization/ja_JP/labels.inc | 251 +- program/localization/ja_JP/messages.inc | 141 +- program/localization/ka_GE/labels.inc | 20 +- program/localization/ka_GE/messages.inc | 12 +- program/localization/kh_KH/labels.inc | 343 + program/localization/kh_KH/messages.inc | 115 + program/localization/ko_KR/labels.inc | 9 +- program/localization/ko_KR/messages.inc | 9 +- program/localization/ku/labels.inc | 7 +- program/localization/ku/messages.inc | 5 +- program/localization/lt_LT/labels.inc | 320 +- program/localization/lt_LT/messages.inc | 178 +- program/localization/lv_LV/labels.inc | 114 +- program/localization/lv_LV/messages.inc | 32 +- program/localization/mk_MK/labels.inc | 268 +- program/localization/mk_MK/messages.inc | 116 +- program/localization/mr_IN/labels.inc | 234 +- program/localization/mr_IN/messages.inc | 29 +- program/localization/ms_MY/labels.inc | 9 +- program/localization/ms_MY/messages.inc | 7 +- program/localization/nb_NO/labels.inc | 114 +- program/localization/nb_NO/messages.inc | 93 +- program/localization/ne_NP/labels.inc | 9 +- program/localization/ne_NP/messages.inc | 6 +- program/localization/nl_BE/labels.inc | 125 +- program/localization/nl_BE/messages.inc | 95 +- program/localization/nl_NL/labels.inc | 112 +- program/localization/nl_NL/messages.inc | 52 +- program/localization/nn_NO/labels.inc | 112 +- program/localization/nn_NO/messages.inc | 31 +- program/localization/pl_PL/labels.inc | 213 +- program/localization/pl_PL/messages.inc | 89 +- program/localization/ps/labels.inc | 3 - program/localization/ps/messages.inc | 3 - program/localization/pt_BR/labels.inc | 108 +- program/localization/pt_BR/messages.inc | 47 +- program/localization/pt_PT/labels.inc | 213 +- program/localization/pt_PT/messages.inc | 144 +- program/localization/ro_RO/labels.inc | 109 +- program/localization/ro_RO/messages.inc | 43 +- program/localization/ru_RU/labels.inc | 111 +- program/localization/ru_RU/messages.inc | 51 +- program/localization/si_LK/labels.inc | 9 +- program/localization/si_LK/messages.inc | 7 +- program/localization/sk_SK/labels.inc | 114 +- program/localization/sk_SK/messages.inc | 30 +- program/localization/sl_SI/labels.inc | 137 +- program/localization/sl_SI/messages.inc | 61 +- program/localization/sq_AL/labels.inc | 9 +- program/localization/sq_AL/messages.inc | 7 +- program/localization/sr_CS/labels.inc | 9 +- program/localization/sr_CS/messages.inc | 7 +- program/localization/sv_SE/labels.inc | 171 +- program/localization/sv_SE/messages.inc | 103 +- program/localization/ta_IN/labels.inc | 285 + program/localization/ta_IN/messages.inc | 105 + program/localization/th_TH/labels.inc | 9 +- program/localization/th_TH/messages.inc | 6 +- program/localization/tr_TR/labels.inc | 109 +- program/localization/tr_TR/messages.inc | 49 +- program/localization/uk_UA/labels.inc | 351 +- program/localization/uk_UA/messages.inc | 155 +- program/localization/vi_VN/labels.inc | 9 +- program/localization/vi_VN/messages.inc | 6 +- program/localization/zh_CN/labels.inc | 93 +- program/localization/zh_CN/messages.inc | 56 +- program/localization/zh_TW/labels.inc | 115 +- program/localization/zh_TW/messages.inc | 43 +- program/steps/addressbook/copy.inc | 63 +- program/steps/addressbook/delete.inc | 56 +- program/steps/addressbook/edit.inc | 148 +- program/steps/addressbook/export.inc | 9 +- program/steps/addressbook/func.inc | 354 +- program/steps/addressbook/groups.inc | 129 + program/steps/addressbook/import.inc | 31 +- program/steps/addressbook/list.inc | 7 +- program/steps/addressbook/mailto.inc | 7 +- program/steps/addressbook/save.inc | 79 +- program/steps/addressbook/search.inc | 10 +- program/steps/addressbook/show.inc | 136 +- program/steps/mail/addcontact.inc | 39 +- program/steps/mail/attachments.inc | 20 +- program/steps/mail/autocomplete.inc | 62 +- program/steps/mail/check_recent.inc | 127 +- program/steps/mail/compose.inc | 730 +- program/steps/mail/copy.inc | 54 + program/steps/mail/folders.inc | 90 +- program/steps/mail/func.inc | 1463 ++- program/steps/mail/get.inc | 63 +- program/steps/mail/getunread.inc | 25 +- program/steps/mail/headers.inc | 48 +- program/steps/mail/list.inc | 62 +- program/steps/mail/mark.inc | 62 +- program/steps/mail/move_del.inc | 69 +- program/steps/mail/pagenav.inc | 80 + program/steps/mail/rss.inc | 114 - program/steps/mail/search.inc | 34 +- program/steps/mail/sendmail.inc | 515 +- program/steps/mail/sendmdn.inc | 8 +- program/steps/mail/show.inc | 162 +- program/steps/mail/viewsource.inc | 20 +- program/steps/settings/delete_identity.inc | 21 +- program/steps/settings/edit_folder.inc | 292 + program/steps/settings/edit_identity.inc | 142 +- program/steps/settings/edit_prefs.inc | 27 +- program/steps/settings/folders.inc | 377 + program/steps/settings/func.inc | 306 +- program/steps/settings/identities.inc | 7 +- program/steps/settings/manage_folders.inc | 352 - program/steps/settings/save_folder.inc | 176 + program/steps/settings/save_identity.inc | 70 +- program/steps/settings/save_prefs.inc | 33 +- program/steps/{ => utils}/error.inc | 14 +- .../steps/utils/html2text.inc | 29 +- .../steps/utils/killcache.inc | 31 +- .../steps/utils/modcss.inc | 22 +- program/steps/utils/save_pref.inc | 45 + program/steps/{mail => utils}/spell.inc | 14 +- .../steps/{mail => utils}/spell_googie.inc | 27 +- program/steps/utils/spell_html_googie.inc | 110 + program/steps/utils/spell_html_pspell.inc | 76 + .../steps/{mail => utils}/spell_pspell.inc | 19 +- skins/default/README | 23 + .../{addresses.css => addressbook.css} | 91 +- skins/default/colorpicker.css | 53 - skins/default/common.css | 415 +- skins/default/editor_content.css | 12 +- skins/default/functions.js | 567 +- skins/default/googiespell.css | 22 +- skins/default/ie6hacks.css | 106 +- skins/default/iehacks.css | 173 +- skins/default/images/dbutton.png | Bin 0 -> 374 bytes skins/default/images/icons/abcard.png | Bin 441 -> 0 bytes skins/default/images/icons/collapsed.png | Bin 205 -> 184 bytes skins/default/images/icons/columnpicker.gif | Bin 0 -> 133 bytes skins/default/images/icons/expanded.png | Bin 184 -> 169 bytes skins/default/images/icons/folders.gif | Bin 1102 -> 2430 bytes skins/default/images/icons/folders.png | Bin 3283 -> 4771 bytes skins/default/images/icons/groupactions.gif | Bin 0 -> 357 bytes skins/default/images/icons/groupactions.png | Bin 0 -> 660 bytes .../default/images/icons/unread_children.png | Bin 0 -> 441 bytes skins/default/images/listheader.gif | Bin 538 -> 487 bytes skins/default/images/mail_footer.gif | Bin 0 -> 1336 bytes skins/default/images/mail_footer.png | Bin 1143 -> 2235 bytes skins/default/images/mail_toolbar.gif | Bin 12528 -> 12822 bytes skins/default/images/mail_toolbar.png | Bin 38885 -> 39305 bytes skins/default/images/messageactions.gif | Bin 1112 -> 1916 bytes skins/default/images/messageactions.png | Bin 1637 -> 2607 bytes skins/default/images/messageicons.gif | Bin 0 -> 1687 bytes skins/default/images/messageicons.png | Bin 0 -> 3011 bytes skins/default/images/quota.gif | Bin 0 -> 998 bytes skins/default/images/tabs-left.gif | Bin 0 -> 461 bytes skins/default/images/tabs-right.gif | Bin 0 -> 2851 bytes skins/default/images/tabs.gif | Bin 821 -> 0 bytes skins/default/images/taskbar.png | Bin 0 -> 2425 bytes skins/default/images/tree.gif | Bin 0 -> 92 bytes skins/default/includes/header.html | 2 +- skins/default/includes/links.html | 4 +- skins/default/includes/messagemenu.html | 2 +- skins/default/includes/replyallmenu.html | 7 + skins/default/mail.css | 758 +- skins/default/pngbehavior.htc | 118 +- skins/default/print.css | 26 +- skins/default/safari.css | 6 + skins/default/settings.css | 253 +- skins/default/splitter.js | 191 +- skins/default/templates/addressbook.html | 65 +- skins/default/templates/compose.html | 193 +- .../{addcontact.html => contact.html} | 17 +- skins/default/templates/contactadd.html | 22 + .../{editcontact.html => contactedit.html} | 15 +- skins/default/templates/editidentity.html | 36 - skins/default/templates/error.html | 2 +- skins/default/templates/folderedit.html | 24 + skins/default/templates/folders.html | 62 + skins/default/templates/identities.html | 27 +- skins/default/templates/identityedit.html | 56 + skins/default/templates/importcontacts.html | 2 +- skins/default/templates/login.html | 19 +- skins/default/templates/mail.html | 175 +- skins/default/templates/managefolders.html | 40 - skins/default/templates/message.html | 31 +- skins/default/templates/messageerror.html | 66 +- .../{printmessage.html => messageprint.html} | 0 skins/default/templates/plugin.html | 2 +- skins/default/templates/settings.html | 2 +- skins/default/templates/showcontact.html | 18 - 973 files changed, 67363 insertions(+), 42483 deletions(-) create mode 100644 SQL/mssql.upgrade.sql create mode 100755 bin/cleandb.sh rename bin/{decrypt.php => decrypt.sh} (89%) mode change 100644 => 100755 create mode 100755 bin/jsshrink.sh create mode 100755 bin/jsunshrink.sh create mode 100644 plugins/additional_message_headers/config.inc.php.dist create mode 100644 plugins/additional_message_headers/package.xml create mode 100644 plugins/archive/localization/es_AR.inc create mode 100644 plugins/archive/localization/es_ES.inc create mode 100644 plugins/archive/localization/ja_JP.inc create mode 100644 plugins/archive/localization/nl_NL.inc create mode 100644 plugins/archive/localization/sv_SE.inc create mode 100644 plugins/archive/localization/zh_TW.inc create mode 100644 plugins/archive/package.xml create mode 100644 plugins/help/localization/da_DK.inc create mode 100644 plugins/help/localization/de_DE.inc create mode 100644 plugins/help/localization/es_ES.inc create mode 100644 plugins/help/localization/ja_JP.inc create mode 100644 plugins/help/localization/ru_RU.inc create mode 100644 plugins/help/localization/zh_TW.inc create mode 100644 plugins/managesieve/localization/es_AR.inc create mode 100644 plugins/managesieve/localization/ja_JP.inc create mode 100644 plugins/managesieve/localization/nb_NO.inc create mode 100644 plugins/managesieve/localization/pt_PT.inc create mode 100644 plugins/managesieve/localization/sk_SK.inc create mode 100644 plugins/managesieve/localization/zh_TW.inc delete mode 100644 plugins/managesieve/skins/default/filter_add_act.png delete mode 100644 plugins/managesieve/skins/default/filter_add_pas.png delete mode 100644 plugins/managesieve/skins/default/filter_add_sel.png delete mode 100644 plugins/managesieve/skins/default/filter_del_act.png delete mode 100644 plugins/managesieve/skins/default/filter_del_pas.png delete mode 100644 plugins/managesieve/skins/default/filter_del_sel.png delete mode 100644 plugins/managesieve/skins/default/filter_down_act.png delete mode 100644 plugins/managesieve/skins/default/filter_down_pas.png delete mode 100644 plugins/managesieve/skins/default/filter_down_sel.png delete mode 100644 plugins/managesieve/skins/default/filter_up_act.png delete mode 100644 plugins/managesieve/skins/default/filter_up_pas.png delete mode 100644 plugins/managesieve/skins/default/filter_up_sel.png create mode 100644 plugins/managesieve/skins/default/managesieve_toolbar.png rename plugins/managesieve/skins/default/templates/{managesieveedit.html => filteredit.html} (87%) create mode 100644 plugins/managesieve/skins/default/templates/setedit.html create mode 100644 plugins/markasjunk/localization/da_DK.inc create mode 100644 plugins/markasjunk/localization/de_DE.inc create mode 100644 plugins/markasjunk/localization/es_AR.inc create mode 100644 plugins/markasjunk/localization/es_ES.inc create mode 100644 plugins/markasjunk/localization/ja_JP.inc create mode 100644 plugins/markasjunk/localization/sk_SK.inc create mode 100644 plugins/markasjunk/localization/zh_TW.inc create mode 100644 plugins/markasjunk/package.xml create mode 100644 plugins/new_user_dialog/localization/cs_CZ.inc create mode 100644 plugins/new_user_dialog/localization/es_ES.inc create mode 100644 plugins/new_user_dialog/localization/gl_ES.inc create mode 100644 plugins/new_user_dialog/localization/it_IT.inc create mode 100644 plugins/new_user_dialog/localization/ja_JP.inc create mode 100644 plugins/new_user_dialog/localization/nl_NL.inc create mode 100644 plugins/new_user_dialog/localization/pt_BR.inc create mode 100644 plugins/new_user_dialog/localization/pt_PT.inc create mode 100644 plugins/new_user_dialog/localization/sk_SK.inc create mode 100644 plugins/new_user_dialog/localization/sl_SI.inc create mode 100644 plugins/new_user_dialog/localization/zh_TW.inc create mode 100644 plugins/new_user_dialog/package.xml create mode 100644 plugins/password/drivers/chgvirtualminpasswd.c create mode 100644 plugins/password/drivers/chpass-wrapper.py create mode 100644 plugins/password/drivers/chpasswd.php create mode 100644 plugins/password/drivers/hmail.php create mode 100644 plugins/password/drivers/ldap_simple.php create mode 100644 plugins/password/drivers/pam.php create mode 100644 plugins/password/drivers/virtualmin.php create mode 100644 plugins/password/drivers/xmail.php create mode 100644 plugins/password/localization/az_AZ.inc create mode 100644 plugins/password/localization/ca_ES.inc create mode 100644 plugins/password/localization/es_AR.inc create mode 100644 plugins/password/localization/es_ES.inc create mode 100644 plugins/password/localization/fi_FI.inc create mode 100644 plugins/password/localization/ja_JP.inc create mode 100644 plugins/password/localization/lt_LT.inc create mode 100644 plugins/password/localization/lv_LV.inc create mode 100644 plugins/password/localization/ru_RU.inc create mode 100644 plugins/password/localization/sk_SK.inc create mode 100644 plugins/password/localization/tr_TR.inc create mode 100644 plugins/password/localization/zh_TW.inc create mode 100644 plugins/password/package.xml create mode 100644 plugins/subscriptions_option/localization/es_ES.inc create mode 100644 plugins/subscriptions_option/localization/ja_JP.inc create mode 100644 plugins/subscriptions_option/localization/zh_TW.inc create mode 100644 plugins/userinfo/localization/da_DK.inc create mode 100644 plugins/userinfo/localization/es_ES.inc create mode 100644 plugins/userinfo/localization/ja_JP.inc create mode 100644 plugins/userinfo/localization/ru_RU.inc create mode 100644 plugins/userinfo/localization/zh_TW.inc create mode 100644 plugins/vcard_attachments/localization/cs_CZ.inc create mode 100644 plugins/vcard_attachments/localization/es_ES.inc create mode 100644 plugins/vcard_attachments/localization/et_EE.inc create mode 100644 plugins/vcard_attachments/localization/it_IT.inc create mode 100644 plugins/vcard_attachments/localization/ja_JP.inc create mode 100644 plugins/vcard_attachments/localization/pl_PL.inc create mode 100644 plugins/vcard_attachments/localization/sv_SE.inc create mode 100644 plugins/vcard_attachments/localization/zh_TW.inc create mode 100644 plugins/vcard_attachments/package.xml create mode 100644 plugins/vcard_attachments/skins/default/vcard.png rename plugins/vcard_attachments/{ => skins/default}/vcard_add_contact.png (100%) create mode 100644 plugins/virtuser_file/virtuser_file.php create mode 100644 plugins/virtuser_query/virtuser_query.php delete mode 100644 program/include/bugs.inc create mode 100644 program/include/clisetup.php create mode 100644 program/include/rcmail.php.orig create mode 100644 program/include/rcube_imap_generic.php delete mode 100644 program/include/rcube_mail_mime.php create mode 100644 program/include/rcube_mime_struct.php create mode 100644 program/include/rcube_session.php delete mode 100644 program/include/session.inc delete mode 100644 program/js/jquery-1.3.min.js create mode 100644 program/js/jquery-1.4.min.js create mode 100644 program/js/tiny_mce/langs/az.js create mode 100644 program/js/tiny_mce/langs/bn.js create mode 100644 program/js/tiny_mce/langs/br.js create mode 100644 program/js/tiny_mce/langs/cy.js create mode 100644 program/js/tiny_mce/langs/eu.js create mode 100644 program/js/tiny_mce/langs/gl.js create mode 100644 program/js/tiny_mce/langs/hi.js create mode 100644 program/js/tiny_mce/langs/hy.js create mode 100644 program/js/tiny_mce/langs/ia.js create mode 100644 program/js/tiny_mce/langs/id.js create mode 100644 program/js/tiny_mce/langs/ka.js create mode 100644 program/js/tiny_mce/langs/no.js create mode 100644 program/js/tiny_mce/langs/ps.js create mode 100644 program/js/tiny_mce/langs/sq.js create mode 100644 program/js/tiny_mce/langs/ta.js create mode 100644 program/js/tiny_mce/langs/te.js create mode 100644 program/js/tiny_mce/langs/th.js create mode 100644 program/js/tiny_mce/langs/tw.js delete mode 100644 program/js/tiny_mce/plugins/compat2x/editor_plugin.js delete mode 100644 program/js/tiny_mce/plugins/compat2x/editor_plugin_src.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/az_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/be_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/bn_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/br_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/cy_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/eu_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/gl_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/hi_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/hy_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/ia_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/id_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/ka_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/no_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/ps_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/sq_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/ta_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/te_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/th_dlg.js create mode 100644 program/js/tiny_mce/plugins/emotions/langs/tw_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/az_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/be_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/bn_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/br_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/cy_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/eu_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/gl_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/hi_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/hy_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/ia_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/id_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/ka_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/no_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/ps_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/sq_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/ta_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/te_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/th_dlg.js create mode 100644 program/js/tiny_mce/plugins/media/langs/tw_dlg.js delete mode 100644 program/js/tiny_mce/plugins/paste/blank.htm delete mode 100644 program/js/tiny_mce/plugins/paste/css/blank.css delete mode 100644 program/js/tiny_mce/plugins/paste/css/pasteword.css create mode 100644 program/js/tiny_mce/plugins/paste/langs/ar_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/az_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/be_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/bg_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/bn_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/br_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/bs_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/ca_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/cs_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/cy_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/da_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/de_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/el_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/es_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/et_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/eu_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/fa_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/fi_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/fr_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/gl_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/he_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/hi_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/hr_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/hu_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/hy_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/ia_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/id_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/is_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/it_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/ja_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/ka_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/ko_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/lt_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/lv_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/mk_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/ms_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/nb_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/nl_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/nn_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/no_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/pl_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/ps_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/pt_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/ro_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/ru_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/si_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/sk_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/sl_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/sq_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/sr_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/sv_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/ta_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/te_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/th_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/tr_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/tw_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/uk_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/vi_dlg.js create mode 100644 program/js/tiny_mce/plugins/paste/langs/zh_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/az_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/be_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/bn_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/br_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/cy_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/eu_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/gl_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/hi_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/hy_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/ia_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/id_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/ka_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/no_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/ps_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/sq_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/ta_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/te_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/th_dlg.js create mode 100644 program/js/tiny_mce/plugins/searchreplace/langs/tw_dlg.js delete mode 100755 program/js/tiny_mce/plugins/spellchecker/classes/EnchantSpell.php delete mode 100755 program/js/tiny_mce/plugins/spellchecker/classes/GoogleSpell.php delete mode 100755 program/js/tiny_mce/plugins/spellchecker/classes/PSpell.php delete mode 100755 program/js/tiny_mce/plugins/spellchecker/classes/PSpellShell.php delete mode 100755 program/js/tiny_mce/plugins/spellchecker/classes/SpellChecker.php delete mode 100755 program/js/tiny_mce/plugins/spellchecker/classes/utils/JSON.php delete mode 100755 program/js/tiny_mce/plugins/spellchecker/classes/utils/Logger.php delete mode 100755 program/js/tiny_mce/plugins/spellchecker/config.php delete mode 100755 program/js/tiny_mce/plugins/spellchecker/includes/general.php delete mode 100755 program/js/tiny_mce/plugins/spellchecker/rpc.php create mode 100644 program/js/tiny_mce/plugins/tabfocus/editor_plugin.js create mode 100644 program/js/tiny_mce/plugins/tabfocus/editor_plugin_src.js create mode 100644 program/js/tiny_mce/plugins/table/langs/az_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/be_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/bn_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/br_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/cy_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/eu_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/gl_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/hi_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/hy_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/ia_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/id_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/ka_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/no_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/ps_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/sq_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/ta_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/te_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/th_dlg.js create mode 100644 program/js/tiny_mce/plugins/table/langs/tw_dlg.js delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/abbr.htm delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/acronym.htm delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/attributes.htm delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/cite.htm delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/css/attributes.css delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/css/popup.css delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/css/xhtmlxtras.css delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/del.htm delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/editor_plugin.js delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/ins.htm delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/js/abbr.js delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/js/acronym.js delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/js/attributes.js delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/js/cite.js delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/js/del.js delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/js/element_common.js delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/js/ins.js delete mode 100644 program/js/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/az.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/az_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/be.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/be_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/bn.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/bn_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/br.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/br_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/cy.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/cy_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/eu.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/eu_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/gl.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/gl_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/hi.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/hi_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/hy.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/hy_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/ia.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/ia_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/id.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/id_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/ka.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/ka_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/no.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/no_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/ps.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/ps_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/sq.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/sq_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/ta.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/ta_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/te.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/te_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/th.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/th_dlg.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/tw.js create mode 100644 program/js/tiny_mce/themes/advanced/langs/tw_dlg.js delete mode 100644 program/lib/imap.inc delete mode 100644 program/lib/mime.inc delete mode 100644 program/lib/tnef_decoder.inc create mode 100644 program/lib/tnef_decoder.php create mode 100644 program/localization/kh_KH/labels.inc create mode 100644 program/localization/kh_KH/messages.inc create mode 100644 program/localization/ta_IN/labels.inc create mode 100644 program/localization/ta_IN/messages.inc create mode 100644 program/steps/addressbook/groups.inc create mode 100644 program/steps/mail/copy.inc create mode 100644 program/steps/mail/pagenav.inc delete mode 100644 program/steps/mail/rss.inc create mode 100644 program/steps/settings/edit_folder.inc create mode 100644 program/steps/settings/folders.inc delete mode 100644 program/steps/settings/manage_folders.inc create mode 100644 program/steps/settings/save_folder.inc rename program/steps/{ => utils}/error.inc (92%) rename bin/html2text.php => program/steps/utils/html2text.inc (54%) rename bin/killcache.php => program/steps/utils/killcache.inc (61%) rename bin/modcss.php => program/steps/utils/modcss.inc (82%) create mode 100644 program/steps/utils/save_pref.inc rename program/steps/{mail => utils}/spell.inc (72%) rename program/steps/{mail => utils}/spell_googie.inc (74%) create mode 100644 program/steps/utils/spell_html_googie.inc create mode 100644 program/steps/utils/spell_html_pspell.inc rename program/steps/{mail => utils}/spell_pspell.inc (87%) create mode 100644 skins/default/README rename skins/default/{addresses.css => addressbook.css} (73%) delete mode 100644 skins/default/colorpicker.css create mode 100644 skins/default/images/dbutton.png delete mode 100644 skins/default/images/icons/abcard.png create mode 100644 skins/default/images/icons/columnpicker.gif create mode 100644 skins/default/images/icons/groupactions.gif create mode 100644 skins/default/images/icons/groupactions.png create mode 100644 skins/default/images/icons/unread_children.png create mode 100644 skins/default/images/mail_footer.gif create mode 100644 skins/default/images/messageicons.gif create mode 100644 skins/default/images/messageicons.png create mode 100644 skins/default/images/quota.gif create mode 100644 skins/default/images/tabs-left.gif create mode 100644 skins/default/images/tabs-right.gif delete mode 100644 skins/default/images/tabs.gif create mode 100644 skins/default/images/taskbar.png create mode 100644 skins/default/images/tree.gif create mode 100644 skins/default/includes/replyallmenu.html rename skins/default/templates/{addcontact.html => contact.html} (56%) create mode 100644 skins/default/templates/contactadd.html rename skins/default/templates/{editcontact.html => contactedit.html} (54%) delete mode 100644 skins/default/templates/editidentity.html create mode 100644 skins/default/templates/folderedit.html create mode 100644 skins/default/templates/folders.html create mode 100644 skins/default/templates/identityedit.html delete mode 100644 skins/default/templates/managefolders.html rename skins/default/templates/{printmessage.html => messageprint.html} (100%) delete mode 100644 skins/default/templates/showcontact.html diff --git a/.htaccess b/.htaccess index 00e1bf2..704779e 100644 --- a/.htaccess +++ b/.htaccess @@ -16,6 +16,7 @@ php_flag magic_quotes_runtime Off php_flag zend.ze1_compatibility_mode Off php_flag suhosin.session.encrypt Off +#php_value session.cookie_path / php_value session.auto_start 0 php_value session.gc_maxlifetime 21600 php_value session.gc_divisor 500 diff --git a/CHANGELOG b/CHANGELOG index 6f92798..3a24db1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,49 +1,120 @@ -CHANGELOG RoundCube Webmail +CHANGELOG Roundcube Webmail =========================== -- Specify toolbar container in compose template (#1486247) -- Fix $_SERVER['HTTPS'] check for SSL forcing on IIS (#1486243) -- Avoid unnecessary page loads for selected tab (#1486032) -- Fix quota indicator issues by content generation on client-size (#1486197, #1486220) -- Don't display disabled sections in Settings (#1486099) -- Added server-side e-mail address validation with 'email_dns_check' option (#1485857) -- Fix login page loading into an iframe when session expires (#1485952) -- Allow setting port number in 'force_https' option (#1486091) -- Option 'force_https' replaced by 'force_https' plugin -- Fix IE issue with non-UTF-8 characters in AJAX response (#1486159) -- Partially fixed "empty body" issue by showing raw body of malformed message (#1486166) -- Fix importing/sending to email address with whitespace (#1486214) -- Added XIMSS (CommuniGate) driver for Password plugin -- Fix newly attached files are not saved in drafts w/o editing any text (#1486202) -- Added attachment upload indicator with parallel upload (#1486058) -- Use default_charset for bodies of messages without charset definition (#1486187) -- Password: added cPanel driver -- Fix return to first page from e-mail screen (#1486105) -- Fix handling HTML comments in HTML messages (#1486189) -- Fix folder/messagelist controls alignment - icons used (#1486072) -- Fix LDAP addressbook shows 'Contact not found' error sometimes (#1486178) -- Fix cache status checking + improve cache operations performance (#1486104) -- Prevent from setting INBOX as any of special folders (#1486114) -- Fix regular expression for e-mail address (#1486152) -- Fix Received header format -- Implemented sorting by message index - added 'index_sort' option (#1485936) -- Fix dl() use in installer (#1486150) -- Added 'ldap_debug' option -- Fix "Empty startup greeting" bug (#1486085) -- Fix setting user name in 'new_user_identity' plugin (#1486137) -- Fix incorrect count of new messages in folder list when using multiple IMAP clients (#1485995) -- Fix all folders checking for new messages with disabled caching (#1486128) -- Support skins in 'archive' and 'markasjunk' plugins -- Added 'html_editor' hook (#1486068) -- Fix DB constraint violation when populating messages cache (#1486052) -- Password: added password strength options (#1486062) -- Fix LDAP partial result warning (#1485536) -- Fix delete in message view deletes permanently with flag_for_deletion=true (#1486101) -- Use faster/secure mt_rand() (#1486094) -- Fix roundcube hangs on empty inbox with bincimapd (#1486093) -- Fix wrong headers for IE on servers without $_SERVER['HTTPS'] (#1485926) -- Force IE style headers for attachments in non-HTTPS session, 'use_https' option (#1485655) -- Check 'post_max_size' for upload max filesize (#1486089) -- Password Plugin: Fix %d inserts username instead of domain (#1486088) -- Fix rcube_mdb2::affected_rows() (#1486082) +- Fix double-login/session issue (#1487104) +- Wrap HTML parts with and add Doctype declaration (#1487098) +- Make rcube_autoload silently skip unknown classes (#1487109) +- Fix charset detection in vcards with encoded values (#1485542) +- Better CSS cursors for splitters (#1486874) +- Show the same message only once (#1487641) +- Fix namespaces handling (#1487649) +- Add handling of multifolder METADATA/ANNOTATION responses +- Fix handling of INBOX when personal namespace prefix is non-empty (#1487657) +- Fix handling square brackets in links (#1487672) +- Add description of 'use_https' option in main.inc.php.dist file + +RELEASE 0.5-RC +-------------- +- Plugin API: Add 'pass' argument in 'authenticate' hook (#1487134) +- Fix attachments of type message/rfc822 are not listed on attachments list +- Add 'login_lc' config option for case-insensitive authentication (#1487113) +- Fix window is blur'ed in IE when selecting a message (#1487316) +- Fix cursor position on compose form in Webkit browsers (#1486674) +- Fix setting charset of attachment filenames (#1487122) +- Allow setting autocomplete attribute for all inputs separately (#1487313) +- New Folder Manager UI +- Fix invalid Request when creating a folder (#1487443) +- Add folder size and quota indicator in folder manager (#1485780) +- Add possibility to move a subfolder into root folder (#1486791) +- Fix copying all messages in a folder copies only messages from current page +- Improve performance of moving or copying of all messages in a folder +- Fix plaintext versions of HTML messages don't contain placeholders for emotions (#1485206) +- Improve performance of folder rename and delete actions +- Better support for READ-ONLY and NOPERM responses handling (#1487083) +- Add confirmation message on purge/expunge command response +- Fix handling of untagged responses for AUTHENTICATE command (#1487450) +- Add username and IP address to log message on unsuccessful login (#1487626) +- Improved Mail-Followup-To and Mail-Reply-To headers handling +- Fix charset conversion for text attachments without charset specification (#1487634) + +RELEASE 0.5-BETA +---------------- +- Make session data storage more robust against garbage session data (#1487136) +- Config option for autocomplete on login screen +- Allow plugin templates to include local files (#1487133) +- List groups in address detail view and allow to subscribe/unsubscribe from there (#1486753) +- Messages caching: performance improvements, fixed syncing, fixes related with #1486748 +- Add link to identities in compose window (#1486729) +- Add Internationalized Domain Name (IDNA) support (#1483894) +- Add option to automatically send read notifications for known senders (#1485883) +- Add option to "Return receipt" will be always checked (#1486352) +- Fix HTML to plain text conversion doesn't handle citation blocks (#1486921) +- Use custom sorting when SORT is disabled by IMAP admin (#1486959) +- Allow setting some washtml options from plugin (#1486578) +- Add option do bind for an individual LDAP address book (#1486997) +- Change reply prefix to display email address only if sender name doesn't exist (#1486550) +- Plugin API: improved 'abort' flag handling, added 'result' item in some hooks (#1486914) +- Fix mailto optional params in plain text messages aren't handled (#1487026) +- Add Reply-to-List feature (#1484252) +- Add Mail-Followup-To/Mail-Reply-To support (#1485547) +- Fix confirmation message isn't displayed after sending mail on Chrome (#1486177) +- Fix keyboard doesn't work with autocomplete list with Chrome (#1487029) +- Improve tabs to fixed width and add tabs in identities info (#1486974) +- Add unique index on users.username+users.mail_host +- Make htmleditor option more consistent and add option to use HTML on reply to HTML message (#1485840) +- Use empty envelope sender address for message disposition notifications (RFC 2298.3) +- Support SMTP Delivery Status Notifications - RFC 3461 (#1486142) +- Use css sprite image for messages list +- Add (different) attachment icon for messages of type multipart/report (#1486165) +- Prevent from inserting empty link when composing HTML message (#1486944) +- Add caching support in id2uid and uid2id functions (#1487019) +- Add SASL proxy authentication for SMTP (#1486693) +- Improve displaying of UI messages (#1486977) +- Fix double e-mail filed in identity form (#1487054) +- Display IMAP errors for LIST/THREAD/SEARCH commands (#1486905) +- Add LITERAL+ (IMAP4 non-synchronizing literals) support (RFC 2088) +- Add separate column for message status icon (#1486665) +- Add ACL extension support into IMAP classes (RFC 4314) +- Add ANNOTATEMORE extension support into IMAP classes (draft-daboo-imap-annotatemore) +- Add METADATA extension support into IMAP classes (RFC 5464) +- Fix decoding of e-mail address strings in message headers (#1487068) +- Fix handling of attachments when Content-Disposition is not inline nor attachment (#1487051) +- Improve performance of unseen messages counting (#1487058) +- Improve performance of messages counting using ESEARCH extension (RFC4731) +- Add LIST-STATUS support in rcube_imap_generic class (RFC 5819) +- Add SASL-IR support in IMAP (RFC 4959) +- Add LOGINDISABLED support (RFC 2595) +- Add support for AUTH=PLAIN in IMAP authentication +- Re-implemented SMTP proxy authentication support +- Add support for IMAP proxy authentication (#1486690) +- Add support for AUTH=DIGEST-MD5 in IMAP (RFC 2831) +- Fix parent folder with unread subfolder not bold when message is open (#1487078) +- Add basic IMAP LIST's \Noselect option support +- Add support for selection options from LIST-EXTENDED extension (RFC 5258) +- Don't list subscribed but non-existent folders (#1486225) +- Fix handling of URLs with tilde (~) or semicolon (;) character (#1487087, #1487088) +- Plugin API: added 'contact_form' hook +- Add SORT=DISPLAY support (RFC 5957) +- Plugin API: add possibility to disable plugin in AJAX mode, 'noajax' property +- Plugin API: add possibility to disable plugin in framed mode, 'noframe' property +- Improve performance of setting IMAP flags using .SILENT suffix +- Improve performance of message cache status checking with skip_disabled=true +- Support contact's email addresses up to 255 characters long (#1487095) +- Add option to place replies in the folder of the message being replied to (#1485945) +- Add missing confirmation/error messages on contact/group/message actions (#1486845) +- Add 'loading' message on message move/copy/delete/mark actions +- Improve responsiveness of messages displaying (#1486986) +- Add option for minimum length of autocomplete's string (#1486428) +- Fix operations on messages in unsubscribed folder (#1487107) +- Add support for shared folders (#1403507) +- Fix handling of folders with name "0" (#1487119) +- Fix handling of folders with "<>" characters in name +- jQuery 1.4.4 +- Fix handling of HTML entity strings in plain text messages +- Fix focused elements aren't unfocused when clicking on the list (#1487123) +- Fix error in MSSQL DDL scripts (#1487112) +- Lock submit button in onsubmit event on login page (#1487036) +- Don't set attachment's charset in Content-type header (#1487122) +- Fix handling of message bodies (quoted-printable encoded) with NULL characters (#1486189) +- Add workaround for MSOE's multipart/related messages with non-related attachments diff --git a/INSTALL b/INSTALL index d2b9145..8216343 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,7 @@ INTRODUCTION ============ -This file describes the basic steps to install RoundCube Webmail on your +This file describes the basic steps to install Roundcube Webmail on your web server. For additional information, please also consult the project's wiki page at http://trac.roundcube.net/wiki @@ -12,26 +12,30 @@ REQUIREMENTS * The Apache or Lighttpd Webserver * .htaccess support allowing overrides for DirectoryIndex * PHP Version 5.2 or greater including - - PCRE (perl compatible regular expression) - - DOM (xml document object model) + - PCRE, DOM, JSON, XML, Session, Sockets (required) - Libiconv - Multibyte String (mbstring) - Mcrypt (supporting Triple DES) + - Fileinfo (optional) - Database driver for either MySQL, Postgres or SQLite -* php.ini options: +* The PEAR framework with the following packages installed: + - MDB2 2.5.0 or newer + - Mail_Mime 1.8.1 or newer + - Net_SMTP 1.4.2 or newer + - Auth_SASL 1.0.3 or newer +* php.ini options (see .htaccess file): - error_reporting E_ALL & ~E_NOTICE (or lower) - - memory_limit (increase as suitable to support large attachments) + - memory_limit > 16MB (increase as suitable to support large attachments) - file_uploads enabled (for attachment upload features) - session.auto_start disabled - zend.ze1_compatibility_mode disabled -* The PEAR framework with the following packages installed - - MDB2 (2.5.0b2) - - Mail_Mime (1.5.2) - - Net_SMTP (1.3.3) + - suhosin.session.encrypt disabled + - mbstring.func_overload disabled * PHP compiled with OpenSSL to connect to IMAPS and to use the spell checker -* A MySQL or PostgreSQL database engine or the SQLite extension for PHP +* A MySQL (4.0.8 or newer), PostgreSQL, MSSQL database engine + or the SQLite extension for PHP * One of the above databases with permission to create tables -* An SMTP server or PHP configured for mail delivery +* An SMTP server (recommended) or PHP configured for mail delivery INSTALLATION @@ -42,7 +46,7 @@ INSTALLATION are writable by the webserver - /temp - /logs -3. Create a new database and a database user for RoundCube (see DATABASE SETUP) +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 @@ -52,15 +56,22 @@ INSTALLATION CONFIGURATION HINTS =================== -RoundCube writes internal errors to the 'errors' log file located in the logs +Roundcube writes internal errors to the 'errors' log file located in the logs directory which can be configured in config/main.inc.php. If you want ordinary PHP errors to be logged there as well, enable the 'php_value error_log' line in the .htaccess file and set the path to the log file accordingly. +By default the session_path settings of PHP are not modified by Roundcube. +However if you want to limit the session cookies to the directory where +Roundcube resides you can uncomment and configure the according line +in the .htaccess file. + DATABASE SETUP ============== +Note: Database for Roundcube must use UTF-8 character set. + * MySQL ------- Setting up the mysql database can be done by creating an empty database, @@ -79,9 +90,6 @@ 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: For MySQL version 4.1 and up, it's recommended to create the database for -RoundCube with utf-8 charset. - * SQLite -------- @@ -102,7 +110,7 @@ webserver can write to the file and the directory containing the file. * PostgreSQL ------------ -To use RoundCube with PostgreSQL support you have to follow these +To use Roundcube with PostgreSQL support you have to follow these simple steps, which have to be done as the postgres system user (or which ever is the database superuser): @@ -119,6 +127,14 @@ versions don't have a -O option for the createdb, so if you are using that version you'll have to change ownership of the DB later. +Database cleaning +----------------- +Do keep your database slick and clean we recommend to periodically execute +bin/cleandb.sh which finally removes all records that are marked as deleted. +Best solution is to install a cronjob running this script daily. + + + MANUAL CONFIGURATION ==================== @@ -135,7 +151,7 @@ increase the allowed size of file attachments, for example: UPGRADING ========= -If you already have a previous version of RoundCube installed, +If you already have a previous version of Roundcube installed, please refer to the instructions in UPGRADING guide. @@ -143,9 +159,9 @@ OPTIMISING ========== There are two forms of optimisation here, compression and caching, both aimed -at increasing an end user's experience using RoundCube Webmail. Compression +at increasing an end user's experience using Roundcube Webmail. Compression allows the static web pages to be delivered with less bandwidth. The index.php -of RoundCube Webmail already enables compression on its output. The settings +of Roundcube Webmail already enables compression on its output. The settings below allow compression to occur for all static files. Caching sets HTTP response headers that enable a user's web client to understand what is static and how to cache it. diff --git a/INSTALL.orig b/INSTALL.orig index 67fbce9..eb83997 100644 --- a/INSTALL.orig +++ b/INSTALL.orig @@ -1,7 +1,7 @@ INTRODUCTION ============ -This file describes the basic steps to install RoundCube Webmail on your +This file describes the basic steps to install Roundcube Webmail on your web server. For additional information, please also consult the project's wiki page at http://trac.roundcube.net/wiki @@ -12,20 +12,27 @@ REQUIREMENTS * The Apache or Lighttpd Webserver * .htaccess support allowing overrides for DirectoryIndex * PHP Version 5.2 or greater including - - PCRE (perl compatible regular expression) - - DOM (xml document object model) + - PCRE, DOM, JSON, XML, Session, Sockets (required) - libiconv (recommended) - - mbstring (optional) -* php.ini options: + - mbstring, fileinfo, mcrypt (optional) +* PEAR packages distributed with Roundcube or external: + - MDB2 2.5.0 or newer + - Mail_Mime 1.8.1 or newer + - Net_SMTP 1.4.2 or newer + - Auth_SASL 1.0.3 or newer +* php.ini options (see .htaccess file): - error_reporting E_ALL & ~E_NOTICE (or lower) - - memory_limit (increase as suitable to support large attachments) + - memory_limit > 16MB (increase as suitable to support large attachments) - file_uploads enabled (for attachment upload features) - session.auto_start disabled - zend.ze1_compatibility_mode disabled + - suhosin.session.encrypt disabled + - mbstring.func_overload disabled * PHP compiled with OpenSSL to connect to IMAPS and to use the spell checker -* A MySQL or PostgreSQL database engine or the SQLite extension for PHP +* A MySQL (4.0.8 or newer), PostgreSQL, MSSQL database engine + or the SQLite extension for PHP * One of the above databases with permission to create tables -* An SMTP server or PHP configured for mail delivery +* An SMTP server (recommended) or PHP configured for mail delivery INSTALLATION @@ -36,7 +43,7 @@ INSTALLATION are writable by the webserver - /temp - /logs -3. Create a new database and a database user for RoundCube (see DATABASE SETUP) +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 @@ -46,15 +53,22 @@ INSTALLATION CONFIGURATION HINTS =================== -RoundCube writes internal errors to the 'errors' log file located in the logs +Roundcube writes internal errors to the 'errors' log file located in the logs directory which can be configured in config/main.inc.php. If you want ordinary PHP errors to be logged there as well, enable the 'php_value error_log' line in the .htaccess file and set the path to the log file accordingly. +By default the session_path settings of PHP are not modified by Roundcube. +However if you want to limit the session cookies to the directory where +Roundcube resides you can uncomment and configure the according line +in the .htaccess file. + DATABASE SETUP ============== +Note: Database for Roundcube must use UTF-8 character set. + * MySQL ------- Setting up the mysql database can be done by creating an empty database, @@ -73,9 +87,6 @@ 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: For MySQL version 4.1 and up, it's recommended to create the database for -RoundCube with utf-8 charset. - * SQLite -------- @@ -96,7 +107,7 @@ webserver can write to the file and the directory containing the file. * PostgreSQL ------------ -To use RoundCube with PostgreSQL support you have to follow these +To use Roundcube with PostgreSQL support you have to follow these simple steps, which have to be done as the postgres system user (or which ever is the database superuser): @@ -113,6 +124,14 @@ versions don't have a -O option for the createdb, so if you are using that version you'll have to change ownership of the DB later. +Database cleaning +----------------- +Do keep your database slick and clean we recommend to periodically execute +bin/cleandb.sh which finally removes all records that are marked as deleted. +Best solution is to install a cronjob running this script daily. + + + MANUAL CONFIGURATION ==================== @@ -129,7 +148,7 @@ increase the allowed size of file attachments, for example: UPGRADING ========= -If you already have a previous version of RoundCube installed, +If you already have a previous version of Roundcube installed, please refer to the instructions in UPGRADING guide. @@ -137,9 +156,9 @@ OPTIMISING ========== There are two forms of optimisation here, compression and caching, both aimed -at increasing an end user's experience using RoundCube Webmail. Compression +at increasing an end user's experience using Roundcube Webmail. Compression allows the static web pages to be delivered with less bandwidth. The index.php -of RoundCube Webmail already enables compression on its output. The settings +of Roundcube Webmail already enables compression on its output. The settings below allow compression to occur for all static files. Caching sets HTTP response headers that enable a user's web client to understand what is static and how to cache it. diff --git a/README b/README index d7a13f7..3af0a1f 100644 --- a/README +++ b/README @@ -1,42 +1,50 @@ -RoundCube Webmail (http://roundcube.net) +Roundcube Webmail (http://roundcube.net) Introduction: ------------- -RoundCube Webmail is a browser-based multilingual IMAP client with an +Roundcube Webmail is a browser-based multilingual IMAP client with an application-like user interface. It provides full functionality you expect from an e-mail client, including MIME support, address book, folder management, -message searching and spell checking. RoundCube Webmail is written in PHP and -requires the MySQL, PostgreSQL or SQLite database. The user interface is fully -skinnable using XHTML and CSS 2. +message searching and spell checking. Roundcube Webmail is written in PHP and +requires the MySQL, PostgreSQL or SQLite database. With its plugin API it is +easily extendable and the user interface is fully customizable using skins +which are pure XHTML and CSS 2. -This project is meant to be a modern webmail solution which is easy to -install/configure and that runs on a standard PHP plus MySQL, PostgreSQL or SQLite -configuration. It includes open-source classes/libraries like PEAR -(http://pear.php.net) and the IMAP wrapper from IlohaMail -(http://www.ilohamail.org). +This project includes other open-source classes/libraries from PEAR +(http://pear.php.net), an IMAP library derived from IlohaMail +the TinyMCE rich text editor, Googiespell library for spell checking +or the HTML sanitizer by Frederic Motte. -The current development skin uses icons designed by Stephen Horlander and Kevin +The current default skin uses icons designed by Stephen Horlander and Kevin Gerich for Mozilla.org. Installation: ------------- -For detailed instructions on how to install RoundCube webmail on your server, +For detailed instructions on how to install Roundcube webmail on your server, please refer to the INSTALL document in the same directory as this document. Please carefully read the REQUIREMENTS section of the INSTALL instructions. +If you're updating an older version of Roundcube please follow the steps +described in the UPGRADING file. + Licensing: ---------- -This product is distributed under the GPL. Please read through the file -LICENSE for more information about our license. +This product is distributed under the GNU General Public License Version 2. +Please read through the file LICENSE for more information about our license. + +Even if skins might contain some programming work, they are not considered +as a linked part of the application and therefore skins DO NOT fall under +the provisions of the GPL license. See the README file located in the skins +folder for details on the skin license. Contribution: ------------- -Want to help make RoundCube the best webmail solution ever? -RoundCube is open source software. Our developers and contributors all +Want to help make Roundcube the best webmail solution ever? +Roundcube is open source software. Our developers and contributors all are volunteers and we're always looking for new additions and resources. For more information visit http://roundcube.net/contribute diff --git a/SQL/mssql.initial.sql b/SQL/mssql.initial.sql index e97a9a7..823d1b3 100644 --- a/SQL/mssql.initial.sql +++ b/SQL/mssql.initial.sql @@ -13,16 +13,33 @@ CREATE TABLE [dbo].[contacts] ( [changed] [datetime] NOT NULL , [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL , [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , - [email] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [email] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL , [firstname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , [surname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , [vcard] [text] COLLATE Latin1_General_CI_AI NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO +CREATE TABLE [dbo].[contactgroups] ( + [contactgroup_id] [int] IDENTITY (1, 1) NOT NULL , + [user_id] [int] NOT NULL , + [changed] [datetime] NOT NULL , + [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL , + [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] +GO + +CREATE TABLE [dbo].[contactgroupmembers] ( + [contactgroup_id] [int] NOT NULL , + [contact_id] [int] NOT NULL , + [created] [datetime] NOT NULL +) ON [PRIMARY] +GO + CREATE TABLE [dbo].[identities] ( [identity_id] [int] IDENTITY (1, 1) NOT NULL , [user_id] [int] NOT NULL , + [changed] [datetime] NOT NULL , [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL , [standard] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL , [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , @@ -69,7 +86,7 @@ CREATE TABLE [dbo].[users] ( [mail_host] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , [alias] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , [created] [datetime] NOT NULL , - [last_login] [datetime] NOT NULL , + [last_login] [datetime] NULL , [language] [varchar] (5) COLLATE Latin1_General_CI_AI NULL , [preferences] [text] COLLATE Latin1_General_CI_AI NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] @@ -89,6 +106,20 @@ ALTER TABLE [dbo].[contacts] WITH NOCHECK ADD ) ON [PRIMARY] GO +ALTER TABLE [dbo].[contactgroups] WITH NOCHECK ADD + CONSTRAINT [PK_contactgroups_contactgroup_id] PRIMARY KEY CLUSTERED + ( + [contactgroup_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroupmembers] WITH NOCHECK ADD + CONSTRAINT [PK_contactgroupmembers_id] PRIMARY KEY CLUSTERED + ( + [contactgroup_id], [contact_id] + ) ON [PRIMARY] +GO + ALTER TABLE [dbo].[identities] WITH NOCHECK ADD PRIMARY KEY CLUSTERED ( @@ -123,13 +154,13 @@ ALTER TABLE [dbo].[cache] ADD CONSTRAINT [DF_cache_created] DEFAULT (getdate()) FOR [created] GO - CREATE INDEX [IX_cache_user_id] ON [dbo].[cache]([user_id]) ON [PRIMARY] +CREATE INDEX [IX_cache_user_id] ON [dbo].[cache]([user_id]) ON [PRIMARY] GO - CREATE INDEX [IX_cache_cache_key] ON [dbo].[cache]([cache_key]) ON [PRIMARY] +CREATE INDEX [IX_cache_cache_key] ON [dbo].[cache]([cache_key]) ON [PRIMARY] GO - CREATE INDEX [IX_cache_created] ON [dbo].[cache]([created]) ON [PRIMARY] +CREATE INDEX [IX_cache_created] ON [dbo].[cache]([created]) ON [PRIMARY] GO ALTER TABLE [dbo].[contacts] ADD @@ -143,9 +174,27 @@ ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [CK_contacts_del] CHECK ([del] = '1' or [del] = '0') GO - CREATE INDEX [IX_contacts_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY] +CREATE INDEX [IX_contacts_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroups] ADD + CONSTRAINT [DF_contactgroups_user_id] DEFAULT (0) FOR [user_id], + CONSTRAINT [DF_contactgroups_changed] DEFAULT (getdate()) FOR [changed], + CONSTRAINT [DF_contactgroups_del] DEFAULT ('0') FOR [del], + CONSTRAINT [DF_contactgroups_name] DEFAULT ('') FOR [name], + CONSTRAINT [CK_contactgroups_del] CHECK ([del] = '1' or [del] = '0') GO +CREATE INDEX [IX_contactgroups_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroupmembers] ADD + CONSTRAINT [DF_contactgroupmembers_contactgroup_id] DEFAULT (0) FOR [contactgroup_id], + CONSTRAINT [DF_contactgroupmembers_contact_id] DEFAULT (0) FOR [contact_id], + CONSTRAINT [DF_contactgroupmembers_created] DEFAULT (getdate()) FOR [created] +GO + + ALTER TABLE [dbo].[identities] ADD CONSTRAINT [DF_identities_user] DEFAULT ('0') FOR [user_id], CONSTRAINT [DF_identities_del] DEFAULT ('0') FOR [del], @@ -160,7 +209,7 @@ ALTER TABLE [dbo].[identities] ADD CHECK ([del] = '1' or [del] = '0') GO - CREATE INDEX [IX_identities_user_id] ON [dbo].[identities]([user_id]) ON [PRIMARY] +CREATE INDEX [IX_identities_user_id] ON [dbo].[identities]([user_id]) ON [PRIMARY] GO ALTER TABLE [dbo].[messages] ADD @@ -178,16 +227,16 @@ ALTER TABLE [dbo].[messages] ADD CONSTRAINT [DF_messages_size] DEFAULT (0) FOR [size] GO - CREATE INDEX [IX_messages_user_id] ON [dbo].[messages]([user_id]) ON [PRIMARY] +CREATE INDEX [IX_messages_user_id] ON [dbo].[messages]([user_id]) ON [PRIMARY] GO - CREATE INDEX [IX_messages_cache_key] ON [dbo].[messages]([cache_key]) ON [PRIMARY] +CREATE INDEX [IX_messages_cache_key] ON [dbo].[messages]([cache_key]) ON [PRIMARY] GO - CREATE INDEX [IX_messages_uid] ON [dbo].[messages]([uid]) ON [PRIMARY] +CREATE INDEX [IX_messages_uid] ON [dbo].[messages]([uid]) ON [PRIMARY] GO - CREATE INDEX [IX_messages_created] ON [dbo].[messages]([created]) ON [PRIMARY] +CREATE INDEX [IX_messages_created] ON [dbo].[messages]([created]) ON [PRIMARY] GO ALTER TABLE [dbo].[session] ADD @@ -196,7 +245,7 @@ ALTER TABLE [dbo].[session] ADD CONSTRAINT [DF_session_ip] DEFAULT ('') FOR [ip] GO - CREATE INDEX [IX_session_changed] ON [dbo].[session]([changed]) ON [PRIMARY] +CREATE INDEX [IX_session_changed] ON [dbo].[session]([changed]) ON [PRIMARY] GO ALTER TABLE [dbo].[users] ADD @@ -206,9 +255,47 @@ ALTER TABLE [dbo].[users] ADD CONSTRAINT [DF_users_created] DEFAULT (getdate()) FOR [created] GO - CREATE INDEX [IX_users_username] ON [dbo].[users]([username]) ON [PRIMARY] +CREATE UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY] +GO + +CREATE INDEX [IX_users_alias] ON [dbo].[users]([alias]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[identities] ADD CONSTRAINT [FK_identities_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [FK_contacts_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[contactgroups] ADD CONSTRAINT [FK_contactgroups_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[cache] ADD CONSTRAINT [FK_cache_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[messages] ADD CONSTRAINT [FK_messages_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[contactgroupmembers] ADD CONSTRAINT [FK_contactgroupmembers_contactgroup_id] + FOREIGN KEY ([contactgroup_id]) REFERENCES [dbo].[contactgroups] ([contactgroup_id]) + ON DELETE CASCADE ON UPDATE CASCADE GO - CREATE INDEX [IX_users_alias] ON [dbo].[users]([alias]) ON [PRIMARY] +-- Use trigger instead of foreign key (#1487112) +-- "Introducing FOREIGN KEY constraint ... may cause cycles or multiple cascade paths." +CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts] + AFTER DELETE AS + DELETE FROM [dbo].[contactgroupmembers] + WHERE [contact_id] IN (SELECT [contact_id] FROM deleted) GO diff --git a/SQL/mssql.upgrade.sql b/SQL/mssql.upgrade.sql new file mode 100644 index 0000000..4072c25 --- /dev/null +++ b/SQL/mssql.upgrade.sql @@ -0,0 +1,99 @@ +-- Roundcube Webmail update script for MSSQL databases + +-- Updates from version 0.3.1 + +ALTER TABLE [dbo].[messages] ADD CONSTRAINT [FK_messages_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[cache] ADD CONSTRAINT [FK_cache_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [FK_contacts_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[identities] ADD CONSTRAINT [FK_identities_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[identities] ADD [changed] [datetime] NULL +GO + +CREATE TABLE [dbo].[contactgroups] ( + [contactgroup_id] [int] IDENTITY (1, 1) NOT NULL , + [user_id] [int] NOT NULL , + [changed] [datetime] NOT NULL , + [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL , + [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] +GO + +CREATE TABLE [dbo].[contactgroupmembers] ( + [contactgroup_id] [int] NOT NULL , + [contact_id] [int] NOT NULL , + [created] [datetime] NOT NULL +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroups] WITH NOCHECK ADD + CONSTRAINT [PK_contactgroups_contactgroup_id] PRIMARY KEY CLUSTERED + ( + [contactgroup_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroupmembers] WITH NOCHECK ADD + CONSTRAINT [PK_contactgroupmembers_id] PRIMARY KEY CLUSTERED + ( + [contactgroup_id], [contact_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroups] ADD + CONSTRAINT [DF_contactgroups_user_id] DEFAULT (0) FOR [user_id], + CONSTRAINT [DF_contactgroups_changed] DEFAULT (getdate()) FOR [changed], + CONSTRAINT [DF_contactgroups_del] DEFAULT ('0') FOR [del], + CONSTRAINT [DF_contactgroups_name] DEFAULT ('') FOR [name], + CONSTRAINT [CK_contactgroups_del] CHECK ([del] = '1' or [del] = '0') +GO + +CREATE INDEX [IX_contactgroups_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroupmembers] ADD + CONSTRAINT [DF_contactgroupmembers_contactgroup_id] DEFAULT (0) FOR [contactgroup_id], + CONSTRAINT [DF_contactgroupmembers_contact_id] DEFAULT (0) FOR [contact_id], + CONSTRAINT [DF_contactgroupmembers_created] DEFAULT (getdate()) FOR [created] +GO + +ALTER TABLE [dbo].[contactgroupmembers] ADD CONSTRAINT [FK_contactgroupmembers_contactgroup_id] + FOREIGN KEY ([contactgroup_id]) REFERENCES [dbo].[contactgroups] ([contactgroup_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts] + AFTER DELETE AS + DELETE FROM [dbo].[contactgroupmembers] + WHERE [contact_id] IN (SELECT [contact_id] FROM deleted) +GO + +ALTER TABLE [dbo].[contactgroups] ADD CONSTRAINT [FK_contactgroups_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +-- Updates from version 0.4.2 + +DROP INDEX [IX_users_username] +GO +CREATE UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY] +GO +ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL +GO + diff --git a/SQL/mysql.initial.sql b/SQL/mysql.initial.sql index f814547..6e2c247 100644 --- a/SQL/mysql.initial.sql +++ b/SQL/mysql.initial.sql @@ -1,4 +1,4 @@ --- RoundCube Webmail initial database structure +-- Roundcube Webmail initial database structure /*!40014 SET FOREIGN_KEY_CHECKS=0 */; @@ -24,11 +24,11 @@ CREATE TABLE `users` ( `mail_host` varchar(128) NOT NULL, `alias` varchar(128) NOT NULL, `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', - `last_login` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `last_login` datetime DEFAULT NULL, `language` varchar(5), `preferences` text, PRIMARY KEY(`user_id`), - INDEX `username_index` (`username`), + UNIQUE `username` (`username`, `mail_host`), INDEX `alias_index` (`alias`) ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; @@ -52,14 +52,11 @@ CREATE TABLE `messages` ( `headers` text NOT NULL, `structure` text, PRIMARY KEY(`message_id`), + CONSTRAINT `user_id_fk_messages` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, INDEX `created_index` (`created`), INDEX `index_index` (`user_id`, `cache_key`, `idx`), - UNIQUE `uniqueness` (`user_id`, `cache_key`, `uid`), - CONSTRAINT `user_id_fk_messages` FOREIGN KEY (`user_id`) - REFERENCES `users`(`user_id`) - /*!40008 - ON DELETE CASCADE - ON UPDATE CASCADE */ + UNIQUE `uniqueness` (`user_id`, `cache_key`, `uid`) ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; @@ -72,13 +69,10 @@ CREATE TABLE `cache` ( `data` longtext NOT NULL, `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY(`cache_id`), - INDEX `created_index` (`created`), - INDEX `user_cache_index` (`user_id`,`cache_key`), CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`) - REFERENCES `users`(`user_id`) - /*!40008 - ON DELETE CASCADE - ON UPDATE CASCADE */ + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `created_index` (`created`), + INDEX `user_cache_index` (`user_id`,`cache_key`) ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; @@ -88,26 +82,50 @@ CREATE TABLE `contacts` ( `contact_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', `del` tinyint(1) NOT NULL DEFAULT '0', - `name` varchar(128) NOT NULL, - `email` varchar(128) NOT NULL, - `firstname` varchar(128) NOT NULL, - `surname` varchar(128) NOT NULL, + `name` varchar(128) NOT NULL DEFAULT '', + `email` varchar(255) NOT NULL, + `firstname` varchar(128) NOT NULL DEFAULT '', + `surname` varchar(128) NOT NULL DEFAULT '', `vcard` text NULL, `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY(`contact_id`), - INDEX `user_contacts_index` (`user_id`,`email`), CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`) - REFERENCES `users`(`user_id`) - /*!40008 - ON DELETE CASCADE - ON UPDATE CASCADE */ + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `user_contacts_index` (`user_id`,`email`) ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; +-- Table structure for table `contactgroups` + +CREATE TABLE `contactgroups` ( + `contactgroup_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `del` tinyint(1) NOT NULL DEFAULT '0', + `name` varchar(128) NOT NULL DEFAULT '', + PRIMARY KEY(`contactgroup_id`), + 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 */; + +CREATE TABLE `contactgroupmembers` ( + `contactgroup_id` int(10) UNSIGNED NOT NULL, + `contact_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + PRIMARY KEY (`contactgroup_id`, `contact_id`), + CONSTRAINT `contactgroup_id_fk_contactgroups` FOREIGN KEY (`contactgroup_id`) + REFERENCES `contactgroups`(`contactgroup_id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `contact_id_fk_contacts` FOREIGN KEY (`contact_id`) + REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE ON UPDATE CASCADE +) /*!40000 ENGINE=INNODB */; + -- Table structure for table `identities` CREATE TABLE `identities` ( `identity_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', `del` tinyint(1) NOT NULL DEFAULT '0', `standard` tinyint(1) NOT NULL DEFAULT '0', `name` varchar(128) NOT NULL, @@ -117,13 +135,10 @@ CREATE TABLE `identities` ( `bcc` varchar(128) NOT NULL DEFAULT '', `signature` text, `html_signature` tinyint(1) NOT NULL DEFAULT '0', - `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY(`identity_id`), CONSTRAINT `user_id_fk_identities` FOREIGN KEY (`user_id`) - REFERENCES `users`(`user_id`) - /*!40008 - ON DELETE CASCADE - ON UPDATE CASCADE */ + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `user_identities_index` (`user_id`, `del`) ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; diff --git a/SQL/mysql.update.sql b/SQL/mysql.update.sql index 77bf317..2af0a47 100644 --- a/SQL/mysql.update.sql +++ b/SQL/mysql.update.sql @@ -1,5 +1,6 @@ --- RoundCube Webmail update script for MySQL databases --- Updates from version 0.1-stable to 0.3.1 +-- Roundcube Webmail update script for MySQL databases + +-- Updates from version 0.1-stable TRUNCATE TABLE `messages`; @@ -31,11 +32,11 @@ ALTER TABLE `identities` ALTER TABLE `messages` ADD INDEX `created_index` (`created`); --- Updates from version 0.2-beta (InnoDB only) +-- Updates from version 0.2-beta (InnoDB required) ALTER TABLE `cache` DROP `session_id`; - + ALTER TABLE `session` ADD INDEX `changed_index` (`changed`); @@ -45,15 +46,88 @@ ALTER TABLE `cache` ALTER TABLE `users` CHANGE `language` `language` varchar(5); +ALTER TABLE `cache` ENGINE=InnoDB; +ALTER TABLE `session` ENGINE=InnoDB; +ALTER TABLE `messages` ENGINE=InnoDB; +ALTER TABLE `users` ENGINE=InnoDB; +ALTER TABLE `contacts` ENGINE=InnoDB; +ALTER TABLE `identities` ENGINE=InnoDB; + -- Updates from version 0.3-stable +TRUNCATE `messages`; + ALTER TABLE `messages` ADD INDEX `index_index` (`user_id`, `cache_key`, `idx`); -TRUNCATE `messages`; - ALTER TABLE `session` CHANGE `vars` `vars` MEDIUMTEXT NOT NULL; ALTER TABLE `contacts` ADD INDEX `user_contacts_index` (`user_id`,`email`); + +-- Updates from version 0.3.1 +-- WARNING: Make sure that all tables are using InnoDB engine!!! +-- If not, use: ALTER TABLE xxx ENGINE=InnoDB; + +/* MySQL bug workaround: http://bugs.mysql.com/bug.php?id=46293 */ +/*!40014 SET FOREIGN_KEY_CHECKS=0 */; + +ALTER TABLE `messages` DROP FOREIGN KEY `user_id_fk_messages`; +ALTER TABLE `cache` DROP FOREIGN KEY `user_id_fk_cache`; +ALTER TABLE `contacts` DROP FOREIGN KEY `user_id_fk_contacts`; +ALTER TABLE `identities` DROP FOREIGN KEY `user_id_fk_identities`; + +ALTER TABLE `messages` ADD CONSTRAINT `user_id_fk_messages` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE `cache` ADD CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE `contacts` ADD CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE `identities` ADD CONSTRAINT `user_id_fk_identities` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE `contacts` ALTER `name` SET DEFAULT ''; +ALTER TABLE `contacts` ALTER `firstname` SET DEFAULT ''; +ALTER TABLE `contacts` ALTER `surname` SET DEFAULT ''; + +ALTER TABLE `identities` ADD INDEX `user_identities_index` (`user_id`, `del`); +ALTER TABLE `identities` ADD `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' AFTER `user_id`; + +CREATE TABLE `contactgroups` ( + `contactgroup_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `del` tinyint(1) NOT NULL DEFAULT '0', + `name` varchar(128) NOT NULL DEFAULT '', + PRIMARY KEY(`contactgroup_id`), + 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 */; + +CREATE TABLE `contactgroupmembers` ( + `contactgroup_id` int(10) UNSIGNED NOT NULL, + `contact_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + PRIMARY KEY (`contactgroup_id`, `contact_id`), + CONSTRAINT `contactgroup_id_fk_contactgroups` FOREIGN KEY (`contactgroup_id`) + REFERENCES `contactgroups`(`contactgroup_id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `contact_id_fk_contacts` FOREIGN KEY (`contact_id`) + REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE ON UPDATE CASCADE +) /*!40000 ENGINE=INNODB */; + +/*!40014 SET FOREIGN_KEY_CHECKS=1 */; + +-- Updates from version 0.4-beta + +ALTER TABLE `users` CHANGE `last_login` `last_login` datetime DEFAULT NULL; +UPDATE `users` SET `last_login` = NULL WHERE `last_login` = '1000-01-01 00:00:00'; + +-- Updates from version 0.4.2 + +ALTER TABLE `users` DROP INDEX `username_index`; +ALTER TABLE `users` ADD UNIQUE `username` (`username`, `mail_host`); + +ALTER TABLE `contacts` MODIFY `email` varchar(255) NOT NULL; + diff --git a/SQL/postgres.initial.sql b/SQL/postgres.initial.sql index a52a01f..089cae0 100644 --- a/SQL/postgres.initial.sql +++ b/SQL/postgres.initial.sql @@ -1,4 +1,4 @@ --- RoundCube Webmail initial database structure +-- Roundcube Webmail initial database structure -- -- Sequence "user_ids" @@ -18,16 +18,16 @@ CREATE SEQUENCE user_ids CREATE TABLE users ( user_id integer DEFAULT nextval('user_ids'::text) PRIMARY KEY, - username character varying(128) DEFAULT ''::character varying NOT NULL, - mail_host character varying(128) DEFAULT ''::character varying NOT NULL, - alias character varying(128) DEFAULT ''::character varying NOT NULL, + username varchar(128) DEFAULT '' NOT NULL, + mail_host varchar(128) DEFAULT '' NOT NULL, + alias varchar(128) DEFAULT '' NOT NULL, created timestamp with time zone DEFAULT now() NOT NULL, - last_login timestamp with time zone DEFAULT now() NOT NULL, - "language" character varying(5), - preferences text DEFAULT ''::text NOT NULL + last_login timestamp with time zone DEFAULT NULL, + "language" varchar(5), + preferences text DEFAULT ''::text NOT NULL, + UNIQUE (username, mail_host) ); -CREATE INDEX users_username_id_idx ON users (username); CREATE INDEX users_alias_id_idx ON users (alias); @@ -37,10 +37,10 @@ CREATE INDEX users_alias_id_idx ON users (alias); -- CREATE TABLE "session" ( - sess_id character varying(40) DEFAULT ''::character varying PRIMARY KEY, + sess_id varchar(40) DEFAULT '' PRIMARY KEY, created timestamp with time zone DEFAULT now() NOT NULL, changed timestamp with time zone DEFAULT now() NOT NULL, - ip character varying(41) NOT NULL, + ip varchar(41) NOT NULL, vars text NOT NULL ); @@ -66,19 +66,21 @@ CREATE SEQUENCE identity_ids CREATE TABLE identities ( identity_id integer DEFAULT nextval('identity_ids'::text) PRIMARY KEY, - user_id integer NOT NULL REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + changed timestamp with time zone DEFAULT now() NOT NULL, del smallint DEFAULT 0 NOT NULL, standard smallint DEFAULT 0 NOT NULL, - name character varying(128) NOT NULL, - organization character varying(128), - email character varying(128) NOT NULL, - "reply-to" character varying(128), - bcc character varying(128), + name varchar(128) NOT NULL, + organization varchar(128), + email varchar(128) NOT NULL, + "reply-to" varchar(128), + bcc varchar(128), signature text, html_signature integer DEFAULT 0 NOT NULL ); -CREATE INDEX identities_user_id_idx ON identities (user_id); +CREATE INDEX identities_user_id_idx ON identities (user_id, del); -- @@ -100,18 +102,60 @@ CREATE SEQUENCE contact_ids CREATE TABLE contacts ( contact_id integer DEFAULT nextval('contact_ids'::text) PRIMARY KEY, - user_id integer NOT NULL REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, changed timestamp with time zone DEFAULT now() NOT NULL, del smallint DEFAULT 0 NOT NULL, - name character varying(128) DEFAULT ''::character varying NOT NULL, - email character varying(128) DEFAULT ''::character varying NOT NULL, - firstname character varying(128) DEFAULT ''::character varying NOT NULL, - surname character varying(128) DEFAULT ''::character varying NOT NULL, + name varchar(128) DEFAULT '' NOT NULL, + email varchar(255) DEFAULT '' NOT NULL, + firstname varchar(128) DEFAULT '' NOT NULL, + surname varchar(128) DEFAULT '' NOT NULL, vcard text ); CREATE INDEX contacts_user_id_idx ON contacts (user_id, email); +-- +-- Sequence "contactgroups_ids" +-- Name: contactgroups_ids; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE contactgroups_ids + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + +-- +-- Table "contactgroups" +-- Name: contactgroups; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE contactgroups ( + contactgroup_id integer DEFAULT nextval('contactgroups_ids'::text) PRIMARY KEY, + user_id integer NOT NULL + REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE, + changed timestamp with time zone DEFAULT now() NOT NULL, + del smallint NOT NULL DEFAULT 0, + name varchar(128) NOT NULL DEFAULT '' +); + +CREATE INDEX contactgroups_user_id_idx ON contactgroups (user_id, del); + +-- +-- Table "contactgroupmembers" +-- Name: contactgroupmembers; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE contactgroupmembers ( + contactgroup_id integer NOT NULL + REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE, + contact_id integer NOT NULL + REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE, + created timestamp with time zone DEFAULT now() NOT NULL, + PRIMARY KEY (contactgroup_id, contact_id) +); + -- -- Sequence "cache_ids" -- Name: cache_ids; Type: SEQUENCE; Schema: public; Owner: postgres @@ -130,8 +174,9 @@ CREATE SEQUENCE cache_ids CREATE TABLE "cache" ( cache_id integer DEFAULT nextval('cache_ids'::text) PRIMARY KEY, - user_id integer NOT NULL REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, - cache_key character varying(128) DEFAULT ''::character varying NOT NULL, + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + cache_key varchar(128) DEFAULT '' NOT NULL, created timestamp with time zone DEFAULT now() NOT NULL, data text NOT NULL ); @@ -157,22 +202,23 @@ CREATE SEQUENCE message_ids CREATE TABLE messages ( message_id integer DEFAULT nextval('message_ids'::text) PRIMARY KEY, - user_id integer NOT NULL REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, del smallint DEFAULT 0 NOT NULL, - cache_key character varying(128) DEFAULT ''::character varying NOT NULL, + cache_key varchar(128) DEFAULT '' NOT NULL, created timestamp with time zone DEFAULT now() NOT NULL, idx integer DEFAULT 0 NOT NULL, uid integer DEFAULT 0 NOT NULL, - subject character varying(128) DEFAULT ''::character varying NOT NULL, - "from" character varying(128) DEFAULT ''::character varying NOT NULL, - "to" character varying(128) DEFAULT ''::character varying NOT NULL, - cc character varying(128) DEFAULT ''::character varying NOT NULL, + subject varchar(128) DEFAULT '' NOT NULL, + "from" varchar(128) DEFAULT '' NOT NULL, + "to" varchar(128) DEFAULT '' NOT NULL, + cc varchar(128) DEFAULT '' NOT NULL, date timestamp with time zone NOT NULL, size integer DEFAULT 0 NOT NULL, headers text NOT NULL, - structure text + structure text, + UNIQUE (user_id, cache_key, uid) ); -ALTER TABLE messages ADD UNIQUE (user_id, cache_key, uid); CREATE INDEX messages_index_idx ON messages (user_id, cache_key, idx); CREATE INDEX messages_created_idx ON messages (created); diff --git a/SQL/postgres.update.sql b/SQL/postgres.update.sql index e343dd4..444caf6 100644 --- a/SQL/postgres.update.sql +++ b/SQL/postgres.update.sql @@ -1,4 +1,4 @@ --- RoundCube Webmail update script for Postgres databases +-- Roundcube Webmail update script for Postgres databases -- Updates from version 0.1-stable to 0.1.1 CREATE INDEX cache_user_id_idx ON cache (user_id, cache_key); @@ -39,7 +39,52 @@ ALTER TABLE messages ALTER del TYPE smallint; -- Updates from version 0.3-stable -CREATE INDEX messages_index_idx ON messages (user_id, cache_key, idx); TRUNCATE messages; +CREATE INDEX messages_index_idx ON messages (user_id, cache_key, idx); DROP INDEX contacts_user_id_idx; CREATE INDEX contacts_user_id_idx ON contacts (user_id, email); + +-- Updates from version 0.3.1 + +DROP INDEX identities_user_id_idx; +CREATE INDEX identities_user_id_idx ON identities (user_id, del); + +ALTER TABLE identities ADD changed timestamp with time zone DEFAULT now() NOT NULL; + +CREATE SEQUENCE contactgroups_ids + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + +CREATE TABLE contactgroups ( + contactgroup_id integer DEFAULT nextval('contactgroups_ids'::text) PRIMARY KEY, + user_id integer NOT NULL + REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE, + changed timestamp with time zone DEFAULT now() NOT NULL, + del smallint NOT NULL DEFAULT 0, + name varchar(128) NOT NULL DEFAULT '' +); + +CREATE INDEX contactgroups_user_id_idx ON contactgroups (user_id, del); + +CREATE TABLE contactgroupmembers ( + contactgroup_id integer NOT NULL + REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE, + contact_id integer NOT NULL + REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE, + created timestamp with time zone DEFAULT now() NOT NULL, + PRIMARY KEY (contactgroup_id, contact_id) +); + +-- Updates from version 0.4-beta + +ALTER TABLE users ALTER last_login DROP NOT NULL; +ALTER TABLE users ALTER last_login SET DEFAULT NULL; + +-- Updates from version 0.4.2 + +DROP INDEX users_username_id_idx; +ALTER TABLE users ADD UNIQUE (username, mail_host); +ALTER TABLE contacts ALTER email TYPE varchar(255); + diff --git a/SQL/sqlite.initial.sql b/SQL/sqlite.initial.sql index cccad7a..875b3cb 100644 --- a/SQL/sqlite.initial.sql +++ b/SQL/sqlite.initial.sql @@ -1,4 +1,4 @@ --- RoundCube Webmail initial database structure +-- Roundcube Webmail initial database structure -- -- Table structure for table `cache` @@ -19,7 +19,7 @@ CREATE INDEX ix_cache_created ON cache(created); -- -------------------------------------------------------- -- --- Table structure for table contacts +-- Table structure for table contacts and related -- CREATE TABLE contacts ( @@ -28,7 +28,7 @@ CREATE TABLE contacts ( changed datetime NOT NULL default '0000-00-00 00:00:00', del tinyint NOT NULL default '0', name varchar(128) NOT NULL default '', - email varchar(128) NOT NULL default '', + email varchar(255) NOT NULL default '', firstname varchar(128) NOT NULL default '', surname varchar(128) NOT NULL default '', vcard text NOT NULL default '' @@ -36,6 +36,26 @@ CREATE TABLE contacts ( CREATE INDEX ix_contacts_user_id ON contacts(user_id, email); + +CREATE TABLE contactgroups ( + contactgroup_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '' +); + +CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del); + + +CREATE TABLE contactgroupmembers ( + contactgroup_id integer NOT NULL, + contact_id integer NOT NULL default '0', + created datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (contactgroup_id, contact_id) +); + + -- -------------------------------------------------------- -- @@ -45,6 +65,7 @@ CREATE INDEX ix_contacts_user_id ON contacts(user_id, email); CREATE TABLE identities ( identity_id integer NOT NULL PRIMARY KEY, user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', del tinyint NOT NULL default '0', standard tinyint NOT NULL default '0', name varchar(128) NOT NULL default '', @@ -56,7 +77,7 @@ CREATE TABLE identities ( html_signature tinyint NOT NULL default '0' ); -CREATE INDEX ix_identities_user_id ON identities(user_id); +CREATE INDEX ix_identities_user_id ON identities(user_id, del); -- -------------------------------------------------------- @@ -71,12 +92,12 @@ CREATE TABLE users ( mail_host varchar(128) NOT NULL default '', alias varchar(128) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', - last_login datetime NOT NULL default '0000-00-00 00:00:00', + last_login datetime DEFAULT NULL, language varchar(5), preferences text NOT NULL default '' ); -CREATE INDEX ix_users_username ON users(username); +CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host); CREATE INDEX ix_users_alias ON users(alias); -- -------------------------------------------------------- diff --git a/SQL/sqlite.update.sql b/SQL/sqlite.update.sql index 09af76f..3286939 100644 --- a/SQL/sqlite.update.sql +++ b/SQL/sqlite.update.sql @@ -1,4 +1,4 @@ --- RoundCube Webmail update script for SQLite databases +-- Roundcube Webmail update script for SQLite databases -- Updates from version 0.1-stable to 0.1.1 DROP TABLE messages; @@ -22,7 +22,6 @@ CREATE TABLE messages ( ); CREATE INDEX ix_messages_user_cache_uid ON messages(user_id,cache_key,uid); - CREATE INDEX ix_users_username ON users(username); CREATE INDEX ix_users_alias ON users(alias); @@ -37,9 +36,147 @@ CREATE INDEX ix_cache_created ON cache (created); -- Updates from version 0.3-stable +DELETE FROM messages; DROP INDEX ix_messages_user_cache_uid; CREATE UNIQUE INDEX ix_messages_user_cache_uid ON messages (user_id,cache_key,uid); CREATE INDEX ix_messages_index ON messages (user_id,cache_key,idx); -TRUNCATE messages; DROP INDEX ix_contacts_user_id; CREATE INDEX ix_contacts_user_id ON contacts(user_id, email); + +-- Updates from version 0.3.1 + +-- ALTER TABLE identities ADD COLUMN changed datetime NOT NULL default '0000-00-00 00:00:00'; -- + +CREATE TABLE temp_identities ( + identity_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + standard tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + organization varchar(128) default '', + email varchar(128) NOT NULL default '', + "reply-to" varchar(128) NOT NULL default '', + bcc varchar(128) NOT NULL default '', + signature text NOT NULL default '', + html_signature tinyint NOT NULL default '0' +); +INSERT INTO temp_identities (identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature) + SELECT identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature + FROM identities WHERE del=0; + +DROP INDEX ix_identities_user_id; +DROP TABLE identities; + +CREATE TABLE identities ( + identity_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + standard tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + organization varchar(128) default '', + email varchar(128) NOT NULL default '', + "reply-to" varchar(128) NOT NULL default '', + bcc varchar(128) NOT NULL default '', + signature text NOT NULL default '', + html_signature tinyint NOT NULL default '0' +); +CREATE INDEX ix_identities_user_id ON identities(user_id, del); + +INSERT INTO identities (identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature) + SELECT identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature + FROM temp_identities; + +DROP TABLE temp_identities; + +CREATE TABLE contactgroups ( + contactgroup_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '' +); + +CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del); + +CREATE TABLE contactgroupmembers ( + contactgroup_id integer NOT NULL, + contact_id integer NOT NULL default '0', + created datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (contactgroup_id, contact_id) +); + +-- Updates from version 0.3.1 + +CREATE TABLE tmp_users ( + user_id integer NOT NULL PRIMARY KEY, + username varchar(128) NOT NULL default '', + mail_host varchar(128) NOT NULL default '', + alias varchar(128) NOT NULL default '', + created datetime NOT NULL default '0000-00-00 00:00:00', + last_login datetime NOT NULL default '0000-00-00 00:00:00', + language varchar(5), + preferences text NOT NULL default '' +); + +INSERT INTO tmp_users (user_id, username, mail_host, alias, created, last_login, language, preferences) + SELECT user_id, username, mail_host, alias, created, last_login, language, preferences FROM users; + +DROP TABLE users; + +CREATE TABLE users ( + user_id integer NOT NULL PRIMARY KEY, + username varchar(128) NOT NULL default '', + mail_host varchar(128) NOT NULL default '', + alias varchar(128) NOT NULL default '', + created datetime NOT NULL default '0000-00-00 00:00:00', + last_login datetime DEFAULT NULL, + language varchar(5), + preferences text NOT NULL default '' +); + +INSERT INTO users (user_id, username, mail_host, alias, created, last_login, language, preferences) + SELECT user_id, username, mail_host, alias, created, last_login, language, preferences FROM tmp_users; + +CREATE INDEX ix_users_username ON users(username); +CREATE INDEX ix_users_alias ON users(alias); +DROP TABLE tmp_users; + +-- Updates from version 0.4.2 + +DROP INDEX ix_users_username; +CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host); + +CREATE TABLE contacts_tmp ( + contact_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + email varchar(255) NOT NULL default '', + firstname varchar(128) NOT NULL default '', + surname varchar(128) NOT NULL default '', + vcard text NOT NULL default '' +); + +INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard) + SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts; + +DROP TABLE contacts; +CREATE TABLE contacts ( + contact_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + email varchar(255) NOT NULL default '', + firstname varchar(128) NOT NULL default '', + surname varchar(128) NOT NULL default '', + vcard text NOT NULL default '' +); + +INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard) + SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts_tmp; + +CREATE INDEX ix_contacts_user_id ON contacts(user_id, email); +DROP TABLE contacts_tmp; + diff --git a/UPGRADING b/UPGRADING index 6362e0c..329983d 100644 --- a/UPGRADING +++ b/UPGRADING @@ -1,12 +1,9 @@ UPGRADING instructions ====================== -First you should remove all subfolders from /program/localization/ -because most language codes have changed in 0.2-alpha. This way you -can make sure that no old localization files remain on your disk. - -Then follow these instructions if upgrading from a previous version -of RoundCube Webmail. +Follow these instructions if upgrading from a previous version +of Roundcube Webmail. We recommend to carefully backup the existing +installation as well as the database before executig the following steps. 1. Replace index.php and all files in - ./bin/ @@ -16,8 +13,8 @@ of RoundCube Webmail. - ./skins/default/ - ./plugins/ 2. Run ./bin/update.sh from the commandline OR - open http://url-to-roundcube/installer/ in a browser. To enable - the latter one, you have to temporary set 'enable_installer' to true + 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' to true in your local config/main.inc.php file. 3. Let the update script/installer check your configuration and update your config files as suggested by the updater. @@ -28,100 +25,3 @@ of RoundCube Webmail. 6. Check .htaccess settings (some php settings could become required) -For manually upgrading your RoundCube installation follow the instructions -that match the currently installed version: - -from version 0.2-alpha ----------------------------------------- -* replace index.php -* replace all files in folder /bin/ -* replace all files in folder /program/ -* replace all files in folder /installer/ -* replace all files in folder /skins/default/ -* run all commands in SQL/[yourdbtype].update.sql - below the line "-- Updates from version 0.2-alpha" -* check the config/main.inc.php.dist for new configuration - options and add them to your config - WARNING: 'skin_path' option was replaced by 'skin' option -* WARNING: 'db_backend' option has been removed, now only - PEAR::MDB2 driver is supported - - -from version 0.1.1 ----------------------------------------- -* replace index.php -* replace all files in folder /bin/ -* replace all files in folder /program/ -* replace all files in folder /skins/default/ -* run all commands in SQL/[yourdbtype].update.sql - below the line "-- Updates from version 0.1.1" -* check the config/main.inc.php.dist for new configuration - options and add them to your config - - -from version 0.1-stable ----------------------------------------- -* replace index.php -* replace all files in folder /bin/ -* replace all files in folder /program/ -* replace all files in folder /skins/default/ -* run all commands in SQL/[yourdbtype].update.sql -* check the config/main.inc.php.dist for new configuration options - and add them to your config - - -from version 0.1-rc2 ----------------------------------------- -* replace index.php -* replace all files in folder /bin/ -* replace all files in folder /program/ -* replace all files in folder /skins/default/ -* run all commands in SQL/[yourdbtype].update.sql - - -from version 0.1-rc1 ----------------------------------------- -* replace index.php -* replace all files in folder /bin/ -* replace all files in folder /program/ -* replace all files in folder /skins/default/ -* If you have LDAP servers configured you should re-configure - the config entries using the template given in /config/main.inc.php.dist - - -from version 0.1-beta2 ----------------------------------------- -* replace index.php -* replace all files in folder /bin/ -* replace all files in folder /program/ -* replace all files in folder /skins/default/ -* run all commands in SQL/[yourdbtype].update.sql or - re-initalize the database with [yourdbtype].initial.sql -* add these lines to /config/main.inc.php - $rcmail_config['draft_autosave'] = 300; - $rcmail_config['date_today'] = 'H:i'; -* If you have LDAP servers configured you should re-configure - the config entries using the template given in /config/main.inc.php.dist - - -form version 0.1-beta ----------------------------------------- -* replace index.php -* replace all files in folder /bin/ -* replace all files in folder /program/ -* replace all files in folder /skins/default/ -* run all commands in SQL/[yourdbtype].update.sql or - re-initalize the database with [yourdbtype].initial.sql -* add this line to /config/db.inc.php - $rcmail_config['db_persistent'] = false; -* add these lines to /config/main.inc.php - $rcmail_config['drafts_mbox'] = 'Drafts'; - $rcmail_config['junk_mbox'] = 'Junk'; - $rcmail_config['product_name'] = 'RoundCube Webmail'; - $rcmail_config['read_when_deleted'] = false; - $rcmail_config['enable_spellcheck'] = false; - $rcmail_config['protect_default_folders'] = false; -* replace the following line from /config/main.inc.php - @include($_SERVER['HTTP_HOST'].'.inc.php'); - with - $rcmail_config['include_host_config'] = false; diff --git a/bin/cleandb.sh b/bin/cleandb.sh new file mode 100755 index 0000000..4d699cc --- /dev/null +++ b/bin/cleandb.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env php + | + +-----------------------------------------------------------------------+ + + $Id: cleandb.sh 4164 2010-10-31 10:38:16Z thomasb $ + +*/ + +if (php_sapi_name() != 'cli') { + die('Not on the "shell" (php-cli).'); +} + +define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' ); +require INSTALL_PATH.'program/include/iniset.php'; + +// mapping for table name => primary key +$primary_keys = array( + 'contacts' => "contact_id", + 'contactgroups' => "contactgroup_id", +); + +// connect to DB +$RCMAIL = rcmail::get_instance(); +$db = $RCMAIL->get_dbh(); +$db->db_connect('w'); + +if (!$db->is_connected() || $db->is_error()) + die("No DB connection\n"); + +if (!empty($_SERVER['argv'][1])) + $days = intval($_SERVER['argv'][1]); +else + $days = 7; + +// remove all deleted records older than two days +$threshold = date('Y-m-d 00:00:00', time() - $days * 86400); + +foreach (array('contacts','contactgroups','identities') as $table) { + + $sqltable = get_table_name($table); + + // also delete linked records + // could be skipped for databases which respect foreign key constraints + if ($db->db_provider == 'sqlite' + && ($table == 'contacts' || $table == 'contactgroups') + ) { + $pk = $primary_keys[$table]; + $memberstable = get_table_name('contactgroupmembers'); + + $db->query( + "DELETE FROM $memberstable". + " WHERE $pk IN (". + "SELECT $pk FROM $sqltable". + " WHERE del=1 AND changed < ?". + ")", + $threshold); + + echo $db->affected_rows() . " records deleted from '$memberstable'\n"; + } + + // delete outdated records + $db->query("DELETE FROM $sqltable WHERE del=1 AND changed < ?", $threshold); + + echo $db->affected_rows() . " records deleted from '$table'\n"; +} + +?> diff --git a/bin/decrypt.php b/bin/decrypt.sh old mode 100644 new mode 100755 similarity index 89% rename from bin/decrypt.php rename to bin/decrypt.sh index 7ef5a47..8d6ff5e --- a/bin/decrypt.php +++ b/bin/decrypt.sh @@ -3,10 +3,10 @@ /* +-----------------------------------------------------------------------+ - | bin/decrypt.php | + | bin/decrypt.sh | | | - | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2005-2009, Roundcube Dev. - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -16,7 +16,7 @@ | Author: Tomas Tevesz | +-----------------------------------------------------------------------+ - $Id$ + $Id: decrypt.sh 3989 2010-09-25 13:03:53Z alec $ */ /*- @@ -37,7 +37,7 @@ * * Using this tool, they can be decrypted into plain text: * - * $ bin/decrypt_received.php 'my0nUbjZXKtl7KVBZcsvWOxxtyVFxza4' \ + * $ bin/decrypt.sh 'my0nUbjZXKtl7KVBZcsvWOxxtyVFxza4' \ * > 'DzgkvJBO5+bw+oje5JACeNIa/uSI4mRw2cy5YoPBba73eyBmjtyHnQ==' * 84.3.187.208 * 5403BBD0.catv.pool.telekom.hu diff --git a/bin/jsshrink.sh b/bin/jsshrink.sh new file mode 100755 index 0000000..b85f517 --- /dev/null +++ b/bin/jsshrink.sh @@ -0,0 +1,48 @@ +#!/bin/sh +JS_DIR=`dirname "$0"`/../program/js +CLOSURE_COMPILER_URL='http://closure-compiler.googlecode.com/files/compiler-latest.zip' + +do_shrink() { + rm -f "$2" + java -jar compiler.jar --compilation_level=SIMPLE_OPTIMIZATIONS --js="$1" --js_output_file="$2" +} + +if [ ! -d "$JS_DIR" ]; then + echo "Directory $JS_DIR not found." + exit 1 +fi + +if java -version >/dev/null 2>&1; then + : +else + echo "Java not found. Please ensure that the 'java' program is in your PATH." + exit 1 +fi + +if [ ! -r "compiler.jar" ]; then + if which wget >/dev/null 2>&1 && which unzip >/dev/null 2>&1; then + wget "$CLOSURE_COMPILER_URL" -O "/tmp/$$.zip" + elif which curl >/dev/null 2>&1 && which unzip >/dev/null 2>&1; then + curl "$CLOSURE_COMPILER_URL" -o "/tmp/$$.zip" + else + echo "Please download $CLOSURE_COMPILER_URL and extract compiler.jar to this directory." + exit 1 + fi + unzip "/tmp/$$.zip" "compiler.jar" + rm -f "/tmp/$$.zip" +fi + +for fn in app common googiespell list; do + if [ -r "$JS_DIR/${fn}.js.src" ]; then + echo "$JS_DIR/${fn}.js.src already exists, not overwriting" + else + mv "$JS_DIR/${fn}.js" "$JS_DIR/${fn}.js.src" + fi + echo "Shrinking $JS_DIR/${fn}.js" + do_shrink "$JS_DIR/${fn}.js.src" "$JS_DIR/${fn}.js" +done + +for fn in tiny_mce/tiny_mce; do + echo "Shrinking $JS_DIR/${fn}.js" + do_shrink "$JS_DIR/${fn}_src.js" "$JS_DIR/${fn}.js" +done diff --git a/bin/jsunshrink.sh b/bin/jsunshrink.sh new file mode 100755 index 0000000..90c3ea5 --- /dev/null +++ b/bin/jsunshrink.sh @@ -0,0 +1,24 @@ +#!/bin/sh +JS_DIR=`dirname "$0"`/../program/js + +if [ ! -d "$JS_DIR" ]; then + echo "Directory $JS_DIR not found." + exit 1 +fi + +for fn in app common googiespell list; do + if [ -r "$JS_DIR/${fn}.js.src" ]; then + mv "$JS_DIR/${fn}.js.src" "$JS_DIR/${fn}.js" + echo "Reverted $JS_DIR/${fn}.js" + fi +done + +for fn in tiny_mce/tiny_mce; do + if [ -d "$JS_DIR/.svn" ] && which svn >/dev/null 2>&1; then + rm -f "$JS_DIR/${fn}.js" + svn revert "$JS_DIR/${fn}.js" + else + cp "$JS_DIR/${fn}_src.js" "$JS_DIR/${fn}.js" + echo "Reverted $JS_DIR/${fn}.js" + fi +done diff --git a/bin/msgexport.sh b/bin/msgexport.sh index 7dd56e9..0aa33b5 100755 --- a/bin/msgexport.sh +++ b/bin/msgexport.sh @@ -1,45 +1,10 @@ #!/usr/bin/env php decode_address_list($headers->from, 1, false)); fwrite($out, sprintf("From %s %s UID %d\n", $from['mailto'], $headers->date, $headers->uid)); - fwrite($out, iil_C_FetchPartHeader($IMAP->conn, $IMAP->mailbox, $i, null)); - fwrite($out, iil_C_HandlePartBody($IMAP->conn, $IMAP->mailbox, $i, null, 1)); + fwrite($out, $IMAP->conn->fetchPartHeader($mbox, $i)); + fwrite($out, $IMAP->conn->handlePartBody($mbox, $i)); fwrite($out, "\n\n\n"); progress_update($i, $count); @@ -125,8 +90,7 @@ if (empty($args['user'])) } // prompt for password -vputs("Password: "); -$args['pass'] = trim(fgets(STDIN)); +$args['pass'] = prompt_silent("Password: "); // parse $host URL diff --git a/bin/msgimport.sh b/bin/msgimport.sh index a5161e0..74dc816 100755 --- a/bin/msgimport.sh +++ b/bin/msgimport.sh @@ -1,45 +1,10 @@ #!/usr/bin/env php load_config(); if ($RCI->configured) { + $success = true; + if ($messages = $RCI->check_config()) { + $success = false; $err = 0; // list missing config options @@ -77,7 +80,7 @@ if ($RCI->configured) { // Success! if ($write1 && $write2) { echo "Done.\n"; - echo "Your configuration files are now up-tp-date!\n"; + echo "Your configuration files are now up-to-date!\n"; } else { echo "Failed to write config files!\n"; @@ -100,15 +103,33 @@ if ($RCI->configured) { echo "Please fix your config files and run this script again!\n"; echo "See ya.\n"; } + } + // check database schema + if ($RCI->config['db_dsnw']) { + $DB = new rcube_mdb2($RCI->config['db_dsnw'], '', false); + $DB->db_connect('w'); + if ($db_error_msg = $DB->is_error()) { + echo "Error connecting to database: $db_error_msg\n"; + $success = false; + } + else if ($RCI->db_schema_check($DB, false)) { + $db_map = array('pgsql' => 'postgres', 'mysqli' => 'mysql', 'sqlsrv' => 'mssql'); + $updatefile = INSTALL_PATH . 'SQL/' . (isset($db_map[$DB->db_provider]) ? $db_map[$DB->db_provider] : $DB->db_provider) . '.update.sql'; + echo "WARNING: Database schema needs to be updated!\n"; + echo "Open $updatefile and execute all queries that are superscribed with the currently installed version number\n"; + $success = false; + } } - else { - echo "This instance of RoundCube is up-to-date.\n"; + + + if ($success) { + echo "This instance of Roundcube is up-to-date.\n"; echo "Have fun!\n"; } } else { - echo "This instance of RoundCube is not yet configured!\n"; + echo "This instance of Roundcube is not yet configured!\n"; echo "Open http://url-to-roundcube/installer/ in your browser and follow the instuctions.\n"; } diff --git a/config/db.inc.php.dist b/config/db.inc.php.dist index a9ffe52..e8938a1 100644 --- a/config/db.inc.php.dist +++ b/config/db.inc.php.dist @@ -4,8 +4,8 @@ +-----------------------------------------------------------------------+ | Configuration file for database access | | | - | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2005-2009, Roundcube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -17,7 +17,7 @@ $rcmail_config = array(); // PEAR database DSN for read/write operations // format is db_provider://user:password@host/database // For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php -// currently supported db_providers: mysql, mysqli, pgsql, sqlite, mssql +// currently supported db_providers: mysql, mysqli, pgsql, sqlite, mssql or sqlsrv $rcmail_config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail'; // postgres example: 'pgsql://roundcube:pass@localhost/roundcubemail'; @@ -44,6 +44,10 @@ $rcmail_config['db_table_identities'] = 'identities'; $rcmail_config['db_table_contacts'] = 'contacts'; +$rcmail_config['db_table_contactgroups'] = 'contactgroups'; + +$rcmail_config['db_table_contactgroupmembers'] = 'contactgroupmembers'; + $rcmail_config['db_table_session'] = 'session'; $rcmail_config['db_table_cache'] = 'cache'; @@ -58,10 +62,12 @@ $rcmail_config['db_sequence_identities'] = 'identity_ids'; $rcmail_config['db_sequence_contacts'] = 'contact_ids'; +$rcmail_config['db_sequence_contactgroups'] = 'contactgroups_ids'; + $rcmail_config['db_sequence_cache'] = 'cache_ids'; $rcmail_config['db_sequence_messages'] = 'message_ids'; // end db config file -?> + diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist index efa4595..144ca77 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -4,8 +4,8 @@ +-----------------------------------------------------------------------+ | Main configuration file | | | - | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2005-2010, Roundcube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,6 +14,10 @@ $rcmail_config = array(); +// ---------------------------------- +// LOGGING/DEBUGGING +// ---------------------------------- + // system error reporting: 1 = log; 2 = report (not implemented yet), 4 = show, 8 = trace $rcmail_config['debug_level'] = 1; @@ -31,84 +35,102 @@ $rcmail_config['syslog_id'] = 'roundcube'; // For possible values see installer or http://php.net/manual/en/function.openlog.php $rcmail_config['syslog_facility'] = LOG_USER; -// use this folder to store log files (must be writeable for apache user) -// This is used by the 'file' log driver. -$rcmail_config['log_dir'] = 'logs/'; +// Log sent messages to /sendmail or to syslog +$rcmail_config['smtp_log'] = true; -// use this folder to store temp files (must be writeable for apache user) -$rcmail_config['temp_dir'] = 'temp/'; +// Log successful logins to /userlogins or to syslog +$rcmail_config['log_logins'] = false; -// List of active plugins (in plugins/ directory) -$rcmail_config['plugins'] = array(); +// Log SQL queries to /sql or to syslog +$rcmail_config['sql_debug'] = false; -// enable caching of messages and mailbox data in the local database. -// this is recommended if the IMAP server does not run on the same machine -$rcmail_config['enable_caching'] = FALSE; +// Log IMAP conversation to /imap or to syslog +$rcmail_config['imap_debug'] = false; -// lifetime of message cache -// possible units: s, m, h, d, w -$rcmail_config['message_cache_lifetime'] = '10d'; +// Log LDAP conversation to /ldap or to syslog +$rcmail_config['ldap_debug'] = false; -// enforce connections over https -// with this option enabled, all non-secure connections will be redirected. -// set the port for the ssl connection as value of this option if it differs from the default 443 -$rcmail_config['force_https'] = FALSE; +// Log SMTP conversation to /smtp or to syslog +$rcmail_config['smtp_debug'] = false; -// automatically create a new RoundCube user when log-in the first time. -// a new user will be created once the IMAP login succeeds. -// set to false if only registered users can use this service -$rcmail_config['auto_create_user'] = TRUE; +// ---------------------------------- +// IMAP +// ---------------------------------- // the mail host chosen to perform the log-in // leave blank to show a textbox at login, give a list of hosts // to display a pulldown menu or set one host as string. // To use SSL/TLS connection, enter hostname with prefix ssl:// or tls:// +// Supported replacement variables: +// %n - http hostname ($_SERVER['SERVER_NAME']) +// %d - domain (http hostname without the first part) +// For example %n = mail.domain.tld, %d = domain.tld $rcmail_config['default_host'] = ''; // TCP port used for IMAP connections $rcmail_config['default_port'] = 143; -// IMAP auth type. Can be "auth" (CRAM-MD5), "plain" (PLAIN) or "check" to auto detect. -// Optional, defaults to "check" +// IMAP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use +// best server supported one) $rcmail_config['imap_auth_type'] = null; -// If you know your imap's root directory and its folder delimiter, -// you can specify them here. Otherwise they will be determined automatically. -$rcmail_config['imap_root'] = null; +// If you know your imap's folder delimiter, you can specify it here. +// Otherwise it will be determined automatically $rcmail_config['imap_delimiter'] = null; -// Automatically add this domain to user names for login -// Only for IMAP servers that require full e-mail addresses for login -// Specify an array with 'host' => 'domain' values to support multiple hosts -$rcmail_config['username_domain'] = ''; - -// This domain will be used to form e-mail addresses of new users -// Specify an array with 'host' => 'domain' values to support multiple hosts -$rcmail_config['mail_domain'] = ''; - -// Path to a virtuser table file to resolve user names and e-mail addresses -$rcmail_config['virtuser_file'] = ''; - -// Query to resolve user names and e-mail addresses from the database -// %u will be replaced with the current username for login. -// The query should select the user's e-mail address as first column -// and optional identity name as second column -$rcmail_config['virtuser_query'] = ''; - -// use this host for sending mails. -// to use SSL connection, set ssl://smtp.host.com -// if left blank, the PHP mail() function is used -// Use %h variable as replacement for user's IMAP hostname +// If IMAP server doesn't support NAMESPACE extension, but you're +// using shared folders or personal root folder is non-empty, you'll need to +// set these options. All can be strings or arrays of strings. +// Folders need to be ended with directory separator, e.g. "INBOX." +// (special directory "~" is an exception to this rule) +// These can be used also to overwrite server's namespaces +$rcmail_config['imap_ns_personal'] = null; +$rcmail_config['imap_ns_other'] = null; +$rcmail_config['imap_ns_shared'] = null; + +// By default IMAP capabilities are readed after connection to IMAP server +// In some cases, e.g. when using IMAP proxy, there's a need to refresh the list +// after login. Set to True if you've got this case. +$rcmail_config['imap_force_caps'] = false; + +// By default list of subscribed folders is determined using LIST-EXTENDED +// extension if available. Some servers (dovecot 1.x) returns wrong results +// for shared namespaces in this case. http://trac.roundcube.net/ticket/1486225 +// Enable this option to force LSUB command usage instead. +$rcmail_config['imap_force_lsub'] = false; + +// IMAP connection timeout, in seconds. Default: 0 (no limit) +$rcmail_config['imap_timeout'] = 0; + +// Optional IMAP authentication identifier to be used as authorization proxy +$rcmail_config['imap_auth_cid'] = null; + +// Optional IMAP authentication password to be used for imap_auth_cid +$rcmail_config['imap_auth_pw'] = null; + +// ---------------------------------- +// SMTP +// ---------------------------------- + +// SMTP server host (for sending mails). +// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls:// +// If left blank, the PHP mail() function is used +// Supported replacement variables: +// %h - user's IMAP hostname +// %n - http hostname ($_SERVER['SERVER_NAME']) +// %d - domain (http hostname without the first part) +// %z - IMAP domain (IMAP hostname without the first part) +// For example %n = mail.domain.tld, %d = domain.tld $rcmail_config['smtp_server'] = ''; // SMTP port (default is 25; 465 for SSL) $rcmail_config['smtp_port'] = 25; -// SMTP username (if required) if you use %u as the username RoundCube +// SMTP username (if required) if you use %u as the username Roundcube // will use the current username for login $rcmail_config['smtp_user'] = ''; -// SMTP password (if required) if you use %p as the password RoundCube +// SMTP password (if required) if you use %p as the password Roundcube // will use the current user's password for login $rcmail_config['smtp_pass'] = ''; @@ -116,36 +138,69 @@ $rcmail_config['smtp_pass'] = ''; // best server supported one) $rcmail_config['smtp_auth_type'] = ''; +// Optional SMTP authentication identifier to be used as authorization proxy +$rcmail_config['smtp_auth_cid'] = null; + +// Optional SMTP authentication password to be used for smtp_auth_cid +$rcmail_config['smtp_auth_pw'] = null; + // SMTP HELO host // Hostname to give to the remote server for SMTP 'HELO' or 'EHLO' messages // Leave this blank and you will get the server variable 'server_name' or // localhost if that isn't defined. $rcmail_config['smtp_helo_host'] = ''; -// Log sent messages -$rcmail_config['smtp_log'] = TRUE; +// SMTP connection timeout, in seconds. Default: 0 (no limit) +$rcmail_config['smtp_timeout'] = 0; -// Log SQL queries to /sql or to syslog -$rcmail_config['sql_debug'] = false; +// ---------------------------------- +// SYSTEM +// ---------------------------------- -// Log IMAP conversation to /imap or to syslog -$rcmail_config['imap_debug'] = false; +// THIS OPTION WILL ALLOW THE INSTALLER TO RUN AND CAN EXPOSE SENSITIVE CONFIG DATA. +// ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING! +$rcmail_config['enable_installer'] = false; -// Log LDAP conversation to /ldap or to syslog -$rcmail_config['ldap_debug'] = false; +// use this folder to store log files (must be writeable for apache user) +// This is used by the 'file' log driver. +$rcmail_config['log_dir'] = 'logs/'; -// Log SMTP conversation to /smtp or to syslog -$rcmail_config['smtp_debug'] = false; +// use this folder to store temp files (must be writeable for apache user) +$rcmail_config['temp_dir'] = 'temp/'; -// How many seconds must pass between emails sent by a user -$rcmail_config['sendmail_delay'] = 0; +// enable caching of messages and mailbox data in the local database. +// this is recommended if the IMAP server does not run on the same machine +$rcmail_config['enable_caching'] = false; -// These cols are shown in the message list. Available cols are: -// subject, from, to, cc, replyto, date, size, flag, attachment -$rcmail_config['list_cols'] = array('subject', 'from', 'date', 'size', 'flag', 'attachment'); +// lifetime of message cache +// possible units: s, m, h, d, w +$rcmail_config['message_cache_lifetime'] = '10d'; + +// enforce connections over https +// with this option enabled, all non-secure connections will be redirected. +// set the port for the ssl connection as value of this option if it differs from the default 443 +$rcmail_config['force_https'] = false; + +// tell PHP that it should work as under secure connection +// even if it doesn't recognize it as secure ($_SERVER['HTTPS'] is not set) +// e.g. when you're running Roundcube behind a https proxy +$rcmail_config['use_https'] = false; + +// Allow browser-autocompletion on login form. +// 0 - disabled, 1 - username and host only, 2 - username, host, password +$rcmail_config['login_autocomplete'] = 0; + +// If users authentication is not case sensitive this must be enabled. +// You can also use it to force conversion of logins to lower case. +$rcmail_config['login_lc'] = false; + +// automatically create a new Roundcube user when log-in the first time. +// a new user will be created once the IMAP login succeeds. +// set to false if only registered users can use this service +$rcmail_config['auto_create_user'] = true; // Includes should be interpreted as PHP files -$rcmail_config['skin_include_php'] = FALSE; +$rcmail_config['skin_include_php'] = false; // Session lifetime in minutes // must be greater than 'keep_alive'/60 @@ -163,6 +218,121 @@ $rcmail_config['double_auth'] = false; // please provide a string of exactly 24 chars. $rcmail_config['des_key'] = 'rcmail-!24ByteDESkey*Str'; +// Automatically add this domain to user names for login +// Only for IMAP servers that require full e-mail addresses for login +// Specify an array with 'host' => 'domain' values to support multiple hosts +// Supported replacement variables: +// %h - user's IMAP hostname +// %n - http hostname ($_SERVER['SERVER_NAME']) +// %d - domain (http hostname without the first part) +// %z - IMAP domain (IMAP hostname without the first part) +// For example %n = mail.domain.tld, %d = domain.tld +$rcmail_config['username_domain'] = ''; + +// This domain will be used to form e-mail addresses of new users +// Specify an array with 'host' => 'domain' values to support multiple hosts +// Supported replacement variables: +// %h - user's IMAP hostname +// %n - http hostname ($_SERVER['SERVER_NAME']) +// %d - domain (http hostname without the first part) +// %z - IMAP domain (IMAP hostname without the first part) +// For example %n = mail.domain.tld, %d = domain.tld +$rcmail_config['mail_domain'] = ''; + +// Password charset. +// Use it if your authentication backend doesn't support UTF-8. +// Defaults to ISO-8859-1 for backward compatibility +$rcmail_config['password_charset'] = 'ISO-8859-1'; + +// How many seconds must pass between emails sent by a user +$rcmail_config['sendmail_delay'] = 0; + +// Maximum number of recipients per message. Default: 0 (no limit) +$rcmail_config['max_recipients'] = 0; + +// Maximum allowednumber of members of an address group. Default: 0 (no limit) +// If 'max_recipients' is set this value should be less or equal +$rcmail_config['max_group_members'] = 0; + +// add this user-agent to message headers when sending +$rcmail_config['useragent'] = 'Roundcube Webmail/'.RCMAIL_VERSION; + +// use this name to compose page titles +$rcmail_config['product_name'] = 'Roundcube Webmail'; + +// try to load host-specific configuration +// see http://trac.roundcube.net/wiki/Howto_Config for more details +$rcmail_config['include_host_config'] = false; + +// path to a text file which will be added to each sent message +// paths are relative to the Roundcube root folder +$rcmail_config['generic_message_footer'] = ''; + +// path to a text file which will be added to each sent HTML message +// paths are relative to the Roundcube root folder +$rcmail_config['generic_message_footer_html'] = ''; + +// add a received header to outgoing mails containing the creators IP and hostname +$rcmail_config['http_received_header'] = false; + +// Whether or not to encrypt the IP address and the host name +// these could, in some circles, be considered as sensitive information; +// however, for the administrator, these could be invaluable help +// when tracking down issues. +$rcmail_config['http_received_header_encrypt'] = false; + +// This string is used as a delimiter for message headers when sending +// a message via mail() function. Leave empty for auto-detection +$rcmail_config['mail_header_delimiter'] = NULL; + +// number of chars allowed for line when wrapping text. +// text wrapping is done when composing/sending messages +$rcmail_config['line_length'] = 72; + +// send plaintext messages as format=flowed +$rcmail_config['send_format_flowed'] = true; + +// session domain: .example.org +$rcmail_config['session_domain'] = ''; + +// don't allow these settings to be overriden by the user +$rcmail_config['dont_override'] = array(); + +// Set identities access level: +// 0 - many identities with possibility to edit all params +// 1 - many identities with possibility to edit all params but not email address +// 2 - one identity with possibility to edit all params +// 3 - one identity with possibility to edit all params but not email address +$rcmail_config['identities_level'] = 0; + +// mime magic database +$rcmail_config['mime_magic'] = '/usr/share/misc/magic'; + +// Enable DNS checking for e-mail address validation +$rcmail_config['email_dns_check'] = false; + +// ---------------------------------- +// PLUGINS +// ---------------------------------- + +// List of active plugins (in plugins/ directory) +$rcmail_config['plugins'] = array(); + +// ---------------------------------- +// USER INTERFACE +// ---------------------------------- + +// default messages sort column. Use empty value for default server's sorting, +// or 'arrival', 'date', 'subject', 'from', 'to', 'size', 'cc' +$rcmail_config['message_sort_col'] = ''; + +// default messages sort order +$rcmail_config['message_sort_order'] = 'DESC'; + +// These cols are shown in the message list. Available cols are: +// subject, from, to, cc, replyto, date, size, status, flag, attachment +$rcmail_config['list_cols'] = array('subject', 'status', 'from', 'date', 'size', 'flag', 'attachment'); + // the default locale setting (leave empty for auto-detection) // RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR $rcmail_config['language'] = null; @@ -176,12 +346,6 @@ $rcmail_config['date_long'] = 'd.m.Y H:i'; // use this format for today's date display (date or strftime format) $rcmail_config['date_today'] = 'H:i'; -// add this user-agent to message headers when sending -$rcmail_config['useragent'] = 'RoundCube Webmail/'.RCMAIL_VERSION; - -// use this name to compose page titles -$rcmail_config['product_name'] = 'RoundCube Webmail'; - // store draft message is this mailbox // leave blank if draft messages should not be stored $rcmail_config['drafts_mbox'] = 'Drafts'; @@ -202,25 +366,18 @@ $rcmail_config['trash_mbox'] = 'Trash'; $rcmail_config['default_imap_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'); // automatically create the above listed default folders on login -$rcmail_config['create_default_folders'] = FALSE; +$rcmail_config['create_default_folders'] = false; // protect the default folders from renames, deletes, and subscription changes -$rcmail_config['protect_default_folders'] = TRUE; - -// if in your system 0 quota means no limit set this option to TRUE -$rcmail_config['quota_zero_as_unlimited'] = FALSE; - -// Behavior if a received message requests a message delivery notification (read receipt) -// 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask) -$rcmail_config['mdn_requests'] = 0; +$rcmail_config['protect_default_folders'] = true; -// Use this charset as fallback for message decoding -$rcmail_config['default_charset'] = 'ISO-8859-1'; +// if in your system 0 quota means no limit set this option to true +$rcmail_config['quota_zero_as_unlimited'] = false; // Make use of the built-in spell checker. It is based on GoogieSpell. // Since Google only accepts connections over https your PHP installatation // requires to be compiled with Open SSL support -$rcmail_config['enable_spellcheck'] = TRUE; +$rcmail_config['enable_spellcheck'] = true; // Set the spell checking engine. 'googie' is the default. 'pspell' is also available, // but requires the Pspell extensions. When using Nox Spell Server, also set 'googie' here. @@ -237,25 +394,16 @@ $rcmail_config['spellcheck_uri'] = ''; // Leave empty for default set of available language. $rcmail_config['spellcheck_languages'] = NULL; -// path to a text file which will be added to each sent message -// paths are relative to the RoundCube root folder -$rcmail_config['generic_message_footer'] = ''; - -// add a received header to outgoing mails containing the creators IP and hostname -$rcmail_config['http_received_header'] = false; - -// Whether or not to encrypt the IP address and the host name -// these could, in some circles, be considered as sensitive information; -// however, for the administrator, these could be invaluable help -// when tracking down issues. -$rcmail_config['http_received_header_encrypt'] = false; +// don't let users set pagesize to more than this value if set +$rcmail_config['max_pagesize'] = 200; -// this string is used as a delimiter for message headers when sending -// leave empty for auto-detection -$rcmail_config['mail_header_delimiter'] = NULL; +// Minimal value of user's 'keep_alive' setting (in seconds) +// Must be less than 'session_lifetime' +$rcmail_config['min_keep_alive'] = 60; -// session domain: .example.org -$rcmail_config['session_domain'] = ''; +// ---------------------------------- +// ADDRESSBOOK SETTINGS +// ---------------------------------- // This indicates which type of address book to use. Possible choises: // 'sql' (default) and 'ldap'. @@ -287,17 +435,30 @@ $rcmail_config['ldap_public'] = array(); * $rcmail_config['ldap_public']['Verisign'] = array( 'name' => 'Verisign.com', + // Replacement variables supported in host names: + // %h - user's IMAP hostname + // %n - http hostname ($_SERVER['SERVER_NAME']) + // %d - domain (http hostname without the first part) + // %z - IMAP domain (IMAP hostname without the first part) + // For example %n = mail.domain.tld, %d = domain.tld 'hosts' => array('directory.verisign.com'), 'port' => 389, - 'use_tls' => false, + 'use_tls' => false, 'user_specific' => false, // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login. // %fu - The full username provided, assumes the username is an email // address, uses the username_domain value if not an email address. // %u - The username prior to the '@'. // %d - The domain name after the '@'. + // %dc - The domain name hierarchal string e.g. "dc=test,dc=domain,dc=com" + // %dn - DN found by ldap search when search_filter/search_base_dn are used 'base_dn' => '', 'bind_dn' => '', 'bind_pass' => '', + // It's possible to bind for an individual address book + // The login name is used to search for the DN to bind with + 'search_base_dn' => '', + 'search_filter' => '', // e.g. '(&(objectClass=posixAccount)(uid=%u))' + 'writable' => false, // Indicates if we can write to the LDAP directory or not. // If writable is true then these fields need to be populated: // LDAP_Object_Classes, required_fields, LDAP_rdn @@ -313,66 +474,27 @@ $rcmail_config['ldap_public']['Verisign'] = array( 'sort' => 'cn', // The field to sort the listing by. 'scope' => 'sub', // search mode: sub|base|list 'filter' => '', // used for basic listing (if not empty) and will be &'d with search queries. example: status=act - 'fuzzy_search' => true); // server allows wildcard search + 'fuzzy_search' => true, // server allows wildcard search + 'sizelimit' => '0', // Enables you to limit the count of entries fetched. Setting this to 0 means no limit. + 'timelimit' => '0', // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit. +); */ // An ordered array of the ids of the addressbooks that should be searched // when populating address autocomplete fields server-side. ex: array('sql','Verisign'); $rcmail_config['autocomplete_addressbooks'] = array('sql'); -// don't allow these settings to be overriden by the user -$rcmail_config['dont_override'] = array(); - -// Set identities access level: -// 0 - many identities with possibility to edit all params -// 1 - many identities with possibility to edit all params but not email address -// 2 - one identity with possibility to edit all params -// 3 - one identity with possibility to edit all params but not email address -$rcmail_config['identities_level'] = 0; - -// try to load host-specific configuration -// see http://trac.roundcube.net/wiki/Howto_Config for more details -$rcmail_config['include_host_config'] = false; - -// don't let users set pagesize to more than this value if set -$rcmail_config['max_pagesize'] = 200; +// The minimum number of characters required to be typed in an autocomplete field +// before address books will be searched. Most useful for LDAP directories that +// may need to do lengthy results building given overly-broad searches +$rcmail_config['autocomplete_min_length'] = 1; -// mime magic database -$rcmail_config['mime_magic'] = '/usr/share/misc/magic'; - -// default sort col -$rcmail_config['message_sort_col'] = 'date'; +// ---------------------------------- +// USER PREFERENCES +// ---------------------------------- -// default sort order -$rcmail_config['message_sort_order'] = 'DESC'; - -// THIS OPTION WILL ALLOW THE INSTALLER TO RUN AND CAN EXPOSE SENSITIVE CONFIG DATA. -// ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING! -$rcmail_config['enable_installer'] = false; - -// Log successful logins -$rcmail_config['log_logins'] = false; - -/** - * 'Delete always' - * This setting reflects if mail should be always marked as deleted, - * even if moving to "Trash" fails. This is necessary in some setups - * because a) people may not have a Trash folder or b) they are over - * quota (and Trash is included in the quota). - * - * This is a failover setting for iil_C_Move when a message is moved - * to the Trash. - */ -$rcmail_config['delete_always'] = false; - -// Minimal value of user's 'keep_alive' setting (in seconds) -// Must be less than 'session_lifetime' -$rcmail_config['min_keep_alive'] = 60; - -// Enable DNS checking for e-mail address validation -$rcmail_config['email_dns_check'] = false; - -/***** these settings can be overwritten by user's preferences *****/ +// Use this charset as fallback for message decoding +$rcmail_config['default_charset'] = 'ISO-8859-1'; // skin name: folder from skins/ $rcmail_config['skin'] = 'default'; @@ -387,7 +509,7 @@ $rcmail_config['timezone'] = 'auto'; $rcmail_config['dst_active'] = (bool)date('I'); // prefer displaying HTML messages -$rcmail_config['prefer_html'] = TRUE; +$rcmail_config['prefer_html'] = true; // display remote inline images // 0 - Never, always ask @@ -396,28 +518,33 @@ $rcmail_config['prefer_html'] = TRUE; $rcmail_config['show_images'] = 0; // compose html formatted messages by default -$rcmail_config['htmleditor'] = FALSE; +// 0 - never, 1 - always, 2 - on reply to HTML message only +$rcmail_config['htmleditor'] = 0; // show pretty dates as standard -$rcmail_config['prettydate'] = TRUE; +$rcmail_config['prettydate'] = true; // save compose message every 300 seconds (5min) $rcmail_config['draft_autosave'] = 300; // default setting if preview pane is enabled -$rcmail_config['preview_pane'] = FALSE; +$rcmail_config['preview_pane'] = false; + +// Mark as read when viewed in preview pane (delay in seconds) +// Set to -1 if messages in preview pane should not be marked as read +$rcmail_config['preview_pane_mark_read'] = 0; // focus new window if new message arrives $rcmail_config['focus_on_new_message'] = true; // Clear Trash on logout -$rcmail_config['logout_purge'] = FALSE; +$rcmail_config['logout_purge'] = false; // Compact INBOX on logout -$rcmail_config['logout_expunge'] = FALSE; +$rcmail_config['logout_expunge'] = false; // Display attached images below the message body -$rcmail_config['inline_images'] = TRUE; +$rcmail_config['inline_images'] = true; // Encoding of long/non-ascii attachment names: // 0 - Full RFC 2231 compatible @@ -425,30 +552,77 @@ $rcmail_config['inline_images'] = TRUE; // 2 - Full 2047 compatible $rcmail_config['mime_param_folding'] = 1; -// Set TRUE if deleted messages should not be displayed +// Set true if deleted messages should not be displayed // This will make the application run slower -$rcmail_config['skip_deleted'] = FALSE; +$rcmail_config['skip_deleted'] = false; // Set true to Mark deleted messages as read as well as deleted // False means that a message's read status is not affected by marking it as deleted -$rcmail_config['read_when_deleted'] = TRUE; +$rcmail_config['read_when_deleted'] = true; -// Set to TRUE to newer delete messages immediately +// Set to true to newer delete messages immediately // Use 'Purge' to remove messages marked as deleted -$rcmail_config['flag_for_deletion'] = FALSE; +$rcmail_config['flag_for_deletion'] = false; // Default interval for keep-alive/check-recent requests (in seconds) // Must be greater than or equal to 'min_keep_alive' and less than 'session_lifetime' $rcmail_config['keep_alive'] = 60; // If true all folders will be checked for recent messages -$rcmail_config['check_all_folders'] = FALSE; +$rcmail_config['check_all_folders'] = false; // If true, after message delete/move, the next message will be displayed -$rcmail_config['display_next'] = FALSE; +$rcmail_config['display_next'] = false; + +// 0 - Do not expand threads +// 1 - Expand all threads automatically +// 2 - Expand only threads with unread messages +$rcmail_config['autoexpand_threads'] = 0; + +// When replying place cursor above original message (top posting) +$rcmail_config['top_posting'] = false; + +// When replying strip original signature from message +$rcmail_config['strip_existing_sig'] = true; + +// Show signature: +// 0 - Never +// 1 - Always +// 2 - New messages only +// 3 - Forwards and Replies only +$rcmail_config['show_sig'] = 1; + +// When replying or forwarding place sender's signature above existing message +$rcmail_config['sig_above'] = false; + +// Use MIME encoding (quoted-printable) for 8bit characters in message body +$rcmail_config['force_7bit'] = false; + +// Defaults of the search field configuration. +// The array can contain a per-folder list of header fields which should be considered when searching +// The entry with key '*' stands for all folders which do not have a specific list set. +// Please note that folder names should to be in sync with $rcmail_config['default_imap_folders'] +$rcmail_config['search_mods'] = null; // Example: array('*' => array('subject'=>1, 'from'=>1), 'Sent' => array('subject'=>1, 'to'=>1)); + +// 'Delete always' +// This setting reflects if mail should be always deleted +// when moving to Trash fails. This is necessary in some setups +// when user is over quota and Trash is included in the quota. +$rcmail_config['delete_always'] = false; + +// Behavior if a received message requests a message delivery notification (read receipt) +// 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask) +// 3 = send automatically if sender is in addressbook, otherwise ask the user +// 4 = send automatically if sender is in addressbook, otherwise ignore +$rcmail_config['mdn_requests'] = 0; + +// Return receipt checkbox default state +$rcmail_config['mdn_default'] = 0; + +// Delivery Status Notification checkbox default state +$rcmail_config['dsn_default'] = 0; -// If true, messages list will be sorted by message index instead of message date -$rcmail_config['index_sort'] = TRUE; +// Place replies in the folder of the message being replied to +$rcmail_config['reply_same_folder'] = false; // end of config file -?> diff --git a/config/mimetypes.php b/config/mimetypes.php index 159fce0..d404c1f 100644 --- a/config/mimetypes.php +++ b/config/mimetypes.php @@ -7,6 +7,7 @@ return array( 'xlc' => 'application/vnd.ms-excel', 'xlt' => 'application/vnd.ms-excel', 'xlw' => 'application/vnd.ms-excel', + 'pdf' => 'application/pdf', 'ppt' => 'application/vnd.ms-powerpoint', 'pps' => 'application/vnd.ms-powerpoint', 'pot' => 'application/vnd.ms-powerpoint', @@ -42,6 +43,7 @@ return array( 'xps' => 'application/vnd.ms-xpsdocument', 'rar' => 'application/x-rar-compressed', 'vcf' => 'text/vcard', + 'ics' => 'text/calendar', ); ?> \ No newline at end of file diff --git a/index.php b/index.php index 2360d7f..57bcc64 100644 --- a/index.php +++ b/index.php @@ -1,10 +1,10 @@ | +-------------------------------------------------------------------------+ - $Id: index.php 3081 2009-10-31 13:20:02Z thomasb $ + $Id: index.php 4408 2011-01-12 15:54:35Z thomasb $ */ // include environment require_once 'program/include/iniset.php'; -// init application and start session with requested task +// init application, start session, init output class, etc. $RCMAIL = rcmail::get_instance(); -// init output class -$OUTPUT = !empty($_REQUEST['_remote']) ? $RCMAIL->init_json() : $RCMAIL->load_gui(!empty($_REQUEST['_framed'])); - -// init plugin API -$RCMAIL->plugins->init(); - // turn on output buffering ob_start(); @@ -67,7 +61,9 @@ if ($RCMAIL->action=='error' && !empty($_GET['_code'])) { if (empty($_SESSION['user_id']) && ($force_https = $RCMAIL->config->get('force_https', false))) { $https_port = is_bool($force_https) ? 443 : $force_https; if (!rcube_https_check($https_port)) { - header('Location: https://' . $_SERVER['HTTP_HOST'] . ($https_port != 443 ? ':' . $https_port : '') . $_SERVER['REQUEST_URI']); + $host = preg_replace('/:[0-9]+$/', '', $_SERVER['HTTP_HOST']); + $host .= ($https_port != 443 ? ':' . $https_port : ''); + header('Location: https://' . $host . $_SERVER['REQUEST_URI']); exit; } } @@ -78,59 +74,59 @@ $RCMAIL->set_task($startup['task']); $RCMAIL->action = $startup['action']; // try to log in -if ($RCMAIL->action=='login' && $RCMAIL->task=='mail') { +if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') { // 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(get_input_value('_user', RCUBE_INPUT_POST)), + 'pass' => get_input_value('_pass', RCUBE_INPUT_POST, true, + $RCMAIL->config->get('password_charset', 'ISO-8859-1')), 'cookiecheck' => true, - )) + array('pass' => get_input_value('_pass', RCUBE_INPUT_POST, true, 'ISO-8859-1')); + )); // check if client supports cookies if ($auth['cookiecheck'] && empty($_COOKIE)) { $OUTPUT->show_message("cookiesdisabled", 'warning'); } - else if ($_SESSION['temp'] && !$auth['abort'] && !empty($auth['host']) && - !empty($auth['user']) && isset($auth['pass']) && - $RCMAIL->login($auth['user'], $auth['pass'], $auth['host'])) { + else if ($_SESSION['temp'] && !$auth['abort'] && + !empty($auth['host']) && !empty($auth['user']) && + $RCMAIL->login($auth['user'], $auth['pass'], $auth['host'])) { // create new session ID - rcube_sess_unset('temp'); - rcube_sess_regenerate_id(); + $RCMAIL->session->remove('temp'); + $RCMAIL->session->regenerate_id(); // send auth cookie if necessary $RCMAIL->authenticate_session(); // log successful login - if ($RCMAIL->config->get('log_logins')) { - write_log('userlogins', sprintf('Successful login for %s (id %d) from %s', - $RCMAIL->user->get_username(), - $RCMAIL->user->ID, - $_SERVER['REMOTE_ADDR'])); - } - + rcmail_log_login(); + // restore original request parameters - $query = array(); + $query = array('_task' => 'mail'); if ($url = get_input_value('_url', RCUBE_INPUT_POST)) parse_str($url, $query); // allow plugins to control the redirect url after login success - $redir = $RCMAIL->plugins->exec_hook('login_after', $query + array('task' => $RCMAIL->task)); + $redir = $RCMAIL->plugins->exec_hook('login_after', $query); unset($redir['abort']); // send redirect $OUTPUT->redirect($redir); } else { - $OUTPUT->show_message($IMAP->error_code < -1 ? 'imaperror' : 'loginfailed', 'warning'); - $RCMAIL->plugins->exec_hook('login_failed', array('code' => $IMAP->error_code, 'host' => $auth['host'], 'user' => $auth['user'])); + $error_code = is_object($IMAP) ? $IMAP->get_error_code() : -1; + + $OUTPUT->show_message($error_code < -1 ? 'imaperror' : 'loginfailed', 'warning'); + $RCMAIL->plugins->exec_hook('login_failed', array( + 'code' => $error_code, 'host' => $auth['host'], 'user' => $auth['user'])); $RCMAIL->kill_session(); } } // end session -else if ($RCMAIL->task=='logout' && isset($_SESSION['user_id'])) { +else if ($RCMAIL->task == 'logout' && isset($_SESSION['user_id'])) { $userdata = array('user' => $_SESSION['username'], 'host' => $_SESSION['imap_host'], 'lang' => $RCMAIL->user->language); $OUTPUT->show_message('loggedout'); $RCMAIL->logout_actions(); @@ -139,34 +135,18 @@ else if ($RCMAIL->task=='logout' && isset($_SESSION['user_id'])) { } // check session and auth cookie -else if ($RCMAIL->action != 'login' && $_SESSION['user_id'] && $RCMAIL->action != 'send') { +else if ($RCMAIL->task != 'login' && $_SESSION['user_id'] && $RCMAIL->action != 'send') { if (!$RCMAIL->authenticate_session()) { $OUTPUT->show_message('sessionerror', 'error'); $RCMAIL->kill_session(); } } -// don't check for valid request tokens in these actions -$request_check_whitelist = array('login'=>1, 'spell'=>1); - -// check client X-header to verify request origin -if ($OUTPUT->ajax_call) { - if (!$RCMAIL->config->get('devel_mode') && rc_request_header('X-RoundCube-Request') != $RCMAIL->get_request_token() && !empty($RCMAIL->user->ID)) { - header('HTTP/1.1 404 Not Found'); - die("Invalid Request"); - } -} -// check request token in POST form submissions -else if (!empty($_POST) && !$request_check_whitelist[$RCMAIL->action] && !$RCMAIL->check_request()) { - $OUTPUT->show_message('invalidrequest', 'error'); - $OUTPUT->send($RCMAIL->task); -} - // not logged in -> show login page if (empty($RCMAIL->user->ID)) { if ($OUTPUT->ajax_call) $OUTPUT->redirect(array(), 2000); - + if (!empty($_REQUEST['_framed'])) $OUTPUT->command('redirect', '?'); @@ -174,29 +154,43 @@ if (empty($RCMAIL->user->ID)) { if ($RCMAIL->config->get('enable_installer') && is_readable('./installer/index.php')) { $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 remove the whole installer folder from the RoundCube directory because . + html::p(null, "The install script of your Roundcube installation is still stored in its default location!") . + html::p(null, "Please remove the whole installer 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 installer script from your browser.") ) ); } - + $OUTPUT->set_env('task', 'login'); $OUTPUT->send('login'); } +// CSRF prevention +else { + // don't check for valid request tokens in these actions + $request_check_whitelist = array('login'=>1, 'spell'=>1); + + // check client X-header to verify request origin + if ($OUTPUT->ajax_call) { + if (rc_request_header('X-Roundcube-Request') != $RCMAIL->get_request_token()) { + header('HTTP/1.1 404 Not Found'); + die("Invalid Request"); + } + } + // check request token in POST form submissions + else if (!empty($_POST) && !$request_check_whitelist[$RCMAIL->action] && !$RCMAIL->check_request()) { + $OUTPUT->show_message('invalidrequest', 'error'); + $OUTPUT->send($RCMAIL->task); + } +} - -// handle keep-alive signal +// handle special actions if ($RCMAIL->action == 'keep-alive') { $OUTPUT->reset(); $OUTPUT->send(); } -// save preference value else if ($RCMAIL->action == 'save-pref') { - $RCMAIL->user->save_prefs(array(get_input_value('_name', RCUBE_INPUT_POST) => get_input_value('_value', RCUBE_INPUT_POST))); - $OUTPUT->reset(); - $OUTPUT->send(); + include 'steps/utils/save_pref.inc'; } @@ -213,19 +207,26 @@ $action_map = array( 'remove-attachment' => 'attachments.inc', 'display-attachment' => 'attachments.inc', 'upload' => 'attachments.inc', + 'group-expand' => 'autocomplete.inc', ), 'addressbook' => array( 'add' => 'edit.inc', + 'group-create' => 'groups.inc', + 'group-rename' => 'groups.inc', + 'group-delete' => 'groups.inc', + 'group-addmembers' => 'groups.inc', + 'group-delmembers' => 'groups.inc', ), - + 'settings' => array( - 'folders' => 'manage_folders.inc', - 'create-folder' => 'manage_folders.inc', - 'rename-folder' => 'manage_folders.inc', - 'delete-folder' => 'manage_folders.inc', - 'subscribe' => 'manage_folders.inc', - 'unsubscribe' => 'manage_folders.inc', + 'folders' => 'folders.inc', + 'rename-folder' => 'folders.inc', + 'delete-folder' => 'folders.inc', + 'subscribe' => 'folders.inc', + 'unsubscribe' => 'folders.inc', + 'purge' => 'folders.inc', + 'folder-size' => 'folders.inc', 'add-identity' => 'edit_identity.inc', ) ); @@ -239,9 +240,13 @@ $redirects = 0; $incstep = null; while ($redirects < 5) { $stepfile = !empty($action_map[$RCMAIL->task][$RCMAIL->action]) ? $action_map[$RCMAIL->task][$RCMAIL->action] : strtr($RCMAIL->action, '-', '_') . '.inc'; - + // execute a plugin action - if (preg_match('/^plugin\./', $RCMAIL->action)) { + if ($RCMAIL->plugins->is_plugin_task($RCMAIL->task)) { + $RCMAIL->plugins->exec_action($RCMAIL->task.'.'.$RCMAIL->action); + break; + } + else if (preg_match('/^plugin\./', $RCMAIL->action)) { $RCMAIL->plugins->exec_action($RCMAIL->action); break; } @@ -267,5 +272,4 @@ raise_error(array( 'line' => __LINE__, 'file' => __FILE__, 'message' => "Invalid request"), true, true); - -?> + diff --git a/installer/check.php b/installer/check.php index 4593051..7fa4d95 100644 --- a/installer/check.php +++ b/installer/check.php @@ -1,41 +1,65 @@
'pcre', 'DOM' => 'dom', - 'Session' => 'session', 'XML' => 'xml'); +$required_php_exts = array( + 'PCRE' => 'pcre', + 'DOM' => 'dom', + 'Session' => 'session', + 'XML' => 'xml', + 'JSON' => 'json' +); -$optional_php_exts = array('FileInfo' => 'fileinfo', 'Libiconv' => 'iconv', - 'Multibyte' => 'mbstring', 'OpenSSL' => 'openssl', 'Mcrypt' => 'mcrypt', - 'GD' => 'gd'); +$optional_php_exts = array( + 'FileInfo' => 'fileinfo', + 'Libiconv' => 'iconv', + 'Multibyte' => 'mbstring', + 'OpenSSL' => 'openssl', + 'Mcrypt' => 'mcrypt', + 'Intl' => 'intl', +); -$required_libs = array('PEAR' => 'PEAR.php', 'MDB2' => 'MDB2.php', - 'Net_SMTP' => 'Net/SMTP.php', 'Mail_mime' => 'Mail/mime.php', - 'iilConnection' => 'lib/imap.inc'); +$required_libs = array( + 'PEAR' => 'PEAR.php', + 'MDB2' => 'MDB2.php', + 'Net_SMTP' => 'Net/SMTP.php', + 'Mail_mime' => 'Mail/mime.php', +); -$supported_dbs = array('MySQL' => 'mysql', 'MySQLi' => 'mysqli', - 'PostgreSQL' => 'pgsql', 'SQLite (v2)' => 'sqlite'); +$supported_dbs = array( + 'MySQL' => 'mysql', + 'MySQLi' => 'mysqli', + 'PostgreSQL' => 'pgsql', + 'SQLite (v2)' => 'sqlite', +); -$ini_checks = array('file_uploads' => 1, 'session.auto_start' => 0, - 'zend.ze1_compatibility_mode' => 0, 'mbstring.func_overload' => 0, - 'suhosin.session.encrypt' => 0); +$ini_checks = array( + 'file_uploads' => 1, + 'session.auto_start' => 0, + 'zend.ze1_compatibility_mode' => 0, + 'mbstring.func_overload' => 0, + 'suhosin.session.encrypt' => 0, +); -$optional_checks = array('date.timezone' => '-NOTEMPTY-'); +$optional_checks = array( + 'date.timezone' => '-NOTEMPTY-', +); $source_urls = array( - 'Sockets' => 'http://www.php.net/manual/en/ref.sockets.php', - 'Session' => 'http://www.php.net/manual/en/ref.session.php', - 'PCRE' => 'http://www.php.net/manual/en/ref.pcre.php', - 'FileInfo' => 'http://www.php.net/manual/en/ref.fileinfo.php', - 'Libiconv' => 'http://www.php.net/manual/en/ref.iconv.php', - 'Multibyte' => 'http://www.php.net/manual/en/ref.mbstring.php', - 'Mcrypt' => 'http://www.php.net/manual/en/ref.mcrypt.php', - 'OpenSSL' => 'http://www.php.net/manual/en/ref.openssl.php', - 'GD' => 'http://www.php.net/manual/en/ref.image.php', - 'PEAR' => 'http://pear.php.net', - 'MDB2' => 'http://pear.php.net/package/MDB2', - 'Net_SMTP' => 'http://pear.php.net/package/Net_SMTP', + 'Sockets' => 'http://www.php.net/manual/en/book.sockets.php', + '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', + 'Mcrypt' => 'http://www.php.net/manual/en/book.mcrypt.php', + 'OpenSSL' => 'http://www.php.net/manual/en/book.openssl.php', + 'JSON' => 'http://www.php.net/manual/en/book.json.php', + 'DOM' => 'http://www.php.net/manual/en/book.dom.php', + 'Intl' => 'http://www.php.net/manual/en/book.intl.php', + 'PEAR' => 'http://pear.php.net', + 'MDB2' => 'http://pear.php.net/package/MDB2', + 'Net_SMTP' => 'http://pear.php.net/package/Net_SMTP', 'Mail_mime' => 'http://pear.php.net/package/Mail_mime', - 'DOM' => 'http://www.php.net/manual/en/intro.dom.php' ); echo ''; @@ -53,14 +77,14 @@ if (version_compare(PHP_VERSION, MIN_PHP_VERSION, '>=')) { ?>

Checking PHP extensions

-

The following modules/extensions are required to run RoundCube:

+

The following modules/extensions are required to run Roundcube:

$ext) { +foreach ($required_php_exts as $name => $ext) { if (extension_loaded($ext)) { $RCI->pass($name); } else { @@ -76,7 +100,7 @@ foreach ($required_php_exts AS $name => $ext) {

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

$ext) { +foreach ($optional_php_exts as $name => $ext) { if (extension_loaded($ext)) { $RCI->pass($name); } @@ -97,7 +121,7 @@ foreach ($optional_php_exts AS $name => $ext) { $ext) { +foreach ($supported_dbs as $database => $ext) { if (extension_loaded($ext)) { $RCI->pass($database); } @@ -132,7 +156,7 @@ foreach ($required_libs as $classname => $file) { ?>

Checking php.ini/.htaccess settings

-

The following settings are required to run RoundCube:

+

The following settings are required to run Roundcube:

$val) { failures) { - echo '

Sorry but your webserver does not meet the requirements for RoundCube!
+ echo '

Sorry but your webserver does not meet the requirements for Roundcube!
Please install the missing modules or fix the php.ini settings according to the above check results.
Hint: only checks showing NOT OK need to be fixed.

'; } diff --git a/installer/config.php b/installer/config.php index 02deb9b..5250782 100644 --- a/installer/config.php +++ b/installer/config.php @@ -14,7 +14,6 @@ $RCI->bool_config_props = array( 'smtp_log' => 1, 'prefer_html' => 1, 'preview_pane' => 1, - 'htmleditor' => 1, 'debug_level' => 1, ); @@ -24,7 +23,7 @@ $_SESSION['allowinstaller'] = true; if (!empty($_POST['submit'])) { echo '

Copy or download the following configurations and save them in two files'; - echo ' (names above the text box) within the '.RCMAIL_CONFIG_DIR.' directory of your RoundCube installation.
'; + echo ' (names above the text box) within the '.RCMAIL_CONFIG_DIR.' directory of your Roundcube installation.
'; echo ' Make sure that there are no characters outside the <?php ?> brackets when saving the files.

'; $textbox = new html_textarea(array('rows' => 16, 'cols' => 60, 'class' => "configfile")); @@ -343,12 +342,12 @@ $check_autocreate = new html_checkbox(array('name' => '_auto_create_user', 'id' echo $check_autocreate->show(intval($RCI->getprop('auto_create_user')), array('value' => 1)); ?> -
+

A user is authenticated by the IMAP server but it requires a local record to store settings and contacts. With this option enabled a new user record will automatically be created once the IMAP login succeeds.

-

If this option is disabled, the login only succeeds if there's a matching user-record in the local RoundCube database +

If this option is disabled, the login only succeeds if there's a matching user-record in the local Roundcube database what means that you have to create those records manually or disable this option after the first login.

@@ -543,13 +542,16 @@ echo $check_prevpane->show(intval($RCI->getprop('preview_pane')));
htmleditor *
+ '_htmleditor', 'id' => "cfghtmlcompose", 'value' => 1)); -echo $check_htmlcomp->show(intval($RCI->getprop('htmleditor'))); +$select_htmlcomp = new html_select(array('name' => '_htmleditor', 'id' => "cfghtmlcompose")); +$select_htmlcomp->add('never', 0); +$select_htmlcomp->add('always', 1); +$select_htmlcomp->add('on reply to HTML message only', 2); +echo $select_htmlcomp->show(intval($RCI->getprop('htmleditor'))); ?> -
draft_autosave *
@@ -571,8 +573,16 @@ echo $select_autosave->show(intval($RCI->getprop('draft_autosave')));
'ask the user', + 1 => 'send automatically', + 3 => 'send receipt to user contacts, otherwise ask the user', + 4 => 'send receipt to user contacts, otherwise ignore', + 2 => 'ignore', +); + $select_mdnreq = new html_select(array('name' => '_mdn_requests', 'id' => "cfgmdnreq")); -$select_mdnreq->add(array('ask the user', 'send automatically', 'ignore'), array(0, 1, 2)); +$select_mdnreq->add(array_values($mdn_opts), array_keys($mdn_opts)); echo $select_mdnreq->show(intval($RCI->getprop('mdn_requests'))); ?> diff --git a/installer/index.php b/installer/index.php index d1c55e4..1c157da 100644 --- a/installer/index.php +++ b/installer/index.php @@ -58,7 +58,7 @@ if ($RCI->configured && empty($_REQUEST['_step'])) { "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -RoundCube Webmail Installer +Roundcube Webmail Installer @@ -69,7 +69,7 @@ if ($RCI->configured && empty($_REQUEST['_step'])) {