From 48e9c14ebded89d858c8be0333f77f77a81b0877 Mon Sep 17 00:00:00 2001 From: thomascube Date: Sat, 31 Mar 2012 12:25:48 +0000 Subject: Move plugins repository into roundcubemail root folder; svn:externals are not defined anymore --- plugins/acl/acl.js | 351 +++ plugins/acl/acl.php | 715 ++++++ plugins/acl/config.inc.php.dist | 19 + plugins/acl/localization/de_DE.inc | 83 + plugins/acl/localization/en_US.inc | 83 + plugins/acl/localization/pl_PL.inc | 83 + plugins/acl/package.xml | 63 + plugins/acl/skins/default/acl.css | 100 + plugins/acl/skins/default/images/enabled.png | Bin 0 -> 674 bytes plugins/acl/skins/default/images/partial.png | Bin 0 -> 389 bytes plugins/acl/skins/default/templates/table.html | 54 + plugins/acl/skins/larry/acl.css | 113 + plugins/acl/skins/larry/images/enabled.png | Bin 0 -> 674 bytes plugins/acl/skins/larry/images/partial.png | Bin 0 -> 389 bytes plugins/acl/skins/larry/templates/table.html | 34 + .../additional_message_headers.php | 43 + .../additional_message_headers/config.inc.php.dist | 14 + plugins/additional_message_headers/package.xml | 48 + plugins/archive/archive.js | 34 + plugins/archive/archive.php | 128 + plugins/archive/localization/cs_CZ.inc | 25 + plugins/archive/localization/de_CH.inc | 8 + plugins/archive/localization/de_DE.inc | 8 + plugins/archive/localization/en_US.inc | 9 + plugins/archive/localization/es_AR.inc | 10 + plugins/archive/localization/es_ES.inc | 10 + plugins/archive/localization/et_EE.inc | 8 + plugins/archive/localization/fr_FR.inc | 8 + plugins/archive/localization/gl_ES.inc | 10 + plugins/archive/localization/ja_JP.inc | 21 + plugins/archive/localization/nl_NL.inc | 8 + plugins/archive/localization/pl_PL.inc | 21 + plugins/archive/localization/pt_BR.inc | 8 + plugins/archive/localization/ru_RU.inc | 8 + plugins/archive/localization/sv_SE.inc | 8 + plugins/archive/localization/zh_TW.inc | 8 + plugins/archive/package.xml | 70 + plugins/archive/skins/default/archive.css | 10 + plugins/archive/skins/default/archive_act.png | Bin 0 -> 3663 bytes plugins/archive/skins/default/archive_pas.png | Bin 0 -> 977 bytes plugins/archive/skins/default/foldericon.png | Bin 0 -> 3312 bytes plugins/autologon/autologon.php | 50 + .../database_attachments/database_attachments.php | 169 ++ plugins/database_attachments/package.xml | 62 + plugins/debug_logger/debug_logger.php | 149 ++ plugins/debug_logger/package.xml | 55 + plugins/debug_logger/runlog/runlog.php | 227 ++ plugins/emoticons/emoticons.php | 78 + plugins/emoticons/package.xml | 53 + plugins/enigma/README | 35 + plugins/enigma/config.inc.php.dist | 14 + plugins/enigma/enigma.js | 206 ++ plugins/enigma/enigma.php | 475 ++++ plugins/enigma/home/.htaccess | 2 + plugins/enigma/lib/Crypt/GPG.php | 2542 ++++++++++++++++++++ .../enigma/lib/Crypt/GPG/DecryptStatusHandler.php | 336 +++ plugins/enigma/lib/Crypt/GPG/Engine.php | 1758 ++++++++++++++ plugins/enigma/lib/Crypt/GPG/Exceptions.php | 473 ++++ plugins/enigma/lib/Crypt/GPG/Key.php | 223 ++ plugins/enigma/lib/Crypt/GPG/Signature.php | 428 ++++ plugins/enigma/lib/Crypt/GPG/SubKey.php | 649 +++++ plugins/enigma/lib/Crypt/GPG/UserId.php | 373 +++ .../enigma/lib/Crypt/GPG/VerifyStatusHandler.php | 216 ++ plugins/enigma/lib/enigma_driver.php | 106 + plugins/enigma/lib/enigma_driver_gnupg.php | 305 +++ plugins/enigma/lib/enigma_engine.php | 547 +++++ plugins/enigma/lib/enigma_error.php | 62 + plugins/enigma/lib/enigma_key.php | 129 + plugins/enigma/lib/enigma_signature.php | 34 + plugins/enigma/lib/enigma_subkey.php | 57 + plugins/enigma/lib/enigma_ui.php | 456 ++++ plugins/enigma/lib/enigma_userid.php | 31 + plugins/enigma/localization/en_US.inc | 53 + plugins/enigma/localization/ja_JP.inc | 55 + plugins/enigma/localization/ru_RU.inc | 65 + plugins/enigma/skins/default/enigma.css | 182 ++ plugins/enigma/skins/default/enigma.png | Bin 0 -> 1592 bytes plugins/enigma/skins/default/enigma_error.png | Bin 0 -> 1960 bytes plugins/enigma/skins/default/key.png | Bin 0 -> 1743 bytes plugins/enigma/skins/default/key_add.png | Bin 0 -> 1967 bytes plugins/enigma/skins/default/keys_toolbar.png | Bin 0 -> 14977 bytes .../enigma/skins/default/templates/keyimport.html | 20 + .../enigma/skins/default/templates/keyinfo.html | 17 + plugins/enigma/skins/default/templates/keys.html | 76 + .../example_addressbook/example_addressbook.php | 50 + .../example_addressbook_backend.php | 116 + plugins/example_addressbook/package.xml | 51 + .../filesystem_attachments.php | 161 ++ plugins/filesystem_attachments/package.xml | 59 + plugins/help/config.inc.php.dist | 5 + plugins/help/content/about.html | 28 + plugins/help/content/license.html | 689 ++++++ plugins/help/help.php | 98 + plugins/help/localization/cs_CZ.inc | 25 + plugins/help/localization/da_DK.inc | 8 + plugins/help/localization/de_DE.inc | 8 + plugins/help/localization/en_GB.inc | 8 + plugins/help/localization/en_US.inc | 8 + plugins/help/localization/es_ES.inc | 8 + plugins/help/localization/et_EE.inc | 8 + plugins/help/localization/gl_ES.inc | 8 + plugins/help/localization/hu_HU.inc | 8 + plugins/help/localization/ja_JP.inc | 10 + plugins/help/localization/pl_PL.inc | 8 + plugins/help/localization/pt_BR.inc | 8 + plugins/help/localization/ru_RU.inc | 23 + plugins/help/localization/sv_SE.inc | 8 + plugins/help/localization/zh_TW.inc | 8 + plugins/help/package.xml | 67 + plugins/help/skins/default/help.css | 29 + plugins/help/skins/default/help.gif | Bin 0 -> 898 bytes plugins/help/skins/default/templates/help.html | 37 + plugins/help/skins/larry/help.css | 52 + plugins/help/skins/larry/help.png | Bin 0 -> 1555 bytes plugins/help/skins/larry/templates/help.html | 30 + .../http_authentication/http_authentication.php | 67 + plugins/http_authentication/logout.html | 29 + plugins/http_authentication/package.xml | 48 + plugins/jqueryui/README | 29 + plugins/jqueryui/config.inc.php.dist | 12 + plugins/jqueryui/jqueryui.php | 67 + plugins/jqueryui/js/i18n/jquery-ui-i18n.js | 1242 ++++++++++ .../jqueryui/js/i18n/jquery.ui.datepicker-af.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-ar.js | 24 + .../jqueryui/js/i18n/jquery.ui.datepicker-az.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-bg.js | 24 + .../jqueryui/js/i18n/jquery.ui.datepicker-bs.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-ca.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-cs.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-da.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-de-CH.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-de.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-el.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-en-GB.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-eo.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-es.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-et.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-eu.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-fa.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-fi.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-fo.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-fr-CH.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-fr.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-gl.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-he.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-hr.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-hu.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-hy.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-id.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-is.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-it.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-ja.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-ko.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-kz.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-lt.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-lv.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-ms.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-nl-BE.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-nl.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-no.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-pl.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-pt-BR.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-pt.js | 22 + .../jqueryui/js/i18n/jquery.ui.datepicker-ro.js | 26 + .../jqueryui/js/i18n/jquery.ui.datepicker-ru.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-sk.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-sl.js | 24 + .../jqueryui/js/i18n/jquery.ui.datepicker-sq.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-sr-SR.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-sr.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-sv.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-ta.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-th.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-tr.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-uk.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-vi.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-zh-CN.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-zh-HK.js | 23 + .../jqueryui/js/i18n/jquery.ui.datepicker-zh-TW.js | 23 + plugins/jqueryui/js/jquery-ui-1.8.18.custom.min.js | 356 +++ plugins/jqueryui/package.xml | 149 ++ .../themes/default/images/buttongradient.png | Bin 0 -> 193 bytes .../jqueryui/themes/default/images/listheader.png | Bin 0 -> 356 bytes .../default/images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../default/images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../default/images/ui-bg_flat_90_cc3333_40x100.png | Bin 0 -> 212 bytes .../default/images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-hard_90_a3a3a3_1x100.png | Bin 0 -> 114 bytes .../ui-bg_highlight-hard_90_e6e6e7_1x100.png | Bin 0 -> 101 bytes .../ui-bg_highlight-hard_90_f4f4f4_1x100.png | Bin 0 -> 122 bytes .../default/images/ui-icons_000000_256x240.png | Bin 0 -> 4369 bytes .../default/images/ui-icons_333333_256x240.png | Bin 0 -> 4369 bytes .../default/images/ui-icons_666666_256x240.png | Bin 0 -> 4369 bytes .../default/images/ui-icons_cc3333_256x240.png | Bin 0 -> 5355 bytes .../default/images/ui-icons_dddddd_256x240.png | Bin 0 -> 4369 bytes .../themes/default/jquery-ui-1.8.18.custom.css | 577 +++++ .../jqueryui/themes/default/roundcube-custom.diff | 118 + .../ui-bg_highlight-hard_55_b0ccd7_1x100.png | Bin 0 -> 117 bytes .../ui-bg_highlight-hard_65_ffffff_1x100.png | Bin 0 -> 93 bytes .../ui-bg_highlight-hard_75_eaeaea_1x100.png | Bin 0 -> 136 bytes .../ui-bg_highlight-hard_75_f8f8f8_1x100.png | Bin 0 -> 88 bytes .../ui-bg_highlight-soft_75_fafafa_1x100.png | Bin 0 -> 117 bytes .../ui-bg_highlight-soft_90_e4e4e4_1x100.png | Bin 0 -> 111 bytes .../themes/larry/images/ui-dialog-close.png | Bin 0 -> 1596 bytes .../themes/larry/images/ui-icons-datepicker.png | Bin 0 -> 1160 bytes .../larry/images/ui-icons_004458_256x240.png | Bin 0 -> 4369 bytes .../larry/images/ui-icons_d7211e_256x240.png | Bin 0 -> 4369 bytes .../larry/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../themes/larry/jquery-ui-1.8.18.custom.css | 656 +++++ .../redmond/images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../redmond/images/ui-bg_flat_55_fbec88_40x100.png | Bin 0 -> 182 bytes .../redmond/images/ui-bg_glass_75_d0e5f5_1x400.png | Bin 0 -> 124 bytes .../redmond/images/ui-bg_glass_85_dfeffc_1x400.png | Bin 0 -> 123 bytes .../redmond/images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../images/ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 0 -> 3457 bytes .../images/ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 0 -> 104 bytes .../images/ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 88 bytes .../redmond/images/ui-icons_217bc0_256x240.png | Bin 0 -> 4369 bytes .../redmond/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../redmond/images/ui-icons_469bdd_256x240.png | Bin 0 -> 4369 bytes .../redmond/images/ui-icons_6da8d5_256x240.png | Bin 0 -> 5355 bytes .../redmond/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../redmond/images/ui-icons_d8e7f3_256x240.png | Bin 0 -> 4369 bytes .../redmond/images/ui-icons_f9bd01_256x240.png | Bin 0 -> 4369 bytes .../themes/redmond/jquery-ui-1.8.18.custom.css | 565 +++++ plugins/managesieve/Changelog | 237 ++ plugins/managesieve/config.inc.php.dist | 67 + plugins/managesieve/lib/Net/Sieve.php | 1274 ++++++++++ plugins/managesieve/lib/rcube_sieve.php | 387 +++ plugins/managesieve/lib/rcube_sieve_script.php | 1073 +++++++++ plugins/managesieve/localization/bg_BG.inc | 61 + plugins/managesieve/localization/cs_CZ.inc | 150 ++ plugins/managesieve/localization/de_CH.inc | 150 ++ plugins/managesieve/localization/de_DE.inc | 150 ++ plugins/managesieve/localization/el_GR.inc | 64 + plugins/managesieve/localization/en_GB.inc | 150 ++ plugins/managesieve/localization/en_US.inc | 138 ++ plugins/managesieve/localization/es_AR.inc | 90 + plugins/managesieve/localization/es_ES.inc | 124 + plugins/managesieve/localization/et_EE.inc | 140 ++ plugins/managesieve/localization/fi_FI.inc | 150 ++ plugins/managesieve/localization/fr_FR.inc | 150 ++ plugins/managesieve/localization/gl_ES.inc | 90 + plugins/managesieve/localization/hr_HR.inc | 150 ++ plugins/managesieve/localization/hu_HU.inc | 150 ++ plugins/managesieve/localization/it_IT.inc | 150 ++ plugins/managesieve/localization/ja_JP.inc | 150 ++ plugins/managesieve/localization/lv_LV.inc | 140 ++ plugins/managesieve/localization/nb_NO.inc | 85 + plugins/managesieve/localization/nl_NL.inc | 150 ++ plugins/managesieve/localization/pl_PL.inc | 150 ++ plugins/managesieve/localization/pt_BR.inc | 150 ++ plugins/managesieve/localization/pt_PT.inc | 150 ++ plugins/managesieve/localization/ru_RU.inc | 144 ++ plugins/managesieve/localization/sk_SK.inc | 150 ++ plugins/managesieve/localization/sl_SI.inc | 65 + plugins/managesieve/localization/sv_SE.inc | 150 ++ plugins/managesieve/localization/uk_UA.inc | 85 + plugins/managesieve/localization/zh_CN.inc | 140 ++ plugins/managesieve/localization/zh_TW.inc | 129 + plugins/managesieve/managesieve.js | 787 ++++++ plugins/managesieve/managesieve.php | 1877 +++++++++++++++ plugins/managesieve/package.xml | 100 + plugins/managesieve/skins/default/images/add.png | Bin 0 -> 280 bytes plugins/managesieve/skins/default/images/del.png | Bin 0 -> 247 bytes .../skins/default/images/down_small.gif | Bin 0 -> 106 bytes .../managesieve/skins/default/images/filter.png | Bin 0 -> 547 bytes .../managesieve/skins/default/images/up_small.gif | Bin 0 -> 106 bytes plugins/managesieve/skins/default/managesieve.css | 322 +++ .../managesieve/skins/default/managesieve_mail.css | 63 + .../skins/default/templates/filteredit.html | 33 + .../skins/default/templates/managesieve.html | 87 + .../skins/default/templates/setedit.html | 24 + plugins/managesieve/tests/Makefile | 7 + plugins/managesieve/tests/parser.phpt | 120 + plugins/managesieve/tests/parser_body.phpt | 49 + plugins/managesieve/tests/parser_imapflags.phpt | 28 + plugins/managesieve/tests/parser_include.phpt | 30 + plugins/managesieve/tests/parser_kep14.phpt | 19 + plugins/managesieve/tests/parser_prefix.phpt | 25 + plugins/managesieve/tests/parser_relational.phpt | 25 + plugins/managesieve/tests/parser_vacation.phpt | 39 + plugins/managesieve/tests/parser_variables.phpt | 39 + plugins/managesieve/tests/parset_subaddress.phpt | 38 + plugins/managesieve/tests/tokenize.phpt | 66 + plugins/markasjunk/localization/cs_CZ.inc | 24 + plugins/markasjunk/localization/da_DK.inc | 7 + plugins/markasjunk/localization/de_CH.inc | 6 + plugins/markasjunk/localization/de_DE.inc | 6 + plugins/markasjunk/localization/en_US.inc | 8 + plugins/markasjunk/localization/es_AR.inc | 7 + plugins/markasjunk/localization/es_ES.inc | 7 + plugins/markasjunk/localization/et_EE.inc | 7 + plugins/markasjunk/localization/gl_ES.inc | 7 + plugins/markasjunk/localization/it_IT.inc | 7 + plugins/markasjunk/localization/ja_JP.inc | 20 + plugins/markasjunk/localization/pl_PL.inc | 7 + plugins/markasjunk/localization/ru_RU.inc | 20 + plugins/markasjunk/localization/sk_SK.inc | 15 + plugins/markasjunk/localization/sv_SE.inc | 7 + plugins/markasjunk/localization/zh_TW.inc | 7 + plugins/markasjunk/markasjunk.js | 28 + plugins/markasjunk/markasjunk.php | 63 + plugins/markasjunk/package.xml | 69 + plugins/markasjunk/skins/default/junk_act.png | Bin 0 -> 1995 bytes plugins/markasjunk/skins/default/junk_pas.png | Bin 0 -> 1988 bytes plugins/markasjunk/skins/default/markasjunk.css | 6 + plugins/new_user_dialog/localization/bg_BG.inc | 20 + plugins/new_user_dialog/localization/cs_CZ.inc | 7 + plugins/new_user_dialog/localization/de_CH.inc | 7 + plugins/new_user_dialog/localization/de_DE.inc | 7 + plugins/new_user_dialog/localization/en_US.inc | 7 + plugins/new_user_dialog/localization/es_ES.inc | 7 + plugins/new_user_dialog/localization/et_EE.inc | 7 + plugins/new_user_dialog/localization/gl_ES.inc | 7 + plugins/new_user_dialog/localization/it_IT.inc | 7 + plugins/new_user_dialog/localization/ja_JP.inc | 20 + plugins/new_user_dialog/localization/nl_NL.inc | 7 + plugins/new_user_dialog/localization/pl_PL.inc | 7 + plugins/new_user_dialog/localization/pt_BR.inc | 7 + plugins/new_user_dialog/localization/pt_PT.inc | 20 + plugins/new_user_dialog/localization/ru_RU.inc | 20 + plugins/new_user_dialog/localization/sk_SK.inc | 16 + plugins/new_user_dialog/localization/sl_SI.inc | 7 + plugins/new_user_dialog/localization/sv_SE.inc | 7 + plugins/new_user_dialog/localization/zh_TW.inc | 7 + plugins/new_user_dialog/new_user_dialog.php | 145 ++ plugins/new_user_dialog/newuserdialog.css | 39 + plugins/new_user_dialog/package.xml | 154 ++ plugins/new_user_identity/new_user_identity.php | 89 + plugins/new_user_identity/package.xml | 49 + plugins/newmail_notifier/config.inc.php.dist | 12 + plugins/newmail_notifier/favicon.ico | Bin 0 -> 1734 bytes plugins/newmail_notifier/localization/de_CH.inc | 27 + plugins/newmail_notifier/localization/de_DE.inc | 27 + plugins/newmail_notifier/localization/en_US.inc | 13 + plugins/newmail_notifier/localization/ja_JP.inc | 27 + plugins/newmail_notifier/localization/lv_LV.inc | 27 + plugins/newmail_notifier/localization/pl_PL.inc | 27 + plugins/newmail_notifier/localization/pt_BR.inc | 27 + plugins/newmail_notifier/localization/ru_RU.inc | 27 + plugins/newmail_notifier/localization/sv_SE.inc | 27 + plugins/newmail_notifier/mail.png | Bin 0 -> 1408 bytes plugins/newmail_notifier/newmail_notifier.js | 120 + plugins/newmail_notifier/newmail_notifier.php | 178 ++ plugins/newmail_notifier/package.xml | 70 + plugins/newmail_notifier/sound.wav | Bin 0 -> 10444 bytes plugins/password/README | 309 +++ plugins/password/config.inc.php.dist | 347 +++ plugins/password/drivers/chpasswd.php | 39 + plugins/password/drivers/cpanel.php | 120 + plugins/password/drivers/dbmail.php | 42 + plugins/password/drivers/directadmin.php | 489 ++++ plugins/password/drivers/domainfactory.php | 70 + plugins/password/drivers/expect.php | 58 + plugins/password/drivers/hmail.php | 63 + plugins/password/drivers/ldap.php | 319 +++ plugins/password/drivers/ldap_simple.php | 276 +++ plugins/password/drivers/pam.php | 42 + plugins/password/drivers/poppassd.php | 67 + plugins/password/drivers/pw_usermod.php | 41 + plugins/password/drivers/sasl.php | 45 + plugins/password/drivers/smb.php | 59 + plugins/password/drivers/sql.php | 175 ++ plugins/password/drivers/virtualmin.php | 76 + plugins/password/drivers/vpopmaild.php | 53 + plugins/password/drivers/ximss.php | 76 + plugins/password/drivers/xmail.php | 106 + plugins/password/helpers/chgdbmailusers.c | 48 + plugins/password/helpers/chgsaslpasswd.c | 29 + plugins/password/helpers/chgvirtualminpasswd.c | 28 + plugins/password/helpers/chpass-wrapper.py | 32 + plugins/password/helpers/passwd-expect | 267 ++ plugins/password/localization/az_AZ.inc | 24 + plugins/password/localization/bg_BG.inc | 18 + plugins/password/localization/ca_ES.inc | 20 + plugins/password/localization/cs_CZ.inc | 30 + plugins/password/localization/da_DK.inc | 18 + plugins/password/localization/de_CH.inc | 19 + plugins/password/localization/de_DE.inc | 19 + plugins/password/localization/en_US.inc | 21 + plugins/password/localization/es_AR.inc | 21 + plugins/password/localization/es_ES.inc | 21 + plugins/password/localization/et_EE.inc | 17 + plugins/password/localization/fi_FI.inc | 22 + plugins/password/localization/fr_FR.inc | 18 + plugins/password/localization/gl_ES.inc | 21 + plugins/password/localization/hr_HR.inc | 21 + plugins/password/localization/hu_HU.inc | 17 + plugins/password/localization/it_IT.inc | 21 + plugins/password/localization/ja_JP.inc | 23 + plugins/password/localization/lt_LT.inc | 21 + plugins/password/localization/lv_LV.inc | 20 + plugins/password/localization/nl_NL.inc | 17 + plugins/password/localization/pl_PL.inc | 21 + plugins/password/localization/pt_BR.inc | 21 + plugins/password/localization/pt_PT.inc | 18 + plugins/password/localization/ru_RU.inc | 35 + plugins/password/localization/sk_SK.inc | 29 + plugins/password/localization/sl_SI.inc | 18 + plugins/password/localization/sv_SE.inc | 21 + plugins/password/localization/tr_TR.inc | 21 + plugins/password/localization/zh_TW.inc | 21 + plugins/password/package.xml | 335 +++ plugins/password/password.js | 37 + plugins/password/password.php | 290 +++ plugins/redundant_attachments/config.inc.php.dist | 13 + plugins/redundant_attachments/package.xml | 63 + .../redundant_attachments.php | 232 ++ plugins/show_additional_headers/package.xml | 49 + .../show_additional_headers.php | 52 + plugins/squirrelmail_usercopy/config.inc.php.dist | 25 + .../squirrelmail_usercopy.php | 190 ++ .../subscriptions_option/localization/cs_CZ.inc | 23 + .../subscriptions_option/localization/de_CH.inc | 6 + .../subscriptions_option/localization/de_DE.inc | 6 + .../subscriptions_option/localization/en_US.inc | 6 + .../subscriptions_option/localization/es_ES.inc | 6 + .../subscriptions_option/localization/et_EE.inc | 6 + .../subscriptions_option/localization/gl_ES.inc | 6 + .../subscriptions_option/localization/ja_JP.inc | 8 + .../subscriptions_option/localization/pl_PL.inc | 6 + .../subscriptions_option/localization/ru_RU.inc | 6 + .../subscriptions_option/localization/sv_SE.inc | 6 + .../subscriptions_option/localization/zh_TW.inc | 6 + plugins/subscriptions_option/package.xml | 69 + .../subscriptions_option/subscriptions_option.php | 95 + plugins/userinfo/localization/cs_CZ.inc | 27 + plugins/userinfo/localization/da_DK.inc | 9 + plugins/userinfo/localization/de_CH.inc | 9 + plugins/userinfo/localization/en_US.inc | 9 + plugins/userinfo/localization/es_ES.inc | 9 + plugins/userinfo/localization/et_EE.inc | 9 + plugins/userinfo/localization/fr_FR.inc | 9 + plugins/userinfo/localization/gl_ES.inc | 9 + plugins/userinfo/localization/ja_JP.inc | 22 + plugins/userinfo/localization/pl_PL.inc | 9 + plugins/userinfo/localization/pt_BR.inc | 22 + plugins/userinfo/localization/pt_PT.inc | 22 + plugins/userinfo/localization/ro_RO.inc | 9 + plugins/userinfo/localization/ru_RU.inc | 9 + plugins/userinfo/localization/sv_SE.inc | 9 + plugins/userinfo/localization/zh_TW.inc | 9 + plugins/userinfo/package.xml | 70 + plugins/userinfo/userinfo.js | 16 + plugins/userinfo/userinfo.php | 55 + plugins/vcard_attachments/localization/cs_CZ.inc | 21 + plugins/vcard_attachments/localization/de_CH.inc | 7 + plugins/vcard_attachments/localization/de_DE.inc | 7 + plugins/vcard_attachments/localization/en_US.inc | 7 + plugins/vcard_attachments/localization/es_ES.inc | 7 + plugins/vcard_attachments/localization/et_EE.inc | 7 + plugins/vcard_attachments/localization/gl_ES.inc | 7 + plugins/vcard_attachments/localization/it_IT.inc | 7 + plugins/vcard_attachments/localization/ja_JP.inc | 20 + plugins/vcard_attachments/localization/pl_PL.inc | 7 + plugins/vcard_attachments/localization/pt_BR.inc | 7 + plugins/vcard_attachments/localization/ru_RU.inc | 7 + plugins/vcard_attachments/localization/sv_SE.inc | 7 + plugins/vcard_attachments/localization/zh_TW.inc | 7 + plugins/vcard_attachments/package.xml | 121 + plugins/vcard_attachments/skins/default/style.css | 17 + plugins/vcard_attachments/skins/default/vcard.png | Bin 0 -> 493 bytes .../skins/default/vcard_add_contact.png | Bin 0 -> 1361 bytes plugins/vcard_attachments/skins/larry/style.css | 21 + plugins/vcard_attachments/skins/larry/vcard.png | Bin 0 -> 493 bytes .../skins/larry/vcard_add_contact.png | Bin 0 -> 1859 bytes plugins/vcard_attachments/vcard_attachments.php | 185 ++ plugins/vcard_attachments/vcardattach.js | 23 + plugins/virtuser_file/package.xml | 47 + plugins/virtuser_file/virtuser_file.php | 107 + plugins/virtuser_query/package.xml | 47 + plugins/virtuser_query/virtuser_query.php | 117 + 473 files changed, 38769 insertions(+) create mode 100644 plugins/acl/acl.js create mode 100644 plugins/acl/acl.php create mode 100644 plugins/acl/config.inc.php.dist create mode 100644 plugins/acl/localization/de_DE.inc create mode 100644 plugins/acl/localization/en_US.inc create mode 100644 plugins/acl/localization/pl_PL.inc create mode 100644 plugins/acl/package.xml create mode 100644 plugins/acl/skins/default/acl.css create mode 100644 plugins/acl/skins/default/images/enabled.png create mode 100644 plugins/acl/skins/default/images/partial.png create mode 100644 plugins/acl/skins/default/templates/table.html create mode 100644 plugins/acl/skins/larry/acl.css create mode 100644 plugins/acl/skins/larry/images/enabled.png create mode 100644 plugins/acl/skins/larry/images/partial.png create mode 100644 plugins/acl/skins/larry/templates/table.html create mode 100644 plugins/additional_message_headers/additional_message_headers.php 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/archive.js create mode 100644 plugins/archive/archive.php create mode 100644 plugins/archive/localization/cs_CZ.inc create mode 100644 plugins/archive/localization/de_CH.inc create mode 100644 plugins/archive/localization/de_DE.inc create mode 100644 plugins/archive/localization/en_US.inc create mode 100644 plugins/archive/localization/es_AR.inc create mode 100644 plugins/archive/localization/es_ES.inc create mode 100644 plugins/archive/localization/et_EE.inc create mode 100644 plugins/archive/localization/fr_FR.inc create mode 100644 plugins/archive/localization/gl_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/pl_PL.inc create mode 100644 plugins/archive/localization/pt_BR.inc create mode 100644 plugins/archive/localization/ru_RU.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/archive/skins/default/archive.css create mode 100644 plugins/archive/skins/default/archive_act.png create mode 100644 plugins/archive/skins/default/archive_pas.png create mode 100644 plugins/archive/skins/default/foldericon.png create mode 100644 plugins/autologon/autologon.php create mode 100644 plugins/database_attachments/database_attachments.php create mode 100644 plugins/database_attachments/package.xml create mode 100644 plugins/debug_logger/debug_logger.php create mode 100644 plugins/debug_logger/package.xml create mode 100644 plugins/debug_logger/runlog/runlog.php create mode 100644 plugins/emoticons/emoticons.php create mode 100644 plugins/emoticons/package.xml create mode 100644 plugins/enigma/README create mode 100644 plugins/enigma/config.inc.php.dist create mode 100644 plugins/enigma/enigma.js create mode 100644 plugins/enigma/enigma.php create mode 100644 plugins/enigma/home/.htaccess create mode 100644 plugins/enigma/lib/Crypt/GPG.php create mode 100644 plugins/enigma/lib/Crypt/GPG/DecryptStatusHandler.php create mode 100644 plugins/enigma/lib/Crypt/GPG/Engine.php create mode 100644 plugins/enigma/lib/Crypt/GPG/Exceptions.php create mode 100644 plugins/enigma/lib/Crypt/GPG/Key.php create mode 100644 plugins/enigma/lib/Crypt/GPG/Signature.php create mode 100644 plugins/enigma/lib/Crypt/GPG/SubKey.php create mode 100644 plugins/enigma/lib/Crypt/GPG/UserId.php create mode 100644 plugins/enigma/lib/Crypt/GPG/VerifyStatusHandler.php create mode 100644 plugins/enigma/lib/enigma_driver.php create mode 100644 plugins/enigma/lib/enigma_driver_gnupg.php create mode 100644 plugins/enigma/lib/enigma_engine.php create mode 100644 plugins/enigma/lib/enigma_error.php create mode 100644 plugins/enigma/lib/enigma_key.php create mode 100644 plugins/enigma/lib/enigma_signature.php create mode 100644 plugins/enigma/lib/enigma_subkey.php create mode 100644 plugins/enigma/lib/enigma_ui.php create mode 100644 plugins/enigma/lib/enigma_userid.php create mode 100644 plugins/enigma/localization/en_US.inc create mode 100644 plugins/enigma/localization/ja_JP.inc create mode 100644 plugins/enigma/localization/ru_RU.inc create mode 100644 plugins/enigma/skins/default/enigma.css create mode 100644 plugins/enigma/skins/default/enigma.png create mode 100644 plugins/enigma/skins/default/enigma_error.png create mode 100644 plugins/enigma/skins/default/key.png create mode 100644 plugins/enigma/skins/default/key_add.png create mode 100644 plugins/enigma/skins/default/keys_toolbar.png create mode 100644 plugins/enigma/skins/default/templates/keyimport.html create mode 100644 plugins/enigma/skins/default/templates/keyinfo.html create mode 100644 plugins/enigma/skins/default/templates/keys.html create mode 100644 plugins/example_addressbook/example_addressbook.php create mode 100644 plugins/example_addressbook/example_addressbook_backend.php create mode 100644 plugins/example_addressbook/package.xml create mode 100644 plugins/filesystem_attachments/filesystem_attachments.php create mode 100644 plugins/filesystem_attachments/package.xml create mode 100644 plugins/help/config.inc.php.dist create mode 100644 plugins/help/content/about.html create mode 100644 plugins/help/content/license.html create mode 100644 plugins/help/help.php create mode 100644 plugins/help/localization/cs_CZ.inc create mode 100644 plugins/help/localization/da_DK.inc create mode 100644 plugins/help/localization/de_DE.inc create mode 100644 plugins/help/localization/en_GB.inc create mode 100644 plugins/help/localization/en_US.inc create mode 100644 plugins/help/localization/es_ES.inc create mode 100644 plugins/help/localization/et_EE.inc create mode 100644 plugins/help/localization/gl_ES.inc create mode 100644 plugins/help/localization/hu_HU.inc create mode 100644 plugins/help/localization/ja_JP.inc create mode 100644 plugins/help/localization/pl_PL.inc create mode 100644 plugins/help/localization/pt_BR.inc create mode 100644 plugins/help/localization/ru_RU.inc create mode 100644 plugins/help/localization/sv_SE.inc create mode 100644 plugins/help/localization/zh_TW.inc create mode 100644 plugins/help/package.xml create mode 100644 plugins/help/skins/default/help.css create mode 100644 plugins/help/skins/default/help.gif create mode 100644 plugins/help/skins/default/templates/help.html create mode 100644 plugins/help/skins/larry/help.css create mode 100644 plugins/help/skins/larry/help.png create mode 100644 plugins/help/skins/larry/templates/help.html create mode 100644 plugins/http_authentication/http_authentication.php create mode 100644 plugins/http_authentication/logout.html create mode 100644 plugins/http_authentication/package.xml create mode 100644 plugins/jqueryui/README create mode 100644 plugins/jqueryui/config.inc.php.dist create mode 100644 plugins/jqueryui/jqueryui.php create mode 100644 plugins/jqueryui/js/i18n/jquery-ui-i18n.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-af.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-ar.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-az.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-bg.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-bs.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-ca.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-cs.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-da.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-de-CH.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-de.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-el.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-en-GB.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-eo.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-es.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-et.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-eu.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-fa.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-fi.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-fo.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-fr-CH.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-fr.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-gl.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-he.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-hr.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-hu.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-hy.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-id.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-is.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-it.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-ja.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-ko.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-kz.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-lt.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-lv.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-ms.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-nl-BE.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-nl.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-no.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-pl.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-pt-BR.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-pt.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-ro.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-ru.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-sk.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-sl.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-sq.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-sr-SR.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-sr.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-sv.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-ta.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-th.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-tr.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-uk.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-vi.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-zh-CN.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-zh-HK.js create mode 100644 plugins/jqueryui/js/i18n/jquery.ui.datepicker-zh-TW.js create mode 100755 plugins/jqueryui/js/jquery-ui-1.8.18.custom.min.js create mode 100644 plugins/jqueryui/package.xml create mode 100644 plugins/jqueryui/themes/default/images/buttongradient.png create mode 100644 plugins/jqueryui/themes/default/images/listheader.png create mode 100755 plugins/jqueryui/themes/default/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 plugins/jqueryui/themes/default/images/ui-bg_flat_75_ffffff_40x100.png create mode 100755 plugins/jqueryui/themes/default/images/ui-bg_flat_90_cc3333_40x100.png create mode 100755 plugins/jqueryui/themes/default/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 plugins/jqueryui/themes/default/images/ui-bg_highlight-hard_90_a3a3a3_1x100.png create mode 100755 plugins/jqueryui/themes/default/images/ui-bg_highlight-hard_90_e6e6e7_1x100.png create mode 100755 plugins/jqueryui/themes/default/images/ui-bg_highlight-hard_90_f4f4f4_1x100.png create mode 100755 plugins/jqueryui/themes/default/images/ui-icons_000000_256x240.png create mode 100755 plugins/jqueryui/themes/default/images/ui-icons_333333_256x240.png create mode 100755 plugins/jqueryui/themes/default/images/ui-icons_666666_256x240.png create mode 100755 plugins/jqueryui/themes/default/images/ui-icons_cc3333_256x240.png create mode 100755 plugins/jqueryui/themes/default/images/ui-icons_dddddd_256x240.png create mode 100755 plugins/jqueryui/themes/default/jquery-ui-1.8.18.custom.css create mode 100644 plugins/jqueryui/themes/default/roundcube-custom.diff create mode 100755 plugins/jqueryui/themes/larry/images/ui-bg_highlight-hard_55_b0ccd7_1x100.png create mode 100755 plugins/jqueryui/themes/larry/images/ui-bg_highlight-hard_65_ffffff_1x100.png create mode 100755 plugins/jqueryui/themes/larry/images/ui-bg_highlight-hard_75_eaeaea_1x100.png create mode 100755 plugins/jqueryui/themes/larry/images/ui-bg_highlight-hard_75_f8f8f8_1x100.png create mode 100755 plugins/jqueryui/themes/larry/images/ui-bg_highlight-soft_75_fafafa_1x100.png create mode 100755 plugins/jqueryui/themes/larry/images/ui-bg_highlight-soft_90_e4e4e4_1x100.png create mode 100644 plugins/jqueryui/themes/larry/images/ui-dialog-close.png create mode 100644 plugins/jqueryui/themes/larry/images/ui-icons-datepicker.png create mode 100755 plugins/jqueryui/themes/larry/images/ui-icons_004458_256x240.png create mode 100755 plugins/jqueryui/themes/larry/images/ui-icons_d7211e_256x240.png create mode 100755 plugins/jqueryui/themes/larry/images/ui-icons_ffffff_256x240.png create mode 100755 plugins/jqueryui/themes/larry/jquery-ui-1.8.18.custom.css create mode 100755 plugins/jqueryui/themes/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-bg_flat_55_fbec88_40x100.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-bg_glass_85_dfeffc_1x400.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-icons_217bc0_256x240.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-icons_2e83ff_256x240.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-icons_469bdd_256x240.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-icons_6da8d5_256x240.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-icons_cd0a0a_256x240.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-icons_d8e7f3_256x240.png create mode 100755 plugins/jqueryui/themes/redmond/images/ui-icons_f9bd01_256x240.png create mode 100755 plugins/jqueryui/themes/redmond/jquery-ui-1.8.18.custom.css create mode 100644 plugins/managesieve/Changelog create mode 100644 plugins/managesieve/config.inc.php.dist create mode 100644 plugins/managesieve/lib/Net/Sieve.php create mode 100644 plugins/managesieve/lib/rcube_sieve.php create mode 100644 plugins/managesieve/lib/rcube_sieve_script.php create mode 100644 plugins/managesieve/localization/bg_BG.inc create mode 100644 plugins/managesieve/localization/cs_CZ.inc create mode 100644 plugins/managesieve/localization/de_CH.inc create mode 100644 plugins/managesieve/localization/de_DE.inc create mode 100644 plugins/managesieve/localization/el_GR.inc create mode 100644 plugins/managesieve/localization/en_GB.inc create mode 100644 plugins/managesieve/localization/en_US.inc create mode 100644 plugins/managesieve/localization/es_AR.inc create mode 100644 plugins/managesieve/localization/es_ES.inc create mode 100644 plugins/managesieve/localization/et_EE.inc create mode 100644 plugins/managesieve/localization/fi_FI.inc create mode 100644 plugins/managesieve/localization/fr_FR.inc create mode 100644 plugins/managesieve/localization/gl_ES.inc create mode 100644 plugins/managesieve/localization/hr_HR.inc create mode 100644 plugins/managesieve/localization/hu_HU.inc create mode 100644 plugins/managesieve/localization/it_IT.inc create mode 100644 plugins/managesieve/localization/ja_JP.inc create mode 100644 plugins/managesieve/localization/lv_LV.inc create mode 100644 plugins/managesieve/localization/nb_NO.inc create mode 100644 plugins/managesieve/localization/nl_NL.inc create mode 100644 plugins/managesieve/localization/pl_PL.inc create mode 100644 plugins/managesieve/localization/pt_BR.inc create mode 100644 plugins/managesieve/localization/pt_PT.inc create mode 100644 plugins/managesieve/localization/ru_RU.inc create mode 100644 plugins/managesieve/localization/sk_SK.inc create mode 100644 plugins/managesieve/localization/sl_SI.inc create mode 100644 plugins/managesieve/localization/sv_SE.inc create mode 100644 plugins/managesieve/localization/uk_UA.inc create mode 100644 plugins/managesieve/localization/zh_CN.inc create mode 100644 plugins/managesieve/localization/zh_TW.inc create mode 100644 plugins/managesieve/managesieve.js create mode 100644 plugins/managesieve/managesieve.php create mode 100644 plugins/managesieve/package.xml create mode 100644 plugins/managesieve/skins/default/images/add.png create mode 100644 plugins/managesieve/skins/default/images/del.png create mode 100644 plugins/managesieve/skins/default/images/down_small.gif create mode 100644 plugins/managesieve/skins/default/images/filter.png create mode 100644 plugins/managesieve/skins/default/images/up_small.gif create mode 100644 plugins/managesieve/skins/default/managesieve.css create mode 100644 plugins/managesieve/skins/default/managesieve_mail.css create mode 100644 plugins/managesieve/skins/default/templates/filteredit.html create mode 100644 plugins/managesieve/skins/default/templates/managesieve.html create mode 100644 plugins/managesieve/skins/default/templates/setedit.html create mode 100644 plugins/managesieve/tests/Makefile create mode 100644 plugins/managesieve/tests/parser.phpt create mode 100644 plugins/managesieve/tests/parser_body.phpt create mode 100644 plugins/managesieve/tests/parser_imapflags.phpt create mode 100644 plugins/managesieve/tests/parser_include.phpt create mode 100644 plugins/managesieve/tests/parser_kep14.phpt create mode 100644 plugins/managesieve/tests/parser_prefix.phpt create mode 100644 plugins/managesieve/tests/parser_relational.phpt create mode 100644 plugins/managesieve/tests/parser_vacation.phpt create mode 100644 plugins/managesieve/tests/parser_variables.phpt create mode 100644 plugins/managesieve/tests/parset_subaddress.phpt create mode 100644 plugins/managesieve/tests/tokenize.phpt create mode 100644 plugins/markasjunk/localization/cs_CZ.inc create mode 100644 plugins/markasjunk/localization/da_DK.inc create mode 100644 plugins/markasjunk/localization/de_CH.inc create mode 100644 plugins/markasjunk/localization/de_DE.inc create mode 100644 plugins/markasjunk/localization/en_US.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/et_EE.inc create mode 100644 plugins/markasjunk/localization/gl_ES.inc create mode 100644 plugins/markasjunk/localization/it_IT.inc create mode 100644 plugins/markasjunk/localization/ja_JP.inc create mode 100644 plugins/markasjunk/localization/pl_PL.inc create mode 100644 plugins/markasjunk/localization/ru_RU.inc create mode 100644 plugins/markasjunk/localization/sk_SK.inc create mode 100644 plugins/markasjunk/localization/sv_SE.inc create mode 100644 plugins/markasjunk/localization/zh_TW.inc create mode 100644 plugins/markasjunk/markasjunk.js create mode 100644 plugins/markasjunk/markasjunk.php create mode 100644 plugins/markasjunk/package.xml create mode 100644 plugins/markasjunk/skins/default/junk_act.png create mode 100644 plugins/markasjunk/skins/default/junk_pas.png create mode 100644 plugins/markasjunk/skins/default/markasjunk.css create mode 100644 plugins/new_user_dialog/localization/bg_BG.inc create mode 100644 plugins/new_user_dialog/localization/cs_CZ.inc create mode 100644 plugins/new_user_dialog/localization/de_CH.inc create mode 100644 plugins/new_user_dialog/localization/de_DE.inc create mode 100644 plugins/new_user_dialog/localization/en_US.inc create mode 100644 plugins/new_user_dialog/localization/es_ES.inc create mode 100644 plugins/new_user_dialog/localization/et_EE.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/pl_PL.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/ru_RU.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/sv_SE.inc create mode 100644 plugins/new_user_dialog/localization/zh_TW.inc create mode 100644 plugins/new_user_dialog/new_user_dialog.php create mode 100644 plugins/new_user_dialog/newuserdialog.css create mode 100644 plugins/new_user_dialog/package.xml create mode 100644 plugins/new_user_identity/new_user_identity.php create mode 100644 plugins/new_user_identity/package.xml create mode 100644 plugins/newmail_notifier/config.inc.php.dist create mode 100644 plugins/newmail_notifier/favicon.ico create mode 100644 plugins/newmail_notifier/localization/de_CH.inc create mode 100644 plugins/newmail_notifier/localization/de_DE.inc create mode 100644 plugins/newmail_notifier/localization/en_US.inc create mode 100644 plugins/newmail_notifier/localization/ja_JP.inc create mode 100644 plugins/newmail_notifier/localization/lv_LV.inc create mode 100644 plugins/newmail_notifier/localization/pl_PL.inc create mode 100644 plugins/newmail_notifier/localization/pt_BR.inc create mode 100644 plugins/newmail_notifier/localization/ru_RU.inc create mode 100644 plugins/newmail_notifier/localization/sv_SE.inc create mode 100644 plugins/newmail_notifier/mail.png create mode 100644 plugins/newmail_notifier/newmail_notifier.js create mode 100644 plugins/newmail_notifier/newmail_notifier.php create mode 100644 plugins/newmail_notifier/package.xml create mode 100644 plugins/newmail_notifier/sound.wav create mode 100644 plugins/password/README create mode 100644 plugins/password/config.inc.php.dist create mode 100644 plugins/password/drivers/chpasswd.php create mode 100644 plugins/password/drivers/cpanel.php create mode 100644 plugins/password/drivers/dbmail.php create mode 100644 plugins/password/drivers/directadmin.php create mode 100644 plugins/password/drivers/domainfactory.php create mode 100644 plugins/password/drivers/expect.php create mode 100644 plugins/password/drivers/hmail.php create mode 100644 plugins/password/drivers/ldap.php create mode 100644 plugins/password/drivers/ldap_simple.php create mode 100644 plugins/password/drivers/pam.php create mode 100644 plugins/password/drivers/poppassd.php create mode 100644 plugins/password/drivers/pw_usermod.php create mode 100644 plugins/password/drivers/sasl.php create mode 100644 plugins/password/drivers/smb.php create mode 100644 plugins/password/drivers/sql.php create mode 100644 plugins/password/drivers/virtualmin.php create mode 100644 plugins/password/drivers/vpopmaild.php create mode 100644 plugins/password/drivers/ximss.php create mode 100644 plugins/password/drivers/xmail.php create mode 100644 plugins/password/helpers/chgdbmailusers.c create mode 100644 plugins/password/helpers/chgsaslpasswd.c create mode 100644 plugins/password/helpers/chgvirtualminpasswd.c create mode 100644 plugins/password/helpers/chpass-wrapper.py create mode 100644 plugins/password/helpers/passwd-expect create mode 100644 plugins/password/localization/az_AZ.inc create mode 100644 plugins/password/localization/bg_BG.inc create mode 100644 plugins/password/localization/ca_ES.inc create mode 100644 plugins/password/localization/cs_CZ.inc create mode 100644 plugins/password/localization/da_DK.inc create mode 100644 plugins/password/localization/de_CH.inc create mode 100644 plugins/password/localization/de_DE.inc create mode 100644 plugins/password/localization/en_US.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/et_EE.inc create mode 100644 plugins/password/localization/fi_FI.inc create mode 100644 plugins/password/localization/fr_FR.inc create mode 100644 plugins/password/localization/gl_ES.inc create mode 100644 plugins/password/localization/hr_HR.inc create mode 100644 plugins/password/localization/hu_HU.inc create mode 100644 plugins/password/localization/it_IT.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/nl_NL.inc create mode 100644 plugins/password/localization/pl_PL.inc create mode 100644 plugins/password/localization/pt_BR.inc create mode 100644 plugins/password/localization/pt_PT.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/sl_SI.inc create mode 100644 plugins/password/localization/sv_SE.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/password/password.js create mode 100644 plugins/password/password.php create mode 100644 plugins/redundant_attachments/config.inc.php.dist create mode 100644 plugins/redundant_attachments/package.xml create mode 100644 plugins/redundant_attachments/redundant_attachments.php create mode 100644 plugins/show_additional_headers/package.xml create mode 100644 plugins/show_additional_headers/show_additional_headers.php create mode 100644 plugins/squirrelmail_usercopy/config.inc.php.dist create mode 100644 plugins/squirrelmail_usercopy/squirrelmail_usercopy.php create mode 100644 plugins/subscriptions_option/localization/cs_CZ.inc create mode 100644 plugins/subscriptions_option/localization/de_CH.inc create mode 100644 plugins/subscriptions_option/localization/de_DE.inc create mode 100644 plugins/subscriptions_option/localization/en_US.inc create mode 100644 plugins/subscriptions_option/localization/es_ES.inc create mode 100644 plugins/subscriptions_option/localization/et_EE.inc create mode 100644 plugins/subscriptions_option/localization/gl_ES.inc create mode 100644 plugins/subscriptions_option/localization/ja_JP.inc create mode 100644 plugins/subscriptions_option/localization/pl_PL.inc create mode 100644 plugins/subscriptions_option/localization/ru_RU.inc create mode 100644 plugins/subscriptions_option/localization/sv_SE.inc create mode 100644 plugins/subscriptions_option/localization/zh_TW.inc create mode 100644 plugins/subscriptions_option/package.xml create mode 100644 plugins/subscriptions_option/subscriptions_option.php create mode 100644 plugins/userinfo/localization/cs_CZ.inc create mode 100644 plugins/userinfo/localization/da_DK.inc create mode 100644 plugins/userinfo/localization/de_CH.inc create mode 100644 plugins/userinfo/localization/en_US.inc create mode 100644 plugins/userinfo/localization/es_ES.inc create mode 100644 plugins/userinfo/localization/et_EE.inc create mode 100755 plugins/userinfo/localization/fr_FR.inc create mode 100644 plugins/userinfo/localization/gl_ES.inc create mode 100644 plugins/userinfo/localization/ja_JP.inc create mode 100644 plugins/userinfo/localization/pl_PL.inc create mode 100644 plugins/userinfo/localization/pt_BR.inc create mode 100644 plugins/userinfo/localization/pt_PT.inc create mode 100755 plugins/userinfo/localization/ro_RO.inc create mode 100644 plugins/userinfo/localization/ru_RU.inc create mode 100644 plugins/userinfo/localization/sv_SE.inc create mode 100644 plugins/userinfo/localization/zh_TW.inc create mode 100644 plugins/userinfo/package.xml create mode 100644 plugins/userinfo/userinfo.js create mode 100644 plugins/userinfo/userinfo.php create mode 100644 plugins/vcard_attachments/localization/cs_CZ.inc create mode 100644 plugins/vcard_attachments/localization/de_CH.inc create mode 100644 plugins/vcard_attachments/localization/de_DE.inc create mode 100644 plugins/vcard_attachments/localization/en_US.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/gl_ES.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/pt_BR.inc create mode 100644 plugins/vcard_attachments/localization/ru_RU.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/style.css create mode 100644 plugins/vcard_attachments/skins/default/vcard.png create mode 100644 plugins/vcard_attachments/skins/default/vcard_add_contact.png create mode 100644 plugins/vcard_attachments/skins/larry/style.css create mode 100644 plugins/vcard_attachments/skins/larry/vcard.png create mode 100644 plugins/vcard_attachments/skins/larry/vcard_add_contact.png create mode 100644 plugins/vcard_attachments/vcard_attachments.php create mode 100644 plugins/vcard_attachments/vcardattach.js create mode 100644 plugins/virtuser_file/package.xml create mode 100644 plugins/virtuser_file/virtuser_file.php create mode 100644 plugins/virtuser_query/package.xml create mode 100644 plugins/virtuser_query/virtuser_query.php diff --git a/plugins/acl/acl.js b/plugins/acl/acl.js new file mode 100644 index 000000000..aa9e06d3d --- /dev/null +++ b/plugins/acl/acl.js @@ -0,0 +1,351 @@ +/** + * ACL plugin script + * + * @version @package_version@ + * @author Aleksander Machniak + */ + +if (window.rcmail) { + rcmail.addEventListener('init', function() { + if (rcmail.gui_objects.acltable) { + rcmail.acl_list_init(); + // enable autocomplete on user input + if (rcmail.env.acl_users_source) { + rcmail.init_address_input_events($('#acluser'), {action:'settings/plugin.acl-autocomplete'}); + // fix inserted value + rcmail.addEventListener('autocomplete_insert', function(e) { + if (e.field.id != 'acluser') + return; + + var value = e.insert; + // get UID from the entry value + if (value.match(/\s*\(([^)]+)\)[, ]*$/)) + value = RegExp.$1; + e.field.value = value; + }); + } + } + + rcmail.enable_command('acl-create', 'acl-save', 'acl-cancel', 'acl-mode-switch', true); + rcmail.enable_command('acl-delete', 'acl-edit', false); + }); +} + +// Display new-entry form +rcube_webmail.prototype.acl_create = function() +{ + this.acl_init_form(); +} + +// Display ACL edit form +rcube_webmail.prototype.acl_edit = function() +{ + // @TODO: multi-row edition + var id = this.acl_list.get_single_selection(); + if (id) + this.acl_init_form(id); +} + +// ACL entry delete +rcube_webmail.prototype.acl_delete = function() +{ + var users = this.acl_get_usernames(); + + if (users && users.length && confirm(this.get_label('acl.deleteconfirm'))) { + this.http_request('settings/plugin.acl', '_act=delete&_user='+urlencode(users.join(',')) + + '&_mbox='+urlencode(this.env.mailbox), + this.set_busy(true, 'acl.deleting')); + } +} + +// Save ACL data +rcube_webmail.prototype.acl_save = function() +{ + var user = $('#acluser').val(), rights = '', type; + + $(':checkbox', this.env.acl_advanced ? $('#advancedrights') : sim_ul = $('#simplerights')).map(function() { + if (this.checked) + rights += this.value; + }); + + if (type = $('input:checked[name=usertype]').val()) { + if (type != 'user') + user = type; + } + + if (!user) { + alert(this.get_label('acl.nouser')); + return; + } + if (!rights) { + alert(this.get_label('acl.norights')); + return; + } + + this.http_request('settings/plugin.acl', '_act=save' + + '&_user='+urlencode(user) + + '&_acl=' +rights + + '&_mbox='+urlencode(this.env.mailbox) + + (this.acl_id ? '&_old='+this.acl_id : ''), + this.set_busy(true, 'acl.saving')); +} + +// Cancel/Hide form +rcube_webmail.prototype.acl_cancel = function() +{ + this.ksearch_blur(); + this.acl_form.hide(); +} + +// Update data after save (and hide form) +rcube_webmail.prototype.acl_update = function(o) +{ + // delete old row + if (o.old) + this.acl_remove_row(o.old); + // make sure the same ID doesn't exist + else if (this.env.acl[o.id]) + this.acl_remove_row(o.id); + + // add new row + this.acl_add_row(o, true); + // hide autocomplete popup + this.ksearch_blur(); + // hide form + this.acl_form.hide(); +} + +// Switch table display mode +rcube_webmail.prototype.acl_mode_switch = function(elem) +{ + this.env.acl_advanced = !this.env.acl_advanced; + this.enable_command('acl-delete', 'acl-edit', false); + this.http_request('settings/plugin.acl', '_act=list' + + '&_mode='+(this.env.acl_advanced ? 'advanced' : 'simple') + + '&_mbox='+urlencode(this.env.mailbox), + this.set_busy(true, 'loading')); +} + +// ACL table initialization +rcube_webmail.prototype.acl_list_init = function() +{ + this.acl_list = new rcube_list_widget(this.gui_objects.acltable, + {multiselect:true, draggable:false, keyboard:true, toggleselect:true}); + this.acl_list.addEventListener('select', function(o) { rcmail.acl_list_select(o); }); + this.acl_list.addEventListener('dblclick', function(o) { rcmail.acl_list_dblclick(o); }); + this.acl_list.addEventListener('keypress', function(o) { rcmail.acl_list_keypress(o); }); + this.acl_list.init(); +} + +// ACL table row selection handler +rcube_webmail.prototype.acl_list_select = function(list) +{ + rcmail.enable_command('acl-delete', list.selection.length > 0); + rcmail.enable_command('acl-edit', list.selection.length == 1); + list.focus(); +} + +// ACL table double-click handler +rcube_webmail.prototype.acl_list_dblclick = function(list) +{ + this.acl_edit(); +} + +// ACL table keypress handler +rcube_webmail.prototype.acl_list_keypress = function(list) +{ + if (list.key_pressed == list.ENTER_KEY) + this.command('acl-edit'); + else if (list.key_pressed == list.DELETE_KEY || list.key_pressed == list.BACKSPACE_KEY) + if (!this.acl_form || !this.acl_form.is(':visible')) + this.command('acl-delete'); +} + +// Reloads ACL table +rcube_webmail.prototype.acl_list_update = function(html) +{ + $(this.gui_objects.acltable).html(html); + this.acl_list_init(); +} + +// Returns names of users in selected rows +rcube_webmail.prototype.acl_get_usernames = function() +{ + var users = [], n, len, cell, row, + list = this.acl_list, + selection = list.get_selection(); + + for (n=0, len=selection.length; n= 0) { + users.push(selection[n]); + } + else if (row = list.rows[selection[n]]) { + cell = $('td.user', row.obj); + if (cell.length == 1) + users.push(cell.text()); + } + } + + return users; +} + +// Removes ACL table row +rcube_webmail.prototype.acl_remove_row = function(id) +{ + var list = this.acl_list; + + list.remove_row(id); + list.clear_selection(); + + // we don't need it anymore (remove id conflict) + $('#rcmrow'+id).remove(); + this.env.acl[id] = null; + + this.enable_command('acl-delete', list.selection.length > 0); + this.enable_command('acl-edit', list.selection.length == 1); +} + +// Adds ACL table row +rcube_webmail.prototype.acl_add_row = function(o, sel) +{ + var n, len, ids = [], spec = [], id = o.id, list = this.acl_list, + items = this.env.acl_advanced ? [] : this.env.acl_items, + table = this.gui_objects.acltable, + row = $('thead > tr', table).clone(); + + // Update new row + $('td', row).map(function() { + var r, cl = this.className.replace(/^acl/, ''); + + if (items && items[cl]) + cl = items[cl]; + + if (cl == 'user') + $(this).text(o.username); + else + $(this).addClass(rcmail.acl_class(o.acl, cl)).text(''); + }); + + row.attr('id', 'rcmrow'+id); + row = row.get(0); + + this.env.acl[id] = o.acl; + + // sorting... (create an array of user identifiers, then sort it) + for (n in this.env.acl) { + if (this.env.acl[n]) { + if (this.env.acl_specials.length && $.inArray(n, this.env.acl_specials) >= 0) + spec.push(n); + else + ids.push(n); + } + } + ids.sort(); + // specials on the top + ids = spec.concat(ids); + + // find current id + for (n=0, len=ids.length; n= mw) + this.acl_form.css({left: parseInt((bw - mw)/2)+'px'}); + + // display it + this.acl_form.show(); + if (type == 'user') + name_input.focus(); + + // unfocus the list, make backspace key in name input field working + this.acl_list.blur(); +} + +// Returns class name according to ACL comparision result +rcube_webmail.prototype.acl_class = function(acl1, acl2) +{ + var i, len, found = 0; + + acl1 = String(acl1); + acl2 = String(acl2); + + for (i=0, len=acl2.length; i -1) + found++; + + if (found == len) + return 'enabled'; + else if (found) + return 'partial'; + + return 'disabled'; +} diff --git a/plugins/acl/acl.php b/plugins/acl/acl.php new file mode 100644 index 000000000..ab981ab89 --- /dev/null +++ b/plugins/acl/acl.php @@ -0,0 +1,715 @@ + + * + * + * Copyright (C) 2011-2012, Kolab Systems AG + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +class acl extends rcube_plugin +{ + public $task = 'settings|addressbook|calendar'; + + private $rc; + private $supported = null; + private $mbox; + private $ldap; + private $specials = array('anyone', 'anonymous'); + + /** + * Plugin initialization + */ + function init() + { + $this->rc = rcmail::get_instance(); + + // Register hooks + $this->add_hook('folder_form', array($this, 'folder_form')); + // kolab_addressbook plugin + $this->add_hook('addressbook_form', array($this, 'folder_form')); + $this->add_hook('calendar_form_kolab', array($this, 'folder_form')); + // Plugin actions + $this->register_action('plugin.acl', array($this, 'acl_actions')); + $this->register_action('plugin.acl-autocomplete', array($this, 'acl_autocomplete')); + } + + /** + * Handler for plugin actions (AJAX) + */ + function acl_actions() + { + $action = trim(get_input_value('_act', RCUBE_INPUT_GPC)); + + // Connect to IMAP + $this->rc->storage_init(); + + // Load localization and configuration + $this->add_texts('localization/'); + $this->load_config(); + + if ($action == 'save') { + $this->action_save(); + } + else if ($action == 'delete') { + $this->action_delete(); + } + else if ($action == 'list') { + $this->action_list(); + } + + // Only AJAX actions + $this->rc->output->send(); + } + + /** + * Handler for user login autocomplete request + */ + function acl_autocomplete() + { + $this->load_config(); + + $search = get_input_value('_search', RCUBE_INPUT_GPC, true); + $sid = get_input_value('_id', RCUBE_INPUT_GPC); + $users = array(); + + if ($this->init_ldap()) { + $max = (int) $this->rc->config->get('autocomplete_max', 15); + $mode = (int) $this->rc->config->get('addressbook_search_mode'); + + $this->ldap->set_pagesize($max); + $result = $this->ldap->search('*', $search, $mode); + + foreach ($result->records as $record) { + $user = $record['uid']; + + if (is_array($user)) { + $user = array_filter($user); + $user = $user[0]; + } + + if ($user) { + if ($record['name']) + $user = $record['name'] . ' (' . $user . ')'; + + $users[] = $user; + } + } + } + + sort($users, SORT_LOCALE_STRING); + + $this->rc->output->command('ksearch_query_results', $users, $search, $sid); + $this->rc->output->send(); + } + + /** + * Handler for 'folder_form' hook + * + * @param array $args Hook arguments array (form data) + * + * @return array Hook arguments array + */ + function folder_form($args) + { + // Edited folder name (empty in create-folder mode) + $mbox_imap = $args['options']['name']; + if (!strlen($mbox_imap)) { + return $args; + } +/* + // Do nothing on protected folders (?) + if ($args['options']['protected']) { + return $args; + } +*/ + // Namespace root + if ($args['options']['is_root']) { + return $args; + } + + // Get MYRIGHTS + if (!($myrights = $args['options']['rights'])) { + return $args; + } + + // Do nothing if no ACL support + if (!$this->rc->storage->get_capability('ACL')) { + return $args; + } + + // Load localization and include scripts + $this->load_config(); + $this->add_texts('localization/', array('deleteconfirm', 'norights', + 'nouser', 'deleting', 'saving')); + $this->include_script('acl.js'); + $this->rc->output->include_script('list.js'); + $this->include_stylesheet($this->local_skin_path().'/acl.css'); + + // add Info fieldset if it doesn't exist + if (!isset($args['form']['props']['fieldsets']['info'])) + $args['form']['props']['fieldsets']['info'] = array( + 'name' => rcube_label('info'), + 'content' => array()); + + // Display folder rights to 'Info' fieldset + $args['form']['props']['fieldsets']['info']['content']['myrights'] = array( + 'label' => Q($this->gettext('myrights')), + 'value' => $this->acl2text($myrights) + ); + + // Return if not folder admin + if (!in_array('a', $myrights)) { + return $args; + } + + // The 'Sharing' tab + $this->mbox = $mbox_imap; + $this->rc->output->set_env('acl_users_source', (bool) $this->rc->config->get('acl_users_source')); + $this->rc->output->set_env('mailbox', $mbox_imap); + $this->rc->output->add_handlers(array( + 'acltable' => array($this, 'templ_table'), + 'acluser' => array($this, 'templ_user'), + 'aclrights' => array($this, 'templ_rights'), + )); + + $this->rc->output->set_env('autocomplete_max', (int)$this->rc->config->get('autocomplete_max', 15)); + $this->rc->output->set_env('autocomplete_min_length', $this->rc->config->get('autocomplete_min_length')); + $this->rc->output->add_label('autocompletechars', 'autocompletemore'); + + $args['form']['sharing'] = array( + 'name' => Q($this->gettext('sharing')), + 'content' => $this->rc->output->parse('acl.table', false, false), + ); + + return $args; + } + + /** + * Creates ACL rights table + * + * @param array $attrib Template object attributes + * + * @return string HTML Content + */ + function templ_table($attrib) + { + if (empty($attrib['id'])) + $attrib['id'] = 'acl-table'; + + $out = $this->list_rights($attrib); + + $this->rc->output->add_gui_object('acltable', $attrib['id']); + + return $out; + } + + /** + * Creates ACL rights form (rights list part) + * + * @param array $attrib Template object attributes + * + * @return string HTML Content + */ + function templ_rights($attrib) + { + // Get supported rights + $supported = $this->rights_supported(); + + // depending on server capability either use 'te' or 'd' for deleting msgs + $deleteright = implode(array_intersect(str_split('ted'), $supported)); + + $out = ''; + $ul = ''; + $input = new html_checkbox(); + + // Advanced rights + $attrib['id'] = 'advancedrights'; + foreach ($supported as $val) { + $id = "acl$val"; + $ul .= html::tag('li', null, + $input->show('', array( + 'name' => "acl[$val]", 'value' => $val, 'id' => $id)) + . html::label(array('for' => $id, 'title' => $this->gettext('longacl'.$val)), + $this->gettext('acl'.$val))); + } + + $out = html::tag('ul', $attrib, $ul, html::$common_attrib); + + // Simple rights + $ul = ''; + $attrib['id'] = 'simplerights'; + $items = array( + 'read' => 'lrs', + 'write' => 'wi', + 'delete' => $deleteright, + 'other' => preg_replace('/[lrswi'.$deleteright.']/', '', implode($supported)), + ); + + foreach ($items as $key => $val) { + $id = "acl$key"; + $ul .= html::tag('li', null, + $input->show('', array( + 'name' => "acl[$val]", 'value' => $val, 'id' => $id)) + . html::label(array('for' => $id, 'title' => $this->gettext('longacl'.$key)), + $this->gettext('acl'.$key))); + } + + $out .= "\n" . html::tag('ul', $attrib, $ul, html::$common_attrib); + + $this->rc->output->set_env('acl_items', $items); + + return $out; + } + + /** + * Creates ACL rights form (user part) + * + * @param array $attrib Template object attributes + * + * @return string HTML Content + */ + function templ_user($attrib) + { + // Create username input + $attrib['name'] = 'acluser'; + + $textfield = new html_inputfield($attrib); + + $fields['user'] = html::label(array('for' => 'iduser'), $this->gettext('username')) + . ' ' . $textfield->show(); + + // Add special entries + if (!empty($this->specials)) { + foreach ($this->specials as $key) { + $fields[$key] = html::label(array('for' => 'id'.$key), $this->gettext($key)); + } + } + + $this->rc->output->set_env('acl_specials', $this->specials); + + // Create list with radio buttons + if (count($fields) > 1) { + $ul = ''; + $radio = new html_radiobutton(array('name' => 'usertype')); + foreach ($fields as $key => $val) { + $ul .= html::tag('li', null, $radio->show($key == 'user' ? 'user' : '', + array('value' => $key, 'id' => 'id'.$key)) + . $val); + } + + $out = html::tag('ul', array('id' => 'usertype'), $ul, html::$common_attrib); + } + // Display text input alone + else { + $out = $fields['user']; + } + + return $out; + } + + /** + * Creates ACL rights table + * + * @param array $attrib Template object attributes + * + * @return string HTML Content + */ + private function list_rights($attrib=array()) + { + // Get ACL for the folder + $acl = $this->rc->storage->get_acl($this->mbox); + + if (!is_array($acl)) { + $acl = array(); + } + + // Keep special entries (anyone/anonymous) on top of the list + if (!empty($this->specials) && !empty($acl)) { + foreach ($this->specials as $key) { + if (isset($acl[$key])) { + $acl_special[$key] = $acl[$key]; + unset($acl[$key]); + } + } + } + + // Sort the list by username + uksort($acl, 'strnatcasecmp'); + + if (!empty($acl_special)) { + $acl = array_merge($acl_special, $acl); + } + + // Get supported rights and build column names + $supported = $this->rights_supported(); + + // depending on server capability either use 'te' or 'd' for deleting msgs + $deleteright = implode(array_intersect(str_split('ted'), $supported)); + + // Use advanced or simple (grouped) rights + $advanced = $this->rc->config->get('acl_advanced_mode'); + + if ($advanced) { + $items = array(); + foreach ($supported as $sup) { + $items[$sup] = $sup; + } + } + else { + $items = array( + 'read' => 'lrs', + 'write' => 'wi', + 'delete' => $deleteright, + 'other' => preg_replace('/[lrswi'.$deleteright.']/', '', implode($supported)), + ); + } + + // Create the table + $attrib['noheader'] = true; + $table = new html_table($attrib); + + // Create table header + $table->add_header('user', $this->gettext('identifier')); + foreach (array_keys($items) as $key) { + $label = $this->gettext('shortacl'.$key); + $table->add_header(array('class' => 'acl'.$key, 'title' => $label), $label); + } + + $i = 1; + $js_table = array(); + foreach ($acl as $user => $rights) { + if ($this->rc->storage->conn->user == $user) { + continue; + } + + // filter out virtual rights (c or d) the server may return + $userrights = array_intersect($rights, $supported); + $userid = html_identifier($user); + + if (!empty($this->specials) && in_array($user, $this->specials)) { + $user = $this->gettext($user); + } + + $table->add_row(array('id' => 'rcmrow'.$userid)); + $table->add('user', Q($user)); + + foreach ($items as $key => $right) { + $in = $this->acl_compare($userrights, $right); + switch ($in) { + case 2: $class = 'enabled'; break; + case 1: $class = 'partial'; break; + default: $class = 'disabled'; break; + } + $table->add('acl' . $key . ' ' . $class, ''); + } + + $js_table[$userid] = implode($userrights); + } + + $this->rc->output->set_env('acl', $js_table); + $this->rc->output->set_env('acl_advanced', $advanced); + + $out = $table->show(); + + return $out; + } + + /** + * Handler for ACL update/create action + */ + private function action_save() + { + $mbox = trim(get_input_value('_mbox', RCUBE_INPUT_GPC, true)); // UTF7-IMAP + $user = trim(get_input_value('_user', RCUBE_INPUT_GPC)); + $acl = trim(get_input_value('_acl', RCUBE_INPUT_GPC)); + $oldid = trim(get_input_value('_old', RCUBE_INPUT_GPC)); + + $acl = array_intersect(str_split($acl), $this->rights_supported()); + $users = $oldid ? array($user) : explode(',', $user); + + foreach ($users as $user) { + $user = trim($user); + + if (!empty($this->specials) && in_array($user, $this->specials)) { + $username = $this->gettext($user); + } + else { + if (!strpos($user, '@') && ($realm = $this->get_realm())) { + $user .= '@' . rcube_idn_to_ascii(preg_replace('/^@/', '', $realm)); + } + $username = $user; + } + + if (!$acl || !$user || !strlen($mbox)) { + continue; + } + + if ($user != $_SESSION['username'] && $username != $_SESSION['username']) { + if ($this->rc->storage->set_acl($mbox, $user, $acl)) { + $ret = array('id' => html_identifier($user), + 'username' => $username, 'acl' => implode($acl), 'old' => $oldid); + $this->rc->output->command('acl_update', $ret); + $result++; + } + } + } + + if ($result) { + $this->rc->output->show_message($oldid ? 'acl.updatesuccess' : 'acl.createsuccess', 'confirmation'); + } + else { + $this->rc->output->show_message($oldid ? 'acl.updateerror' : 'acl.createerror', 'error'); + } + } + + /** + * Handler for ACL delete action + */ + private function action_delete() + { + $mbox = trim(get_input_value('_mbox', RCUBE_INPUT_GPC, true)); //UTF7-IMAP + $user = trim(get_input_value('_user', RCUBE_INPUT_GPC)); + + $user = explode(',', $user); + + foreach ($user as $u) { + $u = trim($u); + if ($this->rc->storage->delete_acl($mbox, $u)) { + $this->rc->output->command('acl_remove_row', html_identifier($u)); + } + else { + $error = true; + } + } + + if (!$error) { + $this->rc->output->show_message('acl.deletesuccess', 'confirmation'); + } + else { + $this->rc->output->show_message('acl.deleteerror', 'error'); + } + } + + /** + * Handler for ACL list update action (with display mode change) + */ + private function action_list() + { + if (in_array('acl_advanced_mode', (array)$this->rc->config->get('dont_override'))) { + return; + } + + $this->mbox = trim(get_input_value('_mbox', RCUBE_INPUT_GPC, true)); // UTF7-IMAP + $advanced = trim(get_input_value('_mode', RCUBE_INPUT_GPC)); + $advanced = $advanced == 'advanced' ? true : false; + + // Save state in user preferences + $this->rc->user->save_prefs(array('acl_advanced_mode' => $advanced)); + + $out = $this->list_rights(); + + $out = preg_replace(array('/^]+>/', '/<\/table>$/'), '', $out); + + $this->rc->output->command('acl_list_update', $out); + } + + /** + * Creates